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