1. 程式人生 > 其它 >動量梯度下降法、RMSprop、Adam 優化演算法

動量梯度下降法、RMSprop、Adam 優化演算法

1.1動量梯度下降法(Gradient descent with Momentum)

優化成本函式J還有一種演算法叫做 Momentum,或者叫做動量梯度下降法,執行速度幾乎總是快於標準的梯度下降演算法,簡而言之,基本的想法就是計算梯度的指數加權平均數,並利用該梯度更新你的權重

使用動量梯度下降法,你需要做的是,在每次迭代中,確切來說在第t次迭代的過程中,需要計算微分dwdb,用現有的 mini-batch 計算dwdbvdw=βvdw+(1-β)dw,接著同樣地計算vdb vdb=βvdb+(1-β)db,然後重新賦值權重,w: = w avdw,同樣b: =aavdb,這樣就可以減緩梯度下降的幅度。所以有兩個超引數,學習率

α以及引數β,β控制著指數加權平均數,β最常用的值是0.9,我們之前平均了過去十天的溫度,所以現在是平均了前十次迭代的梯度,vdw初始值是 0,要注意到這是和dw擁有相同維數的零矩陣,也就是跟w擁有相同的維數,vdb的初始值也是向量零,所以和db擁有相同的維數,也就是和b是同一維數,這個演算法要好於沒有 Momentum 的梯度下降演算法。

1.2RMSprop

動量(Momentum)可以加快梯度下降,還有一個叫做 RMSprop 的演算法,全稱是 root mean square prop 演算法,它也可以加速梯度下降,減緩b方向的學習,即縱軸方向,同時加快橫軸方向的學習,RMSprop 演算法可以實現這一點。

在第t次迭代中,該演算法會照常計算當下 mini-batch 的微分dwdb,所以我會保留這個指數加權平均數,我們用到新符號Sdw,因此Sdw=βSdw+(1-β)dw2,同樣Sdb=βSdb+(1-β)db2,接著 RMSprop 會這樣更新引數值:,在橫軸方向或者在例子中的w方向,我們希望學習速度快,而在垂直方向,也就是例子中的b方向,我們希望減緩縱軸上的擺動,所以有了SdwSdbRMSprop 的影響就是你的更新最後會變成縱軸方向上擺動較小,而橫軸方向繼續推進。

1.3Adam 優化演算法(Adam optimization algorithm)

Adam 優化演算法基本上就是將

Momentum RMSprop 結合在一起,使用 Adam 演算法,首先你要初始化,vdw= 0Sdw= 0vdb= 0Sdb= 0,在第t次迭代中,你要計算微分,用當前的 mini-batch 計算dwdb接下來計算 Momentum 指數加權平均數,所以vdw=β1vdw+(1-β1)dw (使用β1,這樣就不會跟超引數β2混淆,因為後面 RMSprop 要用到β2),同樣:vdwb=β1vdb+(1-β1)db ;接著你用 RMSprop 進行更新,即用不同的超引數β2Sdw=β2Sdw+(1-β2)dw2Sdb=β2Sdb+(1-β2)db2。相當於 Momentum 更新了超引數β1RMSprop 更新了超引數β2,一般使用 Adam 演算法的時候,要計算偏差修正,,同樣,,S也使用偏差修正,也就是:,,,最後更新權重,所以w更新後是,根據類似的公式更新b值。

Adam 演算法結合了 Momentum RMSprop 梯度下降法,並且是一種極其常用的學習演算法,被證明能有效適用於不同神經網路,適用於廣泛的結構。β1常用的預設值為 0.9,這是 dW 的移動平均數,也就是dW 的加權平均數,這是 Momentum 涉及的項;超引數β2推薦使用 0.999,這是在計算(dw)2以及(db)2的移動加權平均值,的取值建議為10-8,但你並不需要設定它,因為它並不會影響演算法表現。

本文來自部落格園,作者:zhang-X,轉載請註明原文連結:https://www.cnblogs.com/YY-zhang/p/15058850.html