神经网络优化篇:详解Adam 优化算法(Adam optimization algorithm)
Adam 優化算法
在深度學習的歷史上,包括許多知名研究者在內,提出了優化算法,并很好地解決了一些問題,但隨后這些優化算法被指出并不能一般化,并不適用于多種神經網絡,時間久了,深度學習圈子里的人開始多少有些質疑全新的優化算法,很多人都覺得動量(Momentum)梯度下降法很好用,很難再想出更好的優化算法。所以RMSprop以及Adam優化算法,就是少有的經受住人們考驗的兩種算法,已被證明適用于不同的深度學習結構,這個算法會毫不猶豫地推薦給,因為很多人都試過,并且用它很好地解決了許多問題。
Adam優化算法基本上就是將Momentum和RMSprop結合在一起,那么來看看如何使用Adam算法。
使用Adam算法,首先要初始化,\(v_{dW} = 0\),\(S_{dW} =0\),\(v_{db} = 0\),\(S_{db} =0\),在第\(t\)次迭代中,要計算微分,用當前的mini-batch計算\(dW\),\(db\),一般會用mini-batch梯度下降法。接下來計算Momentum指數加權平均數,所以\(v_{dW}= \beta_{1}v_{dW} + ( 1 - \beta_{1})dW\)(使用\(\beta_{1}\),這樣就不會跟超參數\(\beta_{2}\)混淆,因為后面RMSprop要用到\(\beta_{2}\)),使用Momentum時肯定會用這個公式,但現在不叫它\(\beta\),而叫它\(\beta_{1}\)。同樣\(v_{db}= \beta_{1}v_{db} + ( 1 -\beta_{1} ){db}\)。
接著用RMSprop進行更新,即用不同的超參數\(\beta_{2}\),\(S_{dW}=\beta_{2}S_{dW} + ( 1 - \beta_{2}){(dW)}^{2}\),再說一次,這里是對整個微分\(dW\)進行平方處理,\(S_{db} =\beta_{2}S_{db} + \left( 1 - \beta_{2} \right){(db)}^{2}\)。
相當于Momentum更新了超參數\(\beta_{1}\),RMSprop更新了超參數\(\beta_{2}\)。一般使用Adam算法的時候,要計算偏差修正,\(v_{dW}^{\text{corrected}}\),修正也就是在偏差修正之后,
\(v_{dW}^{\text{corrected}}= \frac{v_{dW}}{1 - \beta_{1}^{t}}\),
同樣\(v_{db}^{\text{corrected}} =\frac{v_{db}}{1 -\beta_{1}^{t}}\),
\(S\)也使用偏差修正,也就是\(S_{dW}^{\text{corrected}} =\frac{S_{dW}}{1 - \beta_{2}^{t}}\),\(S_{db}^{\text{corrected}} =\frac{S_{db}}{1 - \beta_{2}^{t}}\)。
最后更新權重,所以\(W\)更新后是\(W:= W - \frac{a v_{dW}^{\text{corrected}}}{\sqrt{S_{dW}^{\text{corrected}}} +\varepsilon}\)(如果只是用Momentum,使用\(v_{dW}\)或者修正后的\(v_{dW}\),但現在加入了RMSprop的部分,所以要除以修正后\(S_{dW}\)的平方根加上\(\varepsilon\))。
根據類似的公式更新\(b\)值,\(b:=b - \frac{\alpha v_{\text{db}}^{\text{corrected}}}{\sqrt{S_{\text{db}}^{\text{corrected}}} +\varepsilon}\)。
所以Adam算法結合了Momentum和RMSprop梯度下降法,并且是一種極其常用的學習算法,被證明能有效適用于不同神經網絡,適用于廣泛的結構。
本算法中有很多超參數,超參數學習率\(a\)很重要,也經常需要調試,可以嘗試一系列值,然后看哪個有效。\(\beta_{1}\)常用的缺省值為0.9,這是dW的移動平均數,也就是\(dW\)的加權平均數,這是Momentum涉及的項。至于超參數\(\beta_{2}\),Adam論文作者,也就是Adam算法的發明者,推薦使用0.999,這是在計算\({(dW)}^{2}\)以及\({(db)}^{2}\)的移動加權平均值,關于\(\varepsilon\)的選擇其實沒那么重要,Adam論文的作者建議\(\varepsilon\)為\(10^{-8}\),但并不需要設置它,因為它并不會影響算法表現。但是在使用Adam的時候,人們往往使用缺省值即可,\(\beta_{1}\),\(\beta_{2}\)和\(\varepsilon\)都是如此,覺得沒人會去調整\(\varepsilon\),然后嘗試不同的\(a\)值,看看哪個效果最好。也可以調整\(\beta_{1}\)和\(\beta_{2}\),但認識的業內人士很少這么干。
為什么這個算法叫做Adam?Adam代表的是Adaptive Moment Estimation,\(\beta_{1}\)用于計算這個微分(\(dW\)),叫做第一矩,\(\beta_{2}\)用來計算平方數的指數加權平均數(\({(dW)}^{2}\)),叫做第二矩,所以Adam的名字由此而來,但是大家都簡稱Adam權威算法。
這就是關于Adam優化算法的全部內容,有了它,可以更加快速地訓練神經網絡。
總結
以上是生活随笔為你收集整理的神经网络优化篇:详解Adam 优化算法(Adam optimization algorithm)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue3 Diff算法之最长递增子序列,
- 下一篇: java信息管理系统总结_java实现科