2-5 動量梯度下降法


動量梯度下降法(Gradient descent with Momentum)

還有一種算法叫做 Momentum,或者叫做動量梯度下降法,運行速度幾乎總是快於標准的梯度下降算法,簡而言之,基本的想法就是計算梯度的指數加權平均數,並利用該梯度更新你的權重。

如果你要優化成本函數,函數形狀如圖,紅點代表最小值的位置,利用梯度下降:

如果進行梯度下降法的一次迭代,無論是 batch 或 mini-batch下降法,可以看到是慢慢擺動到最小值,這種上下波動減慢了梯度下降法的速度,你就無法使用更大的學習率,如果你要用較大的學習率(紫色箭頭),結果可能會偏離函數的范圍,為了避免擺動過大,你要用一個較小的學習率。

理想的情況是,在縱軸上,你希望學習慢一點,因為你不想要這些擺動,但是在橫軸上,你希望加快學習,你希望快速從左向右移,移向最小值,移向紅點。所以使用動量梯度下降法,你需要做的是,在每次迭代中,確切來說在第t次迭代的過程中,你會計算微分$dW$,$db$,你要做的是計算:

$vdw = \beta vdw + (1 - \beta )dW$

$vdb = \beta vdb + (1 - \beta )db$

然后重新賦值權重:

$W: = W - \alpha vdw$

$b: = b - \alpha vdb$

這樣就可以減緩梯度下降的幅度。

你會發現這些縱軸上的擺動平均值接近於零,所以在縱軸方向,你希望放慢一點,平均過程中,正負數相互抵消,所以平均值接近於零。但在橫軸方向,所有的微分都指向橫軸方向,因此橫軸方向的平均值仍然較大,因此用算法幾次迭代后,你發現動量梯度下降法,最終縱軸方向的擺動變小了,橫軸方向運動更快,因此你的算法走了一條更加直接的路徑,在抵達最小值的路上減少了擺動。

具體的計算步驟:

這里有兩個超參數$\alpha$和$\beta $,$\beta $控制着指數加權平均數。最常用的值是0.9,即現在平均了前十次迭代的梯度。實際上$\beta $為 0.9時,效果不錯,你可以嘗試不同的值,可以做一些超參數的研究,不過 0.9 是很棒的魯棒數。

關於偏差修正,要拿$vdw$,$vdb$除以$1 - {\beta ^t}$,實際上人們不這么做,因為 10 次迭代之后,因為你的移動平均已經過了初始階段。實際中,在使用梯度下降法或動量梯度下降法時,人們不會受到偏差修正的困擾。

$vdw$的初始值是0,它的維度與dW和W相同;

$vdb$的初始值是0,它的維度與db和b相同。

在一些資料中,也有刪除$(1 - \beta )$,所以$vdw$縮小了$(1 - \beta )$倍,相當於乘以$\frac{1}{{1 - \beta }}$,所以你要用梯度下降最新值的話,$\alpha$要根據$\frac{1}{{1 - \beta }}$相應變化。實際上,二者效果都不錯, 只會影響到學習率

$\alpha $的最佳值。我覺得這個公式用起來沒有那么自然,因為有一個影響,如果你最后要調整超參數,$\beta $,就會影響到$vdw$和$vdb$你也許還要修改學習率$\alpha$,所以最好使用沒有刪除$(1 - \beta )$情況下的公式。

所以這就是動量梯度下降法,這個算法肯定要好於沒有 Momentum 的梯度下降算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM