转载请注明出处,原文地址
前言
Adam 优化算法是随机梯度下降算法的优化,近来其广泛用于深度学习应用中,尤其是计算机视觉和自然语言处理等任务,该算法是Momentum算法与RMSprop算法的结合。动量梯度下降法Momentum我们之前已经讲解过,本文将会先介绍下RMSprop算法,再讲解Adam。
RMSprop(均方根)
在图中这样的情况时,梯度下降在横轴方向前进,在纵轴方向却会有大幅度的抖动。我们把横轴代表参数
w
1
w1
w1,把纵轴代表参数
w
2
w2
w2。注意,作为例子我们此处只引入了2个参数,实际情况会复杂很多。这里我们依然会使用指数加权平均数,如果你不了解指数加权平均数,请先阅览动量梯度下降法Momentum。
S
d
w
1
=
β
S
d
w
1
+
(
1
−
β
)
(
d
W
1
)
2
S_{dw1} = \beta S_{dw1} + (1-\beta)(dW_1)^2
Sdw1=βSdw1+(1−β)(dW1)2
S
d
w
2
=
β
S
d
w
2
+
(
1
−
β
)
(
d
W
2
)
2
S_{dw2} = \beta S_{dw2} + (1-\beta)(dW_2)^2
Sdw2=βSdw2+(1−β)(dW2)2
这里我们最后乘的是 ( d W ) 2 (dW)^2 (dW)2而不是 d W dW dW,计算出指数加权平均数之后,我们开始更新参数
W
1
=
W
1
−
α
d
W
1
S
d
w
1
+
ϵ
W_1 = W_1 - \alpha \frac{dW_1}{ \sqrt[]{S_{dw1}+\epsilon}}
W1=W1−αSdw1+ϵdW1
W
2
=
W
2
−
α
d
W
2
S
d
w
2
+
ϵ
W_2 = W_2 - \alpha \frac{dW_2}{ \sqrt[]{S_{dw2}+\epsilon}}
W2=W2−αSdw2+ϵdW2
此处的 ϵ \epsilon ϵ是为了防止分母为0
横轴 w 1 w1 w1因为抖动小,所以 d W 1 dW_1 dW1的值很小, S d w 1 S_{dw1} Sdw1的值很小,最终与 α \alpha α相乘的值就会很大, W 1 W1 W1抖动变动大,在横轴就会前进的更快。
纵轴 w 2 w2 w2因为抖动大,所以 d W 2 dW_2 dW2的值很大, S d w 1 S_{dw1} Sdw1的值很大,最终与 α \alpha α相乘的值就会很小, w 2 w2 w2抖动变小,纵向的变化相对平缓。
Adam算法
当把Momentum与RMSprop算法结合在一起时,就是Adam算法。
首先还是计算指数加权平均数,我们令 V d W = 0 V_{dW}=0 VdW=0、 V d b = 0 V_{db}=0 Vdb=0、 S d W = 0 S_{dW}=0 SdW=0、 S d b = 0 S_{db}=0 Sdb=0
接下来计算Momentum的指数加权平均数,注意超参数这里是 β 1 \beta_1 β1
V d W = β 1 V d W + ( 1 − β 1 ) d W V_{dW} = \beta_1 V_{dW} + (1-\beta_1)dW VdW=β1VdW+(1−β1)dW
V d b = β 1 V d b + ( 1 − β 1 ) d b V_{db} = \beta_1 V_{db} + (1-\beta_1)db Vdb=β1Vdb+(1−β1)db
再计算RMSprop的指数加权平均数,注意超参数这里是 β 2 \beta_2 β2
S d w = β 2 S d w + ( 1 − β 2 ) ( d W ) 2 S_{dw} = \beta_2 S_{dw} + (1-\beta_2)(dW)^2 Sdw=β2Sdw+(1−β2)(dW)2
S d b = β 2 S d b + ( 1 − β 2 ) ( d b ) 2 S_{db} = \beta_2 S_{db} + (1-\beta_2)(db)^2 Sdb=β2Sdb+(1−β2)(db)2
接下来进行参数修正,参数修正可以防止在迭代次数较少的时候,计算出来的指数加权平均数较小
V d w c o r r e c t = V d w 1 − β 1 t V_{dw}^{correct} = \frac{V_{dw}}{1- \beta_1^t} Vdwcorrect=1−β1tVdw
V d b c o r r e c t = V d b 1 − β 1 t V_{db}^{correct} = \frac{V_{db}}{1- \beta_1^t} Vdbcorrect=1−β1tVdb
S d w c o r r e c t = S d w 1 − β 2 t S_{dw}^{correct} = \frac{S_{dw}}{1- \beta_2^t} Sdwcorrect=1−β2tSdw
S d w c o r r e c t = S d w 1 − β 2 t S_{dw}^{correct} = \frac{S_{dw}}{1- \beta_2^t} Sdwcorrect=1−β2tSdw
最后更新参数
W = W − α V d w c o r r e c t S d w c o r r e c t + ϵ W = W - \alpha \frac{V_{dw}^{correct}}{\sqrt[]{S_{dw}^{correct}+\epsilon}} W=W−αSdwcorrect+ϵVdwcorrect
b = b − α V d b c o r r e c t S d b c o r r e c t + ϵ b = b - \alpha \frac{V_{db}^{correct}}{\sqrt[]{S_{db}^{correct}+\epsilon}} b=b−αSdbcorrect+ϵVdbcorrect
- β 1 \beta_1 β1常用的缺省值是0.9
- β 2 \beta_2 β2 Adam的发明者推荐使用的数值是0.999
- ϵ \epsilon ϵ的取值没有那么重要,Adam论文的作者建议为 ϵ = 1 0 − 8 \epsilon=10^{−8} ϵ=10−8
- 在实际使用中, β 1 , β 2 , ϵ \beta_1,\beta_2,\epsilon β1,β2,ϵ都是使用的推荐的缺省值,需要调整的是学习率 α \alpha α
这是Adam 优化算法和其他优化算法在多层感知机模型中的对比,可见其收敛的速度较快,效果明显,并且Adam 算法很容易实现,有很高的计算效率和较低的内存需求。