機器學習優化方法總結比較(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)


SGD:

此處的SGD指mini-batch gradient descent,關於batch gradient descent, stochastic gradient descent, 以及 mini-batch gradient descent的具體區別就不細說了。現在的SGD一般都指mini-batch gradient descent。

SGD就是每一次迭代計算mini-batch的梯度,然后對參數進行更新,是最常見的優化方法了。即:

其中,\eta是學習率,g_t是梯度。 SGD完全依賴於當前batch的梯度,所以\eta可理解為允許當前batch的梯度多大程度影響參數更新

缺點:

  • 選擇合適的learning rate比較困難 - 對所有的參數更新使用同樣的learning rate。對於稀疏數據或者特征,有時對於不經常出現的特征我們可能想更新快一些,對於常出現的特征更新慢一些,這時候SGD就不太能滿足要求了
  • SGD容易收斂到局部最優,並且在某些情況下可能被困在鞍點

梯度下降(其他的line search、trust region也一樣)只有在原問題是凸問題的情況下,才能保證以任意精度(因為畢竟是數值方法)取得最優解。

非凸情況下,當有多個極大值或極小值時,需要對梯度下降進行優化,比如動量,NAG,Adagrad,RMSprop等,可以減少陷入極大值極小值的可能性,設置得當可以得到全局最優解,但並不能100%保證獲得全局最優解。

Momentum:

momentum是模擬物理里動量的概念,更新的時候在一定程度上保留之前更新的方向,同時利用當前batch的梯度微調最終的更新方向,可以在一定程度上增加穩定性,從而學習更快,並且還有擺脫局部最優的能力。公式如下:

 

其中,\mu是動量因子

特點:

  • 下降初期時,使用上一次參數更新,下降方向一致,乘上較大的\mu能夠進行很好的加速
  • 下降中后期時,在局部最小值來回震盪的時候,gradient\to0\mu使得更新幅度增大,跳出陷阱
  • 在梯度改變方向的時候,\mu能夠減少更新 總而言之,momentum項能夠在相關方向加速SGD,抑制振盪,從而加快收斂

Adagrad:

同一個更新速率不一定適合所有參數,比如有的參數可能已經到了僅需要微調的階段,但又有些參數由於對應樣本少等原因,還需要較大幅度的調動。Adagrad其實是對學習率進行了一個約束,每次迭代過程中,每個參數優化時使用不同的學習率。即:

此處,對g_t從1到t進行一個遞推形成一個約束項regularizer,-\frac{1}{\sqrt{\sum_{r=1}^t(g_r)^2+\epsilon}}\epsilon用來保證分母非0

特點:

  • 前期g_t較小的時候, regularizer較大,能夠放大梯度
  • 后期g_t較大的時候,regularizer較小,能夠約束梯度
  • 適合處理稀疏梯度

缺點:

  • 由公式可以看出,仍依賴於人工設置一個全局學習率
  • \eta設置過大的話,會使regularizer過於敏感,對梯度的調節太大
  • 中后期,分母上梯度平方的累加將會越來越大,使gradient\to0,使得訓練提前結束

Adadelta:

Adadelta是對Adagrad的擴展,最初方案依然是對學習率進行自適應約束,但是進行了計算上的簡化。 Adagrad會累加之前所有的梯度平方,Adadelta只使用adagrad的分母中的累計項離當前時間點比較近的項。即:

在此處Adadelta其實還是依賴於全局學習率的,但是作者做了一定處理,經過近似牛頓迭代法之后:

 

其中,E代表求期望。

此時,可以看出Adadelta已經不用依賴於全局學習率了。

Adam:

Adam(Adaptive Moment Estimation)是一種不同參數自適應不同學習速率方法,它利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率。Adam的優點主要在於經過偏置校正后,每一次迭代學習率都有個確定范圍,使得參數比較平穩。公式如下:

 

$m_t, n_t$分別是梯度的帶權平均和帶權有偏方差,初始為0向量,Adam的作者發現他們傾向於0向量(接近於0向量),特別是在衰減因子(衰減率)$\mu ,  \nu$接近於1時,所以要進行偏差修正,\hat{m_t}\hat{n_t}是對m_tn_t的校正

論文中建議:$\mu = 0.9, \nu = 0.999, \epsilon = 10^{-8}$

特點:

  • 結合了Adagrad善於處理稀疏梯度和RMSprop善於處理非平穩目標的優點
  • 對內存需求較小
  • 為不同的參數計算不同的自適應學習率
  • 也適用於大多非凸優化 - 適用於大數據集和高維空間

經驗之談

  • 對於稀疏數據,盡量使用學習率可自適應的優化方法,不用手動調節,而且最好采用默認值
  • SGD通常訓練時間更長,但是在好的初始化和學習率調度方案的情況下,結果更可靠
  • 如果在意更快的收斂,並且需要訓練較深較復雜的網絡時,推薦使用學習率自適應的優化方法。

 

 

 

http://blog.csdn.net/heyongluoyao8/article/details/52478715

https://zhuanlan.zhihu.com/p/22252270

 

 

牛頓法  擬牛頓法的實現

http://blog.csdn.net/golden1314521/article/details/46225289


https://arxiv.org/pdf/1706.10207.pdf

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM