1.1 動量梯度下降法(Gradient descent with Momentum)
優化成本函數J,還有一種算法叫做 Momentum,或者叫做動量梯度下降法,運行速度幾乎總是快於標准的梯度下降算法,簡而言之,基本的想法就是計算梯度的指數加權平均數,並利用該梯度更新你的權重。
使用動量梯度下降法,你需要做的是,在每次迭代中,確切來說在第t次迭代的過程中,需要計算微分dw,db,用現有的 mini-batch 計算dw,db,vdw=βvdw+(1-β)dw,接着同樣地計算vdb ,vdb=βvdb+(1-β)db,然后重新賦值權重,w: = w − avdw,同樣b: =a−avdb,這樣就可以減緩梯度下降的幅度。所以有兩個超參數,學習率α以及參數β,β控制着指數加權平均數,β最常用的值是0.9,我們之前平均了過去十天的溫度,所以現在是平均了前十次迭代的梯度,vdw初始值是 0,要注意到這是和dw擁有相同維數的零矩陣,也就是跟w擁有相同的維數,vdb的初始值也是向量零,所以和db擁有相同的維數,也就是和b是同一維數,這個算法要好於沒有 Momentum 的梯度下降算法。
1.2 RMSprop
動量(Momentum)可以加快梯度下降,還有一個叫做 RMSprop 的算法,全稱是 root mean square prop 算法,它也可以加速梯度下降,減緩b方向的學習,即縱軸方向,同時加快橫軸方向的學習,RMSprop 算法可以實現這一點。
在第t次迭代中,該算法會照常計算當下 mini-batch 的微分dw,db,所以我會保留這個指數加權平均數,我們用到新符號Sdw,因此Sdw=βSdw+(1-β)dw2,同樣Sdb=βSdb+(1-β)db2,接着 RMSprop 會這樣更新參數值:,在橫軸方向或者在例子中的w方向,我們希望學習速度快,而在垂直方向,也就是例子中的b方向,我們希望減緩縱軸上的擺動,所以有了Sdw和Sdb,RMSprop 的影響就是你的更新最后會變成縱軸方向上擺動較小,而橫軸方向繼續推進。
1.3 Adam 優化算法(Adam optimization algorithm)
Adam 優化算法基本上就是將 Momentum 和 RMSprop 結合在一起,使用 Adam 算法,首先你要初始化,vdw= 0,Sdw= 0,vdb= 0,Sdb= 0,在第t次迭代中,你要計算微分,用當前的 mini-batch 計算dw,db;接下來計算 Momentum 指數加權平均數,所以:vdw=β1vdw+(1-β1)dw (使用β1,這樣就不會跟超參數β2混淆,因為后面 RMSprop 要用到β2),同樣:vdwb=β1vdb+(1-β1)db ;接着你用 RMSprop 進行更新,即用不同的超參數β2,Sdw=β2Sdw+(1-β2)dw2,Sdb=β2Sdb+(1-β2)db2。相當於 Momentum 更新了超參數β1,RMSprop 更新了超參數β2,一般使用 Adam 算法的時候,要計算偏差修正,
,同樣,
,S也使用偏差修正,也就是:
,
,,最后更新權重,所以w更新后是
,根據類似的公式更新b值
。
Adam 算法結合了 Momentum 和 RMSprop 梯度下降法,並且是一種極其常用的學習算法,被證明能有效適用於不同神經網絡,適用於廣泛的結構。β1常用的缺省值為 0.9,這是 dW 的移動平均數,也就是dW 的加權平均數,這是 Momentum 涉及的項;超參數β2推薦使用 0.999,這是在計算(dw)2以及(db)2的移動加權平均值,的取值建議為10-8,但你並不需要設置它,因為它並不會影響算法表現。