批量 GD 和随机 GD 给出相同的结果吗?

数据挖掘 机器学习 神经网络 梯度下降
2022-03-01 15:18:16

如果一个神经网络在一个包含 M 个样本的数据集上训练 N 个时期,批次 GD 和 SGD 会给出相同的结果吗?SGD 更快是因为更好地利用硬件吗?

我之所以问,是因为我发现(批量 GD 和 SGD)在数学上给出了相同的结果,但是我阅读了 SGD 避免局部最小值,如果 SGD 和批量 GD 给出相同的结果,这怎么可能是真的!? 在此处输入图像描述

1个回答

他们是不一样的; 批量梯度下降对样本 1 到 M 的梯度进行平均。这在第一个等式中可以看出,由 M 个元素的总和除以 M 个总元素(因此是平均值)表示。

如第二个等式所示,随机梯度下降通过单个随机选择的实例进行更新。

我认为这种混淆源于考虑从 1 到 M 的循环。批量梯度下降求和(从 1 到 M 的循环)是每次迭代执行的,而随机梯度下降循环是在所有时期执行的。

因此,中间权重更新将是不同的,并且这些结果是复合的。因此,即使两种方法都处理整个训练过程中的每个实例,仅在单个实例之后更新的行为本质上会导致与每次迭代平均所有梯度不同的轨迹。

SGD 可以更快,因为它每次权重更新只处理一个实例。事实上,纯粹从硬件效率的角度来看,SGD 并不是最理想的,因为它在训练过程中具有内在的序列化性质。批量梯度下降可以很容易地并行化,并通过同时处理多个实例来利用 GPU。

因为 SGD 是随机的,所以它在代理模型开发中引起的扰动有助于减轻训练集中的偏差。这就是为什么 SGD 有时可以帮助避免局部最小值,尽管使用的是相当粗略的优化策略。

编辑以回答有关训练集偏差与局部最小值之间关系的评论:

想象一个示例,其中模型具有定义 xy 平面的 2 个参数,并且相应的误差被绘制为 z 分量。这定义了一个将 R² 映射到 R 的函数。这个函数只是真实世界函数的近似值,因为您没有在每个可能的训练实例上进行测试。有偏差的训练集很差地逼近现实世界的函数。因此,它的局部最小值不同于现实世界的局部最小值。使用批量 GD 时,您可能会以最近的局部最小值为目标,而在训练过程中目标实际上没有任何变化。如果您的训练集相对无偏,这很好,但否则不理想,因为您会过度拟合到较差的近似值。SGD 可以通过在每次迭代中强制目标重定向来提高泛化能力。每一次迭代,如果您从 M 个训练样本中抽取不同的函数,那么您可能会多次更改目标最小值。如果您的训练集相对有偏差,那么这有助于避免过度拟合到较差的近似值。如果你的训练是一个完美的近似值,那么 SGD 将毫无意义。有些人可能会争辩说,给定一个完美的近似值,随机抽样有助于避免陷入起始盆地,但在这一点上,这只是运气。