深度學習(九) 深度學習最全優化方法總結比較(SGD,Momentum,Nesterov Momentum,Adagrad,Adadelta,RMSprop,Adam)


前言

這里討論的優化問題指的是,給定目標函數f(x),我們需要找到一組參數x(權重),使得f(x)的值最小。

本文以下內容假設讀者已經了解機器學習基本知識,和梯度下降的原理。

 

SGD

SGD指stochastic gradient descent,即隨機梯度下降。是梯度下降的batch版本。

對於訓練數據集,我們首先將其分成n個batch,每個batch包含m個樣本。我們每次更新都利用一個batch的數據,而非整個訓練集。即:

 

其中,η為學習率,gt為x在t時刻的梯度。 

這么做的好處在於:

  • 當訓練數據太多時,利用整個數據集更新往往時間上不顯示。batch的方法可以減少機器的壓力,並且可以更快地收斂。
  • 當訓練集有很多冗余時(類似的樣本出現多次),batch方法收斂更快。以一個極端情況為例,若訓練集前一半和后一半梯度相同。那么如果前一半作為一個batch,后一半作為另一個batch,那么在一次遍歷訓練集時,batch的方法向最優解前進兩個step,而整體的方法只前進一個step。

 

Momentum

SGD方法的一個缺點是,其更新方向完全依賴於當前的batch,因而其更新十分不穩定。解決這一問題的一個簡單的做法便是引入momentum。

momentum即動量,它模擬的是物體運動時的慣性,即更新的時候在一定程度上保留之前更新的方向,同時利用當前batch的梯度微調最終的更新方向。這樣一來,可以在一定程度上增加穩定性,從而學習地更快,並且還有一定擺脫局部最優的能力:

其中,ρ 即momentum,表示要在多大程度上保留原來的更新方向,這個值在0-1之間,在訓練開始時,由於梯度可能會很大,所以初始值一般選為0.5;當梯度不那么大時,改為0.9。η 是學習率,即當前batch的梯度多大程度上影響最終更新方向,跟普通的SGD含義相同。ρ 與 η 之和不一定為1。

 

 

Nesterov Momentum

這是對傳統momentum方法的一項改進,由Ilya Sutskever(2012 unpublished)在Nesterov工作的啟發下提出的。

  Nesterov Momentum

 

首先,按照原來的更新方向更新一步(棕色線),然后在該位置計算梯度值(紅色線),然后用這個梯度值修正最終的更新方向(綠色線)。上圖中描述了兩步的更新示意圖,其中藍色線是標准momentum更新路徑。

公式描述為:

 

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只累加固定大小的項,並且也不直接存儲這些項,僅僅是近似計算對應的平均值。即:

n_t=\nu*n_{t-1}+(1-\nu)*g_t^2

 

\Delta{\theta_t} = -\frac{\eta}{\sqrt{n_t+\epsilon}}*g_t

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

E|g^2|_t=\rho*E|g^2|_{t-1}+(1-\rho)*g_t^2

\Delta{x_t}=-\frac{\sqrt{\sum_{r=1}^{t-1}\Delta{x_r}}}{\sqrt{E|g^2|_t+\epsilon}}

 

 

其中,E代表求期望。 

 

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

特點:

  • 訓練初中期,加速效果不錯,很快 
  • 訓練后期,反復在局部最小值附近抖動

 

RMSprop 

RMSprop可以算作Adadelta的一個特例: 

\rho=0.5時,E|g^2|_t=\rho*E|g^2|_{t-1}+(1-\rho)*g_t^2就變為了求梯度平方和的平均數。

如果再求根的話,就變成了RMS(均方根): 

RMS|g|_t=\sqrt{E|g^2|_t+\epsilon}

此時,這個RMS就可以作為學習率\eta的一個約束:

\Delta{x_t}=-\frac{\eta}{RMS|g|_t}*g_t

特點:

  • 其實RMSprop依然依賴於全局學習率 
  • RMSprop算是Adagrad的一種發展,和Adadelta的變體,效果趨於二者之間
  • 適合處理非平穩目標- 對於RNN效果很好

 

Adam 

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

m_t=\mu*m_{t-1}+(1-\mu)*g_t

   

n_t=\nu*n_{t-1}+(1-\nu)*g_t^2

 

\hat{m_t}=\frac{m_t}{1-\mu^t}

 

\hat{n_t}=\frac{n_t}{1-\nu^t}

  

\Delta{\theta_t}=-\frac{\hat{m_t}}{\sqrt{\hat{n_t}}+\epsilon}*\eta

 

其中,m_tn_t分別是對梯度的一階矩估計和二階矩估計,u和v為衰減率,u通常為0.9,v通常為0.999,可以看作對期望E|g_t|E|g_t^2|的估計;\hat{m_t}\hat{n_t}是對m_tn_t的校正,這樣可以近似為對期望的無偏估計。可以看出,直接對梯度的矩估計對內存沒有額外的要求,而且可以根據梯度進行動態調整,而-\frac{\hat{m_t}}{\sqrt{\hat{n_t}}+\epsilon}對學習率形成一個動態約束,而且有明確的范圍。

 

特點:

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

 


免責聲明!

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



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