本文已经更新了Adam的派生方案。

梯度估计修正与自适应学习率调整后,很自然的思路是把它们的基本思路结合起来。本文就以此方向展开。

Adam

Adam(Adaptive Moment Estimation Algorithm,即RMSprop with momentum)可以认为是RMSprop和Monentum法的结合,

补充,这是Tensorflow下这两个参数的默认值,

注意到,刚开始迭代时,$M_{t}$和$G_{t}$的均值和方差比实际的要小,为此,可以如下修正,

于是,Adam的参数更新如下,

为什么在这个问题上使用Adam,而不是GD或者Adagrad?

Adamax

Adamax更改了$G_t$的迭代策略,

使用$L_{\infty}$替代$L_{2}$

Adamax有点梯度截断的意思,比如按值截断方法,

那么Adamax的真实用意是什么呢?

Nadam

NAdam即Nadam is Adam with Nesterov momentum,由Adam思路很自然而想到的派生。可参考cs229中的Incorporating Nesterov Momentum into Adam

总结

因此,以上算法均可以形式化为,

$G_{t}$处理学习率,$M_{t}$处理参数更新方向。

这些优化算法大体上可以分为两类:

  • 调整学习率,使得优化更稳定
  • 梯度估计修正,优化训练速度

从GD、SGD到AdaGrad、RMSprop、AdaDelta再到Adam系,其实其改进都是相当直观的。其实我们还可以根据自身训练任务的特点,设计专属于自己的优化器,不过这个前提是要相当熟悉当然任务训练中的特点,也就是说要练丹足,挖坑够,哈哈哈。

写到这里,优化算法系列应该就结束了,如果后续学术界有更多的优化器提出或者遇到新的优化器,根据需要可能会继续写下去~

参考

[1] Incorporating Nesterov Momentum into Adam

[2] Adam: A Method for Stochastic Optimization

[3] https://tensorflow.google.cn/