深度學習中常見的優化方法——SGD,Momentum,Adagrad,RMSprop, Adam


SGD

SGD是深度學習中最常見的優化方法之一,雖然是最常使用的優化方法,但是卻有不少常見的問題。

learning rate不易確定,如果選擇過小的話,收斂速度會很慢,如果太大,loss function就會在極小值處不停的震盪甚至偏離。每個參數的learning rate都是相同的,如果數據是稀疏的,則希望出現頻率低的特征進行大一點的更新。深度神經網絡之所以比較難訓練,並不是因為容易進入局部最小,而是因為學習過程容易進入馬鞍面中,在這種區域中,所有方向的梯度值幾乎都是0。

 Momentum(動量)

Momentum借助了物理中的動量的概念,即前幾次的梯度也會參與計算。為了表示動量,引入一個新的變量V,V是之前的梯度的累加,但是在每個回合都會有一定的衰減。它的特點是當前后梯度方向不一致時,能夠加速學習,前后梯度方向一致時,能夠抑制震盪。

 

 其中,v就體現了累加的梯度,表示學習率,當前后梯度一致時,v的值就越來越大,因而加速訓練,當出現震盪時,v能夠起到緩沖震盪的作用。

 

Nesterov Momentum

對Momentum的一種改進:先對參數進行估計,然后使用估計估計后的參數來計算誤差。

 

 先通過沖量對參數進行更新,相當於向前邁了一步,在計算出這時的梯度,利用這時的梯度進行更新參數。

 

 區別於momentum的地方在於先進行了參數的更新。

 

Adagrad

在上述的優化算法中,參數的步長都是相的,那么能否為不同的常數設置不同的步長呢,對於梯度大的參數設置小的步長,對於梯度小的參數,設置大的步長。類比於在緩坡上面,我們可以大步長的前進,在陡坡上面,這需要小步長的前進。adagrad則是參考了這個思路。

 

 上述的式子中,對梯度的平方進行了累加,所以r值一直都是遞增的,故梯度的改變量會越來越小。對於較小的梯度,r的開方若小於1的,故梯度的改變量則較大,對於較大的梯度,r的開放較大,所以梯度改變量則較小。該優化方法的問題是,r的值一直是遞增的,導致梯度梯度改變量會一直減小。

 

RMSprop

RMSprop是對Adagrad的改進,通過引入一個衰減系數,讓r每回合都衰減一定的比例。這種方法能夠很好的解決Adagrad的過早結束的問題,適合處理非平衡的目標,對於RNN 的效果很好。

 

 該算法的做法是通過一個參數來控制r的值。

 

Adam

Adam的名稱是adaptive moment estimation,自適應矩估計。它的本質上是帶有動量的RMSprop,利用梯度的一階矩估計和二階矩估計調整每個參數的學習率。

 

其中,s是一階矩估計,r是二階矩估計 ,一階矩部分中就是帶有沖量的部分,二階矩中就是使得各個參數有不同的梯度。

 

優化算法的選擇

如果數據是稀疏的,就用自適應方法,即adagrad,adadelte,RMSprop,Adam。這幾種算法在很多的情況下都是相似的,通過Adam是比較好的選擇。如果需要快速的驗證新模型可以使用Adam;當模型上線發布時,可以使用SGD進行模型的極致優化。

 


免責聲明!

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



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