我們會發現梯度下降法需要很多計算步驟,慢慢擺動到最小值,這種上下波動減慢了梯度下降法的速度,導致我們無法使用更大的學習率,結果可能會偏離函數的範圍,爲了避免擺動過大,我們需要使用較小的學習率,另一個看待問題的角度是在縱軸上,我們希望慢一點,但是在橫軸上,我們希望快一點,所以使用momentum梯度下降法,我們需要做的是,在每次迭代中,確切的說是在第t次迭代中,我麼要計算微分dw,db,注意是利用現有的mini-batch計算dw,db,如果使用batch梯度下降法,則現在的mini-batch就是全部的batch,對於batch梯度下降法的效果是一樣的。momentum的算法流程如下:
momentum
on iteration t:
compute dw,db on current mini-batch V_dw=β∗V_dw+(1−β)∗dw V_db=β∗V_db+(1−β)∗db w=w−αVdw b=b−αVdb
在這裏β相當於摩擦力,db,dw相當於加速度,這樣就可以減緩梯度下降的幅度,如果平均這些梯度,就會發現這些縱軸上的擺動,平均值接近於零。因此用算法幾次迭代之後,發現momentum梯度下降法,最終以縱軸方向擺動小了,橫軸方向運動更快,因此算法走了一條更加直接的路徑。
在上述算法中,有兩個超參數,學習率α以及參數β,在這裏β控制着指數加權平均數,β最常用的值是0.9。
RMSprop算法:
上面講到momentum可以加快學習算法,還有一個叫做RMSprop算法,全稱是(root mean square prop)算法,他也可以加速梯度下降,算法流程如下:
on iteration t:
compute dw,db on current mini-batch Sdw=βSdw+{1−β}dw2 Sdb=βSdb+{1−β}db2 w=w−αSdw+εdw b=b−αSdb+εdb
這裏需要說明的是,上面平方的操作是針對整個符號的,這樣做能夠保留微分平方的加權平均數。
我們來理解一下其原理,記得在w方向,我們希望學習速度快,而在垂直方向我們希望減小在縱軸上的擺動,所以有了Sdw和Sdb,我們希望Sdw相對較小,Sdb相對較大,所以我們要除以較大的數,從而減緩縱軸上的變化,在這裏,另一個影響是可以用一個更大的學習率,然後加快學習,從而無須擔心其在縱軸上的偏離。注意,這裏選擇加上ε,是爲了防止分母爲0,其實ε對算法的真正意義不大,我們一般將ε設置爲10−8.
Adam算法:
RMSprop以及Adam優化算法是少有的經受住考驗的兩種算法,他們已被證明適用於不同的深度學習結構。
Adam優化算法基本上就是將momentum和RMSprop結合在一起,我們來看看Adam算法的流程。使用Adam算法首先需要初始化
vdw=0,Sdw=0,Vdb=0,Sdb=0
on iteration t:
compute dw,db, using current mini-batch V_dw=β1∗V_dw+(1−β1)∗dw V_db=β1∗V_db+(1−β1)∗db
momentum更新了β1 Sdw=β2Sdw+{1−β2}dw2 Sdb=β2Sdb+{1−β2}db2
RMSprop更新了超參數β2 注意:一般計算Adam優化算法的時候要計算偏差修正。 Vdw=β1Vdw+(1−β1)dw Vdb=β1Vdb+(1−β1)db Vdwcorreted=(1−β1t)Vdw Vdbcorreted=(1−β1t)Vdb Sdwcorreted=(1−β2t)Sdw Sdbcorreted=(1−β2t)Sdb w=w−αSdwcorrected+εVdwcorrected b=b−αSdbcorrected+εVdbcorrected
基本流程就是這樣,這裏有很多超參數,超參α很重要,經常需要調整,β1的常用缺省值爲0.9,這是dw的移動平均數,這是momentum涉及的項,至於超參數β2,Adam論文的作者給出的推薦值是0.998.
最後談談爲什麼叫Adam算法,Adam代表的事Adaptive Moment Estimation。