本系列文章发表在
机器学习的优化器zhuanlan.zhihu.com![4b70deef7_ipico.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=33de92db-0b30-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/4b70deef7_ipico.jpg)
系列第一篇文章[1]介绍了这系列文章的思路,罗列了重要的数学记号,并讲了标准梯度下降法(GD, Gradient Descent)和Momentum机制.今天我们换个角度来解释Momentum,然后介绍RMSProp(Root Mean Square Propagation)和AdaM(Adaptive Moment Algo).
换角度看Momentum
第一篇中讲到带有Momentum的GD的迭代方法为
这个式子可以帮助我们更好的理解“momentum”.
不过它也可以改写为
进一步改写为
两者完全等价,只需要
我们扩展下
因为
设
我们就会发现Momentum每次迭代的方向是当次迭代为止所有梯度
RMSProp (Root Mean Square Propagation)
RMSProp来源于Hinton
Coursera神经网络课程的课后作业www.coursera.org和Momentum一样,RMSProp也可以从多个角度理解[2].
首先给出更新公式
其中
-
是
向量各个维度(element-wise)的平方根,比如
-
是很小的常数,用来稳定数值计算(当
某一维度很小时)
类似之前对
也就是
RMSProp达到的效果是对幅度的自适应调整:
- 之前更新幅度大的维度上更新幅度变小
- 之前更新幅度不大的维度上更新幅度相对大些
![v2-21588842fca8f5cd1b651c00f6bbc2b2_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=33de92db-0b30-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-21588842fca8f5cd1b651c00f6bbc2b2_b.jpg)
那为什么这个效果很有效,在神经网络优化中脱颖而出呢?据说很大一部分原因是
每次用mini-batch迭代,不同的参数梯度可能相差几个量级,通过梯度的平方的指数加权平均,可以有效得不同参数在多次迭代中的量级差,效果类似于批标准化(BN, Batch Normalization,每一次mini-batch迭代,该批每个参数都先经过仿射变换使得均值为0,方差为1).
此外RMSProp自称在non-stationary的环境下表现很好.因为梯度的平方采用了指数加权平均.而所谓non-stationary环境就是随机变量的统计量随时间改变的性质.
AdaM(Adaptive Moment estimates)
AdaM(Adaptive Moment estimates)是一种结合了Momentum和RMSProp的自适应学习率方法.从它的迭代可以看出
![v2-204bf97f64e27dc170ef97e05eae9a13_b.png](http://img-01.proxy.5ce.com/view/image?&type=2&guid=33de92db-0b30-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-204bf97f64e27dc170ef97e05eae9a13_b.png)
![v2-05291965f46dba80bf0bec864a3d2cf5_b.jpeg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=33de92db-0b30-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-05291965f46dba80bf0bec864a3d2cf5_b.jpeg)
其中
![v2-307ea3ac86d930f442c602c14aae967d_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=33de92db-0b30-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-307ea3ac86d930f442c602c14aae967d_b.jpg)
附录1
图片"RMSProp vs Momentum"和"RMSProp vs AdaM"的代码
import
附录2
pytorch中RMSProp和AdaM的实现为
import torch
torch.optim.RMSprop()
torch.optim.Adam()
参考
- ^系列第一篇文章 https://zhuanlan.zhihu.com/c_1216343504177508352
- ^从RPROP和AdaGrad角度来理解RMSProp https://towardsdatascience.com/understanding-rmsprop-faster-neural-network-learning-62e116fcf29a?gi=35550bcbd74e