機器學習中幾種優化算法的比較(SGD、Momentum、RMSProp、Adam)


有關各種優化算法的詳細算法流程和公式可以參考【這篇blog】,講解比較清晰,這里說一下自己對他們之間關系的理解。

BGD 與 SGD

首先,最簡單的 BGD 以整個訓練集的梯度和作為更新方向,缺點是速度慢,一個 epoch 只能更新一次模型參數。

SGD 就是用來解決這個問題的,以每個樣本的梯度作為更新方向,更新次數更頻繁。但有兩個缺點:

  • 更新方向不穩定、波動很大。因為單個樣本有很大的隨機性,單樣本的梯度不能指示參數優化的大方向。
  • 所有參數的學習率相同,這並不合理,因為有些參數不需要頻繁變化,而有些參數則需要頻繁學習改進。

第一個問題

Mini-batch SGDMomentum 算法做出的改進主要是用來解決第一個問題。

Mini-batch SGD 算法使用一小批樣本的梯度和作為更新方向,有效地穩定了更新方向。

Momentum 算法則設置了動量(momentum)的概念,可以理解為慣性,使當前梯度小幅影響優化方向,而不是完全決定優化方向。也起到了減小波動的效果。

第二個問題

AdaGrad 算法做出的改進用來解決第二個問題,其記錄了每個參數的歷史梯度平方和(平方是 element-wise 的),並以此表征每個參數變化的劇烈程度,繼而自適應地為變化劇烈的參數選擇更小的學習率。

但 AdaGrad 有一個缺點,即隨着時間的累積每個參數的歷史梯度平方和都會變得巨大,使得所有參數的學習率都急劇縮小。

RMSProp 算法解決了這個問題,其采用了一種遞推遞減的形式來記錄歷史梯度平方和,可以觀察其表達式:早期的歷史梯度平方和會逐漸失去影響力,系數逐漸衰減。

Adam

簡單來講 Adam 算法就是綜合了 Momentum 和 RMSProp 的一種算法,其既記錄了歷史梯度均值作為動量,又考慮了歷史梯度平方和實現各個參數的學習率自適應調整,解決了 SGD 的上述兩個問題。


免責聲明!

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



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