Optimizer的选择

在深度学习中,选择合适的优化器不仅会加速整个神经网络训练过程,并且会避免在训练的过程中碰到鞍点。⽂中会结合自己的使⽤情况,对使⽤过的优化器提出⼀些自己的理解。参考二水马的笔记rebirth。

SGD

SGD是非常常见的优化方法,每次迭代计算Mini-batch的梯度,再对参数进行更新。公式:

缺点:对于损失方程有比较严重的振荡,并且容易收敛到局部最小值。

Momentum

为了克服SGD振荡比较严重的问题,Momentum将物理中的动量概念引入SGD当中,通过积累之前的动量来替代梯度。

其中,$v$是初始速度,$\mu$是学习率,$\gamma$是动量参数。

相较于SGD,Momentum 就相当于在从⼭坡上不停的向下⾛,当没有阻⼒的话,它的动量会越来越⼤,但是如果遇到了阻⼒,速度就会变小。也就是说,在训练的时候,在梯度⽅向不变的维度上,训练速度变快;梯度⽅向有所改变的维度上,更新速度变慢,这样就可以加快收敛并减小振荡。

Nesterov

加速梯度更新。但在随机梯度的情况下,Nesterov动量没有改进收敛率。

AdaGrad

Adagrad算法,独立地适应所有模型参数的学习率。相较于SGD,Adagrad相当于对学习率多加了一个约束,即

在训练开始时积累梯度平方会导致有效学习率过早和过量的减小。

RMSProp

和AdaGrad相比,使用移动平均引入了一个新的超参数$\rho$,用来控制移动平均的长度范围。

Adam

Adam 是⼀个结合了Momentum 与Adagrad 的产物,它既考虑到了利⽤动量项来加速训练过程,又考虑到对于学习率的约束。利⽤梯度的⼀阶矩估计和⼆阶矩估计动态调整每个参数的学习率。Adam 的优点主要在于经过偏置校正后,每⼀次迭代学习率都有个确定范围,使得参数⽐较平稳。其公式为:

其中,$\rho_1$和$\rho_2$为矩估计的指数衰减速率。

Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。

小结

通过实践证明,Adam 结合了Adagrad 善于处理稀疏梯度和Momentum 善于处理⾮平稳⽬标的优点,相较于其他⼏种优化器效果更好。同时,我们也注意到很多论⽂中都会引⽤SGD,Adagrad作为优化函数。但相较于其他⽅法,在实践中,SGD 需要更多的训练时间以及可能会被困到鞍点的
缺点,都制约了它在很多真实数据上的表现。