深度学习之momentum,RMSprop,Adam优化算法

momentum算法:
除了batch/mini-batch/stochastic gradient descent 梯度下降法,还有一种算法叫做momentum梯度下降法,运行速度几乎总是快于标准的地图下降法,简而言之,基本的思想就是计算梯度的指数加权平均数,并利用该梯度更新权重 ,以下是batch/mini-batch gradient descent以及momentum梯度下降法走势图。
深度学习之momentum,RMSprop,Adam优化算法_第1张图片

蓝线表示batch梯度下降法 ,红线是momentum梯度下降法

我们会发现梯度下降法需要很多计算步骤,慢慢摆动到最小值,这种上下波动减慢了梯度下降法的速度,导致我们无法使用更大的学习率,结果可能会偏离函数的范围,为了避免摆动过大,我们需要使用较小的学习率,另一个看待问题的角度是在纵轴上,我们希望慢一点,但是在横轴上,我们希望快一点,所以使用momentum梯度下降法,我们需要做的是,在每次迭代中,确切的说是在第t次迭代中,我么要计算微分dw,db,注意是利用现有的mini-batch计算dw,db,如果使用batch梯度下降法,则现在的mini-batch就是全部的batch,对于batch梯度下降法的效果是一样的。momentum的算法流程如下:
momentum
on iteration t:
compute dw,db on current mini-batch
V _ d w = β ∗ V _ d w + ( 1 − β ) ∗ d w {\rm{V}}\_{\rm{dw}} = {\rm{\beta*V}}\_{\rm{dw}} + \left( {1 - \beta } \right)*dw V_dw=βV_dw+(1β)dw
V _ d b = β ∗ V _ d b + ( 1 − β ) ∗ d b {\rm{V}}\_{\rm{db}} = {\rm{\beta*V}}\_{\rm{db}} + \left( {1 - \beta } \right)*db V_db=βV_db+(1β)db
w = w − α V d w {\rm{w}} = {\rm{w}} - {\rm{\alpha Vdw}} w=wαVdw
b = b − α V d b {\rm{b}} = {\rm{b}} - {\rm{\alpha Vdb}} b=bαVdb
在这里 β {\rm{\beta }} β相当于摩擦力,db,dw相当于加速度,这样就可以减缓梯度下降的幅度,如果平均这些梯度,就会发现这些纵轴上的摆动,平均值接近于零。因此用算法几次迭代之后,发现momentum梯度下降法,最终以纵轴方向摆动小了,横轴方向运动更快,因此算法走了一条更加直接的路径。
在上述算法中,有两个超参数,学习率 α {\rm{\alpha }} α以及参数 β {\rm{\beta }} β,在这里 β {\rm{\beta }} β控制着指数加权平均数, β {\rm{\beta }} β最常用的值是0.9。

RMSprop算法:
上面讲到momentum可以加快学习算法,还有一个叫做RMSprop算法,全称是(root mean square prop)算法,他也可以加速梯度下降,算法流程如下:
on iteration t:
compute dw,db on current mini-batch
S d w = β S d w + { 1 − β } d w 2 {\rm{Sdw}} = {\rm{\beta Sdw}} + \left\{ {1- \beta } \right\}d{w^2} Sdw=βSdw+{1β}dw2
S d b = β S d b + { 1 − β } d b 2 {\rm{Sdb}} = {\rm{\beta Sdb}} + \left\{ {1- \beta } \right\}d{b^2} Sdb=βSdb+{1β}db2
w = w − α d w S d w + ε {\rm{w}} = {\rm{w}} - {\rm{\alpha}}\frac{{dw}}{{\sqrt {Sdw + \varepsilon } }} w=wαSdw+ε dw
b = b − α d b S d b + ε {\rm{b}} = {\rm{b}} - {\rm{\alpha}}\frac{{db}}{{\sqrt {Sdb + \varepsilon } }} b=bαSdb+ε db
这里需要说明的是,上面平方的操作是针对整个符号的,这样做能够保留微分平方的加权平均数。
我们来理解一下其原理,记得在w方向,我们希望学习速度快,而在垂直方向我们希望减小在纵轴上的摆动,所以有了Sdw和Sdb,我们希望Sdw相对较小,Sdb相对较大,所以我们要除以较大的数,从而减缓纵轴上的变化,在这里,另一个影响是可以用一个更大的学习率,然后加快学习,从而无须担心其在纵轴上的偏离。注意,这里选择加上 ε {\rm{\varepsilon }} ε,是为了防止分母为0,其实 ε {\rm{\varepsilon }} ε对算法的真正意义不大,我们一般将 ε {\rm{\varepsilon }} ε设置为 1 0 − 8 {10^{ - 8}} 108.

Adam算法:
RMSprop以及Adam优化算法是少有的经受住考验的两种算法,他们已被证明适用于不同的深度学习结构。
Adam优化算法基本上就是将momentum和RMSprop结合在一起,我们来看看Adam算法的流程。使用Adam算法首先需要初始化
vdw=0,Sdw=0,Vdb=0,Sdb=0
on iteration t:
compute dw,db, using current mini-batch
V _ d w = β 1 ∗ V _ d w + ( 1 − β 1 ) ∗ d w {\rm{V}}\_{\rm{dw}} = {\beta_1}{\rm{*V}}\_{\rm{dw}} + \left( {1 - {\beta _1}} \right)*dw V_dw=β1V_dw+(1β1)dw
V _ d b = β 1 ∗ V _ d b + ( 1 − β 1 ) ∗ d b {\rm{V}}\_{\rm{db}} = {\beta_1}{\rm{*V}}\_{\rm{db}} + \left( {1 - {\beta _1}} \right)*db V_db=β1V_db+(1β1)db
momentum更新了 β 1 {\beta _1} β1
S d w = β 2 S d w + { 1 − β 2 } d w 2 {\rm{Sdw}} = {\beta _2}{\rm{Sdw}} +\left\{ {1 - {\beta _2}} \right\}d{w^2} Sdw=β2Sdw+{1β2}dw2
S d b = β 2 S d b + { 1 − β 2 } d b 2 {\rm{Sdb}} = {\beta _2}{\rm{Sdb}} +\left\{ {1 - {\beta _2}} \right\}d{b^2} Sdb=β2Sdb+{1β2}db2
RMSprop更新了超参数 β 2 {\beta _2} β2 注意:一般计算Adam优化算法的时候要计算偏差修正。
V d w = β 1 V d w + ( 1 − β 1 ) d w {\rm{Vdw}} = {\beta _1}{\rm{Vdw}} + \left({1 - {\beta _1}} \right)dw Vdw=β1Vdw+(1β1)dw
V d b = β 1 V d b + ( 1 − β 1 ) d b {\rm{Vdb}} = {\beta _1}{\rm{Vdb}} + \left({1 - {\beta _1}} \right)db Vdb=β1Vdb+(1β1)db
V d w c o r r e t e d = V d w ( 1 − β 1 t ) V_{dw}^{correted} =\frac{{{\rm{Vdw}}}}{{\left( {1 - \beta _1^t} \right)}} Vdwcorreted=(1β1t)Vdw
V d b c o r r e t e d = V d b ( 1 − β 1 t ) V_{db}^{correted} =\frac{{{\rm{Vdb}}}}{{\left( {1 - \beta _1^t} \right)}} Vdbcorreted=(1β1t)Vdb
S d w c o r r e t e d = S d w ( 1 − β 2 t ) S_{dw}^{correted} = \frac{{{\rm{Sdw}}}}{{\left({1 - \beta _2^t} \right)}} Sdwcorreted=(1β2t)Sdw
S d b c o r r e t e d = S d b ( 1 − β 2 t ) S_{db}^{correted} = \frac{{{\rm{Sdb}}}}{{\left({1 - \beta _2^t} \right)}} Sdbcorreted=(1β2t)Sdb
w = w − α V d w c o r r e c t e d S d w c o r r e c t e d + ε {\rm{w}} = {\rm{w}} - {\rm{\alpha}}\frac{{V_{dw}^{corrected}}}{{\sqrt {S_{dw}^{corrected} + \varepsilon } }} w=wαSdwcorrected+ε Vdwcorrected
b = b − α V d b c o r r e c t e d S d b c o r r e c t e d + ε b = {\rm{b}} - {\rm{\alpha }}\frac{{V_{db}^{corrected}}}{{\sqrt{S_{db}^{corrected} + \varepsilon } }} b=bαSdbcorrected+ε Vdbcorrected
基本流程就是这样,这里有很多超参数,超参 α {\rm{\alpha }} α很重要,经常需要调整, β 1 {\rm{\beta_1 }} β1的常用缺省值为0.9,这是dw的移动平均数,这是momentum涉及的项,至于超参数 β 2 {\rm{\beta_2 }} β2,Adam论文的作者给出的推荐值是0.998.
最后谈谈为什么叫Adam算法,Adam代表的事Adaptive Moment Estimation。

你可能感兴趣的:(深度学习笔记)