2.6 动量梯度下降法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 2.5 指數加權平均的偏差修正 | 回到目錄 | 2.7 RMSprop |
動量梯度下降法 (Gradient Descent with Momentum)
還有一種算法叫做Momentum,或者叫做動量梯度下降法,運行速度幾乎總是快于標準的梯度下降算法,簡而言之,基本的想法就是計算梯度的指數加權平均數,并利用該梯度更新你的權重,在本視頻中,我們呢要一起拆解單句描述,看看你到底如何計算。
例如,如果你要優化成本函數,函數形狀如圖,紅點代表最小值的位置,假設你從這里(藍色點)開始梯度下降法,如果進行梯度下降法的一次迭代,無論是batch或mini-batch下降法,也許會指向這里,現在在橢圓的另一邊,計算下一步梯度下降,結果或許如此,然后再計算一步,再一步,計算下去,你會發現梯度下降法要很多計算步驟對吧?
慢慢擺動到最小值,這種上下波動減慢了梯度下降法的速度,你就無法使用更大的學習率,如果你要用較大的學習率(紫色箭頭),結果可能會偏離函數的范圍,為了避免擺動過大,你要用一個較小的學習率。
另一個看待問題的角度是,在縱軸上,你希望學習慢一點,因為你不想要這些擺動,但是在橫軸上,你希望加快學習,你希望快速從左向右移,移向最小值,移向紅點。所以使用動量梯度下降法,你需要做的是,在每次迭代中,確切來說在第 ttt 次迭代的過程中,你會計算微分 dWdWdW , dbdbdb ,我會省略上標 [l][l][l] ,你用現有的mini-batch計算 dW,dbdW,dbdW,db 。如果你用batch梯度下降法,現在的mini-batch就是全部的batch,對于batch梯度下降法的效果是一樣的。如果現有的mini-batch就是整個訓練集,效果也不錯,你要做的是計算 vdW=βvdW+(1?β)dWv_{dW}=\beta v_{dW}+(1-\beta)dWvdW?=βvdW?+(1?β)dW ,這跟我們之前的計算相似,也就是 v=βv+(1?β)θtv=\beta v+(1-\beta)\theta_tv=βv+(1?β)θt? , dWdWdW 的移動平均數,接著同樣地計算 vdbv_{db}vdb? , vdb=βvdb+(1?β)dbv_{db}=\beta v_{db}+(1-\beta)dbvdb?=βvdb?+(1?β)db ,然后重新賦值權重, W:=W?αvdWW:=W-\alpha v_{dW}W:=W?αvdW? ,同樣 b:=b?αvdbb:=b-\alpha v_{db}b:=b?αvdb? ,這樣就可以減緩梯度下降的幅度。
例如,在上幾個導數中,你會發現這些縱軸上的擺動平均值接近于零,所以在縱軸方向,你希望放慢一點,平均過程中,正負數相互抵消,所以平均值接近于零。但在橫軸方向,所有的微分都指向橫軸方向,因此橫軸方向的平均值仍然較大,因此用算法幾次迭代后,你發現動量梯度下降法,最終縱軸方向的擺動變小了,橫軸方向運動更快,因此你的算法走了一條更加直接的路徑,在抵達最小值的路上減少了擺動。
動量梯度下降法的一個本質,這對有些人而不是所有人有效,就是如果你要最小化碗狀函數,這是碗的形狀,我畫的不太好。
它們能夠最小化碗狀函數,這些微分項,想象它們為你從山上往下滾的一個球,提供了加速度,Momentum項相當于速度。
想象你有一個碗,你拿一個球,微分項給了這個球一個加速度,此時球正向山下滾,球因為加速度越滾越快,而因為 β\betaβ 稍小于1,表現出一些摩擦力,所以球不會無限加速下去,所以不像梯度下降法,每一步都獨立于之前的步驟,你的球可以向下滾,獲得動量,可以從碗向下加速獲得動量。我發現這個球從碗滾下的比喻,物理能力強的人接受得比較好,但不是所有人都能接受,如果球從碗中滾下這個比喻,你理解不了,別擔心。
最后我們來看具體如何計算,算法在此。
所以你有兩個超參數,學習率 α\alphaα 以及參數 β\betaβ , β\betaβ 控制著指數加權平均數。 β\betaβ 最常用的值是0.9,我們之前平均了過去十天的溫度,所以現在平均了前十次迭代的梯度。實際上 β\betaβ 為0.9時,效果不錯,你可以嘗試不同的值,可以做一些超參數的研究,不過0.9是很棒的魯棒數。那么關于偏差修正,所以你要拿 vdWv_{dW}vdW? 和 vdbv_{db}vdb? 除以 1?βt1-\beta^t1?βt ,實際上人們不這么做,因為10次迭代之后,因為你的移動平均已經過了初始階段。實際中,在使用梯度下降法或動量梯度下降法時,人們不會受到偏差修正的困擾。當然 vdWv_{dW}vdW? 初始值是0,要注意到這是和 dWdWdW 擁有相同維數的零矩陣,也就是跟 WWW 擁有相同的維數, vdbv_{db}vdb? 的初始值也是向量零,所以和 dbdbdb 擁有相同的維數,也就是和 bbb 是同一維數。
最后要說一點,如果你查閱了動量梯度下降法相關資料,你經常會看到一個被刪除了的專業詞匯, 1?β1-\beta1?β 被刪除了,最后得到的是 vdW=βvdW+dWv_{dW}=\beta v_{dW}+dWvdW?=βvdW?+dW 。用紫色版本的結果就是,所以 vdWv_{dW}vdW? 縮小了 1?β1-\beta1?β 倍,相當于乘以 11?β\frac 1 {1-\beta}1?β1? ,所以你要用梯度下降最新值的話, α\alphaα 要根據 11?β\frac 1 {1-\beta}1?β1? 相應變化。實際上,二者效果都不錯,只會影響到學習率 α\alphaα 的最佳值。我覺得這個公式用起來沒有那么自然,因為有一個影響,如果你最后要調整超參數 β\betaβ ,就會影響到 vdWv_{dW}vdW? 和 vdbv_{db}vdb? ,你也許還要修改學習率 α\alphaα ,所以我更喜歡左邊的公式,而不是刪去了 1?β1-\beta1?β 的這個公式,所以我更傾向于使用左邊的公式,也就是有 1?β1-\beta1?β 的這個公式,但是兩個公式都將 β\betaβ 設置為0.9,是超參數的常見選擇,只是在這兩個公式中,學習率 α\alphaα 的調整會有所不同。
所以這就是動量梯度下降法,這個算法肯定要好于沒有Momentum的梯度下降算法,我們還可以做別的事情來加快學習算法,我們將在接下來的視頻中探討這些問題。
課程PPT
| 2.5 指數加權平均的偏差修正 | 回到目錄 | 2.7 RMSprop |
總結
以上是生活随笔為你收集整理的2.6 动量梯度下降法-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.5 指数加权平均的偏差修正-深度学习
- 下一篇: 2.7 RMSprop-深度学习第二课《