批量大小如何影响 SGD 的收敛性,为什么?

机器算法验证 机器学习 神经网络 优化 梯度下降 随机梯度下降
2022-01-16 01:04:31

我从许多讨论中看到了类似的结论,即随着 minibatch 的大小变大,SGD 的收敛实际上变得更难/更差,例如这篇论文这个答案此外,我听说有人在早期使用小学习率或批量大小等技巧来解决大批量大小的问题。

然而,这似乎违反直觉,因为小批量的平均损失可以被认为是数据分布上预期损失的近似值, 批量越大,它应该越准确。为什么在实践中并非如此?

1|X|xXl(x,w)Expdata[l(x,w)]


以下是我试图解释的一些(可能是错误的)想法。

模型的参数相互依赖度很高,当batch过大时会同时影响过多的参数,使得参数很难达到稳定的内在依赖?(如批量归一化论文中提到的内部协变量移位问题

或者当几乎所有参数在每次迭代中都负责时,他们会倾向于学习冗余的隐式模式,从而降低模型的容量?(我的意思是说对于数字分类问题,一些模式应该对点负责,一些对边缘负责,但是当这种情况发生时,每个模式都试图对所有形状负责)。

还是因为当批量大小接近训练集的规模时,从数据分布中不再可以将小批量视为独立同分布,因为相关小批量的概率很大?


更新
正如 Benoit Sanchez 的回答中所指出的,一个重要原因是大型 minibatch 需要更多计算才能完成一次更新,并且大多数分析使用固定数量的训练时期进行比较。

然而,这篇论文(Wilson 和 Martinez,2003 年)表明,即使给定足够数量的训练 epoch,较大的批量大小仍然略微不利。一般情况是这样吗? 在此处输入图像描述

4个回答

当然,一个大 minibatch 的更新比一个小的 minibatch 的更新“更好”(在准确性方面) 。这可以在您在问题中复制的表格中看到(将称为样本大小):N

  • 批量大小 1:更新次数27N
  • 批量大小 20,000:更新8343×N200000.47N

您可以看到,对于更大的批次,您需要更少的更新来获得相同的准确性。

但它无法比较,因为它处理的数据量不同。我引用第一篇文章:

执行 SGD 迭代与 使用大型 minibatch进行单次迭代的效果”kBj1jkBj

这里是关于处理相同数量的数据,虽然多个小批量的开销很小,但这需要相当的处理资源。

有几种方法可以理解为什么多次更新更好(对于相同数量的数据被读取)。这是随机梯度下降与梯度下降的关键思想。不是阅读所有内容然后在最后纠正自己,而是在途中纠正自己,使下一次阅读更有用,因为您纠正了自己更好的猜测。在几何上,多次更新会更好,因为您正在绘制多个线段,每个线段都在每个线段开始处的(近似)梯度方向上。而单个大更新是从一开始就在(精确)梯度方向上的单个片段。即使方向不太精确,最好多次改变方向。

小批量的大小本质上是更新的频率:小批量越小更新越多。在一个极端(小批量=数据集)你有梯度下降。在另一个极端(minibatch=one line)你有完整的每行 SGD。无论如何,每行 SGD 更好,但更大的 minibatch 更适合更有效的并行化。

在收敛过程结束时,SGD 变得不如(批量)GD 精确。但是在这一点上,事情(通常)变成了一种无用的精确拟合。虽然您在训练集上获得的损失函数略小,但您并没有获得真正的预测能力。您只是在寻找非常精确的最佳值,但这无济于事。如果损失函数被正确正则化(防止过度拟合),你不会完全“过度”拟合,你只是无用的“过度”拟合。这表明测试集的准确性没有显着变化。

添加到柯蒂斯怀特的答案(并添加更多参考):

是的,SGD 是一种正则化。这很重要,否则很难解释为什么 DNN 并不总是过拟合,因为它们可以

据我了解,原因是 SGD 会导致参数空间中的“跳跃”,因此在训练期间,参数不能保持在狭窄的最小值,只能保持在(或接近)更宽的最小值。而这些更广泛的[1]显然可以更好地概括(也就是减少过拟合)。

更多参考:

  • 这是[2] 另一篇将其形式化的论文(或尝试这样做,我没有遵循所有内容,请自行检查!)
  • 这篇论文[3] 声称存在一个阶段,"stochastic relaxation, or random diffusion"即 SGD 中固有的随机性导致"maximiz[ation of] the conditional entropy of the layer"

两者都说 SGD 对应于熵正则化项。

肯定有其他方式可以影响批量大小的收敛性。这是我所知道的。


在另一个参考文献中进行编辑,以显示人们在实践中观察到较小的批量可以提高泛化能力:[5]


[1] 示例:“A Bayesian Perspective on Generalization and Stochastic Gradient Descent”,Smith, Le,2018年。 摘自摘要: "We propose that the noise introduced by small mini-batches drives the parameters towards minima whose evidence is large."

[2] “随机梯度下降执行变分推理,收敛到深度网络的极限环”,Chaudhari,Soatto 2017

[3]“通过信息打开深度神经网络的黑匣子”Schwartz-Ziv,Tishby,2017

[4] 《理解深度学习需要重新思考泛化》,C. Zhang 等,2016

[5]“关于深度学习的大批量训练:泛化差距和尖锐最小值”,NS Keskar 等人 2016

至少在使用 SGD 和使用 Keras 训练 MLP 时,太大的批量大小会阻止收敛。至于为什么,我不能 100% 确定它是否与梯度的平均有关,或者较小的更新提供了更大的逃避局部最小值的可能性。

这里

根据我对 tensorflow 和 keras 的经验(本文已证实):

  • 更高的批量结果会降低准确性
  • 如果在 batchsize 高时提高学习率,则可以保持准确性