零基礎 神經網路優化之動量梯度下降

2022-02-05 21:07:56 字數 1589 閱讀 4500

一、序言

動量梯度下降也是一種神經網路的優化方法,我們知道在梯度下降的過程中,雖然損失的整體趨勢是越來越接近0,但過程往往是非常曲折的,如下圖所示:

特別是在使用mini-batch後,由於單次參與訓練的少了,這種「曲折」被放大了好幾倍。前面我們介紹過l2和dropout,它們要解決的也是「曲折」的問題,不過這種曲折指的是求得的w和b過於擬合訓練資料,導致求解曲線很曲折。動量梯度下降所解決的曲折指的是求得的dw、db偏離正常值導致成本時高時低,求得最優w和b的過程變慢。

二、指數加權平均

動量梯度下降是相較於普通的梯度下降而言,這裡所謂的動量其實說的是動量效應,最早是在經濟學領域提出的:

「指**的收益率有延續原來的運動方向的趨勢」

其實換個名字叫「慣性效應」更好理解,即事物的發展趨勢是有慣性的。

dw0 = 1

dw1 = 1.2,指數加權平均後:dw1 = 0.9*dw0 + 0.1*dw1 = 1.05

dw2 = 1.5,指數加權平均後:dw2 = 0.9*dw1 + 0.1*dw2 = 1.095

dw3 = 1.8,指數加權平均後:dw3 = 0.9*dw2 + 0.1*dw3 = 1.1655

上面的示例就是指數加權平均,看起來似乎只是將dw變化的幅度減小了,下面我們模擬一次曲折

dw4 = -1,指數加權平均後:dw4 = 0.9*dw3 + 0.1*dw4 = 0.94895

在dw4的優化中,原本w應該是減去1的,但現在是加上了0.94895,即w還是沿著前面dw0至3的路徑在優化,有效地降低了dw4的影響。這種使用指數加權平均計算dw並更新w的方式就是動量梯度下降。

三、動量梯度下降的實現

我們可以用乙個公式來描述指數加權平均:

vdw1 = beta*vdw0 + (1-beta)*dw1

vdb1 = beta*vdb0 + (1-beta)*db1

我們使用vdw和vdb來記錄指數加權平均值,beta值由我們設定,一般是0.9(這個數值代表了歷史資料對當前值的影響,可以自己調整看看效果不一定就一定要0.9)。計算出指數加權平均值後,我們再將這個值應用到梯度下降中即是所謂的「動量梯度下降」了。

w = w - learning_rate*vdw

b = b - learning_rate*vdb

四、回顧

本節就簡單說了下動量梯度下降,可以對比看下應用前和應用後的效果:

應用前

應用後:

零基礎 神經網路優化之dropout和梯度校驗

一 序言 dropout和l1 l2一樣是一種解決過擬合的方法,梯度檢驗則是一種檢驗 反向傳播 計算是否準確的方法,這裡合併簡單講述,並在文末提供完整示例 中還包含了之前l2的示例,全都是在 深層神經網路解析 這篇基礎之上修改的。二 dropout 簡單來說dropout就是在每次訓練時 隨機 失效...

零基礎 神經網路優化之mini batch

一 前言 回顧一下前面講過的兩種解決過擬合的方法 1 l0 l1 l2 在向前傳播 反向傳播後面加個小尾巴 2 dropout 訓練時隨機 刪除 一部分神經元 本篇要介紹的優化方法叫mini batch,它主要解決的問題是 實際應用時的訓練資料往往都太大了,一次載入到電腦裡可能記憶體不夠,其次執行速...

零基礎入門深度學習 5 迴圈神經網路

在前面的文章系列文章中,我們介紹了全連線神經網路和卷積神經網路,以及它們的訓練和使用。他們都只能單獨的取處理乙個個的輸入,前乙個輸入和後乙個輸入是完全沒有關係的。但是,某些任務需要能夠更好的處理序列的資訊,即前面的輸入和後面的輸入是有關係的。不過讀者不用擔心,本文將一如既往地對複雜的東西剝繭抽絲,幫...