【深度學習】深度學習常用優化方法

作者:LogM

本文原載於 https://segmentfault.com/u/logm/articles ,不允許轉載~

文章中的數學公式若無法正確顯示,請參見:正確顯示數學公式的小技巧

1. SGD(隨機梯度下降)

$$ g_t = \bigtriangledown_{\theta_{t-1}} f(\theta_{t-1}) $$

$$ \Delta\theta_t = -\eta*g_t $$

  • 需要手動選取合適的learning_rate
  • 稀疏特徵更新問題(不常出現的特徵更新慢,如word2vec的embedding矩陣)
  • 易被困局部最優

2. momentum

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

$$ \Delta\theta_t = -\eta*m_t $$

  • 引入慣量緩解局部最優問題
  • 未解決稀疏特徵更新問題

3. AdaGrad

$$\nu_t = \nu_{t-1} + g_t*g_t$$

$$\Delta\theta_t = \frac{g_t}{\sqrt{\nu_t+\epsilon}} * \eta$$

  • 解決稀疏特徵更新問題,不常出現的特徵更新快
  • 局部最優問題沒有解決
  • 隨着 $\nu_t$ 的累加,學習率不斷衰減

4. RMSprop

$$\nu_t = \mu * \nu_{t-1} + (1-\mu) * g_t*g_t$$

$$\Delta\theta_t = \frac{g_t}{\sqrt{\nu_t+\epsilon}} * \eta$$

  • 解決稀疏特徵更新問題,不常出現的特徵更新快
  • 局部最優問題沒有解決
RMSprop 是 AdaGrad 的升級版,區別是 $\nu_t$ 的計算方式:RMSprop 是移動平均,而 AdaGrad 是累加,越加越大。

5. Adadelta

$$\nu_t = \mu * \nu_{t-1} + (1-\mu) * g_t*g_t$$

$$\Delta\theta_t = \frac{g_t}{\sqrt{\nu_t+\epsilon}} * \sqrt{\Delta \hat\theta_{t-1}^2}$$

$$\hat\theta_{t}^2 = \mu * \hat\theta_{t-1}^2 + (1-\mu) * \Delta\theta_t * \Delta\theta_t$$

  • 解決稀疏特徵更新問題,不常出現的特徵更新快
  • 無需手動設置學習率
  • 局部最優問題沒有解決
  • AdaDelta 相比 RMSprop,使用了 $\sqrt{\Delta \hat\theta_{t-1}^2}$ 來替換 $\eta$。

4. Adam

$$ m_t = \beta_{1}m_{t-1} + (1-\beta_1)g_t $$

$$ \nu_t = \beta_{2}\nu_{t-1} + (1-\beta_2)g_t^2 $$

$$ \Delta\theta_t = \frac{\hat m_t}{\sqrt{\hat\nu_t+\epsilon}} * \eta $$

$$ \hat m_t = \frac{m_t}{1-\beta_1^t},\space\space \hat\nu_t = \frac{\nu_t}{1-\beta_2^t} $$

  • $m_t$:移動平均求一階矩的期望$E(g_t)$
  • $\nu_t$:移動平均求二階矩的期望$E(g_t^2)$
  • $\hat m_t$、$\hat\nu_t$:考慮迭代剛開始的初始時刻做的修正
  • 解決稀疏特徵更新問題
  • 緩解局部最優問題
Adam 可以看做是將 momentum 和 RMSprop 的思想融合了起來。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章