深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
前言
(標(biāo)題不能再中二了)本文僅對一些常見的優(yōu)化方法進(jìn)行直觀介紹和簡單的比較,各種優(yōu)化方法的詳細(xì)內(nèi)容及公式只好去認(rèn)真啃論文了,在此我就不贅述了。
SGD
此處的SGD指mini-batch gradient descent,關(guān)于batch gradient descent, stochastic gradient descent, 以及 mini-batch gradient descent的具體區(qū)別就不細(xì)說了。現(xiàn)在的SGD一般都指mini-batch gradient descent。
SGD就是每一次迭代計算mini-batch的梯度,然后對參數(shù)進(jìn)行更新,是最常見的優(yōu)化方法了。即:
其中, η 是學(xué)習(xí)率, gt 是梯度
SGD完全依賴于當(dāng)前batch的梯度,所以 η 可理解為允許當(dāng)前batch的梯度多大程度影響參數(shù)更新
缺點:(正因為有這些缺點才讓這么多大神發(fā)展出了后續(xù)的各種算法)
- 選擇合適的learning rate比較困難
- 對所有的參數(shù)更新使用同樣的learning rate。對于稀疏數(shù)據(jù)或者特征,有時我們可能想更新快一些對于不經(jīng)常出現(xiàn)的特征,對于常出現(xiàn)的特征更新慢一些,這時候SGD就不太能滿足要求了
- SGD容易收斂到局部最優(yōu),在某些情況下可能被困在鞍點【但是在合適的初始化和學(xué)習(xí)率設(shè)置下,鞍點的影響其實沒這么大】
Momentum
momentum是模擬物理里動量的概念,積累之前的動量來替代真正的梯度。公式如下:
Δθt=?η?mt
其中, μ 是動量因子
特點:
- 下降初期時,使用上一次參數(shù)更新,下降方向一致,乘上較大的 μ 能夠進(jìn)行很好的加速
- 下降中后期時,在局部最小值來回震蕩的時候, gradient→0 , μ 使得更新幅度增大,跳出陷阱
- 在梯度改變方向的時候, μ 能夠減少更新
總而言之,momentum項能夠在相關(guān)方向加速SGD,抑制振蕩,從而加快收斂
Nesterov
nesterov項在梯度更新時做一個校正,避免前進(jìn)太快,同時提高靈敏度。
將上一節(jié)中的公式展開可得:
可以看出, mt?1 并沒有直接改變當(dāng)前梯度 gt ,所以Nesterov的改進(jìn)就是讓之前的動量直接影響當(dāng)前的動量。即:
gt=?θt?1f(θt?1?η?μ?mt?1)
mt=μ?mt?1+gt
Δθt=?η?mt
所以,加上nesterov項后,梯度在大的跳躍后,進(jìn)行計算對當(dāng)前梯度進(jìn)行校正。如下圖:
momentum首先計算一個梯度(短的藍(lán)色向量),然后在加速更新梯度的方向進(jìn)行一個大的跳躍(長的藍(lán)色向量),nesterov項首先在之前加速的梯度方向進(jìn)行一個大的跳躍(棕色向量),計算梯度然后進(jìn)行校正(綠色梯向量)
其實,momentum項和nesterov項都是為了使梯度更新更加靈活,對不同情況有針對性。但是,人工設(shè)置一些學(xué)習(xí)率總還是有些生硬,接下來介紹幾種自適應(yīng)學(xué)習(xí)率的方法
Adagrad
Adagrad其實是對學(xué)習(xí)率進(jìn)行了一個約束。即:
Δθt=?ηnt+??????√?gt
此處,對 gt 從 1 到t進(jìn)行一個遞推形成一個約束項regularizer, ?1∑tr=1(gr)2+?√ , ? 用來保證分母非0
特點:
- 前期 gt 較小的時候, regularizer較大,能夠放大梯度
- 后期 gt 較大的時候,regularizer較小,能夠約束梯度
- 適合處理稀疏梯度
缺點:
- 由公式可以看出,仍依賴于人工設(shè)置一個全局學(xué)習(xí)率
- η 設(shè)置過大的話,會使regularizer過于敏感,對梯度的調(diào)節(jié)太大
- 中后期,分母上梯度平方的累加將會越來越大,使 gradient→0 ,使得訓(xùn)練提前結(jié)束
Adadelta
Adadelta是對Adagrad的擴(kuò)展,最初方案依然是對學(xué)習(xí)率進(jìn)行自適應(yīng)約束,但是進(jìn)行了計算上的簡化。
Adagrad會累加之前所有的梯度平方,而Adadelta只累加固定大小的項,并且也不直接存儲這些項,僅僅是近似計算對應(yīng)的平均值。即:
Δθt=?ηnt+??????√?gt
在此處Adadelta其實還是依賴于全局學(xué)習(xí)率的,但是作者做了一定處理,經(jīng)過近似牛頓迭代法之后:
Δxt=?∑t?1r=1Δxr????????√E|g2|t+?????????√
其中, E 代表求期望。
此時,可以看出Adadelta已經(jīng)不用依賴于全局學(xué)習(xí)率了。
特點:
- 訓(xùn)練初中期,加速效果不錯,很快
- 訓(xùn)練后期,反復(fù)在局部最小值附近抖動
RMSprop
RMSprop可以算作Adadelta的一個特例:
當(dāng)ρ=0.5時,
E|g2|t=ρ?E|g2|t?1+(1?ρ)?g2t 就變?yōu)榱饲筇荻绕椒胶偷钠骄鶖?shù)。
如果再求根的話,就變成了RMS(均方根):
RMS|g|t=E|g2|t+?????????√
此時,這個RMS就可以作為學(xué)習(xí)率
η 的一個約束:
Δxt=?ηRMS|g|t?gt
特點:
- 其實RMSprop依然依賴于全局學(xué)習(xí)率
- RMSprop算是Adagrad的一種發(fā)展,和Adadelta的變體,效果趨于二者之間
- 適合處理非平穩(wěn)目標(biāo)
- 對于RNN效果很好
Adam
Adam(Adaptive Moment Estimation)本質(zhì)上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態(tài)調(diào)整每個參數(shù)的學(xué)習(xí)率。Adam的優(yōu)點主要在于經(jīng)過偏置校正后,每一次迭代學(xué)習(xí)率都有個確定范圍,使得參數(shù)比較平穩(wěn)。公式如下:
nt=ν?nt?1+(1?ν)?g2t
mt^=mt1?μt
nt^=nt1?νt
Δθt=?mt^nt^??√+??η
其中, mt , nt 分別是對梯度的一階矩估計和二階矩估計,可以看作對期望 E|gt| , E|g2t| 的估計; mt^ , nt^ 是對 mt , nt 的校正,這樣可以近似為對期望的無偏估計。
可以看出,直接對梯度的矩估計對內(nèi)存沒有額外的要求,而且可以根據(jù)梯度進(jìn)行動態(tài)調(diào)整,而 ?mt^nt^√+? 對學(xué)習(xí)率形成一個動態(tài)約束,而且有明確的范圍。
特點:
- 結(jié)合了Adagrad善于處理稀疏梯度和RMSprop善于處理非平穩(wěn)目標(biāo)的優(yōu)點
- 對內(nèi)存需求較小
- 為不同的參數(shù)計算不同的自適應(yīng)學(xué)習(xí)率
- 也適用于大多非凸優(yōu)化
- 適用于大數(shù)據(jù)集和高維空間
Adamax
Adamax是Adam的一種變體,此方法對學(xué)習(xí)率的上限提供了一個更簡單的范圍。公式上的變化如下:
Δx=?mt^nt+??η
可以看出,Adamax學(xué)習(xí)率的邊界范圍更簡單
Nadam
Nadam類似于帶有Nesterov動量項的Adam。公式如下:
mt=μt?mt?1+(1?μt)?gt
mt^=mt1?Πt+1i=1μi
nt=ν?nt?1+(1?ν)?g2t
nt^=nt1?νt
mtˉ=(1?μt)?gt^+μt+1?mt^
Δθt=?η?mtˉnt^??√+?
可以看出,Nadam對學(xué)習(xí)率有了更強(qiáng)的約束,同時對梯度的更新也有更直接的影響。一般而言,在想使用帶動量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。
經(jīng)驗之談
- 對于稀疏數(shù)據(jù),盡量使用學(xué)習(xí)率可自適應(yīng)的優(yōu)化方法,不用手動調(diào)節(jié),而且最好采用默認(rèn)值
- SGD通常訓(xùn)練時間更長,容易陷入鞍點,但是在好的初始化和學(xué)習(xí)率調(diào)度方案的情況下,結(jié)果更可靠
- 如果在意更快的收斂,并且需要訓(xùn)練較深較復(fù)雜的網(wǎng)絡(luò)時,推薦使用學(xué)習(xí)率自適應(yīng)的優(yōu)化方法。
- Adadelta,RMSprop,Adam是比較相近的算法,在相似的情況下表現(xiàn)差不多。
- 在想使用帶動量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果
最后展示兩張可厲害的圖,一切盡在圖中啊,上面的都沒啥用了… …
損失平面等高線
在鞍點處的比較
引用
[1]Adagrad
[2]RMSprop[Lecture 6e]
[3]Adadelta
[4]Adam
[5]Nadam
[6]On the importance of initialization and momentum in deep learning
[7]Keras 中文文檔
[8]Alec Radford(圖)
[9]An overview of gradient descent optimization algorithms
[10]Gradient Descent Only Converges to Minimizers
[11]Deep Learning:Nature
總結(jié)
以上是生活随笔為你收集整理的深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 语音合成和语音识别资料查询说明
- 下一篇: tensorflow输出的人脸图片经过O