2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

Adam优化算法 (Adam Optimization Algorithm)

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

Adam优化算法基本上就是将MomentumRMSprop结合在一起,那么来看看如何使用Adam算法。

2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

使用Adam算法,首先你要初始化,vdW=0SdW=0vdb=0Sdb=0v_{dW}=0,S_{dW}=0,v_{db}=0,S_{db}=0 ,在第 tt 次迭代中,你要计算微分,用当前的mini-batch计算 dWdbdW,db ,一般你会用mini-batch梯度下降法。接下来计算Momentum指数加权平均数,所以 vdW=β1vdW+(1β1)dWv_{dW}=\beta_1v_{dW}+(1-\beta_1)dW (使用 β1\beta_1 ,这样就不会跟超参数 β2\beta_2 混淆,因为后面RMSprop要用到 β2\beta_2 ),使用Momentum时我们肯定会用这个公式,但现在不叫它 β\beta ,而叫它 β1\beta_1 。同样 vdb=β1vdb+(1β1)dbv_{db}=\beta_1v_{db}+(1-\beta_1)db

接着你用RMSprop进行更新,即用不同的超参数 β2\beta_2SdW=β2SdW+(1β2)(dW)2S_{dW}=\beta_2S_{dW}+(1-\beta_2)(dW)^2 ,再说一次,这里是对整个微分 dWdW 进行平方处理, Sdb=β2Sdb+(1β2)(db)2S_{db}=\beta_2S_{db}+(1-\beta_2)(db)^2

相当于Momentum更新了超参数 β1\beta_1RMSprop更新了超参数 β2\beta_2 。一般使用Adam算法的时候,要计算偏差修正, vdWcorrectedv_{dW}^{corrected} ,修正也就是在偏差修正之后,

vdWcorrected=vdW1β1tv_{dW}^{corrected}=\frac{v_{dW}}{1-\beta_1^t},

同样,

vdbcorrected=vdb1β1tv_{db}^{corrected}=\frac{v_{db}}{1-\beta_1^t},

SS 也使用偏差修正,也就是

SdWcorrected=SdW1β2tS_{dW}^{corrected}=\frac{S_{dW}}{1-\beta_2^t},,

Sdbcorrected=Sdb1β2tS_{db}^{corrected}=\frac{S_{db}}{1-\beta_2^t},。

最后更新权重,所以 WW 更新后是

W:=WαvdWcorrectedSdWcorrected+ϵW:=W-\frac{\alpha v_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}}+\epsilon}

(如果你只是用Momentum,使用 vdWv_{dW} 或者修正后的 vdWv_{dW} ,但现在我们加入了RMSprop的部分,所以我们要除以修正后 SdWS_{dW} 的平方根加上 ϵ\epsilon )。

根据类似的公式更新 bb 值,

b:=bαvdbcorrectedSdbcorrected+ϵb:=b-\frac{\alpha v_{db}^{corrected}}{\sqrt{S_{db}^{corrected}}+\epsilon}。

所以Adam算法结合了MomentumRMSprop梯度下降法,并且是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。

2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

本算法中有很多超参数,超参数学习率 α\alpha 很重要,也经常需要调试,你可以尝试一系列值,然后看哪个有效。 β1\beta_1 常用的缺省值为0.9,这是 dWdW 的移动平均数,也就是 dWdW 的加权平均数,这是Momentum涉及的项。至于超参数 β2\beta_2Adam论文作者,也就是Adam算法的发明者,推荐使用0.999,这是在计算 (dW)2(dW)^2 以及 (db)2(db)^2 的移动加权平均值,关于 ϵ\epsilon 的选择其实没那么重要,Adam论文的作者建议 ϵ\epsilon10810^{-8} ,但你并不需要设置它,因为它并不会影响算法表现。但是在使用Adam的时候,人们往往使用缺省值即可, β1β2\beta_1,\beta_2ϵ\epsilon 都是如此,我觉得没人会去调整 ϵ\epsilon ,然后尝试不同的 α\alpha 值,看看哪个效果最好。你也可以调整 β1\beta_1β2\beta_2 ,但我认识的业内人士很少这么干。

为什么这个算法叫做AdamAdam代表的是Adaptive Moment Estimationβ1\beta_1 用于计算这个微分( dWdW ),叫做第一矩, β2\beta_2 用来计算平方数的指数加权平均数( (dW)2(dW)^2 ),叫做第二矩,所以Adam的名字由此而来,但是大家都简称Adam权威算法。

顺便提一下,我有一个老朋友兼合作伙伴叫做Adam Coates。据我所知,他跟Adam算法没有任何关系,不过我觉得他偶尔会用到这个算法,不过有时有人会问我这个问题,我想你可能也有相同的疑惑。

2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

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

课程PPT

2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授