機器學習之優化算法學習總結

優化算法演化歷程

機器學習和深度學習中使用到的優化算法的演化歷程如下:
SGD –> Momentum –> Nesterov –> Adagrad –> Adadelta –> Adam –> Nadam

1  
演化過程 原因
SGD –> Momentum 由於SGD在優化過程中容易產生震盪,爲減小震盪,Momentum在梯度下降過程中引入了動量,使之具有慣性
Momentum –> Nesterov 對梯度項進行矯正,使梯度下降方向由積累的動量和假設走到下一步的梯度兩部分決定的
Nesterov –> Adagrad Adagrad中引入二階動量,使之能夠自適應調節學習率
Adagrad –> Adadelta 由於Adagrad 使用了之前所有梯度的平方,會導致訓練到後面梯度爲0,因此,在Adadelta中只用前面一段時間的下降梯度的配方
Adadelta –> Adam 在梯度更新中,使用了動量,並且能夠自適應調節學習率
Adam –> Nadam 引入了Nesterov 動量項

各優化算法的公式與特點

SGD

公式:

  • θ=θηθJ(θ)

特點:

  • 僅由當前所在的梯度來決定參數如何更新
  • 梯度下降過程中容易出現震盪

Momentum

公式:

  • mt=μmt1+ηθJ(θ)
  • θt=θt1mt

特點:

  • 引入動量,減小SGD在梯度下降過程中的震盪
  • 梯度下降過程中,之前的動量也對當前運動有影響

Nesterov

公式:

  • mt=μmt1+ηθJ(θμmt1)
  • θt=θt1mt

特點:

  • 在Momentum優化算法的基礎上,對當前梯度值進行矯正
  • 矯正方式爲,假設參數往積累的動量方向走了一步時所在位置的梯度作爲當前的梯度值

Adagrad

公式:

  • gt=θJ(θ)
  • nt=nt1+(gt)2
  • θt=θt1ηnt+ϵgt

特點:

  • 適合用於稀疏梯度
  • 前期梯度下降較快,後期梯度下降較慢
  • 具有自適應學習率
  • 訓練後期,由於梯度累計較大,會使訓練提前結束

Adadelta

公式:

  • gt=θJ(θ)
  • nt=vnt1+(1v)(gt)2
  • θt=θt1ηnt+ϵgt

特點:

  • 在Adagrad基礎上,減小提前結束訓練的風險

Adam

公式:

  • mt=μmt1+(1μ)θJ(θ)
  • nt=vnt1+(1v)(gt)2
  • mt^=mt1μt
  • nt^=nt1vt
  • θt=θt1mt^ηnt^+ϵgt

特點:

  • Adam梯度經過偏置校正後,每一次迭代學習率都有一個固定範圍,使得參數比較平穩
  • 結合了Adagrad善於處理稀疏梯度和RMSprop善於處理非平穩目標的優點
  • 爲不同的參數計算不同的自適應學習率
  • 也適用於大多非凸優化問題——適用於大數據集和高維空間

各優化算法的分類

2  
梯度修正 優化算法
沒進入動量,且不具有自適應學習率 BGD、SGD
引入動量 Momentum、Nesterov
自適應學習率 Adagrad、Adadelta、RMSprop
引入動量且自適應學習率 Adam、Adamx、Nadam

優化算法使用總結

  • 在不考慮優化算法的使用細節及其技巧的情況下,一般使用Adam
  • 雖然後面的優化算法都是在SGD上改進而來,但是目前很多paper依舊使用SGD
  • 一般在訓練時,數據都要進行shuffle
  • 幾種優化算法並不一定哪一個絕對好,視模型和數據而定
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章