1. 程式人生 > >深度學習 - 常用優化演算法

深度學習 - 常用優化演算法

批量梯度下降BGD(Batch Gradient Descent)

更新公式:
\[ \theta = \theta - \eta \sum_{i=1}^{m}\nabla g(\theta;x_i,y_i) \]
其中,m 為樣本個數

優點:每次更新都會朝著正確的方向進行,最後能夠保證收斂於極值點(凸函式收斂於全域性極值點,非凸函式可能會收斂於區域性極值點)
缺點:每次學習時間過長,並且如果訓練集很大以至於需要消耗大量的記憶體,不能進行線上模型引數更新

隨機梯度下降SGD(Stochastic Gradient Descent)

更新公式:
\[ \theta = \theta - \eta\nabla g(\theta;x_i,y_i) \]

優點:學習速度快,可線上更新
缺點:每次更新可能不會按照正確的方向進行,因此會帶來優化波動,使得迭代次數(學習次數)增多,即收斂速度變慢。

不過從另一個方面來看,隨機梯度下降所帶來的波動有個好處就是,對於類似盆地區域(即很多區域性極小值點)那麼這個波動的特點可能會使得優化的方向從當前的區域性極小值點跳到另一個更好的區域性極小值點,這樣便可能對於非凸函式,最終收斂於一個較好的區域性極值點,甚至全域性極值點。如下圖所示:


小批量梯度下降(Mini-batch Gradient Descent)

更新公式:
\[ \theta = \theta - \eta\sum_{i=t}^{t+k}\nabla g(\theta;x_i,y_i)\]

其中,k為每批樣本的數量

優點:相對於隨機梯度下降,Mini-batch梯度下降降低了收斂波動性,即降低了引數更新的方差,使得更新更加穩定。相對於批量梯度下降,其提高了每次學習的速度。並且其不用擔心記憶體瓶頸從而可以利用矩陣運算進行高效計算

動量法(Momentum)

更新公式:
\[\nu_t = \gamma\nu_{t-1} -1 + \eta\nabla g(\theta)\]
\[\theta = \theta - \nu_t\]

優點:能解決SGD在峽谷地區(一些方向較另一些方向上陡峭得多,常見於區域性極值點)附近振盪導致收斂速度慢的問題,詳見《動手學深度學習》
缺點:需要選擇足夠小的學習率使得自變數在梯度值較大的維度上不發散。但這樣會導致自變數在梯度值較小的維度上迭代過慢

AdaGrad

Adagrad 的演算法會使用一個小批量隨機梯度 \(g_t\) 按元素平方的累加變數 \(s_t\) 。在時間步 0,Adagrad 將 \(s_0\) 中每個元素初始化為 0。在時間步 t ,首先將小批量隨機梯度 \(g_t\) 按元素平方後累加到變數 \(s_t\) :

\[s_t = s_{t-1} + g_t\odot g_t\]

符號 \(\odot\) 是按元素相乘。接著,我們將目標函式自變數中每個元素的學習率通過按元素運算重新調整一下:

\[x_t = x_{t-1} - \frac{\eta}{\sqrt{s_t + \epsilon}}\odot g_t\]

其中 \(\eta\) 是學習率,\(\epsilon\) 是為了維持數值穩定性而新增的常數,例如\(10^{-6}\)。這裡開方、除法和乘法的運算都是按元素進行的。這些按元素運算使得目標函式自變數中每個元素都分別擁有自己的學習率。

優點:每個變數都有自己的學習率,如果目標函式有關自變數中某個元素的偏導數一直都較大,那麼該元素的學習率將下降較快;反之,如果目標函式有關自變數中某個元素的偏導數一直都較小,那麼該元素的學習率將下降較慢
缺點:由於\(s_t\)一直在累加按元素平方的梯度,自變數中每個元素的學習率在迭代過程中一直在降低(或不變),梯度下降太快。所以,當學習率在迭代早期降得較快且當前解依然不佳時,Adagrad 在迭代後期由於學習率過小,可能較難找到一個有用的解

RMSprop

不同於 Adagrad 裡狀態變數 \(s_t\) 是截至時間步 \(t\) 所有小批量隨機梯度 \(g_t\) 按元素平方和,RMSProp 將這些梯度按元素平方做指數加權移動平均。具體來說,給定超引數 \(0\leq\gamma\lt1\) ,RMSProp 在時間步 \(t\gt0\) 計算

\[s_t = \gamma s_{t-1} + (1-\gamma)g_t\odot g_t\]

和 Adagrad 一樣,RMSProp 將目標函式自變數中每個元素的學習率通過按元素運算重新調整,然後更新自變數

\[x_t = x_{t-1} - \frac{\eta}{\sqrt{s_t + \epsilon}}\odot g_t\]

其中 \(\eta\) 是學習率,\(\epsilon\) 是為了維持數值穩定性而新增的常數,例如 \(10 ^ {-6}\) 。因為 RMSProp 的狀態變數是對平方項 \(g_t \odot g_t\) 的指數加權移動平均,所以可以看作是最近 \(\frac{1}{1-\gamma}\) 個時間步的小批量隨機梯度平方項的加權平均

優點:自變數每個元素的學習率在迭代過程中不再一直降低(或不變),解決了 Adagrad 學習率衰減過快的問題
缺點:依賴於全域性學習率

Adam

Adam 使用了動量變數 \(\nu_t\) 和 RMSProp 中小批量隨機梯度按元素平方的指數加權移動平均變數 \(s_t\) ,並在時間步 0 將它們中每個元素初始化為 0。給定超引數 \(0\leq\beta_1\lt1\)(演算法作者建議設為 0.9),時間步 \(t\) 的動量變數 \(\nu_t\) 即小批量隨機梯度 \(g_t\) 的指數加權移動平均:

\[\nu_t = \beta_1\nu_{t-1} + (1-\beta_1)g_t\]

和 RMSProp 中一樣,給定超引數 \(0\leq\beta_2\lt1\)(演算法作者建議設為 0.999), 將小批量隨機梯度按元素平方後的項 \(g_t\odot g_t\) 做指數加權移動平均得到 \(s_t\):

\[s_t = \beta_2 s_{t-1} + (1-\beta_2)g_t\odot g_t\]

由於我們將 \(\nu_0\) 和 \(s_0\) 中的元素都初始化為 0, 在時間步 \(t\) 我們得到 \(\nu_t = (1-\beta_1)\sum_{i=1}^{t}\beta_{1}^{t-i}g_i\) 。將過去各時間步小批量隨機梯度的權值相加,得到 \((1-\beta_1)\sum_{i=1}^{t}\beta_{1}^{t-i}g_i = 1-\beta_{1}^{t-i}\) 。需要注意的是,當 \(t\) 較小時,過去各時間步小批量隨機梯度權值之和會較小。例如當 \(\beta_1=0.9\) 時,\(\nu_1 = 0.1 g_1\) 。為了消除這樣的影響,對於任意時間步 \(t\) ,我們可以將 \(\nu_t\) 再除以 \(1-\beta_{1}^{t}\) ,從而使得過去各時間步小批量隨機梯度權值之和為 1。這也叫做偏差修正。在 Adam 演算法中,我們對變數 \(\nu_t\) 和 \(s_t\) 均作偏差修正:

\[\hat{\nu}_t = \frac{\nu_t}{1-\beta_1^{t}}\]
\[\hat{s}_t = \frac{s_t}{1-\beta_2^{t}}\]

接下來,Adam 演算法使用以上偏差修正後的變數 \(\hat{\nu}_t\) 和 \(\hat{s}_t\) ,將模型引數中每個元素的學習率通過按元素運算重新調整:

\[g'_t = \frac{\eta \hat{\nu}_t}{\sqrt{\hat{s}_t + \epsilon}}\]

其中 \(\eta\) 是學習率,\(\epsilon\)是為了維持數值穩定性而新增的常數,例如 \(10^{-8}\)。和 Adagrad、RMSProp 以及 Adadelta 一樣,目標函式自變數中每個元素都分別擁有自己的學習率。最後,使用 \(g'_t\) 迭代自變數:

\[x_t = x_{t-1} - g'_t\]

優點:Adam 結合了 AdaGrad 和 RMSProp 兩種優化演算法的優點,擁有自適應學習率,利用梯度的一階矩估計和二階矩估計動態調整每個引數的學習率。另外,經偏置校正後,每一次迭代學習率都有個確定範圍,使得引數比較平穩

各優化方法比較

下面兩幅圖視覺化形象地比較上述各優化方法,詳細參見這裡,如圖:


從上圖可以看出,Adagrad、Adadelta 與 RMSprop 在損失曲面上能夠立即轉移到正確的移動方向上達到快速的收斂。而 Momentum 與 NAG 會導致偏離(off-track)。同時 NAG 能夠在偏離之後快速修正其路線,因為其根據梯度修正來提高響應性。


在鞍點(saddle points)處(即某些維度上梯度為零,某些維度上梯度不為零),SGD、Momentum和NAG一直在鞍點梯度為零的方向上振盪,很難打破鞍點位置的對稱性;Adagrad、RMSprop 與 Adadelta 能夠很快地向梯度不為零的方向上轉移。

從上面兩幅圖可以看出,自適應學習速率方法(Adagrad、Adadelta、RMSprop 與 Adam)在這些場景下比採用固定學習率的演算法(SGD、Momentum等)具有更好的收斂速度與收斂性。

Reference

  • 動手學深度學習
  • An overview of gradient descent optimization algorithms