優化算法介紹

優化器總結

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

 

SGD優化算法

此處的SGD指mini-batch gradient descent,關於batch gradient descent, stochastic gradient descent, 以及 mini-batch gradient descent的具體區別就不細說了。現在的SGD一般都指mini-batch gradient descent。

SGD就是每一次迭代計算mini-batch的梯度,然後對參數進行更新,是最常見的優化方法了。即:

g_{t}=\bigtriangledown_{\theta _{t-1}}f\left ( \theta _{t-1} \right )

\bigtriangleup \theta _{t}=-\eta g_{t}

其中,\eta是學習率,g_{t}是梯度 SGD完全依賴於當前batch的梯度,所以\eta可理解爲允許當前batch的梯度多大程度影響參數更新。

缺點

  • 選擇合適的learning rate比較困難 - 對所有的參數更新使用同樣的learning rate。對於稀疏數據或者特徵,有時我們可能想更新快一些對於不經常出現的特徵,對於常出現的特徵更新慢一些,這時候SGD就不太能滿足要求了
  • SGD容易收斂到局部最優,

Momentum

momentum是模擬物理裏動量的概念,積累之前的動量來替代真正的梯度。公式如下:

m_{t}=\mu\ast m_{t-1}+g_{t}

\bigtriangleup \theta _{t}=-\eta m_{t}
 

其中,\mu是動量因子

特點:

  • 下降初期時,使用上一次參數更新,下降方向一致,乘上較大的\mu能夠進行很好的加速
  • 下降中後期時,在局部最小值來回震盪的時候,gradient\rightarrow 0\eta使得更新幅度增大,跳出陷阱
  • 在梯度改變方向的時候,\mu能夠減少更新 總而言之,momentum項能夠在相關方向加速SGD,抑制振盪,從而加快收斂

Adam優化算法

https://www.jianshu.com/p/aebcaf8af76e

Adam更新規則

計算t時間步的梯度:

首先,計算梯度的指數移動平均數,m0 初始化爲0。

類似於Momentum算法,綜合考慮之前時間步的梯度動量。

β1 係數爲指數衰減率,控制權重分配(動量與當前梯度),通常取接近於1的值。

默認爲0.9

下圖簡單展示出時間步1~20時,各個時間步的梯度隨着時間的累積佔比情況。

下圖簡單展示出時間步1~20時,各個時間步的梯度隨着時間的累積佔比情況。

 

其次,計算梯度平方的指數移動平均數,v0初始化爲0。

β2 係數爲指數衰減率,控制之前的梯度平方的影響情況。

類似於RMSProp算法,對梯度平方進行加權均值。

默認爲0.999

第三,由於m0初始化爲0,會導致mt偏向於0,尤其在訓練初期階段。

所以,此處需要對梯度均值mt進行偏差糾正,降低偏差對訓練初期的影響。

 

第四,與m0 類似,因爲v0初始化爲0導致訓練初始階段vt偏向0,對其進行糾正。

第五,更新參數,初始的學習率α乘以梯度均值與梯度方差的平方根之比。

其中默認學習率α=0.001

ε=10^-8,避免除數變爲0。

由表達式可以看出,對更新的步長計算,能夠從梯度均值及梯度平方兩個角度進行自適應地調節,而不是直接由當前梯度決定。

Adam代碼實現

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