寻找同样的学习率SGD收敛,但Adam不收敛的问题

一、概念知识

什么是指数加权平均?
假设一组数据为b = [v1,v2,v3,v4,v5],则
平均值m=sum(b)/len(b)
加权均值 m = sum(wb)
指数加权就是通过指数的方式来赋予权重值,可以看出,权重是逐渐衰减的
m1 = 0.1*v1
m2 = 0.9*m1+0.1*v2
m3 = 0.9*m2+0.1*v3
m4 = 0.9*m3+0.1*v4
m5 = 0.9*m4+0.1*v5
所以
m5 = 0.9(0.9*m3+0.1*v4)+0.1*v5
m5 = 0.9(0.9(0.9*m2+0.1*v3)+0.1*v4)+0.1*v5
m5 = 0.9(0.9(0.9(0.9*m1+0.1*v2)+0.1*v3)+0.1*v4)+0.1*v5
m5 = 0.9(0.9(0.9(0.9*0.1*v1+0.1*v2)+0.1*v3)+0.1*v4)+0.1*v5

什么是一介动量?
一介动量是指每个迭代的梯度的加权平均,通俗理解就是依据梯度做一次统计,然后指导梯度优化的方向
m_t = \betam_{t-1}+(1-\beta)g_t
\beta一般就是设置为0.9,g_t就是每个前向之后求得的梯度值,加入一介动量,意味着希望梯度下降的方向是主要依托前面积累的方向和一点点本次梯度的方向做修改,就类似于过弯道一样。

什么是二介动量?
二介动量是指过去每个迭代的梯度的平均和,通俗理解就是依据梯度的平方做一次分析(此处的分析可以使求和也可以是其他的),然后指导学习率的变化
v_t=\sum^T_t g_t^2
\alpha = \alpha/\sqrt v_t

二、优化算法主体框架

需要求解的参数为W,其中W就是卷积层或者全连接层的权重。
损失函数为L=f(W),学习率为\alpha
step1:每次前项之后计算梯度g_t=\nabla f(W,B),也就是偏导数的方向
step2:计算出一介动量m_t,计算出二介动量v_t
step3:计算出梯度优化的值\eta_t=m_t \alpha\sqrt v_t
step4:更新w_{t+1}=w_t-\eta_t

所有的具体的优化方法都是在这个主体框架的基础上进行一些具体的修改之后演变来的

三、SGD+Momentum

核心思想:引入Momentum的概念\eta_t=\alpha m_t,然后SGD一般可以采用固定学习率或者学习率按照策略下降。

四、Adagrad

核心思想:加入了二介动量的概念,\eta_t=m_t \alpha\sqrt v_t

五、Nesterov

核心思想:先沿着上一次一介动量的方向进行更新,然后再下一次迭代再考虑梯度的方向。先滚一段距离再说
g_t=\nabla f(W_t - m_{t-1}\alpha) 或者g_t=\nabla f(W_t - m_{t-1}\alpha/\sqrt v_{t-1})

六、 RMSProp

核心思想:二阶动量的计算方式做了改变,采用和一介动量一样的指数加权
v_t=\beta v_{t-1} + (1-\beta)g_t^2

七、Adam

核心思想:所有的思想都集成于一体
m_t=\beta_1*m_{t-1} + (1-\beta_1)*g_t
v_t = \beta_2*v_{t-1} + (1-\beta_2)*g_t^2
\alpha = \frac{1- \beta_2}{\sqrt(1-\beta_1} *\frac{m_t}{v_t+\varepsilon}

参考资料:

caffe官网:http://caffe.berkeleyvision.org/tutorial/solver.html
csdn介https://blog.csdn.net/yinyu19950811/article/details/90476956

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容