吳恩達深度學習筆記(45)-Adam 優化算法(Adam optimization)

Adam 優化算法(Adam optimization algorithm)

在深度學習的歷史上,包括許多知名研究者在內,提出了優化算法,並很好地解決了一些問題,但隨後這些優化算法被指出並不能一般化,並不適用於多種神經網絡,時間久了,深度學習圈子裡的人開始多少有些質疑全新的優化算法,很多人都覺得動量(Momentum)梯度下降法很好用,很難再想出更好的優化算法。

所以RMSprop以及Adam優化算法,就是少有的經受住人們考驗的兩種算法,已被證明適用於不同的深度學習結構,這個算法我會毫不猶豫地推薦給你,因為很多人都試過,並且用它很好地解決了許多問題。

Adam優化算法基本上就是將Momentum和RMSprop結合在一起,那麼來看看如何使用Adam算法。

吳恩達深度學習筆記(45)-Adam 優化算法(Adam optimization)

使用Adam算法,首先你要初始化,v_dW=0,S_dW=0,v_db=0,S_db=0,在第t次迭代中,你要計算微分,用當前的mini-batch計算dW,db,一般你會用mini-batch梯度下降法。

接下來計算Momentum指數加權平均數,所以v_dW=β_1 v_dW+(1-β_1)dW(使用β_1,這樣就不會跟超參數β_2混淆,因為後面RMSprop要用到β_2),使用Momentum時我們肯定會用這個公式,但現在不叫它β,而叫它β_1。同樣v_db=β_1 v_db+(1-β_1)db。

接著你用RMSprop進行更新,即用不同的超參數β_2,S_dW=β_2 S_dW+(1-β_2)(dW)^2,再說一次,這裡是對整個微分dW進行平方處理,S_db=β_2 S_db+(1-β_2 ) (db)^2。

相當於Momentum更新了超參數β_1,RMSprop更新了超參數β_2

一般使用Adam算法的時候,要計算偏差修正,v_dW^corrected,修正也就是在偏差修正之後,

v_dW^corrected=v_dW/(1-β_1^t ),

v_db^corrected=v_db/(1-β_1^t ),

S也使用偏差修正,

也就是

S_dW^corrected=S_dW/(1-β_2^t ),

S_db^corrected=S_db/(1-β_2^t )。

最後更新權重,所以W更新後是

W:=W-(av_dW^corrected)/(√(S_dW^corrected )+ε)(如果你只是用Momentum,使用v_dW或者修正後的v_dW,但現在我們加入了RMSprop的部分,所以我們要除以修正後S_dW的平方根加上ε)。

根據類似的公式更新b值,

b:=b-(αv_db^corrected)/(√(S_db^corrected )+ε)。

所以Adam算法結合了Momentum和RMSprop梯度下降法,並且是一種極其常用的學習算法,被證明能有效適用於不同神經網絡,適用於廣泛的結構

吳恩達深度學習筆記(45)-Adam 優化算法(Adam optimization)

本算法中有很多超參數,

超參數學習率a很重要,也經常需要調試,你可以嘗試一系列值,然後看哪個有效。

β_1常用的缺省值為0.9,這是dW的移動平均數,也就是dW的加權平均數,這是Momentum涉及的項。

至於超參數β_2,Adam論文作者,也就是Adam算法的發明者,推薦使用0.999,這是在計算(dW)^2以及(db)^2的移動加權平均值。

關於ε的選擇其實沒那麼重要,Adam論文的作者建議ε為10^(-8),但你並不需要設置它,因為它並不會影響算法表現。

但是在使用Adam的時候,人們往往使用缺省值即可,β_1,β_2和ε都是如此,我覺得沒人會去調整ε,然後嘗試不同的a值,看看哪個效果最好。你也可以調整β_1和β_2,但我認識的業內人士很少這麼幹。

為什麼這個算法叫做Adam?

Adam代表的是Adaptive Moment Estimation,β_1用於計算這個微分(dW),叫做第一矩,β_2用來計算平方數的指數加權平均數((dW)^2),叫做第二矩,所以Adam的名字由此而來,但是大家都簡稱Adam權威算法。

這就是關於Adam優化算法的全部內容,有了它,你可以更加快速地訓練神經網絡,我們還要講一下超參數調整,以及更好地理解神經網絡的優化問題有哪些。

下個筆記中,我們將講講學習率衰減。


分享到:


相關文章: