日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

神经网络优化篇:详解动量梯度下降法(Gradient descent with Momentum)

發布時間:2024/1/18 windows 46 coder
生活随笔 收集整理的這篇文章主要介紹了 神经网络优化篇:详解动量梯度下降法(Gradient descent with Momentum) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動量梯度下降法

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

例如,如果要優化成本函數,函數形狀如圖,紅點代表最小值的位置,假設從這里(藍色點)開始梯度下降法,如果進行梯度下降法的一次迭代,無論是batchmini-batch下降法,也許會指向這里,現在在橢圓的另一邊,計算下一步梯度下降,結果或許如此,然后再計算一步,再一步,計算下去,會發現梯度下降法要很多計算步驟對吧?

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

另一個看待問題的角度是,在縱軸上,希望學習慢一點,因為不想要這些擺動,但是在橫軸上,希望加快學習,希望快速從左向右移,移向最小值,移向紅點。所以使用動量梯度下降法,需要做的是,在每次迭代中,確切來說在第\(t\)次迭代的過程中,會計算微分\(dW\)\(db\),會省略上標\([l]\),用現有的mini-batch計算\(dW\)\(db\)。如果用batch梯度下降法,現在的mini-batch就是全部的batch,對于batch梯度下降法的效果是一樣的。如果現有的mini-batch就是整個訓練集,效果也不錯,要做的是計算\(v_{{dW}}= \beta v_{{dW}} + \left( 1 - \beta \right)dW\),這跟之前的計算相似,也就是\(v = \beta v + \left( 1 - \beta \right)\theta_{t}\)\(dW\)的移動平均數,接著同樣地計算\(v_{db}\)\(v_{db} = \beta v_{{db}} + ( 1 - \beta){db}\),然后重新賦值權重,\(W:= W -av_{{dW}}\),同樣\(b:= b - a v_{db}\),這樣就可以減緩梯度下降的幅度。

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

動量梯度下降法的一個本質,這對有些人而不是所有人有效,就是如果要最小化碗狀函數,這是碗的形狀,畫的不太好。

它們能夠最小化碗狀函數,這些微分項,想象它們為從山上往下滾的一個球,提供了加速度,Momentum項相當于速度。

想象有一個碗,拿一個球,微分項給了這個球一個加速度,此時球正向山下滾,球因為加速度越滾越快,而因為\(\beta\) 稍小于1,表現出一些摩擦力,所以球不會無限加速下去,所以不像梯度下降法,每一步都獨立于之前的步驟,的球可以向下滾,獲得動量,可以從碗向下加速獲得動量。發現這個球從碗滾下的比喻,物理能力強的人接受得比較好,但不是所有人都能接受,如果球從碗中滾下這個比喻,理解不了,別擔心。

最后來看具體如何計算,算法在此。

所以有兩個超參數,學習率\(a\)以及參數\(\beta\)\(\beta\)控制著指數加權平均數。\(\beta\)最常用的值是0.9,之前平均了過去十天的溫度,所以現在平均了前十次迭代的梯度。實際上\(\beta\)為0.9時,效果不錯,可以嘗試不同的值,可以做一些超參數的研究,不過0.9是很棒的魯棒數。那么關于偏差修正,所以要拿\(v_{dW}\)\(v_{db}\)除以\(1-\beta^{t}\),實際上人們不這么做,因為10次迭代之后,因為的移動平均已經過了初始階段。實際中,在使用梯度下降法或動量梯度下降法時,人們不會受到偏差修正的困擾。當然\(v_{{dW}}\)初始值是0,要注意到這是和\(dW\)擁有相同維數的零矩陣,也就是跟\(W\)擁有相同的維數,\(v_{db}\)的初始值也是向量零,所以和\(db\)擁有相同的維數,也就是和\(b\)是同一維數。

最后要說一點,如果查閱了動量梯度下降法相關資料,經常會看到一個被刪除了的專業詞匯,\(1-\beta\)被刪除了,最后得到的是\(v_{dW}= \beta v_{{dW}} +dW\)。用紫色版本的結果就是,所以\(v_{{dW}}\)縮小了\(1-\beta\)倍,相當于乘以\(\frac{1}{1- \beta}\),所以要用梯度下降最新值的話,\(a\)要根據\(\frac{1}{1 -\beta}\)相應變化。實際上,二者效果都不錯,只會影響到學習率\(a\)的最佳值。覺得這個公式用起來沒有那么自然,因為有一個影響,如果最后要調整超參數\(\beta\),就會影響到\(v_{{dW}}\)\(v_{db}\),也許還要修改學習率\(a\),所以更喜歡左邊的公式,而不是刪去了\(1-\beta\)的這個公式,所以更傾向于使用左邊的公式,也就是有\(1-\beta\)的這個公式,但是兩個公式都將\(\beta\)設置為0.9,是超參數的常見選擇,只是在這兩個公式中,學習率\(a\)的調整會有所不同。

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

總結

以上是生活随笔為你收集整理的神经网络优化篇:详解动量梯度下降法(Gradient descent with Momentum)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。