SGD存在的問題
- 損失(loss)在一個方向上快速變化而在另一個方向慢慢變化:沿平緩方向進展非常緩慢,沿陡峭方向劇烈抖動。

- 如果損失函數(shù)具有局部最小值或鞍點,該怎么辦?

動量法(Momentum)
SGD難以沖破溝壑,讓Momentum幫助SGD加速,避免震蕩。上一步驟的更新矢量乘以系數(shù)
,與本次更新矢量進行相加,得到
,動量項
通常設(shè)為0.9。
可以看到,參數(shù)更新時不僅考慮當前梯度值,而且加上了一個積累項(沖量),但多了一個超參,一般取接近1的值如0.9。相比原始梯度下降算法,沖量梯度下降算法有助于加速收斂。當梯度與沖量方向一致時,沖量項會增加,而相反時,沖量項減少,因此沖量梯度下降算法可以減少訓(xùn)練的震蕩過程。
有時候,沖量梯度下降算法也可以按下面方式實現(xiàn):
此時我們就可以清楚地看到,所謂的沖量項其實只是梯度的指數(shù)加權(quán)移動平均值(Exponentially weighted moving averages)。這個實現(xiàn)和之前的實現(xiàn)沒有本質(zhì)區(qū)別,只是學(xué)習(xí)速率進行了放縮一下而已。移動平均數(shù)只是計算比較相近時刻數(shù)據(jù)的加權(quán)平均數(shù),一般可認為這個時間范圍為 ,比如
,你可以近似認為只是平均了10時刻之內(nèi)的數(shù)據(jù)而已,因為再往前權(quán)重太小了,基本沒影響了。
此處應(yīng)該有圖
動量法的意義
- 對于梯度改變方向的維度減少更新
- 對于梯度相同方向的維度增加更新
此處應(yīng)有圖
- 缺點:先計算坡度,然后進行大跳躍,盲目的加速下坡。
Nesterov加速梯度法(NAG)
先在前一個累計的梯度方向上進行跳躍,然后測量下一跳躍點的梯度并與之前點的動量進行加和,從而更新向量。
圖一中,黃色線段為當前點累積的動量,紅色線為下一個點的梯度,綠色線為修正后的動量,藍色短線為當前點的梯度,藍色長線與黃色線平行即為當前點累積的動量。

圖一

圖二