本文討論的優化問題指的是,給定目標函數f(x),咱們須要找到一組參數x(權重),使得f(x)的值最小。算法
如下內容假設讀者已經瞭解機器學習基本知識,和梯度降低的原理。機器學習
SGD指stochastic gradient descent,即隨機梯度降低。是梯度降低的batch版本。函數
對於訓練數據集,咱們首先將其分紅n個batch,每一個batch包含m個樣本。咱們每次更新都利用一個batch的數據,而非整個訓練集。即:性能
其中,η爲學習率,gt爲x在t時刻的梯度。 學習
這麼作的好處在於:大數據
SGD方法的一個缺點是,其更新方向徹底依賴於當前的batch,於是其更新十分不穩定。解決這一問題的一個簡單的作法即是引入momentum。優化
momentum即動量,它模擬的是物體運動時的慣性,即更新的時候在必定程度上保留以前更新的方向,同時利用當前batch的梯度微調最終的更新方向。這樣一來,能夠在必定程度上增長穩定性,從而學習地更快,而且還有必定擺脫局部最優的能力:spa
其中,ρ 即momentum,表示要在多大程度上保留原來的更新方向,這個值在0-1之間,在訓練開始時,因爲梯度可能會很大,因此初始值通常選爲0.5;當梯度不那麼大時,改成0.9。η 是學習率,即當前batch的梯度多大程度上影響最終更新方向,跟普通的SGD含義相同。ρ 與 η 之和不必定爲1。blog
這是對傳統momentum方法的一項改進,由Ilya Sutskever(2012 unpublished)在Nesterov工做的啓發下提出的。內存
首先,按照原來的更新方向更新一步(棕色線),而後在該位置計算梯度值(紅色線),而後用這個梯度值修正最終的更新方向(綠色線)。上圖中描述了兩步的更新示意圖,其中藍色線是標準momentum更新路徑。
公式描述爲:
Adagrad實際上是對學習率進行了一個約束。即:
此處,對從1到
進行一個遞推造成一個約束項regularizer,
,
用來保證分母非0
特色:
缺點:
Adadelta是對Adagrad的擴展,最初方案依然是對學習率進行自適應約束,可是進行了計算上的簡化。Adagrad會累加以前全部的梯度平方,而Adadelta只累加固定大小的項,而且也不直接存儲這些項,僅僅是近似計算對應的平均值。即:
在此處Adadelta其實仍是依賴於全局學習率的,可是做者作了必定處理,通過近似牛頓迭代法(求根點)以後:
其中,表明求指望。
此時,能夠看出Adadelta已經不用依賴於全局學習率了。
特色:
RMSprop能夠算做Adadelta的一個特例:
當時,
就變爲了求梯度平方和的平均數。
若是再求根的話,就變成了RMS(均方根):
此時,這個RMS就能夠做爲學習率的一個約束:
特色:
Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態調整每一個參數的學習率。Adam的優勢主要在於通過偏置校訂後,每一次迭代學習率都有個肯定範圍,使得參數比較平穩。公式以下:
其中,,
分別是對梯度的一階矩估計和二階矩估計,u和v爲衰減率,u一般爲0.9,v一般爲0.999,能夠看做對指望
,
的估計;
,
是對
,
的校訂,這樣能夠近似爲對指望的無偏估計。能夠看出,直接對梯度的矩估計對內存沒有額外的要求,並且能夠根據梯度進行動態調整,而
對學習率造成一個動態約束,並且有明確的範圍。
特色:
性能比較
損失曲面的輪廓和不一樣優化算法的時間演化(Contours of a loss surface and time evolution of different optimization algorithms)
參考:
[1] Optimization Algorithms for Deep Learning
[2] Adam — latest trends in deep learning optimization
[3] Intro to optimization in deep learning: Momentum, RMSProp and Adam
[4] Gradient Descent based Optimization Algorithms for Deep Learning Models Training