版權聲明:本文為博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處鏈接和本聲明。
從SGD(SGD指mini-batch gradient descent)和Adam兩個方面說起。
更詳細的可以看:深度學習最全優化方法總結比較(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)(醍醐灌頂!)
SGD
SGD就是每一次迭代計算mini-batch的梯度,然后對參數進行更新,是最常見的優化方法了。即:
其中,是學習率,
是梯度 SGD完全依賴於當前batch的梯度,所以
可理解為允許當前batch的梯度多大程度影響參數更新。
缺點:(正因為有這些缺點才讓這么多大神發展出了后續的各種算法)
- 選擇合適的learning rate比較困難 - 對所有的參數更新使用同樣的learning rate。對於稀疏數據或者特征,有時我們可能想更新快一些對於不經常出現的特征,對於常出現的特征更新慢一些,這時候SGD就不太能滿足要求了
- SGD容易收斂到局部最優,並且在某些情況下可能被困在鞍點【原來寫的是“容易困於鞍點”,經查閱論文發現,其實在合適的初始化和step size的情況下,鞍點的影響並沒這么大。感謝@冰橙的指正】
- 參數取值震盪嚴重。(我自己添加的)
Adam
Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率。Adam的優點主要在於經過偏置校正后,每一次迭代學習率都有個確定范圍,使得參數比較平穩。公式如下:
特點:
- 結合了Adagrad善於處理稀疏梯度和RMSprop善於處理非平穩目標的優點
- 對內存需求較小
- 為不同的參數計算不同的自適應學習率
- 也適用於大多非凸優化 - 適用於大數據集和高維空間
一個框架看懂優化算法之異同 SGD/AdaGrad/Adam
優化算法的一般框架:
后續復習的時候,存在了一個疑問,上述方法說對解決稀疏數據十分有效,那么哪里體現出了對稀疏數據有效呢?
參數更新越頻繁,二階動量越大,學習率就越小。
這篇也不錯,之后復習看: