吳恩達Coursera深度學習課程 deeplearning.ai (2-2) 優化算法--課程筆記

相關課件:https://download.csdn.net/download/haoyutiangang/10495508

2.1 Mini-batch 梯度下降法

原因: 大數據集時,執行一次循環時間很長,梯度下降很慢;

mini-batch 是指將大數據集 n分成一系列小數據集m,每計算一個小數據集就執行一次梯度下降,這樣一次大數據集的計算可以下降n/m 次,從而增加梯度下降的速度。

  • 執行一次小數據集爲一次 mini-batch
  • 執行一次大數據集爲一次 epoch

mini-batch 使用上角標{i}表示,例如 ZiZ^{i}表示第一個 mini-batch中的 Z

2.2 理解 mini-batch 梯度下降法

mini-batch梯度: 小幅震動,總體下降

  • batch梯度下降:
    • 對所有m個訓練樣本執行一次梯度下降,每一次迭代時間較長;
    • Cost function 總是向減小的方向下降。
  • 隨機梯度下降:
    • 對每一個訓練樣本執行一次梯度下降,但是丟失了向量化帶來的計算加速;
    • Cost function總體的趨勢向最小值的方向下降,但是無法到達全局最小值點,呈現波動的形式。
  • Mini-batch梯度下降:
    • 選擇一個1 < size < m的合適的size進行Mini-batch梯度下降,可以實現快速學習,也應用了向量化帶來的好處。
    • Cost function的下降處於前兩者之間。

選擇 mini-batch 的大小

  • 小數據集(m<2000) 選用 batch 梯度下降
  • 大數據集選取:2^6, 2^7, 2^8, 2^9, 2^10 (都嘗試一下選用最優的
  • Mini-batch的大小要符合CPU/GPU內存,且爲2冪次。

2.3 指數加權平均

爲了介紹下面的優化算法,需要先理解指數加權平均,又叫指數加權移動平均。

image

公式:
vt=βvt1+(1β)θt v_t = \beta v_{t-1} + (1-\beta)\theta_t
β\beta 爲對過去的權重,1-β\beta 爲對當前值的權重,組合爲移動加權平均。

結果大體相當於平均了近 1/(1-betabeta) 天的值, 例如 β\beta = 0.95 相當於平均了近20天的值

2.4 理解指數加權平均

一般來說有
(1ε)1/ε=1e (1-\varepsilon)^{1/\varepsilon} = \frac{1}{e}
上文說 β\beta = 0.9 則 ε\varepsilon = 1 - 0.9 = 0.1 也就是 0.910=1/e0.9^{10} = 1/e, 經過10天左右權重下降到1/e,所以大體平均了1/ε=1/(1β)1/\varepsilon = 1/(1-\beta) 天的數值。

  • 指數加權平均算法僅需要一行代碼,一個 catch 來保存上次計算的結果即可。
  • 如果直接用前幾天的平均數則需要保存幾個 catch, 運算也較爲複雜。

2.5 指數加權平均的偏差修正

由於加權平均的執行的前期,歷史幾天的數據不足(比如第一天執行時就沒有之前幾天的歷史數據), 所以會造成前期數值很小的情況。

  • 偏差修正
    vt=βvt1+(1β)θtvt=vt1βt \begin{aligned} v_t &amp;= \beta v_{t-1} + (1-\beta)\theta_t \\ v_t &amp;= \frac{v_t}{1-\beta^t} \end{aligned}
    經過修正後,前期的值不在變得很小,並且後期修正逐漸趨向於1, 從而和不修正的後期重合。

實際過程中,一般直接忽略前期偏差的影響,不用修正偏差。

2.6 動量(Momentum)梯度下降法

Momentum:計算梯度的指數加權移動平均v,用這個值來更新參數。

image

梯度下降如上圖藍線所示,梯度下降過程中有縱向波動,由於這種波動的存在,我們只能採取較小的學習率,否則波動會更大。

而使用動量梯度下降法(指數加權平均)後,經過平均,相當於抵消了上下波動,使波動趨近於零(如圖中紅線所示),這樣就可以採用稍微大點的學習率加快梯度下降的速度。

算法實現

vdW=β&ThinSpace;vdW+(1β)dWW:=Wα&ThinSpace;vdWvdb=β&ThinSpace;vdb+(1β)dbb:=bα&ThinSpace;vdb \begin{aligned} v_{dW} &amp;= \beta \, v_{dW} + (1-\beta)dW \\ W &amp;:= W -\alpha\,v_{dW} \\ \\ v_{db} &amp;= \beta \, v_{db} + (1-\beta)db \\ b &amp;:= b -\alpha\,v_{db} \\ \end{aligned}

2.7 RMSprop(root mean square prop)

另一種抵消波動加快梯度下降的算法

利用 S 來更新參數

SdW=β2&ThinSpace;SdW+(1β2)dW2W:=Wα&ThinSpace;SdWSdW+εSdb=β2&ThinSpace;Sdb+(1β2)db2b:=bα&ThinSpace;SdbSdb+ε \begin{aligned} S_{dW} &amp;= \beta_2 \, S_{dW} + (1-\beta_2)dW^2 \\ W &amp;:= W -\alpha\,\frac{S_{dW}}{\sqrt{S_{dW}+\varepsilon}} \\ \\ S_{db} &amp;= \beta_2 \, S_{db} + (1-\beta_2)db^2 \\ b &amp;:= b -\alpha\,\frac{S_{db}}{\sqrt{S_{db}+\varepsilon}} \\ \end{aligned}

  • 與 Momentum 區別:平方後的指數加權平均,更新參數時再開方
  • 爲了與 Momentum 的參數 β\beta (β1\beta_1) 相區分,這裏使用β2\beta_2
  • ε\varepsilon 的出現是防止除數爲0,一般 ε=108\varepsilon = 10^{-8} 即可

2.8 Adam 優化算法

Adam: adaptive moment estimation.

Adam = Momentum(表示第一距) + RMSprop(表示第二矩)

initialization:&ThickSpace;Vdw=0,Vdb=0,SdW=0,Sdb=0VdW=β1&ThinSpace;VdW+(1β1)dWVdb=β1&ThinSpace;Vdb+(1β1)dbVdWcorrected=VdW1β1tVdbcorrected=Vdb1β1tSdW=β2&ThinSpace;SdW+(1β2)dW2Sdb=β2&ThinSpace;Sdb+(1β2)db2SdWcorrected=SdW1β2tSdbcorrected=Sdb1β2tW:=Wα&ThinSpace;VdWcorrectedSdWcorrected+εb:=bα&ThinSpace;VdbcorrectedSdbcorrected+ε \begin{aligned} initialization: \;&amp;V_{dw} = 0, V_{db} = 0, S_{dW} = 0, S_{db} = 0 \\ \\ V_{dW} &amp;= \beta_1 \, V_{dW} + (1-\beta_1)dW \\ V_{db} &amp;= \beta_1 \, V_{db} + (1-\beta_1)db \\ &amp;V_{dW}^{corrected} = \frac{V_{dW}}{1-\beta_1^t} \\ &amp;V_{db}^{corrected} = \frac{V_{db}}{1-\beta_1^t} \\ \\ S_{dW} &amp;= \beta_2 \, S_{dW} + (1-\beta_2)dW^2 \\ S_{db} &amp;= \beta_2 \, S_{db} + (1-\beta_2)db^2 \\ &amp;S_{dW}^{corrected} = \frac{S_{dW}}{1-\beta_2^t} \\ &amp;S_{db}^{corrected} = \frac{S_{db}}{1-\beta_2^t} \\ \\ W &amp;:= W -\alpha\,\frac{V_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}+\varepsilon}} \\ b &amp;:= b -\alpha\,\frac{V_{db}^{corrected}}{\sqrt{S_{db}^{corrected}+\varepsilon}} \end{aligned}

超參數的選擇

  • α\alpha: 需要進行調試
  • β1\beta_1: 推薦 0.9,dW 的加權平均
  • β2\beta_2: 推薦 0.999,dW2dW^2 的加權平均
  • ε\varepsilon: 推薦 10810^{-8},防止除數爲0

2.9 學習率衰減

我們採用 mini-batch 算法時,設置一個固定的學習率 α\alpha, 由於樣本缺失會造成一定幅度的波動,很難收斂,會在最低點附近波動。

如果設置一個較小的學習率,則起初下降太慢。

爲了下降快起初學習率可以比較大,爲了收斂學習率應該逐漸變小,這就是學習率衰減。

學習率衰減的實現

epoch: 一次樣本的全集,多個 mini-batch

epoch_num: 第幾次 epoch

  • 常用
    α=11+decay_rateepoch_num&ThinSpace;α0 \alpha = \frac{1}{1+decay\_rate*epoch\_num}\,\alpha_0

  • 指數衰減
    α=0.95epoch_num&ThinSpace;α0 \alpha = 0.95^{epoch\_num}\,\alpha_0

  • 其他
    α=kepoch_num&ThinSpace;α0 \alpha = \frac{k}{epoch\_num}\,\alpha_0

  • 離散衰減
    α=12α0 \alpha = \frac{1}{2} \alpha_0

  • 手動衰減

    • 數據量小時,感覺下降慢了,自己手動修改 α\alpha

2.10 局部最優的問題

低維情況下可能出現多個極小值,也就是局部最優解。

高維情況下出現極小值的概率很小,因爲極小值要求每個參數的導數在這裏都是極小值,比如20000維,導數爲0時都是極小值的概率很小2200002^{-20000},更大可能出現部分極小值部分極大值的情況,我們稱爲鞍點。

  • 幾乎不可能陷入局部最小值點,更多是鞍點
  • 處於鞍點的平穩區會減緩梯度下降速度,利用 Adam 等算法可以得到改善。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章