1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai
2.8 Adam 优化算法 Adam optimization algorithm
在DL的历史上,包括许多知名研究者在内,提出了优化算法,并很好地解决了一些问题,但随后这些优化算法被指出并不能一般化,并不适用于多种NN,时间久了,DL圈子里的人开始多少有些质疑全新的优化算法,很多人都觉得动量(Momentum)梯度下降法很好用,很难再想出更好的优化算法。
不过RMSprop以及Adam优化算法,就是少有的经受住人们考验的两种算法,已被证明适用于不同的DL结构,很多人都试过,并且用它很好地解决了许多问题。
Adam优化算法基本上就是将Momentum和RMSprop结合在一起。
使用Adam算法步骤如下
step1
首先你要初始化,
v
d
W
=
0
v_{dW}=0
vdW=0,
S
d
W
=
0
S_{dW}=0
SdW=0,
v
d
b
=
0
v_{db}=0
vdb=0,
S
d
b
=
0
S_{db}=0
Sdb=0
step2
一般你会用mini-batch梯度下降法,在第
t
t
t 次迭代中,你要计算微分,用当前的mini-batch计算
d
W
dW
dW 和
d
b
db
db。
step3
接下来使用超参
β
1
\beta_1
β1 计算Momentum指数加权平均数
- 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
step4
接着你用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)dW2
- 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)db2
以上相当于Momentum更新了超参 β 1 \beta_1 β1,RMSprop更新了超参 β 2 \beta_2 β2。
step5
一般使用Adam算法的时候,要计算偏差修正,
v
d
W
c
o
r
r
e
c
t
e
d
v_{dW}^{corrected}
vdWcorrected 和
v
d
b
c
o
r
r
e
c
t
e
d
v_{db}^{corrected}
vdbcorrected
- v d W c o r r e c t e d = v d W 1 − β 1 t v_{dW}^{corrected} = \frac {v_{dW}}{1-\beta_1^t} vdWcorrected=1−β1tvdW
- v d b c o r r e c t e d = v d b 1 − β 1 t v_{db}^{corrected} = \frac {v_{db}}{1-\beta_1^t} vdbcorrected=1−β1tvdb
- S d W c o r r e c t e d = S d W 1 − β 2 t S_{dW}^{corrected} = \frac {S_{dW}}{1-\beta_2^t} SdWcorrected=1−β2tSdW
- S d b c o r r e c t e d = S d b 1 − β 2 t S_{db}^{corrected} = \frac {S_{db}}{1-\beta_2^t} Sdbcorrected=1−β2tSdb
step6
最后更新权重,所以
- 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 + ϵ W := W -\alpha \frac{v_{dW}^{corrected}}{\sqrt {S_{dW}^{corrected}}+\epsilon} 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 := b -\alpha \frac{v_{db}^{corrected}}{\sqrt {S_{db}^{corrected}}+\epsilon} b:=b−αSdbcorrected+ϵvdbcorrected
如果你只是用Momentum,只使用
v
d
W
v_{dW}
vdW 或者修正后的
v
d
W
v_{dW}
vdW,但现在我们加入了RMSprop的部分,所以我们要除以修正后
S
d
W
S_{dW}
SdW 的平方根加上
ϵ
\epsilon
ϵ 。
Adam算法结合了Momentum和RMSprop梯度下降法,并且是一种极其常用的学习算法,被证明能有效适用于不同NN,适用于广泛的结构。
本算法中有很多超参
- 学习率 α \alpha α 很重要,也经常需要调试,你可以尝试一系列值,然后看哪个有效。
- β 1 \beta_1 β1 常用的缺省值为0.9,这是 d W dW dW 的移动平均数,或者说加权平均数,这是Momentum涉及的项。
- β 2 \beta_2 β2 ,Adam论文作者,也就是Adam算法的发明者,推荐使用0.999,这是在计算 d W 2 dW^2 dW2和 d b 2 db^2 db2 的移动加权平均值。
- ϵ \epsilon ϵ,Adam论文的作者建议为 10-8,它并不会影响算法表现。
我觉得没人会去调整 ϵ \epsilon ϵ,但是会尝试不同的 α \alpha α值,看看哪个效果最好。你也可以调整 β 1 \beta_1 β1 和 β 2 \beta_2 β2,但我认识的业内人士很少这么干。
为什么这个算法叫做Adam?
Adam代表的是Adaptive Moment Estimation, β 1 \beta_1 β1 用于计算微分 d W dW dW,叫做第一矩。 β 2 \beta_2 β2 用来计算平方数的指数加权平均数 d W 2 dW^2 dW2,叫做第二矩。
Adam的名字由此而来,但是大家都简称Adam权威算法。