4種梯度下降的變種優化算法的拙見:Adagrad、RMSprop、Momentum、Adam(原創)

一、算法簡述

  • Momentum(動量法):模擬物理動量的概念,積累之前的動量來替代真正的梯度
  • Adagrad(Adaptive Gradient):每個參數反比於歷史梯度平方總和的平方根
  • RMSprop(Root Mean Squared propagation):AdaGrad的升級(將梯度積累替換爲Running Average)
  • Adam(Adaptive Moment Estimation):Momentum+ RMSProp + Bias Correction(偏差修正)
  • 好了,說了一大堆,我們來看看這幾個算法之間的關係(發展歷史)

在這裏插入圖片描述

二、梯度下降的三種常用方式(不作爲重點)

(備註:如果熟悉可跳過)

1. Batch Gradient Descent

  • 定義:BGD其實就是標準的梯度下降,沒有任何優化(naked guy)
  • 優點:可保證每一次更新權重(weights)都能降低損失函數,並且可充分利用向量運算的優點
  • 缺點:當我們有一個非常龐大的數據集時,運算會非常緩慢;不支持在線學習(Online Learning)
  • 適用場景:在實際運用中已經不常用了,目前應用的都是基於龐大數據集的情況。(優勝劣汰)

2. Stochastic Gradient Descent

  • 定義:隨機梯度下降算法,每次訓練迭代利用單個樣本。
  • 優點:訓練速度非常快,可能整個數據集還沒遍歷完算法就已經收斂了。
  • 缺點:收斂性能不太好。從迭代次數上看,SGD下降的迭代次數很多,在解空間搜索比較盲目,這使得它每次更新並不是朝着最優化方向進行,這是由於每個樣本中存在的差異性以及各種問題所導致的;容易陷入鞍點(關於鞍點問題,在這裏不討論)。
  • 適用場景:在線學習及其他,在實際中很常用。

3. Mini-batch Gradient Descent

  • 定義:小批量梯度下降,這個算法介於上面兩者中間,需要事先定義mini-batch size,算法性能很好
  • 特點:一方面減少了梯度下降的盲目性,另一方面減少了BGD中存在的計算量大的問題。

4. 三種方式的直觀對比

很明顯可以看到:SGD的下降過程很盲目,BGD沒有太大的搖擺,而Mini-batch GD介於兩者之間。

備註:由於論文中經常用SGD,下面就用SGD形式做討論

三、算法解讀(重點來了)

(1).Momentum算法(指數加權平均思想)

在這裏插入圖片描述

  • 修改含義:將藍色替換爲紅色下劃線。

1. 特點

  • 總是比BGD運行的效率好

2. 優化原理

(下面是SGD的迭代過程,紅色點是最優點)在這裏插入圖片描述

  • Momentum是通過減少搖擺方向的梯度來優化梯度下降的。
  • 在上圖中我們考慮兩個方向上的優化:W,b。其中W待變橫軸方向的梯度,b代表縱軸方向的梯度。我們想要的結果是縱向減少擺幅,橫向加快移動。那我們就來看看Momentum是如何實現的。
  • Momentum利用指數加權平均的思想:在當前迭代過程中充分考慮了之前的梯度,然後加權平均。這樣做的好處是:通過平均當前和過去的梯度,減緩了縱軸(搖擺方向)的搖擺幅度,而在橫軸方向,所有的梯度都指向了最優化方向,所以橫軸的梯度值依然會很大(算法的倒數第三行解釋了這一概念,對應的思想恰恰就是指數加權平均)。
  • Momentum中含有兩個超參數(Hyper-parameter):學習率epsilon、動量參數 α。(論文中指出α=0.9是一個很好的魯棒數,epsilon=0.001是個建議值)
  • 最後直觀理解一下Momentum “動量” 的含義,這有助於梯度下降跳出鞍點(Saddle point)
  • 想象一下,一個小車從高坡上衝下來,他不會停在最低點,因爲他還有一個動量,還會向前衝,甚至可以衝過一些小的山丘,如果面對的是較大的坡,他可能爬不上去,最終又會倒車回來,摺疊幾次,停在谷底。
    在這裏插入圖片描述
  • 如果使用的是梯度下降,則會停在鞍點。
    在這裏插入圖片描述

(2)Adagrad算法

在這裏插入圖片描述

1. 特點:

  • AdaGrad算法獨立地適應所有模型參數的學習率,縮放每個參數反比於其所有梯度歷史平方值總和的平方根,學習率單調遞減,訓練後期學習率非常小。因此該算法適合稀疏梯度的學習。
  • 從公式(倒數第三行)可以看出,Adagrad算法中有自適應調整梯度的意味(adaptive gradient)

2. 優化原理

  • 如果目標函數有關自變量中某個元素的偏導數g一直都較大,那麼該元素的學習率epsilon 將下降較快(在最後更新參數向量時除以一個很大的數字,所以會降低這個維度方向上的訓練進度,這個方向的梯度可能是震盪的,希望震盪小一點);
  • 反之,某個元素的偏導數一直較小,則該元素的學習率下降較慢(更新參數向量時除以一個很小的數字,從而加速了在小梯度維度上的學習速度)

3. 存在的問題

  • 由於全局學習速率epsilon除以的是累加梯度的平方,到後面累加的比較大時,會導致每次的學習率逐漸減小,導致梯度更新緩慢,最終可能會導致訓練中後期就停止迭代了。
  • 不適用於非凸函數,當到達一個局部極值點時,會困在這裏,使得訓練過程無法再進行下去

(3) RMSprop(Root Mean Squared prop)

在這裏插入圖片描述

1. 算法特點

  • RMSProp 算法是針對 Adagrad 算法的缺陷進行修改,改變梯度積累爲指數加權移動平均
  • Adagrad 算法旨在應用於凸問題時快速收斂
  • RMSProp 算法使用指數衰減平均以丟棄遙遠過去的歷史
  • RMSProp算法的學習率是自適應的

2.優化原理

還拿下面這個圖來直觀的理解一下(當然參數空間可能是很高維度的空間)
在這裏插入圖片描述

  • 由圖可知道,W方向的梯度值是很小的,而b方向的梯度值很大。我們希望加快W方向,而減緩b方向的迭代。
  • 當W梯度值很小時,通過算法,可知 :當前學習率=全局學習率 / r,此時當前學習率會增加,也即當前的step增加;同理,當b方向的梯度值很大時,步長會減小,從而降低搖擺幅度。

3. 存在的問題

  • 沒有什麼太大的問題,該算法只是在一定程度上表現得很好。如果非要說問題,那麼我就說對梯度下降算法提升得程度還不夠高!

(4) Adam算法(重頭戲)

在這裏插入圖片描述

1. 算法特點

  • 該算法結合了Momentum(First-order moment)和RMSProp(Second-order moment)兩者得優點
  • 動量直接併入了梯度一階矩(指數加權)的估計,將動量加入RMSProp最直觀的的方法是將動量應用於縮放後的梯度。
  • Adam 算法通常被認爲對超參數的選擇相當魯棒,儘管學習率有時需要從建議的默認修改
  • Adam算法是需要修正偏差的,偏差是由於初始化問題導致的,具體的公式由來是可以證明的,在這裏不在多說,具體參考《ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION》
  • 計算效率很高,使用的內存相對較小

2. 優化原理

  • 結合Momentum和RMSProp即可

3. 存在的問題

  • Adam算法是2015年ICLR會議上提出來的,要說問題,沒啥問題我覺得,最近好像是清華大學一個本科生提出了一種算法,效率比Adam高,還有的論文也多多少少指出了Adam算法確實存在一些缺陷,等以後有機會再深入。

4. Adamax(Adam算法的一個擴展)

  • 主要原理就是將Adam中梯度的二範數一般化爲p範數,這裏p要趨近於無窮
  • 沒有偏差修正
  • 學習率α的範圍很好確定
  • 具體數學證明參考原著
    在這裏插入圖片描述

5. 一個注意要點

  • 關於stepsize的選擇範圍要慎重,Adam算法原著中有相關解釋,看一參考,這裏不再敘述,下面把原著中這一部分貼出來供大家參考。
    在這裏插入圖片描述
    在這裏插入圖片描述

四、總結

  • Adam大法好啊,深度學習中很常用的算法,得get!

五、參考文獻

[1]參考文獻1
[2]參考文獻2
[3]ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION,Diederik P . Kingma,Jimmy Lei Ba,2015-ICLR.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章