Optimizer and BN

Deep Learning

Optimizers

optimizers 通用參數(shù)

  • 待優(yōu)化參數(shù):w, 目標函數(shù):f(w), 初始learning rate:a

  • 在每一個epoch t 中:

    1. 計算目標函數(shù)關(guān)于當前參數(shù)的梯度: [圖片上傳失敗...(image-33816e-1552923429589)]

    2. 根據(jù)歷史梯度計算一階動量和二階動量:[圖片上傳失敗...(image-9748e9-1552923429589)],

    3. 計算當前時刻的下降梯度: [圖片上傳失敗...(image-8ac494-1552923429589)]

    4. 根據(jù)下降梯度進行更新: [圖片上傳失敗...(image-1a5e0a-1552923429589)]

SGD

  • 一階動量:m_t = g_t; 二階動量:V_t = I^2
  • 下降梯度:\eta_t = a \cdot g_t?

現(xiàn)在通用的SGD通常指代mini-batch SGD,其迭代次數(shù)為每個batch的個數(shù)n。對于每次迭代,SGD對每個batch求樣本的梯度均值然后進行梯度更新。

                    $$w_{t+1} = w_t - a \cdot \frac {1} {n} \sum \nabla f(w_t)$$

SGD-Momentum

  • 一階動量:m_t = \beta_1 \cdot m_{t-1} + (1-\beta_1) \cdot g_t?
    • 一階動量是哥哥時刻梯度方向的指數(shù)移動平均值,約等于最近1/(1-\beta_1)個時刻的梯度向量和的平均值
  • 主要由此前累積的下降方向所決定

AdaGrad

自適應(yīng)學(xué)習(xí)率

  • 二階動量:V_t = \sum g_t ^2:迄今為止所有梯度的平方和
  • 梯度下降:\eta_t = a \cdot \frac{m_t} {\sqrt{V_t}}?

實質(zhì)上,learning rate 由 a 變成了 \frac{a} {\sqrt{V_t}} 隨著迭代時候二階動量越大,學(xué)習(xí)率越小

RMSProp

只關(guān)注過去一段時間的梯度變化而非全部變化,這里區(qū)別于AdaGrad。避免二階動量持續(xù)累積,導(dǎo)致訓(xùn)練提前結(jié)束。

  • 二階動量:V_t = \beta_2 \cdot V_{t-1} + (1 - \beta_2) \cdot g_t^2

Adam

adaptive + Momentum

結(jié)合了一階動量和二階動量

  • 一階動量:m_t = \beta_1 \cdot m_{t-1} + (1-\beta_1) \cdot g_t?
  • 二階動量:V_t = \beta_2 \cdot V_{t-1} + (1 - \beta_2) \cdot g_t^2

實際使用過程,參數(shù)默認:\beta_1 = 0.9;\beta_2 = 0.999?

Comparison

  • Adam收斂問題
    • 由于RMSProp和Adam的二階動量是固定時間窗口的累積,隨著時間窗口變化,遇到的數(shù)據(jù)可能發(fā)生巨變,是的V_t可能會時大時小,不是單調(diào)變化。這在后期的訓(xùn)練有可能導(dǎo)致模型無法收斂。
      • 修正方法:V_t = max(\beta_2 \cdot V_{t-1} + (1 - \beta_2) \cdot g_t^2, V_{t-1})
  • 錯過全劇最優(yōu)解問題
    • 自適應(yīng)學(xué)習(xí)率算法可能會對前期的特征過擬合,后期才出現(xiàn)的特征難以糾正前期的擬合效果
      • 修正方法:充分shuffle數(shù)據(jù)集
    • 盡管收斂速度快,但是收斂的效果沒有SGD好。主要因為后期的學(xué)習(xí)速率太低了,影響有效收斂。
      • 修正方法:對Adam的學(xué)習(xí)率下界做約束。
  • 核心差異:下降方向
    • SGD下降方向就是該位置的梯度的反方向
    • 帶一階動量的SGD下降方向就是該位置一階動量的方向
    • 自適應(yīng)學(xué)習(xí)率算法每個參數(shù)設(shè)定了不同的學(xué)習(xí)率,在不同維度上設(shè)定不同的步長。因此其下降方向為scaled的一階動量方向
  • Adam + SGD組合策略
    • 繼承了Adam的快速收斂和SGD的精度收斂
  • 數(shù)據(jù)是稀疏的(分類問題),可以優(yōu)先考慮自適應(yīng)學(xué)習(xí)率算法。回歸問題SGD通常更好

Batch Normalization

優(yōu)勢:

  1. 減少了人為選擇參數(shù)。在某些情況下可以取消 dropout 和 L2 正則項參數(shù),或者采取更小的 L2 正則項約束參數(shù);
  2. 減少了對學(xué)習(xí)率的要求?,F(xiàn)在我們可以使用初始很大的學(xué)習(xí)率或者選擇了較小的學(xué)習(xí)率,算法也能夠快速訓(xùn)練收斂;
  3. 可以不再使用局部響應(yīng)歸一化。BN 本身就是歸一化網(wǎng)絡(luò)(局部響應(yīng)歸一化在 AlexNet 網(wǎng)絡(luò)中存在)
  4. 破壞原來的數(shù)據(jù)分布,一定程度上緩解過擬合(防止每批訓(xùn)練中某一個樣本經(jīng)常被挑選到,文獻說這個可以提高 1% 的精度)。
  5. 減少梯度消失,加快收斂速度,提高訓(xùn)練精度。

算法流程:

下面給出 BN 算法在訓(xùn)練時的過程

輸入:上一層輸出結(jié)果 X=x1,x2,...,xm,學(xué)習(xí)參數(shù) γ,β

  1. 計算上一層輸出數(shù)據(jù)的均值,其中,m 是此次訓(xùn)練樣本 batch 的大小。

? \mu_{\beta} = \frac{1}{m} \sum_{i=1}^m(x_i)

  1. 計算上一層輸出數(shù)據(jù)的標準差

? \sigma_{\beta}^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_{\beta})^2

  1. 歸一化處理,得到

? \hat x_i = \frac{x_i + \mu_{\beta}}{\sqrt{\sigma_{\beta}^2} + \epsilon}?

其中 ? 是為了避免分母為 0 而加進去的接近于 0 的很小值

  1. 重構(gòu),對經(jīng)過上面歸一化處理得到的數(shù)據(jù)進行重構(gòu),得到

? y_i = \gamma \hat x_i + \beta?

其中,γ,β 為可學(xué)習(xí)參數(shù)。

注:上述是 BN 訓(xùn)練時的過程,但是當在投入使用時,往往只是輸入一個樣本,沒有所謂的均值 μβ 和標準差 σ2β。此時,均值 μβ 是計算所有 batch μβ 值的平均值得到,標準差 σ2β 采用每個batch σ2β 的無偏估計得到。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容