深度学习_深度学习基础知识_Adam优化器详解
Adam介绍
Adam优化器结合了AdaGrad和RMSProp两种优化算法的优点。对梯度的一阶矩估计(First Moment Estimation,即梯度的均值)和二阶矩估计(Second Moment Estimation,即梯度的未中心化的方差)进行综合考虑,计算出更新步长。
Adam的优势
- 实现简单,计算高效,对内存需求少。
- 参数的更新不受梯度的伸缩变换影响。
- 超参数具有很好的解释性,且通常无需调整或仅需很少的微调。
- 更新的步长能够被限制在大致的范围内(初始学习率)。
- 能自然地实现步长退火过程(自动调整学习率)。
- 很适合应用于大规模的数据及参数的场景。
- 适用于不稳定目标函数。
- 适用于梯度稀疏或梯度存在很大噪声的问题。
Adam的实现原理
计算t时刻的梯度:
然后计算梯度的指数移动平均数,初始化为0。
类似于Momentum算法,综合考虑之前累积的梯度动量。
系数为指数衰减率,控制动量和当前梯度的权重分配,通常取接近于1的值。默认为0.9。
接着,计算梯度平方的指数移动平均数,初始化为0。
系数为指数衰减率,控制之前的梯度平方的影响情况。默认为0.999。
类似于RMSProp算法,对梯度平方进行加权均值。
由于初始化为0,会导致偏向于0,尤其在训练初期阶段。
所以,此处需要对梯度均值进行偏差纠正,降低偏差对训练初期的影响。
同时也要进行偏差纠正:
最后总的公式如下所示:
其中默认学习率,避免除数变为0。
从表达式中可以看出,对更新的步长计算,能够从梯度均值和梯度平方两个角度进行自适应地调节,而不是直接由当前梯度决定。
Adam的不足
虽然Adam算法目前成为主流的优化算法,不过在很多领域里(如计算机视觉的对象识别、NLP中的机器翻译)的最佳成果仍然是使用带动量(Momentum)的SGD来获取到的。Wilson 等人的论文结果显示,在对象识别、字符级别建模、语法成分分析等方面,自适应学习率方法(包括AdaGrad、AdaDelta、RMSProp、Adam等)通常比Momentum算法效果更差。