日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

优化器(AdaGrad,AdaDelta,RmsProp,Adam,Nadam,Nesterovs,Sgd,momentum)

發(fā)布時(shí)間:2024/9/27 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优化器(AdaGrad,AdaDelta,RmsProp,Adam,Nadam,Nesterovs,Sgd,momentum) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下來自:
https://my.oschina.net/u/2935389/blog/2967242
https://mp.weixin.qq.com/s/NmSVXezxsQOZzK8pne3pCw

另外的一篇關(guān)于優(yōu)化器的文章是(pytorch的十個(gè)優(yōu)化器):
https://blog.csdn.net/tototuzuoquan/article/details/113779970

1.5.1.1.AdaGrad(自適應(yīng)學(xué)習(xí)率算法)
1.5.1.2.AdaDelta
1.5.1.3.RmsProp
1.5.1.4.Adam
1.5.1.5.AdaMax
1.5.1.6.Nadam
1.5.1.7.AMSGrad
1.5.1.8.Nesterovs(動量的隨機(jī)梯度下降法)
1.5.1.9.Sgd
1.5.1.10.momentum
1.5.1.11.經(jīng)驗(yàn)之談
1.5.1.12.引用

1.5.1.優(yōu)化器

以下來自:
https://my.oschina.net/u/2935389/blog/2967242
https://mp.weixin.qq.com/s/NmSVXezxsQOZzK8pne3pCw

1.5.1.1.AdaGrad(自適應(yīng)學(xué)習(xí)率算法)

Adagrad其實(shí)是對學(xué)習(xí)率進(jìn)行了一個(gè)約束。即:

再如https://mp.weixin.qq.com/s/NmSVXezxsQOZzK8pne3pCw中所述
在之前的算法當(dāng)中,目標(biāo)函數(shù)自變量的每一個(gè)元素在相同時(shí)刻都使用同一個(gè)學(xué)習(xí)率來自我迭代,但是這顯然是一個(gè)不合理的假設(shè),因?yàn)橛械姆较蚩赡芸煊械目赡芫捅容^慢,我們應(yīng)該個(gè)性化差異化的對待每一個(gè)變量。AdaGrad算法對每個(gè)參數(shù)都有一個(gè)縮放因子,這個(gè)縮放因子反比與歷史上的梯度平方值總和的平方根。如果一個(gè)變量的損失梯度較大,那么它的下降速度也比較大,如果較小,下降速度也相應(yīng)減小。具體算法如下:

AdaGrad算法有一個(gè)缺點(diǎn),由于它的速率是一直下降的(分母的值一直在增加),前期下降快,后期下降慢,如果前期就沒有找到一個(gè)比較好的解,那么他在后期速度非常慢,可能很難找到一個(gè)比較好的解。

1.5.1.2.AdaDelta

Adadelta是對Adagrad的擴(kuò)展,最初方案依然是對學(xué)習(xí)率進(jìn)行自適應(yīng)約束,但是進(jìn)行了計(jì)算上的簡化。 Adagrad會累加之前所有的梯度平方,而Adadelta只累加固定大小的項(xiàng),并且也不直接存儲這些項(xiàng),僅僅是近似計(jì)算對應(yīng)的平均值。即:

在此處Adadelta其實(shí)還是依賴于全局學(xué)習(xí)率的,但是作者做了一定處理,經(jīng)過近似牛頓迭代法之后:

其中,E代表求期望。
此時(shí),可以看出Adadelta已經(jīng)不用依賴于全局學(xué)習(xí)率了。

特點(diǎn):
?訓(xùn)練初中期,加速效果不錯(cuò),很快。
?訓(xùn)練后期,反復(fù)在局部最小值附近抖動。

再如https://mp.weixin.qq.com/s/NmSVXezxsQOZzK8pne3pCw所述:
該算法不需要設(shè)定學(xué)習(xí)率了,因?yàn)樗呀?jīng)不會影響到更新了,這也是該算法的一大優(yōu)點(diǎn)。該算法在訓(xùn)練前中期速度都比較快,但是在后期會在局部最小值附近波動。

這個(gè)算法的基本思想是希望通過一階的優(yōu)化算法去近似二階的優(yōu)化算法。在1988年LeCun等人曾經(jīng)提出一種用矩陣對角線元素來近似逆矩陣。如果學(xué)過數(shù)值分析的同學(xué)應(yīng)該知道,牛頓法用Hessian矩陣替代人工設(shè)置的學(xué)習(xí)率,在梯度下降的時(shí)候,可以完美的找出下降方向,不會陷入局部最小值當(dāng)中,是理想的方法,但是Hessian矩陣的逆在數(shù)據(jù)很大的情況下根本沒辦法求。

LeCun等人在2012年又提出了一個(gè)更為精確的近似:

這里的E[g_t-w:t]指的是從當(dāng)前t開始的前w個(gè)梯度狀態(tài)的期望值,E[g_t^2-w:t]指的是從當(dāng)前t開始的前w個(gè)梯度狀態(tài)的平方的期望值。這里如果求期望的話,非常的麻煩,所以采取了移動平均法來計(jì)算。這里作者在論文中也給出了近似的證明:

這里是當(dāng)f為指數(shù)型函數(shù),最后一個(gè)近似成立。
對于牛頓法:

由上式可得:

其中:

這里可以用局部的加權(quán)指數(shù)平滑來替代,即:

這里的RMS表示均方:

可以得到:

1.5.1.3.RmsProp

特點(diǎn):
?其實(shí)RMSprop依然依賴于全局學(xué)習(xí)率。
?RMSprop算是Adagrad的一種發(fā)展,和Adadelta的變體,效果趨于二者之間。
?適合處理非平穩(wěn)目標(biāo)——對于RNN效果很好。

再如https://mp.weixin.qq.com/s/NmSVXezxsQOZzK8pne3pCw中所說:
RMSProp算法是hinton對AdaGrad算法改進(jìn),這個(gè)算法據(jù)說只是hinton在課堂上面提出來的,沒有發(fā)表相關(guān)論文。這個(gè)改動其實(shí)也很簡單,將梯度累計(jì)改為移動加權(quán)平均,所以也沒有什么神奇之處,思路還是比較簡單。

當(dāng)然這里也可以結(jié)合Nesterov動量得到結(jié)合Nesterov動量的RMSProp算法,具體如下:

1.5.1.4.Adam

Adam(Adaptive Moment Estimation)本質(zhì)上是帶有動量項(xiàng)的RMSprop,它利用梯度的一階矩估計(jì)和二階矩估計(jì)動態(tài)調(diào)整每個(gè)參數(shù)的學(xué)習(xí)率。Adam的優(yōu)點(diǎn)主要在于經(jīng)過偏置校正后,每一次迭代學(xué)習(xí)率都有個(gè)確定范圍,使得參數(shù)比較平穩(wěn)。公式如下:

特點(diǎn):
?結(jié)合了Adagrad善于處理稀疏梯度和RMSprop善于處理非平穩(wěn)目標(biāo)的優(yōu)點(diǎn)。
?對內(nèi)存需求較小
?為不同的參數(shù)計(jì)算不同的自適應(yīng)學(xué)習(xí)率。
?也適用于大多數(shù)非凸優(yōu)化–適用于大數(shù)據(jù)集和高維空間。

正如https://mp.weixin.qq.com/s/NmSVXezxsQOZzK8pne3pCw所示:

Adam是一個(gè)組合了動量法和RMSProp的優(yōu)化算法,在該算法當(dāng)中,動量被直接并入了梯度的一階矩(指數(shù)加權(quán))的估計(jì),動量將用于縮放后的梯度,其次Adam包含了偏置修正,修正了從零點(diǎn)初始化的一階矩和二階矩的估計(jì)。第一個(gè)超參數(shù)ρ_1負(fù)責(zé)更新動量項(xiàng),第二個(gè)超參數(shù)ρ_2負(fù)責(zé)更新RMSProp。

1.5.1.5.AdaMax

Adamax是Adam的一種變體,此方法對學(xué)習(xí)率的上限提供了一個(gè)更簡單的范圍。公式上的變化如下:

可以看出,Adamax學(xué)習(xí)率的邊界范圍更簡單。

1.5.1.6.Nadam

Nadam類似于帶有Nesterov動量項(xiàng)的Adam。公式如下:

可以看出,Nadam對學(xué)習(xí)率有了更強(qiáng)的約束,同時(shí)對梯度的更新也有更直接的影響。一般而言,在想使用帶動量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。

1.5.1.7.AMSGrad

這是ICML2018年提出來的一個(gè)Adam的變體,這篇paper在盲評當(dāng)中獲得極高的分?jǐn)?shù),最近好像被接受為最佳論文。這篇論文提出了一個(gè)通用的邊學(xué)習(xí)率算法框AdaGrad, RMSProp ,Adadelta,Adam等都可以看作是該框架的一種特例。通用的框架如下:

選擇兩個(gè)不同的函數(shù),可以得到不一樣的方法,從AdaGrad是兩個(gè)函數(shù)可以看做分別是:

對于Adam而言,函數(shù)的選擇是基于指數(shù)平滑法的:

對應(yīng)的更新:

作者在論文中證明了Adam在應(yīng)對一個(gè)簡單的一維凸函數(shù)的優(yōu)化問題時(shí),都不能得到一個(gè)比較好的結(jié)果。作者去分析了,發(fā)現(xiàn)主要原因在于:

因?yàn)檫@一個(gè)是有可能為負(fù)的,當(dāng)其為負(fù)的時(shí)候,就違背了Adam論文中的Γ_(t+1)半正定假設(shè),因此作者主要就是去改進(jìn)它,令其始終半正定。假設(shè),因此作者主要就是去改進(jìn)它,令其始終半正定。作者就想,那么v_(t+1)始終取上一個(gè)時(shí)刻的和當(dāng)前估計(jì)的最大值就好了這樣就可以了。

對于不帶修正的AMSGRAD算法可以簡單的寫成如下:

1.5.1.8.Nesterovs(動量的隨機(jī)梯度下降法)

這個(gè)是受到Nesterov動量的影響,Sutskever等人于2013年提出來的,具體算法過程如下:

這里就是在標(biāo)準(zhǔn)動量的基礎(chǔ)之上,先更新一個(gè)臨時(shí)的位置,然后計(jì)算該位置上的梯度,再用標(biāo)準(zhǔn)動量法進(jìn)行估計(jì),也就是在標(biāo)準(zhǔn)的動量法當(dāng)中加入了一個(gè)校正因子。不過這種方法在凸的批量下降中能夠加快收斂速度,但是在隨機(jī)梯度當(dāng)中效果并不明顯。

1.5.1.9.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就是每一次迭代計(jì)算mini-batch的梯度,然后對參數(shù)進(jìn)行更新,是最常見的優(yōu)化方法了。即:

缺點(diǎn):
?選擇合適的learning rate比較困難 - 對所有的參數(shù)更新使用同樣的learning rate。對于稀疏數(shù)據(jù)或者特征,有時(shí)我們可能想更新快一些對于不經(jīng)常出現(xiàn)的特征,對于常出現(xiàn)的特征更新慢一些,這時(shí)候SGD就不太能滿足要求了。
?SGD容易收斂到局部最優(yōu),并且在某些情況下可能被困在鞍點(diǎn)【原來寫的是“容易困于鞍點(diǎn)”,經(jīng)查閱論文發(fā)現(xiàn),其實(shí)在合適的初始化和step size的情況下,鞍點(diǎn)的影響并沒這么大。感謝@冰橙的指正】

再如https://mp.weixin.qq.com/s/NmSVXezxsQOZzK8pne3pCw中介紹:
SGD:
首先介紹隨機(jī)梯度下降法(SGD),隨機(jī)梯度下降法是梯度下降法的一個(gè)特例,梯度下降法是沿著整個(gè)樣本的梯度下降,但是由于在深度學(xué)習(xí)中整個(gè)樣本太大了,比如ImageNet中有上百萬張圖片,這樣計(jì)算效率太低。對于批量大小和對梯度估計(jì)的準(zhǔn)確性的影響,有這樣一個(gè)規(guī)律,批量中的數(shù)目越大,對于整個(gè)梯度估計(jì)得越準(zhǔn)確,但是并不是呈線性上升的。小批量雖然比較慢,但是能夠提供正則化的效果。

學(xué)習(xí)率通常設(shè)定為前期較快,后期較慢,為了達(dá)到這個(gè)效果,也有一些設(shè)定學(xué)習(xí)率的方法,比如:每隔一定步數(shù),設(shè)定一個(gè)衰減,指數(shù)衰減,或者每步衰減為原來的幾分之一等。

帶有動量的SGD
在介紹帶動量的SGD之前,首先介紹一下加權(quán)指數(shù)平滑,這個(gè)東西非常簡單,但是在后續(xù)很多優(yōu)化算法里面基本都會用到它。雖然隨機(jī)梯度下降法很有效,但是為了加速它逃離鞍點(diǎn),可以利用歷史信息,其實(shí)也就是指數(shù)加權(quán)平均法。只是加權(quán)平均法就是如何結(jié)合歷史信息和當(dāng)前信息來優(yōu)化。指數(shù)加權(quán)平均法具體公式如下:

如果把這個(gè)進(jìn)行拆開,就會發(fā)現(xiàn)它本質(zhì)是一個(gè)加權(quán)的平方和,比如這里如果t=5,β=0.1:

這里需要注意的是當(dāng)?shù)谝粋€(gè)數(shù)的時(shí)候沒有歷史信息,所以需要引入偏差修正,也就是除以1-β^t ,隨著t的增大,該項(xiàng)會趨于1,所以到了后期基本不會有什么影響。
對于動量的隨機(jī)梯度下降法,其實(shí)就是帶有指數(shù)加權(quán)平均的隨機(jī)梯度下降法。

1.5.1.10.momentum

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

1.5.1.11.經(jīng)驗(yàn)之談

?對于稀疏數(shù)據(jù),盡量使用學(xué)習(xí)率可自適應(yīng)的優(yōu)化方法,不用手動調(diào)節(jié),而且最好采用默認(rèn)值
?SGD通常訓(xùn)練時(shí)間更長,但是在好的初始化和學(xué)習(xí)率調(diào)度方案的情況下,結(jié)果更可靠
?如果在意更快的收斂,并且需要訓(xùn)練較深較復(fù)雜的網(wǎng)絡(luò)時(shí),推薦使用學(xué)習(xí)率自適應(yīng)的優(yōu)化方法。
?Adadelta,RMSprop,Adam是比較相近的算法,在相似的情況下表現(xiàn)差不多。
?在想使用帶動量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果

損失平面等高線

在鞍點(diǎn)處的比較

1.5.1.12.引用

[1] Adagrad (http://link.zhihu.com/?target=http%3A//www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf)
[2] RMSprop [Lecture 6e] (http://link.zhihu.com/?target=http%3A//www.cs.toronto.edu/%7Etijmen/csc321/lecture_notes.shtml)
[3] Adadelta (http://link.zhihu.com/?target=http%3A//arxiv.org/abs/1212.5701)
[4] Adam (http://link.zhihu.com/?target=http%3A//arxiv.org/abs/1412.6980v8)
[5] Nadam (http://link.zhihu.com/?target=http%3A//cs229.stanford.edu/proj2015/054_report.pdf)
[6] On the importance of initialization and momentum in deep learning (http://link.zhihu.com/?target=http%3A//www.cs.toronto.edu/%7Efritz/absps/momentum.pdf)
[7] Keras中文文檔 (http://link.zhihu.com/?target=http%3A//keras-cn.readthedocs.io/en/latest/)
[8] Alec Radford(圖) (http://link.zhihu.com/?target=https%3A//twitter.com/alecrad)
[9] An overview of gradient descent optimization algorithms (http://link.zhihu.com/?target=http%3A//sebastianruder.com/optimizing-gradient-descent/)
[10] Gradient Descent Only Converges to Minimizers (http://link.zhihu.com/?target=http%3A//www.jmlr.org/proceedings/papers/v49/lee16.pdf)
[11] Deep Learning:Nature (http://link.zhihu.com/?target=http%3A//www.nature.com/nature/journal/v521/n7553/abs/nature14539.html)

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的优化器(AdaGrad,AdaDelta,RmsProp,Adam,Nadam,Nesterovs,Sgd,momentum)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。