梯度下降算法及優化方法


序言

      對於y=f(wx+b),如何使用神經網絡來進行求解,也就是給定x和y的值,如何讓系統自動生成正確的權重值w和b呢?

      一般情況下,有兩種嘗試方法:

      1) 隨機試:純概率問題,幾乎不可能實現。

      2) 梯度下降法:先初始化w和b(可以隨機設置,也可以人為默認),然后使用下降算法來對w和b進行更新。都有哪些方法?到底哪種方法更好?

 

目錄

一、基礎知識

二、SGD

三、Momentum

四、Adagrad

五、Adadelta

六、RMSProp

七、Adam

 

正文

一、基礎知識

斜率:在一維空間上,斜率就是函數的導數;

梯度:在多維空間里,函數的導數叫梯度,梯度是偏導數組成的向量;

梯度指向函數增加最快的方向,相應地,負梯度就指向函數下降最快的方向;推導方法可以參考該鏈接:https://blog.csdn.net/itplus/article/details/9337515

 

二、SGD

一般情況下,SGD指Mini-batch GD,(GD可分為三種:Batch GD,Stochastic GD,mini-batch GD)

SGD就是每次迭代計算mini-batch的梯度,然后對參數進行更新:

1)gt=θt1f(θt1)
2)Δθt=ηgt
其中,η是學習率,gt是梯度
SGD完全依賴於當前batch的梯度,η可理解為允許當前batch的梯度多大程度影響參數更新。
劣勢:
       1、學習率LR選擇比較困難
       2、對所有參數都使用相同的LR:在數據不均衡的情況下,如稀疏特征希望更新快些,常出現特征出現慢些時,SGD不太滿足要求。
       3、容易收斂到局部最優,有可能被困於鞍點
 

 三、Momentum

積累之前的動量來替代梯度

1)mt=μmt1+gt
2)Δθt=ηmt

其中,μ是動量因子

梯度下降前期:使用上一次參數來更新,下降方向一致,乘上較大的μ能夠進行很好的加速

梯度下降后期,在局部最小值來回震盪的時候,gradient→0,μ使得更新幅度增大,跳出陷阱

梯度方向改變時,μ能夠減少更新

結論:momentum項能夠加速SGD,抑制振盪,從而加快收斂

 

四、Adagrad

對學習率進行了約束:

nt=nt−1+gt2

Δθt=−η/(√nt+ϵ)∗gt

此處,對gt從11到tt進行一個遞推形成一個約束項regularizer:−1/√(∑r=1t(gr)2+ϵ) ,ϵ用來保證分母非0
特點:

前期gt較小的時候, regularizer較大,能夠放大梯度
后期gt較大的時候,regularizer較小,能夠約束梯度
適合處理稀疏梯度
缺點:

由公式可以看出,仍依賴於人工設置一個全局學習率
η設置過大的話,會使regularizer過於敏感,對梯度的調節太大
中后期,分母上梯度平方的累加將會越來越大,使gradient→0,使得訓練提前結束

 

五、Adadelta

   對Adagrad的擴展,也是對學習率進行自適應約束,但對計算進行了簡化。

Adagrad會累加之前所有的梯度平方,而Adadelta只累加固定大小的項,並且也不直接存儲這些項,僅僅是近似計算對應的平均值。即: 

1) nt=νnt1+(1ν)gt^2
2) Δθt=η/(√(nt+ϵ))gt

Adadelta依是依賴於全局學習率,但是經過近似牛頓迭代法:

3) E|g^2|t=ρE|g^2|t1+(1ρ)gt^2
4) Δxt=r=1,t-1(Δxr)/√(E|g^2|t+ϵ)     其中E代表期望,Adadelta已經不用依賴於全局學習率
特點:

訓練初中期,加速效果不錯,很快

訓練后期,反復在局部最小值附近抖動

 

六、RMSprop

RMSprop算Adadelta一個特例

當ρ=0.5時,E|g^2|t=ρ∗E|g^2|t−1+(1−ρ)∗gt^2就變為了求梯度平方和的平均數。
如果再求根的話,就變成了RMS(均方根):
RMS|g|t=√(E|g^2|t+ϵ)

此時,這個RMS就可以作為學習率ηη的一個約束:
Δxt=−η/(RMS|g|t)∗gt
特點:

其實RMSprop依然依賴於全局學習率
RMSprop算是Adagrad的一種發展,和Adadelta的變體,效果趨於二者之間
適合處理非平穩目標
對於RNN效果很好

 

七、Adam
Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率。Adam的優點主要在於經過偏置校正后,每一次迭代學習率都有個確定范圍,使得參數比較平穩。公式如下:
mt=μ∗mt−1+(1−μ)∗gt

nt=ν∗nt−1+(1−ν)∗gt^2

mt^=mt/(1−μt)

nt^=nt/(1−νt)

Δθt=−mt^/√(nt^+ϵ)∗η

其中,mtmt,ntnt分別是對梯度的一階矩估計和二階矩估計,可以看作對期望E|gt|,E|gt^2|的估計,mt^,nt^是對mt,nt的校正,這樣可以近似為對期望的無偏估計。
可以看出,直接對梯度的矩估計對內存沒有額外的要求,而且可以根據梯度進行動態調整,而−mt^/(nt^+ϵ)對學習率形成一個動態約束,而且有明確的范圍。
特點:

結合了Adagrad善於處理稀疏梯度和RMSprop善於處理非平穩目標的優點
對內存需求較小
為不同的參數計算不同的自適應學習率
也適用於大多非凸優化
適用於大數據集和高維空間

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM