2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 2.7 RMSprop | 回到目錄 | 2.9 學習率衰減 |
Adam優化算法 (Adam Optimization Algorithm)
在深度學習的歷史上,包括許多知名研究者在內,提出了優化算法,并很好地解決了一些問題,但隨后這些優化算法被指出并不能一般化,并不適用于多種神經網絡,時間久了,深度學習圈子里的人開始多少有些質疑全新的優化算法,很多人都覺得動量(Momentum)梯度下降法很好用,很難再想出更好的優化算法。所以RMSprop以及Adam優化算法(Adam優化算法也是本視頻的內容),就是少有的經受住人們考驗的兩種算法,已被證明適用于不同的深度學習結構,這個算法我會毫不猶豫地推薦給你,因為很多人都試過,并且用它很好地解決了許多問題。
Adam優化算法基本上就是將Momentum和RMSprop結合在一起,那么來看看如何使用Adam算法。
使用Adam算法,首先你要初始化,vdW=0,SdW=0,vdb=0,Sdb=0v_{dW}=0,S_{dW}=0,v_{db}=0,S_{db}=0vdW?=0,SdW?=0,vdb?=0,Sdb?=0 ,在第 ttt 次迭代中,你要計算微分,用當前的mini-batch計算 dW,dbdW,dbdW,db ,一般你會用mini-batch梯度下降法。接下來計算Momentum指數加權平均數,所以 vdW=β1vdW+(1?β1)dWv_{dW}=\beta_1v_{dW}+(1-\beta_1)dWvdW?=β1?vdW?+(1?β1?)dW (使用 β1\beta_1β1? ,這樣就不會跟超參數 β2\beta_2β2? 混淆,因為后面RMSprop要用到 β2\beta_2β2? ),使用Momentum時我們肯定會用這個公式,但現在不叫它 β\betaβ ,而叫它 β1\beta_1β1? 。同樣 vdb=β1vdb+(1?β1)dbv_{db}=\beta_1v_{db}+(1-\beta_1)dbvdb?=β1?vdb?+(1?β1?)db 。
接著你用RMSprop進行更新,即用不同的超參數 β2\beta_2β2? , SdW=β2SdW+(1?β2)(dW)2S_{dW}=\beta_2S_{dW}+(1-\beta_2)(dW)^2SdW?=β2?SdW?+(1?β2?)(dW)2 ,再說一次,這里是對整個微分 dWdWdW 進行平方處理, Sdb=β2Sdb+(1?β2)(db)2S_{db}=\beta_2S_{db}+(1-\beta_2)(db)^2Sdb?=β2?Sdb?+(1?β2?)(db)2 。
相當于Momentum更新了超參數 β1\beta_1β1? ,RMSprop更新了超參數 β2\beta_2β2? 。一般使用Adam算法的時候,要計算偏差修正, vdWcorrectedv_{dW}^{corrected}vdWcorrected? ,修正也就是在偏差修正之后,
vdWcorrected=vdW1?β1t,v_{dW}^{corrected}=\frac{v_{dW}}{1-\beta_1^t},vdWcorrected?=1?β1t?vdW??,
同樣,
vdbcorrected=vdb1?β1t,v_{db}^{corrected}=\frac{v_{db}}{1-\beta_1^t},vdbcorrected?=1?β1t?vdb??,
SSS 也使用偏差修正,也就是
SdWcorrected=SdW1?β2t,,S_{dW}^{corrected}=\frac{S_{dW}}{1-\beta_2^t},,SdWcorrected?=1?β2t?SdW??,,
Sdbcorrected=Sdb1?β2t,。S_{db}^{corrected}=\frac{S_{db}}{1-\beta_2^t},。Sdbcorrected?=1?β2t?Sdb??,。
最后更新權重,所以 WWW 更新后是
W:=W?αvdWcorrectedSdWcorrected+?W:=W-\frac{\alpha v_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}}+\epsilon}W:=W?SdWcorrected??+?αvdWcorrected??
(如果你只是用Momentum,使用 vdWv_{dW}vdW? 或者修正后的 vdWv_{dW}vdW? ,但現在我們加入了RMSprop的部分,所以我們要除以修正后 SdWS_{dW}SdW? 的平方根加上 ?\epsilon? )。
根據類似的公式更新 bbb 值,
b:=b?αvdbcorrectedSdbcorrected+?。b:=b-\frac{\alpha v_{db}^{corrected}}{\sqrt{S_{db}^{corrected}}+\epsilon}。b:=b?Sdbcorrected??+?αvdbcorrected??。
所以Adam算法結合了Momentum和RMSprop梯度下降法,并且是一種極其常用的學習算法,被證明能有效適用于不同神經網絡,適用于廣泛的結構。
本算法中有很多超參數,超參數學習率 α\alphaα 很重要,也經常需要調試,你可以嘗試一系列值,然后看哪個有效。 β1\beta_1β1? 常用的缺省值為0.9,這是 dWdWdW 的移動平均數,也就是 dWdWdW 的加權平均數,這是Momentum涉及的項。至于超參數 β2\beta_2β2? ,Adam論文作者,也就是Adam算法的發明者,推薦使用0.999,這是在計算 (dW)2(dW)^2(dW)2 以及 (db)2(db)^2(db)2 的移動加權平均值,關于 ?\epsilon? 的選擇其實沒那么重要,Adam論文的作者建議 ?\epsilon? 為 10?810^{-8}10?8 ,但你并不需要設置它,因為它并不會影響算法表現。但是在使用Adam的時候,人們往往使用缺省值即可, β1,β2\beta_1,\beta_2β1?,β2? 和 ?\epsilon? 都是如此,我覺得沒人會去調整 ?\epsilon? ,然后嘗試不同的 α\alphaα 值,看看哪個效果最好。你也可以調整 β1\beta_1β1? 和 β2\beta_2β2? ,但我認識的業內人士很少這么干。
為什么這個算法叫做Adam?Adam代表的是Adaptive Moment Estimation, β1\beta_1β1? 用于計算這個微分( dWdWdW ),叫做第一矩, β2\beta_2β2? 用來計算平方數的指數加權平均數( (dW)2(dW)^2(dW)2 ),叫做第二矩,所以Adam的名字由此而來,但是大家都簡稱Adam權威算法。
順便提一下,我有一個老朋友兼合作伙伴叫做Adam Coates。據我所知,他跟Adam算法沒有任何關系,不過我覺得他偶爾會用到這個算法,不過有時有人會問我這個問題,我想你可能也有相同的疑惑。
這就是關于Adam優化算法的全部內容,有了它,你可以更加快速地訓練神經網絡,在結束本周課程之前,我們還要講一下超參數調整,以及更好地理解神經網絡的優化問題有哪些。下個視頻中,我們將講講學習率衰減。
課程PPT
| 2.7 RMSprop | 回到目錄 | 2.9 學習率衰減 |
總結
以上是生活随笔為你收集整理的2.8 Adam 优化算法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.7 RMSprop-深度学习第二课《
- 下一篇: 2.9 学习率衰减-深度学习第二课《改善