【機器學習】—— 各種梯度下降的變形momentum,adagrad,rmsprop,adam分別解決了什麼問題

Momentum

Momentum的公式表達

設時間步tt的自變量爲xt\boldsymbol{x}_t,學習率爲ηt\eta_t。在t0t_0時刻,速度變量v0=0\boldsymbol{v}_0=0,在時間步t>0t>0,Momentum關於速度變量vt=0\boldsymbol{v}_t=0和自變量θt\boldsymbol{\theta}_t的迭代方式爲:
vtγvt1+ηtgt,θtθt1vt, \begin{aligned} \boldsymbol{v}_t &\leftarrow \gamma \boldsymbol{v}_{t-1} + \eta_t \boldsymbol{g}_t, \\ \boldsymbol{\theta}_t &\leftarrow \boldsymbol{\theta}_{t-1} - \boldsymbol{v}_t, \end{aligned}
其中 γ\gamma 爲超參數,滿足0γ<10 \leq \gamma < 1
從上面的式子我們可以看出

  • 速度變量vt\boldsymbol{v}_t作用等價於梯度
  • 速度變量vt\boldsymbol{v}_t的大小與上一個時刻的速度變量vt1\boldsymbol{v}_{t-1}和學習率ηt\eta_t有關,且γ\gamma越大,vt1\boldsymbol{v}_{t-1}的作用越大。
  • 由於vt=γvt1+ηtgt=γ(γvt2+ηtgt1)+ηtgt=......\boldsymbol{v}_t =\gamma \boldsymbol{v}_{t-1} + \eta_t \boldsymbol{g}_t=\gamma (\gamma \boldsymbol{v}_{t-2} + \eta_t \boldsymbol{g}_{t-1})+ \eta_t \boldsymbol{g}_t=......,歷史的速度變量都將影響當前速度變量的大小,且越近影響越大,相當於歷史速度變量的加權平均,越近權重越大

Momentum可以解決什麼問題?

Momentum梯度下降圖1
如上圖1所示,在黃色箭頭處,本身梯度爲零,但是由於歷史的速度變量不爲零,會繼續向右運動,而到達紫色箭頭處時,梯度應該向左,但此時歷史的速度變量如果較大且向右,有可能跳出局部最優點,當然,能不能跳出是很難保證的。
Momentum梯度下降圖2
上圖是一個梯度下降的圖,如果採用momentum,則下降趨勢如下
在這裏插入圖片描述
在下降開始階段,歷史速度變量和當前梯度方向相反,則會使得下降的過程更爲平滑,避免過度震盪。
因此Momentum的主要作用在於:

  • 有一定機率跳出局部最優解
  • 歷史速度變量和當前梯度方向相反時,使得下降的過程更爲平滑

Adagrad

Adagrad的公式表示爲
stst1+gtgt,\boldsymbol{s}_t \leftarrow \boldsymbol{s}_{t-1} + \boldsymbol{g}_t \odot \boldsymbol{g}_t,
其中\odot是按元素相乘。st\boldsymbol{s}_t爲t時刻的狀態變量,爲從訓練開始直到t時刻的所有梯度的平方和,我們更新目標函數的自變量θt\boldsymbol{\theta}_t

θtθt1ηst+ϵgt,\boldsymbol{\theta}t \leftarrow \boldsymbol{\theta}_{t-1} - \frac{\eta}{\sqrt{\boldsymbol{s}_t + \epsilon}} \odot \boldsymbol{g}_t,
其中η\eta是學習率,ϵ\epsilon是爲了維持數值穩定性的常數(避免數值溢出),通常非常小。
從上面的式子我們可以看出:

  • Adagrad的分母是所有歷史梯度的累加(均方差),因此歷史梯度越大,當前更新越小。整體的思想是:之前更新大的參數,這次更新更新小一點,反之亦然
  • Adagrad相比於之前介紹的方法,它根據不同參數具有不同的學習率(受分母影響)
  • Adagrad在兩種情況下,同一次更新中的某些參數學習率變得很小:
    • 1.歷史梯度存在很大的值,即參數曾經有過更新很快的記錄
    • 2.參數更新頻率高,梯度爲0的次數少,在學習過程中,梯度爲0是很常見的,因此adagrad鼓勵那些沒怎麼更新過的參數多更新一點。
    • 3.Adagrad中分母是採用的累積,因此到訓練後期學習率會小得令人髮指,也就是說如果經過一定的迭代次數後模型還沒有找到最優點,那就很難找到最優解了。

RMSProp

RMSProp全稱是 Root Mean Square Prop,它和adagrad類似,可以使得不同的參數具有個性化的學習率,同時可以緩解訓練後期學習率過小的問題,它的公式如下:
stγst1+(1γ)gtgt.\boldsymbol{s}_t \leftarrow \gamma \boldsymbol{s}_{t-1} + (1 - \gamma) \boldsymbol{g}_t \odot \boldsymbol{g}_t.
θtθt1ηst+ϵgt,\boldsymbol{\theta}_t \leftarrow \boldsymbol{\theta}_{t-1} - \frac{\eta}{\sqrt{\boldsymbol{s}_t + \epsilon}} \odot \boldsymbol{g}_t,
其中0γ<10 \leq \gamma < 1,可以看出與adagrad的區別在於狀態變量sts_t的計算對於歷史的狀態變量和當前梯度都做了衰減,因此再迭代過程中梯度不一定是一直衰減,也可能增大。

Adam

Adam可以看做RMSProp和Momentum的結合,類似有:
vtγ1vt1+(1γ1)gt \begin{aligned} \boldsymbol{v}_t &\leftarrow \gamma_1 \boldsymbol{v}_{t-1} + (1-\gamma_1 ) \boldsymbol{g}_t\end{aligned}
stγ2st1+(1γ2)gtgt\boldsymbol{s}_t \leftarrow \gamma_2 \boldsymbol{s}_{t-1} + (1 - \gamma_2) \boldsymbol{g}_t \odot \boldsymbol{g}_t
作者建議的 γ1=0.9,γ2=0.999\gamma_1=0.9,\gamma_2=0.999 ,那麼在訓練剛開始的時候由於 vt1st1v_{t-1},s_{t-1}都比較小導致$ v_{t},s_{t} $較小,因此需要增加一個偏置:
v^tvt1β1t\hat{\boldsymbol{v}}_t \leftarrow \frac{\boldsymbol{v}_t}{1 - \beta_1^t}
s^tst1β2t\hat{\boldsymbol{s}}_t \leftarrow \frac{\boldsymbol{s}_t}{1 - \beta_2^t}
上面兩個式子中的分母可以起到放大梯度的效果,且分母都是隨時間增大的,可以解決訓練開始階段vtstv_{t},s_{t} 偏小的問題,最後的公式更新爲:
gtηv^ts^t+ϵ\boldsymbol{g}_t' \leftarrow \frac{\eta \hat{\boldsymbol{v}}_t}{\sqrt{\hat{\boldsymbol{s}}_t} + \epsilon}
θtθt1gt\boldsymbol{\theta}_t \leftarrow \boldsymbol{\theta}_{t-1} - \boldsymbol{g}_t'
最後我們可以總結如下:

  • Momentum是通過改變梯度下降的方向來改進梯度下降方法的,本質是引入了歷史的速度變量 vt1v_{t-1} ,向量的加法會改變梯度的方向,作用有兩點:
    • 有一定機率跳出局部最優解
    • 歷史速度變量和當前梯度方向相反時,使得下降的過程更爲平滑
  • Adagrad和RMSProp是通過歷史梯度平方和開根號的狀態變量 s_{t} 對於參數做衰減,由於不同參數的的狀態變量不同,可以個性化地對梯度做衰減
  • Adam是RMSProp和Momentum的結合,爲了避免訓練開始時梯度過小的問題,引入了一個偏置處理。

最後我做了關於梯度下降法的一個思維導圖:在這裏插入圖片描述
其中關於batch_size的部分可以參考我的另一篇博客機器學習深度學習】——學習率,梯度下降法,批梯度下降,歸一化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章