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,一般設定為 。
劃分mini-batch之前一般先對訓練集進行shuffle操作。
2 指數加權平均
,則相當於是取前 個值的指數加權平均。
指數加權平均展開可得: ,由於 ,而下降到 之下的項一般也就不予考慮,因此,用 代替 ,那麼就有當 之後就不予考慮。因此,指數加權平均就相當於是取當前值的前 個值的指數加權平均。
實現:
Repeatly{
}
指數加權平均的實現只佔用單行的記憶體,相比於儲存前面 個值再進行取平均操作,大大降低了記憶體佔用。
偏差修正:
偏差修正解決的是指數加權初期計算值小於應取值的問題。如下圖中的綠色曲線和紫色曲線所示。
假設
,由於
,則有:
假設
都為正值,則
是遠小於
的。也就出現了指數加權的起始位置的值遠小於當前採集值。
解決辦法是使用偏差修正,即使用 代替 。 這樣做,在 t 較小時, 接近於 ,則起到了對 進行放大的作用,隨著 t 的增大, 逐漸接近於0,偏差修正的影響越來越小。也就是從上圖的紫線變成了綠線。
3 動量梯度下降
動量梯度下降,也就是帶momentum的梯度下降演算法,收斂速度幾乎總是快於mini-batch梯度下降演算法。其實現的核心思想就是計算梯度的指數加權平均,並用其進行引數更新。
梯度下降中的波動如下圖所示:
沿著y軸的波動減慢了演算法的收斂過程,因此,我們期望的是減緩在y軸方向上的移動,而增加在x軸方向上的移動。
指數加權平均是求當前值的前 個值的平均值,由於相鄰次迭代在y軸方向的震盪幅度非常接近且符號相反,因此,使用指數加權平均則減弱了y軸方向上的震盪,同時增加了x軸方向上的前進速度。
momentum的實現是:
在第 t 次迭代中:
計算基於當前mini-batch的梯度