梯度下降和随机梯度下降有什么区别?

数据挖掘 机器学习 神经网络 深度学习 梯度下降
2021-10-11 20:08:58

梯度下降和随机梯度下降有什么区别?

我对这些不是很熟悉,你能用一个简短的例子来描述一下区别吗?

4个回答

快速简单的解释:

在梯度下降 (GD) 和随机梯度下降 (SGD) 中,您以迭代方式更新一组参数以最小化误差函数。

在 GD 中,您必须遍历训练集中的所有样本才能对特定迭代中的参数进行一次更新,另一方面,在 SGD 中,您只使用训练集中的一个或子集的训练样本在特定迭代中更新参数。如果使用 SUBSET,则称为 Minibatch Stochastic gradient Descent。

因此,如果训练样本的数量很大,实际上非常大,那么使用梯度下降可能会花费很长时间,因为在每次迭代中更新参数值时,您都在运行完整的训练集。另一方面,使用 SGD 会更快,因为您只使用一个训练样本,并且它会立即从第一个样本开始自我改进。

与 GD 相比,SGD 的收敛速度通常要快得多,但误差函数并没有像 GD 那样最小化。通常在大多数情况下,您在 SGD 中获得的参数值的近似值就足够了,因为它们达到了最佳值并在那里持续振荡。

如果您需要一个带有实际案例的示例,请在此处查看 Andrew NG 的注释,他清楚地向您展示了这两个案例中涉及的步骤。cs229-笔记

资料来源:Quora 线程

包含随机一词仅意味着在梯度下降的框架内,在每次运行中选择训练数据中的随机样本以在优化期间更新参数

这样做不仅可以计算错误并在更快的迭代中更新权重(因为我们一次只处理一小部分样本),而且通常还有助于更快地走向最优。看看这里的答案,了解更多关于为什么使用随机小批量进行训练具有优势的信息。

一个可能的缺点是,通往最优的路径(假设它总是相同的最优)可能会更加嘈杂。因此,您可能会看到这样的东西,而不是一个漂亮的平滑损失曲线,显示误差在梯度下降的每次迭代中如何减少:

噪声损失曲线

我们清楚地看到损失随着时间的推移而减少,但是从 epoch 到 epoch(训练批次到训练批次)之间存在很大差异,因此曲线是嘈杂的。

这仅仅是因为我们在每次迭代中从整个数据集中计算随机/随机选择的子集的平均误差。有些样本会产生高误差,有些会产生低误差。因此,平均值可能会有所不同,具体取决于我们在一次梯度下降迭代中随机使用的样本。

在梯度下降或批量梯度下降中,我们在每个时期使用整个训练数据,而在随机梯度下降中,我们在每个时期只使用一个训练样本,而小批量梯度下降位于这两个极端之间,我们可以使用每个时期的训练数据的小批量(小部分),选择小批量大小的拇指规则是 2 的幂,例如 32、64、128 等。
有关更多详细信息:cs231n 讲义

梯度下降是一种最小化J(Θ)

想法:对于 theta 的当前值,计算Ĵ(θ),然后向负梯度方向迈出一小步。重复。

梯度下降

更新方程 = 更新方程

算法:

while True:
    theta_grad = evaluate_gradient(J,corpus,theta)
    theta = theta - alpha * theta_grad

但问题是 Ĵ(θ) 是windows中所有语料库的函数,所以计算起来非常昂贵。

随机梯度下降反复采样窗口并在每个窗口后更新

随机梯度下降算法:

while True:
    window = sample_window(corpus)
    theta_grad = evaluate_gradient(J,window,theta)
    theta = theta - alpha * theta_grad

通常样本窗口大小是 2 的幂,例如 32、64 作为 mini batch。