前言
(標題不能再中二了)本文僅對一些常見的優化方法進行直觀介紹和簡單的比較,各種優化方法的詳細內容及公式只好去認真啃論文了,在此我就不贅述了。
SGD
此處的SGD指mini-batch gradient descent,關於batch gradient descent, stochastic gradient descent, 以及 mini-batch gradient descent的具體區別就不細說了。現在的SGD一般都指mini-batch gradient descent。
SGD就是每一次迭代計算mini-batch的梯度,然后對參數進行更新,是最常見的優化方法了。即:


其中,是學習率,
是梯度 SGD完全依賴於當前batch的梯度,所以
可理解為允許當前batch的梯度多大程度影響參數更新
缺點:(正因為有這些缺點才讓這么多大神發展出了后續的各種算法)
- 選擇合適的learning rate比較困難 - 對所有的參數更新使用同樣的learning rate。對於稀疏數據或者特征,有時我們可能想更新快一些對於不經常出現的特征,對於常出現的特征更新慢一些,這時候SGD就不太能滿足要求了
- SGD容易收斂到局部最優,並且在某些情況下可能被困在鞍點【原來寫的是“容易困於鞍點”,經查閱論文發現,其實在合適的初始化和step size的情況下,鞍點的影響並沒這么大。感謝@冰橙的指正】
Momentum
momentum是模擬物理里動量的概念,積累之前的動量來替代真正的梯度。公式如下:


其中,是動量因子
特點:
- 下降初期時,使用上一次參數更新,下降方向一致,乘上較大的
能夠進行很好的加速
- 下降中后期時,在局部最小值來回震盪的時候,
,
使得更新幅度增大,跳出陷阱
- 在梯度改變方向的時候,
能夠減少更新 總而言之,momentum項能夠在相關方向加速SGD,抑制振盪,從而加快收斂
Nesterov
nesterov項在梯度更新時做一個校正,避免前進太快,同時提高靈敏度。 將上一節中的公式展開可得:

可以看出,並沒有直接改變當前梯度
,所以Nesterov的改進就是讓之前的動量直接影響當前的動量。即:



所以,加上nesterov項后,梯度在大的跳躍后,進行計算對當前梯度進行校正。如下圖:

momentum首先計算一個梯度(短的藍色向量),然后在加速更新梯度的方向進行一個大的跳躍(長的藍色向量),nesterov項首先在之前加速的梯度方向進行一個大的跳躍(棕色向量),計算梯度然后進行校正(綠色梯向量)
其實,momentum項和nesterov項都是為了使梯度更新更加靈活,對不同情況有針對性。但是,人工設置一些學習率總還是有些生硬,接下來介紹幾種自適應學習率的方法
Adagrad
Adagrad其實是對學習率進行了一個約束。即:


此處,對從1到
進行一個遞推形成一個約束項regularizer,
,
用來保證分母非0
特點:
- 前期
較小的時候, regularizer較大,能夠放大梯度
- 后期
較大的時候,regularizer較小,能夠約束梯度
- 適合處理稀疏梯度
- 由公式可以看出,仍依賴於人工設置一個全局學習率
設置過大的話,會使regularizer過於敏感,對梯度的調節太大
- 中后期,分母上梯度平方的累加將會越來越大,使
,使得訓練提前結束
Adadelta
Adadelta是對Adagrad的擴展,最初方案依然是對學習率進行自適應約束,但是進行了計算上的簡化。 Adagrad會累加之前所有的梯度平方,而Adadelta只累加固定大小的項,並且也不直接存儲這些項,僅僅是近似計算對應的平均值。即:


在此處Adadelta其實還是依賴於全局學習率的,但是作者做了一定處理,經過近似牛頓迭代法之后:


其中,代表求期望。
此時,可以看出Adadelta已經不用依賴於全局學習率了。
特點:
- 訓練初中期,加速效果不錯,很快
- 訓練后期,反復在局部最小值附近抖動
RMSprop
RMSprop可以算作Adadelta的一個特例:
當時,
就變為了求梯度平方和的平均數。
如果再求根的話,就變成了RMS(均方根):

此時,這個RMS就可以作為學習率的一個約束:

特點:
- 其實RMSprop依然依賴於全局學習率
- RMSprop算是Adagrad的一種發展,和Adadelta的變體,效果趨於二者之間
- 適合處理非平穩目標 - 對於RNN效果很好
Adam
Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率。Adam的優點主要在於經過偏置校正后,每一次迭代學習率都有個確定范圍,使得參數比較平穩。公式如下:





其中,,
分別是對梯度的一階矩估計和二階矩估計,可以看作對期望
,
的估計;
,
是對
,
的校正,這樣可以近似為對期望的無偏估計。 可以看出,直接對梯度的矩估計對內存沒有額外的要求,而且可以根據梯度進行動態調整,而
對學習率形成一個動態約束,而且有明確的范圍。
特點:
- 結合了Adagrad善於處理稀疏梯度和RMSprop善於處理非平穩目標的優點
- 對內存需求較小
- 為不同的參數計算不同的自適應學習率
- 也適用於大多非凸優化 - 適用於大數據集和高維空間
Adamax
Adamax是Adam的一種變體,此方法對學習率的上限提供了一個更簡單的范圍。公式上的變化如下:


可以看出,Adamax學習率的邊界范圍更簡單
Nadam
Nadam類似於帶有Nesterov動量項的Adam。公式如下:







可以看出,Nadam對學習率有了更強的約束,同時對梯度的更新也有更直接的影響。一般而言,在想使用帶動量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。
經驗之談
- 對於稀疏數據,盡量使用學習率可自適應的優化方法,不用手動調節,而且最好采用默認值
- SGD通常訓練時間更長,但是在好的初始化和學習率調度方案的情況下,結果更可靠
- 如果在意更快的收斂,並且需要訓練較深較復雜的網絡時,推薦使用學習率自適應的優化方法。
- Adadelta,RMSprop,Adam是比較相近的算法,在相似的情況下表現差不多。
- 在想使用帶動量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果
損失平面等高線
在鞍點處的比較
1、各種優化方法
梯度下降方法為什么能夠達到最優點
sgd:震動能夠跳出局部最小(還有一種模擬退火方法)
batch sgd :速度要慢
monument :
Momentum is a method that helps accelerate SGD in the relevant direction and dampens oscillations
The momentum term increases for dimensions whose gradients point in the same directions and reduces updates for dimensions whose gradients change directions. As a result, we gain faster convergence and reduced oscillation
如果梯度方向相同就會increase,不同就會decrease,加快收斂,同時能夠抑制震盪
adagrad:
It adapts the learning rate to the parameters, performing larger updates for infrequent and smaller updates for frequent parameters. For this reason, it is well-suited for dealing with sparse data
對罕見的參數更新快(學習率大),不罕見的參數更新慢(學習率小),非常適合稀疏數據
One of Adagrad's main benefits is that it eliminates the need to manually tune the learning rate. Most implementations use a default value of 0.01 and leave it at that.
優點是:不需要手工去調整學習率
Adagrad's main weakness is its accumulation of the squared gradients in the denominator: Since every added term is positive, the accumulated sum keeps growing during training. This in turn causes the learning rate to shrink and eventually become infinitesimally small, at which point the algorithm is no longer able to acquire additional knowledge. The following algorithms aim to resolve this flaw.
缺點是:分母上面的梯度均方的累加,導致學習率縮小,變得無限小
adadelta:
Adadelta is an extension of Adagrad that seeks to reduce its aggressive, monotonically decreasing learning rate. Instead of accumulating all past squared gradients, Adadelta restricts the window of accumulated past gradients to some fixed size
限制過去梯度的累加值在一個固定的大小
adam:
既能夠自動調整學習率像adagrad,又結合了monument的優點