目录
- 第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)
- 第二周:优化算法 (Optimization algorithms)
- 2.8 Adam 优化算法(Adam optimization algorithm)
第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)
第二周:优化算法 (Optimization algorithms)
2.8 Adam 优化算法(Adam optimization algorithm)
在深度学习的历史上,包括许多知名研究者在内,提出了优化算法,并很好地解决了一些问题,但随后这些优化算法被指出并不能一般化,并不适用于多种神经网络,时间久了,深度学习圈子里的人开始多少有些质疑全新的优化算法,很多人都觉得动量(Momentum)梯度下降法很好用,很难再想出更好的优化算法。所以 RMSprop 以及 Adam 优化算法(Adam优化算法也是本视频的内容),就是少有的经受住人们考验的两种算法,已被证明适用于不同的深度学习结构,这个算法我会毫不犹豫地推荐给你,因为很多人都试过,并且用它很好地解决了许多问题。
Adam 优化算法基本上就是将 Momentum 和 RMSprop 结合在一起,那么来看看如何使用 Adam 算法。
使用 Adam 算法,首先你要初始化, v d W v_{dW} vdW = 0, S d W S_{dW} SdW = 0, v d b v_db vdb = 0, S d b S_db Sdb = 0,在第𝑡次迭代中,你要计算微分,用当前的 mini-batch 计算 d W dW dW, d b db db,一般你会用 mini-batch 梯度下降法。接下来计算 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(使用 β 1 \beta_1 β1,这样就不会跟超参数 β 2 \beta_2 β2混淆,因为后面 RMSprop 要用到 β 2 \beta_2 β2),使用 Momentum 时我们肯定会用这个公式,但现在不叫它𝛽,而叫它 β 1 \beta_1 β1。同样 v d b = β 1 v d b + ( 1 − β 1 ) d b v_{db} = \beta_1v_{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,再说一次,这里是对整个微分 d W dW dW进行平方处理, 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。
相当于 Momentum 更新了超参数 β 1 \beta_1 β1,RMSprop 更新了超参数 β 2 \beta_2 β2。一般使用 Adam 算法的时候,要计算偏差修正,
v d W c o r r e c t e d v_{dW}^{corrected} vdWcorrected,修正也就是在偏差修正之后, 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。
最后更新权重,所以𝑊更新后:
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
(如果你只是用 Momentum,使用𝑣𝑑𝑊或者修正后的𝑣𝑑𝑊,但现在我们加入了 RMSprop 的部分,所以我们要除以修正后𝑆𝑑𝑊的平方根加上𝜀)。
根据类似的公式更新𝑏值:
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
所以 Adam 算法结合了 Momentum 和 RMSprop 梯度下降法,并且是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。
本算法中有很多超参数,超参数学习率 α \alpha α很重要,也经常需要调试,你可以尝试一系列值,然后看哪个有效。 β 1 \beta_1 β1常用的缺省值为 0.9,这是 d W dW dW 的移动平均数,也就是 d W dW dW的加权平均数,这是 Momentum 涉及的项。至于超参数 β 2 \beta_2 β2,Adam 论文作者,也就是 Adam 算法的发明者,推荐使用 0.999,这是在计算 ( d W ) 2 (dW)^2 (dW)2以及 ( d b ) 2 (db)^2 (db)2的移动加权平均值,关于 ϵ \epsilon ϵ 的选择其实没那么重要,Adam 论文的作者建议 ϵ \epsilon ϵ为 1 0 − 8 10^{−8} 10−8,但你并不需要设置它,因为它并不会影响算法表现。但是在使用 Adam 的时候,人们往往使用缺省值即可, β 1 \beta_1 β1, β 2 \beta_2 β2和 ϵ \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 dW dW)^2),叫做第二矩,所以 Adam 的名字由此而来,但是大家都简称 Adam 权威算法。
顺便提一下,我有一个老朋友兼合作伙伴叫做 Adam Coates。据我所知,他跟 Adam 算法没有任何关系,不过我觉得他偶尔会用到这个算法,不过有时有人会问我这个问题,我想你可能也有相同的疑惑。
这就是关于 Adam 优化算法的全部内容,有了它,你可以更加快速地训练神经网络,在结束本周课程之前,我们还要讲一下超参数调整,以及更好地理解神经网络的优化问题有哪些。下个视频中,我们将讲讲学习率衰减。