Adam优化算法 (Adam Optimization Algorithm)
在深度学习的历史上,包括许多知名研究者在内,提出了优化算法,并很好地解决了一些问题,但随后这些优化算法被指出并不能一般化,并不适用于多种神经网络,时间久了,深度学习圈子里的人开始多少有些质疑全新的优化算法,很多人都觉得动量(Momentum)梯度下降法很好用,很难再想出更好的优化算法。所以RMSprop以及Adam优化算法(Adam优化算法也是本视频的内容),就是少有的经受住人们考验的两种算法,已被证明适用于不同的深度学习结构,这个算法我会毫不犹豫地推荐给你,因为很多人都试过,并且用它很好地解决了许多问题。
Adam优化算法基本上就是将Momentum和RMSprop结合在一起,那么来看看如何使用Adam算法。

使用Adam算法,首先你要初始化,vdW=0,SdW=0,vdb=0,Sdb=0 ,在第 t 次迭代中,你要计算微分,用当前的mini-batch计算 dW,db ,一般你会用mini-batch梯度下降法。接下来计算Momentum指数加权平均数,所以 vdW=β1vdW+(1−β1)dW (使用 β1 ,这样就不会跟超参数 β2 混淆,因为后面RMSprop要用到 β2 ),使用Momentum时我们肯定会用这个公式,但现在不叫它 β ,而叫它 β1 。同样 vdb=β1vdb+(1−β1)db 。
接着你用RMSprop进行更新,即用不同的超参数 β2 , SdW=β2SdW+(1−β2)(dW)2 ,再说一次,这里是对整个微分 dW 进行平方处理, Sdb=β2Sdb+(1−β2)(db)2 。
相当于Momentum更新了超参数 β1 ,RMSprop更新了超参数 β2 。一般使用Adam算法的时候,要计算偏差修正, vdWcorrected ,修正也就是在偏差修正之后,
vdWcorrected=1−β1tvdW,
同样,
vdbcorrected=1−β1tvdb,
S 也使用偏差修正,也就是
SdWcorrected=1−β2tSdW,,
Sdbcorrected=1−β2tSdb,。
最后更新权重,所以 W 更新后是
W:=W−SdWcorrected+ϵαvdWcorrected
(如果你只是用Momentum,使用 vdW 或者修正后的 vdW ,但现在我们加入了RMSprop的部分,所以我们要除以修正后 SdW 的平方根加上 ϵ )。
根据类似的公式更新 b 值,
b:=b−Sdbcorrected+ϵαvdbcorrected。
所以Adam算法结合了Momentum和RMSprop梯度下降法,并且是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。

本算法中有很多超参数,超参数学习率 α 很重要,也经常需要调试,你可以尝试一系列值,然后看哪个有效。 β1 常用的缺省值为0.9,这是 dW 的移动平均数,也就是 dW 的加权平均数,这是Momentum涉及的项。至于超参数 β2 ,Adam论文作者,也就是Adam算法的发明者,推荐使用0.999,这是在计算 (dW)2 以及 (db)2 的移动加权平均值,关于 ϵ 的选择其实没那么重要,Adam论文的作者建议 ϵ 为 10−8 ,但你并不需要设置它,因为它并不会影响算法表现。但是在使用Adam的时候,人们往往使用缺省值即可, β1,β2 和 ϵ 都是如此,我觉得没人会去调整 ϵ ,然后尝试不同的 α 值,看看哪个效果最好。你也可以调整 β1 和 β2 ,但我认识的业内人士很少这么干。
为什么这个算法叫做Adam?Adam代表的是Adaptive Moment Estimation, β1 用于计算这个微分( dW ),叫做第一矩, β2 用来计算平方数的指数加权平均数( (dW)2 ),叫做第二矩,所以Adam的名字由此而来,但是大家都简称Adam权威算法。
顺便提一下,我有一个老朋友兼合作伙伴叫做Adam Coates。据我所知,他跟Adam算法没有任何关系,不过我觉得他偶尔会用到这个算法,不过有时有人会问我这个问题,我想你可能也有相同的疑惑。

这就是关于Adam优化算法的全部内容,有了它,你可以更加快速地训练神经网络,在结束本周课程之前,我们还要讲一下超参数调整,以及更好地理解神经网络的优化问题有哪些。下个视频中,我们将讲讲学习率衰减。
课程PPT


