一、序言
動量梯度下降也是一種神經網絡的優化方法,我們知道在梯度下降的過程中,雖然損失的整體趨勢是越來越接近0,但過程往往是非常曲折的,如下圖所示:
特別是在使用mini-batch后,由於單次參與訓練的圖片少了,這種“曲折”被放大了好幾倍。前面我們介紹過L2和dropout,它們要解決的也是“曲折”的問題,不過這種曲折指的是求得的W和b過於擬合訓練數據,導致求解曲線很曲折。動量梯度下降所解決的曲折指的是求得的dw、db偏離正常值導致成本時高時低,求得最優W和b的過程變慢。
二、指數加權平均
動量梯度下降是相較於普通的梯度下降而言,這里所謂的動量其實說的是動量效應,最早是在經濟學領域提出的:
“指股票的收益率有延續原來的運動方向的趨勢”
其實換個名字叫“慣性效應”更好理解,即事物的發展趨勢是有慣性的。
那應用到神經網絡的優化中,就是在計算dw、db時參考下之前的計算結果,具體操作起來的方法就叫“指數加權平均”,示例如下:
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
四、回顧
本節就簡單說了下動量梯度下降,可以對比看下應用前和應用后的效果:
應用前
應用后:
可以看到使用動量梯度下降后,損失是有一點收窄的效果,雖然最終預測准確率不一定就邊得更好了。具體實現代碼請關注公眾號“零基礎愛學習”回復AI12獲取。