梯度下降優化器Optimization

前言

梯度下降算法是機器學習中使用非常廣泛的優化算法,梯度可以理解成山坡上某一點上升最快的方向,它的反方向就是下降最快的方向。要想下山最快,那麼就要沿着梯度的反方向走,最終到達山底(全局最優點)。梯度下降優化器就是爲了找到最快的下山策略。目前最常用的優化器有SGD、SGD+momentum、NAG、adagrad,Adam等。

1、SGD

隨機梯度下降算法通常還有三種不同的應用方式,它們分別是SGD、Batch-SGD、Mini-Batch SGD
a.SGD是最基本的隨機梯度下降,它是指每次參數更新只使用一個樣本,這樣可能導致更新較慢;
b.Batch-SGD是批隨機梯度下降,它是指每次參數更新使用所有樣本,即把所有樣本都代入計算一遍,然後取它們的參數更新均值,來對參數進行一次性更新,這種更新方式較爲粗糙;
c.Mini-Batch-SGD是小批量隨機梯度下降,它是指每次參數更新使用一小批樣本,這批樣本的數量通常可以採取trial-and-error的方法來確定,這種方法被證明可以有效加快訓練速度。

SGD算法是從樣本中隨機抽出一組,訓練後按梯度更新一次,然後再抽取一組,再更新一次,在樣本量及其大的情況下,可能不用訓練完所有的樣本就可以獲得一個損失值在可接受範圍之內的模型了。(劃個重點:每次迭代使用一組樣本。)
爲什麼叫隨機梯度下降算法呢?這裏的隨機是指每次迭代過程中,樣本都要被隨機打亂。

 

缺點:SGD算法每次只對一個樣本的梯度進行更新收斂速度慢,由於更新頻繁容易產生振盪,在高維空間中容易停留在鞍點(梯度爲0)。

2.SGD + Momentum

加上動量的SGD可以比喻成大胖子下山,跟基本的SGD相比,他可以利用自身的慣性衝出局部最優點或者鞍點。

vx=rho*vx+dx說明t時刻的下降方向,不僅由當前點的梯度方向dx決定,而且由此前累積的下降方向決定。rho通常取值爲0.9或者0.99,這就意味着下降方向主要是此前累積的下降方向,並略微偏向當前時刻的下降方向。當rho爲0時,將原來的慣性去掉了,此時相當於SGD,當rho=1時,表示過去的慣性不衰減。

3.NAG(Nesterov Momentum)

SGD+momentum的梯度更新方向爲當前速度更新的方向(velocity)和當前的梯度方向(gradient)的矢量和方向,就得到了當前的優化方向,如上圖左邊。而nesterov momentum的梯度更新方向不考慮當前的梯度方向,而是按照當前的速度方向更新,與更新後的時刻的梯度做矢量和,這就類似於提前考慮了一步(look ahead)。這樣能夠儘早感知到到達了坡底,可以避免大胖子衝過頭又回來的情況(紫色線比綠色線提前)

4.AdaGrad

Adagrad也是一種基於梯度的優化算法,它能夠對每個參數自適應不同的學習速率,對稀疏特徵,得到大的學習更新,對非稀疏特徵,得到較小的學習更新,因此該優化算法適合處理稀疏特徵數據。

AdaGrad使用到了二階動量(圖中grad_square),它代表在該維度上,迄今爲止所有梯度值的平方和。對於經常更新的參數,說明我們已經積累了大量關於它的知識(積累的dx*dx很大),我們不希望被單個樣本影響太大,我們希望學習率小一點;對於偶爾更新的參數,我們瞭解的信息太少(積累的dx*dx很小),希望能從每個偶然出現的樣本身上多學一些,即學習速率大一些。爲了防止分母爲0,在分母加上了一個很小的平滑項。

缺點:隨着更新次數的越來越多,積累項越來越大,最終導致學習率很小,最後x不更新,導致訓練過程提前結束。

5.RMSProp

爲了解決AdaGard出現的上述缺點,提出了RMSProp優化器,改變二階動量的計算方法。

RMSProp優化器引入了grad_square的衰減因子,類似於動量裏的rho(摩擦力),此時二階動量不累積全部歷史梯度,而只關注過去一段時間窗口的下降梯度。

6.Adam

它們是前述方法的集大成者。我們看到,SGD-M在SGD基礎上增加了一階動量,AdaGrad在SGD基礎上增加了二階動量。把一階動量和二階動量都用起來,就是Adam了。

第一動量和第二動量初始化爲0時,要進行一段時間的更新才能進入正常訓練狀態。因此進行了如下改進:

解釋:在剛開始訓練的時候,t很小,beta1**t就接近於1,分母接近於0,則first_unbias比較大;當訓練一段時間後,t比較大,beat1**t接近於0,分母接近於1,那麼first_unbias與first_moment差距較小。使用這種方法使得剛開始訓練是兩個動量有較高的初始值。

最後用一張圖來看下幾種優化器的效果:

reference:

https://www.bilibili.com/video/BV1K7411W7So?p=8

https://www.jianshu.com/p/1d5b7057ea41?from=timeline

https://zhuanlan.zhihu.com/p/32230623

https://www.cnblogs.com/bonelee/p/8392370.html

 

 

 

 

 

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