learning rate和batch size

一. learning rate

  • 学习率如果过大,可能会使损失函数直接越过全局最优点,此时表现为loss过大或者为nan
  • 学习率如果过小,损失函数的变化速度很慢,会大大增加网络的收敛复杂度,并且很容易被困在局部最小值或者鞍点(目标函数在此点上的梯度(一阶导数)值为 0, 但从该点出发的一个方向是函数的极大值点,而在另一个方向是函数的极小值点)

二. batch size

  • 大的batchsize, 需要的batch数目减少了,所以可以减少训练时间,
  • 大的batch size梯度的计算更加稳定,因为模型训练曲线会更加平滑。
  • 大的batch size导致模型泛化能力下降。
    • 大的batch size性能下降是因为训练时间不够长,本质上并不少batch size的问题,在同样的epochs下的参数更新变少了,因此需要更长的迭代次数。
    • 大的batch size收敛到sharp minimum,而小的batch size收敛到flat minimum,后者具有更好的泛化能力。

三. learning rate和batch size的关系

  1. 常用:通常当我们增加batchsize为原来的N倍时,要保证经过同样的样本后更新的权重相等,按照线性缩放规则,学习率应该增加为原来的N倍。
  2. 不常用:如果要保证权重的方差不变,则学习率应该增加为原来的sqrt(N)倍

关于增大batch size对于梯度估计准确度的影响,分析如下:假设batch size为m,对于一个mini batch,loss为:, 梯度为:

整个minibatch的梯度方差为:

由于每个样本是随机从训练样本集sample得到的,满足i.i.d.假设,因此样本梯度的方差相等,等价于SGD的梯度方差,可以看到batch size增大m倍,相当于将梯度的方差减少m倍,因此梯度更加准确。

如果要保持方差和原来SGD一样,相当于给定了这么大的方差带宽容量,那么就可以增大lr,充分利用这个方差容量,在上式中添加lr,同时利用方差的变化公式,得到等式

因此可将lr增加sqrt(m)倍,以提高训练速度,这也是在linear scaling rule之前很多人常用的增大lr的方式。

四.参考

0