1. 程式人生 > >deeplearning.ai第二課第二週:優化演算法

deeplearning.ai第二課第二週:優化演算法

本文作為對https://blog.csdn.net/cdknight_happy/article/details/84835809的補充。

1 mini-batch梯度下降演算法

批梯度下降法持續收斂,但每一輪迭代的計算太耗時;隨機梯度下降使用單個樣本計算損失,波動較大;mini-batch進行以小batch為單位的梯度下降,既可以利用向量化帶來的計算優勢,又可以避免隨機梯度下降過程中太大的波動。

選擇合適的mini-batch大小,mini-batch梯度下降的速度會優於批梯度下降和隨機梯度下降。

如何選擇合適的mini-batch大小?

  • 如果處理的是小規模的訓練集(m < 2000),則直接使用批梯度下降;
  • 如果處理的是大規模的訓練集,則可以設定mini-batch的大小為64,128,256,512,一般設定為 2 n 2^n

劃分mini-batch之前一般先對訓練集進行shuffle操作。

2 指數加權平均

v

t = β v t 1 +
( 1 β ) θ t v_t = \beta v_{t-1} + (1 - \beta)\theta_t ,則相當於是取前 1 1 β \frac{1}{1 - \beta} 個值的指數加權平均。

指數加權平均展開可得: v t = i = 0 t 1 ( 1 β ) β i θ t i v_t = \sum_{i=0}^{t-1}(1 - \beta)\beta^i\theta_{t - i} ,由於 ( 1 ϵ ) 1 ϵ 1 e (1 - \epsilon)^{\frac{1}{\epsilon}} \approx \frac{1}{e} ,而下降到 1 e \frac{1}{e} 之下的項一般也就不予考慮,因此,用 1 ϵ 1-\epsilon 代替 β \beta ,那麼就有當 i &gt; 1 1 β i &gt; \frac{1}{1 - \beta} 之後就不予考慮。因此,指數加權平均就相當於是取當前值的前 1 1 β \frac{1}{1-\beta} 個值的指數加權平均。

實現:
v t = 0 v_t = 0

Repeatly{
     g e t   n e x t   θ t ~~~~get~next~\theta_t
     v t : = β v t + ( 1 β ) θ t ~~~~v_t := \beta v_t + (1 - \beta)\theta_t
}

指數加權平均的實現只佔用單行的記憶體,相比於儲存前面 1 1 β \frac{1}{1-\beta} 個值再進行取平均操作,大大降低了記憶體佔用。

偏差修正:
偏差修正解決的是指數加權初期計算值小於應取值的問題。如下圖中的綠色曲線和紫色曲線所示。
在這裡插入圖片描述
假設 β = 0.9 \beta = 0.9 ,由於 v 0 = 0 v_0 = 0 ,則有:
v 1 = 0.98 v 0 + 0.02 θ 1 = 0.02 θ 1 v_1 = 0.98v_0 + 0.02\theta_1 = 0.02\theta_1
v 2 = 0.9 v 1 + 0.02 θ 2 = 0.98 0.02 θ 1 + 0.02 θ 2 v_2 = 0.9v_1 + 0.02\theta_2 = 0.98*0.02\theta_1 + 0.02\theta_2
假設 θ 1 θ 2 \theta_1、\theta_2 都為正值,則 v 1 , v 2 v_1,v_2 是遠小於 θ 1 θ 2 \theta_1、\theta_2 的。也就出現了指數加權的起始位置的值遠小於當前採集值。

解決辦法是使用偏差修正,即使用 v t 1 β t \frac{v_t}{1-\beta^t} 代替 v t v_t 。 這樣做,在 t 較小時, β t \beta^t 接近於 β \beta ,則起到了對 v t v_t 進行放大的作用,隨著 t 的增大, β t \beta^t 逐漸接近於0,偏差修正的影響越來越小。也就是從上圖的紫線變成了綠線。

3 動量梯度下降

動量梯度下降,也就是帶momentum的梯度下降演算法,收斂速度幾乎總是快於mini-batch梯度下降演算法。其實現的核心思想就是計算梯度的指數加權平均,並用其進行引數更新。

梯度下降中的波動如下圖所示:
在這裡插入圖片描述
沿著y軸的波動減慢了演算法的收斂過程,因此,我們期望的是減緩在y軸方向上的移動,而增加在x軸方向上的移動。

指數加權平均是求當前值的前 1 1 β \frac{1}{1 - \beta} 個值的平均值,由於相鄰次迭代在y軸方向的震盪幅度非常接近且符號相反,因此,使用指數加權平均則減弱了y軸方向上的震盪,同時增加了x軸方向上的前進速度。

momentum的實現是:

在第 t 次迭代中:
計算基於當前mini-batch的梯度 d W , d b dW,db
v d w = β v d w + ( 1 β ) d W v_{dw} = \beta v_{dw} + (1 - \beta)dW