机器学习优化方法总结比较(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的梯度,然后對參數進行更新,是最常見的優化方法了。即:
其中,是學習率,是梯度。 SGD完全依賴于當前batch的梯度,所以可理解為允許當前batch的梯度多大程度影響參數更新
缺點:
- 選擇合適的learning rate比較困難 - 對所有的參數更新使用同樣的learning rate。對于稀疏數據或者特征,有時對于不經常出現的特征我們可能想更新快一些,對于常出現的特征更新慢一些,這時候SGD就不太能滿足要求了
- SGD容易收斂到局部最優,并且在某些情況下可能被困在鞍點
梯度下降(其他的line search、trust region也一樣)只有在原問題是凸問題的情況下,才能保證以任意精度(因為畢竟是數值方法)取得最優解。
非凸情況下,當有多個極大值或極小值時,需要對梯度下降進行優化,比如動量,NAG,Adagrad,RMSprop等,可以減少陷入極大值極小值的可能性,設置得當可以得到全局最優解,但并不能100%保證獲得全局最優解。Momentum:
momentum是模擬物理里動量的概念,更新的時候在一定程度上保留之前更新的方向,同時利用當前batch的梯度微調最終的更新方向,可以在一定程度上增加穩定性,從而學習更快,并且還有擺脫局部最優的能力。公式如下:
?
其中,是動量因子
特點:
- 下降初期時,使用上一次參數更新,下降方向一致,乘上較大的能夠進行很好的加速
- 下降中后期時,在局部最小值來回震蕩的時候,,使得更新幅度增大,跳出陷阱
- 在梯度改變方向的時候,能夠減少更新 總而言之,momentum項能夠在相關方向加速SGD,抑制振蕩,從而加快收斂
Adagrad:
同一個更新速率不一定適合所有參數,比如有的參數可能已經到了僅需要微調的階段,但又有些參數由于對應樣本少等原因,還需要較大幅度的調動。Adagrad其實是對學習率進行了一個約束,每次迭代過程中,每個參數優化時使用不同的學習率。即:
此處,對從1到進行一個遞推形成一個約束項regularizer,,用來保證分母非0
特點:
- 前期較小的時候, regularizer較大,能夠放大梯度
- 后期較大的時候,regularizer較小,能夠約束梯度
- 適合處理稀疏梯度
缺點:
- 由公式可以看出,仍依賴于人工設置一個全局學習率
- 設置過大的話,會使regularizer過于敏感,對梯度的調節太大
- 中后期,分母上梯度平方的累加將會越來越大,使,使得訓練提前結束
Adadelta:
Adadelta是對Adagrad的擴展,最初方案依然是對學習率進行自適應約束,但是進行了計算上的簡化。 Adagrad會累加之前所有的梯度平方,Adadelta只使用adagrad的分母中的累計項離當前時間點比較近的項。即:
在此處Adadelta其實還是依賴于全局學習率的,但是作者做了一定處理,經過近似牛頓迭代法之后:
?
其中,代表求期望。
此時,可以看出Adadelta已經不用依賴于全局學習率了。
Adam:
Adam(Adaptive Moment Estimation)是一種不同參數自適應不同學習速率方法,它利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率。Adam的優點主要在于經過偏置校正后,每一次迭代學習率都有個確定范圍,使得參數比較平穩。公式如下:
?
$m_t, n_t$分別是梯度的帶權平均和帶權有偏方差,初始為0向量,Adam的作者發現他們傾向于0向量(接近于0向量),特別是在衰減因子(衰減率)$\mu , ?\nu$接近于1時,所以要進行偏差修正,,是對,的校正。
論文中建議:$\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
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/7294671.html
總結
以上是生活随笔為你收集整理的机器学习优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 八大排序算法的python实现(四)快速
- 下一篇: Oracle数据库基础知识点汇总