簡單認(rèn)識(shí)Adam優(yōu)化器

基于隨機(jī)梯度下降(SGD)的優(yōu)化算法在科研和工程的很多領(lǐng)域里都是極其核心的傲诵。很多理論或工程問題都可以轉(zhuǎn)化為對目標(biāo)函數(shù)進(jìn)行最小化的數(shù)學(xué)問題谤牡。

按吳恩達(dá)老師所說的,梯度下降(Gradient Descent)就好比一個(gè)人想從高山上奔跑到山谷最低點(diǎn)跋炕,用最快的方式(steepest)奔向最低的位置(minimum)甘有。

SGD基本公式


動(dòng)量(Momentum)



參考鏈接:https://distill.pub/2017/momentum/

基本的mini-batch SGD優(yōu)化算法在深度學(xué)習(xí)取得很多不錯(cuò)的成績。然而也存在一些問題需解決:

1. 選擇恰當(dāng)?shù)某跏紝W(xué)習(xí)率很困難管怠。

2. 學(xué)習(xí)率調(diào)整策略受限于預(yù)先指定的調(diào)整規(guī)則淆衷。

3. 相同的學(xué)習(xí)率被應(yīng)用于各個(gè)參數(shù)。

4. 高度非凸的誤差函數(shù)的優(yōu)化過程渤弛,如何避免陷入大量的局部次優(yōu)解或鞍點(diǎn)祝拯。


自適應(yīng)優(yōu)化

AdaGrad

針對簡單的SGD及Momentum存在的問題,2011年John Duchi等發(fā)布了AdaGrad優(yōu)化算法(Adaptive Gradient她肯,自適應(yīng)梯度)佳头,它能夠?qū)γ總€(gè)不同的參數(shù)調(diào)整不同的學(xué)習(xí)率,對頻繁變化的參數(shù)以更小的步長進(jìn)行更新辕宏,而稀疏的參數(shù)以更大的步長進(jìn)行更新畜晰。

公式:


gt表示第t時(shí)間步的梯度(向量砾莱,包含各個(gè)參數(shù)對應(yīng)的偏導(dǎo)數(shù)瑞筐,gt,i表示第i個(gè)參數(shù)t時(shí)刻偏導(dǎo)數(shù))

gt2表示第t時(shí)間步的梯度平方(向量,由gt各元素自己進(jìn)行平方運(yùn)算所得腊瑟,即Element-wise)

與SGD的核心區(qū)別在于計(jì)算更新步長時(shí)聚假,增加了分母:梯度平方累積和的平方根。此項(xiàng)能夠累積各個(gè)參數(shù)gt,i的歷史梯度平方闰非,頻繁更新的梯度膘格,則累積的分母項(xiàng)逐漸偏大,那么更新的步長(stepsize)相對就會(huì)變小财松,而稀疏的梯度瘪贱,則導(dǎo)致累積的分母項(xiàng)中對應(yīng)值比較小纱控,那么更新的步長則相對比較大。

AdaGrad能夠自動(dòng)為不同參數(shù)適應(yīng)不同的學(xué)習(xí)率(平方根的分母項(xiàng)相當(dāng)于對學(xué)習(xí)率α進(jìn)進(jìn)行了自動(dòng)調(diào)整菜秦,然后再乘以本次梯度)甜害,大多數(shù)的框架實(shí)現(xiàn)采用默認(rèn)學(xué)習(xí)率α=0.01即可完成比較好的收斂。

優(yōu)勢:在數(shù)據(jù)分布稀疏的場景球昨,能更好利用稀疏梯度的信息尔店,比標(biāo)準(zhǔn)的SGD算法更有效地收斂。

缺點(diǎn):主要缺陷來自分母項(xiàng)的對梯度平方不斷累積主慰,隨之時(shí)間步地增加嚣州,分母項(xiàng)越來越大,最終導(dǎo)致學(xué)習(xí)率收縮到太小無法進(jìn)行有效更新共螺。


RMSProp

RMSProp是Geoffrey Hinton教授在教案中提到的算法该肴,結(jié)合梯度平方的指數(shù)移動(dòng)平均數(shù)來調(diào)節(jié)學(xué)習(xí)率的變化。能夠在不穩(wěn)定(Non-Stationary)的目標(biāo)函數(shù)情況下進(jìn)行很好地收斂璃谨。

Hinton教授講述RMSProp算法的材料:

http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf

計(jì)算t時(shí)間步的梯度:


計(jì)算梯度平方的指數(shù)移動(dòng)平均數(shù)(Exponential Moving Average)沙庐,γ是遺忘因子(或稱為指數(shù)衰減率),依據(jù)經(jīng)驗(yàn)佳吞,默認(rèn)設(shè)置為0.9拱雏。


梯度更新時(shí)候,與AdaGrad類似底扳,只是更新的梯度平方的期望(指數(shù)移動(dòng)均值)铸抑,其中ε=10^-8,避免除數(shù)為0衷模。默認(rèn)學(xué)習(xí)率α=0.001鹊汛。



優(yōu)勢:能夠克服AdaGrad梯度急劇減小的問題,在很多應(yīng)用中都展示出優(yōu)秀的學(xué)習(xí)率自適應(yīng)能力阱冶。尤其在不穩(wěn)定(Non-Stationary)的目標(biāo)函數(shù)下刁憋,比基本的SGD、Momentum木蹬、AdaGrad表現(xiàn)更良好至耻。



Adam優(yōu)化器

2014年12月,Kingma和Lei Ba兩位學(xué)者提出了Adam優(yōu)化器镊叁,結(jié)合AdaGrad和RMSProp兩種優(yōu)化算法的優(yōu)點(diǎn)尘颓。對梯度的一階矩估計(jì)(First Moment Estimation,即梯度的均值)和二階矩估計(jì)(Second

Moment Estimation晦譬,即梯度的未中心化的方差)進(jìn)行綜合考慮疤苹,計(jì)算出更新步長。

主要包含以下幾個(gè)顯著的優(yōu)點(diǎn):

1. 實(shí)現(xiàn)簡單敛腌,計(jì)算高效卧土,對內(nèi)存需求少

2. 參數(shù)的更新不受梯度的伸縮變換影響

3. 超參數(shù)具有很好的解釋性惫皱,且通常無需調(diào)整或僅需很少的微調(diào)

4. 更新的步長能夠被限制在大致的范圍內(nèi)(初始學(xué)習(xí)率)

5. 能自然地實(shí)現(xiàn)步長退火過程(自動(dòng)調(diào)整學(xué)習(xí)率)

6. 很適合應(yīng)用于大規(guī)模的數(shù)據(jù)及參數(shù)的場景

7. 適用于不穩(wěn)定目標(biāo)函數(shù)

8. 適用于梯度稀疏或梯度存在很大噪聲的問題


綜合Adam在很多情況下算作默認(rèn)工作性能比較優(yōu)秀的優(yōu)化器。


Adam實(shí)現(xiàn)原理

算法偽代碼:


Adam更新規(guī)則

計(jì)算t時(shí)間步的梯度:


首先尤莺,計(jì)算梯度的指數(shù)移動(dòng)平均數(shù)逸吵,m0 初始化為0。

類似于Momentum算法缝裁,綜合考慮之前時(shí)間步的梯度動(dòng)量扫皱。

β1 系數(shù)為指數(shù)衰減率,控制權(quán)重分配(動(dòng)量與當(dāng)前梯度)捷绑,通常取接近于1的值韩脑。

默認(rèn)為0.9


下圖簡單展示出時(shí)間步1~20時(shí),各個(gè)時(shí)間步的梯度隨著時(shí)間的累積占比情況粹污。


其次段多,計(jì)算梯度平方的指數(shù)移動(dòng)平均數(shù),v0初始化為0壮吩。

β2 系數(shù)為指數(shù)衰減率进苍,控制之前的梯度平方的影響情況。

類似于RMSProp算法鸭叙,對梯度平方進(jìn)行加權(quán)均值觉啊。

默認(rèn)為0.999



第三,由于m0初始化為0沈贝,會(huì)導(dǎo)致mt偏向于0杠人,尤其在訓(xùn)練初期階段。

所以宋下,此處需要對梯度均值mt進(jìn)行偏差糾正嗡善,降低偏差對訓(xùn)練初期的影響。



第四学歧,與m0 類似罩引,因?yàn)関0初始化為0導(dǎo)致訓(xùn)練初始階段vt偏向0,對其進(jìn)行糾正枝笨。


第五袁铐,更新參數(shù),初始的學(xué)習(xí)率α乘以梯度均值與梯度方差的平方根之比伺帘。

其中默認(rèn)學(xué)習(xí)率α=0.001

ε=10^-8昭躺,避免除數(shù)變?yōu)?忌锯。

由表達(dá)式可以看出伪嫁,對更新的步長計(jì)算,能夠從梯度均值及梯度平方兩個(gè)角度進(jìn)行自適應(yīng)地調(diào)節(jié)偶垮,而不是直接由當(dāng)前梯度決定张咳。



Adam代碼實(shí)現(xiàn)

算法思路很清晰帝洪,實(shí)現(xiàn)比較直觀:


代碼地址:https://github.com/dream-catcher/learning_blogs/blob/master/Adam_Optimizer/adam_optimizer.py

Adam可視化


notebook試驗(yàn)地址:https://github.com/dream-catcher/learning_blogs/tree/master/Adam_Optimizer

Adam缺陷及改進(jìn)

雖然Adam算法目前成為主流的優(yōu)化算法,不過在很多領(lǐng)域里(如計(jì)算機(jī)視覺的對象識(shí)別脚猾、NLP中的機(jī)器翻譯)的最佳成果仍然是使用帶動(dòng)量(Momentum)的SGD來獲取到的葱峡。Wilson?等人的論文結(jié)果顯示,在對象識(shí)別龙助、字符級別建模砰奕、語法成分分析等方面,自適應(yīng)學(xué)習(xí)率方法(包括AdaGrad提鸟、AdaDelta军援、RMSProp、Adam等)通常比Momentum算法效果更差称勋。

針對Adam等自適應(yīng)學(xué)習(xí)率方法的問題胸哥,主要兩個(gè)方面的改進(jìn):

1、解耦權(quán)重衰減

在每次更新梯度時(shí)赡鲜,同時(shí)對其進(jìn)行衰減(衰減系數(shù)w略小于1)空厌,避免產(chǎn)生過大的參數(shù)。


在Adam優(yōu)化過程中银酬,增加參數(shù)權(quán)重衰減項(xiàng)嘲更。解耦學(xué)習(xí)率和權(quán)重衰減兩個(gè)超參數(shù),能單獨(dú)調(diào)試優(yōu)化兩個(gè)參數(shù)揩瞪。


參考鏈接:http://ruder.io/deep-learning-optimization-2017/index.html

2哮内、修正指數(shù)移動(dòng)均值

最近的幾篇論文顯示較低的[if !msEquation][endif](如0.99或0.9)能夠獲得比默認(rèn)值0.999更佳的結(jié)果,暗示出指數(shù)移動(dòng)均值本身可能也包含了缺陷壮韭。例如在訓(xùn)練過程中北发,某個(gè)mini-batch出現(xiàn)比較大信息量的梯度信息,但由于這類mini-batch出現(xiàn)頻次很少喷屋,而指數(shù)移動(dòng)均值會(huì)減弱他們的作用(因?yàn)楫?dāng)前梯度權(quán)重及當(dāng)前梯度的平方的權(quán)重琳拨,權(quán)重都比較小)屯曹,導(dǎo)致在這種場景下收斂比較差狱庇。


https://openreview.net/pdf?id=ryQu7f-RZ

論文作者提出Adam的變形算法AMSGrad。

AMSGrad?使用最大的來更新梯度恶耽,而不像Adam算法中采用歷史的指數(shù)移動(dòng)均值來實(shí)現(xiàn)密任。作者在小批量數(shù)據(jù)集及CIFAR-10上觀察到比Adam更佳的效果。


參考資料

http://ruder.io/optimizing-gradient-descent/

http://ruder.io/deep-learning-optimization-2017/index.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末偷俭,一起剝皮案震驚了整個(gè)濱河市浪讳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涌萤,老刑警劉巖淹遵,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件口猜,死亡現(xiàn)場離奇詭異,居然都是意外死亡透揣,警方通過查閱死者的電腦和手機(jī)济炎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辐真,“玉大人须尚,你說我怎么就攤上這事∈淘郏” “怎么了恨闪?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長放坏。 經(jīng)常有香客問我咙咽,道長,這世上最難降的妖魔是什么淤年? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任钧敞,我火速辦了婚禮,結(jié)果婚禮上麸粮,老公的妹妹穿的比我還像新娘溉苛。我一直安慰自己,他們只是感情好弄诲,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布愚战。 她就那樣靜靜地躺著,像睡著了一般齐遵。 火紅的嫁衣襯著肌膚如雪寂玲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天梗摇,我揣著相機(jī)與錄音拓哟,去河邊找鬼。 笑死伶授,一個(gè)胖子當(dāng)著我的面吹牛断序,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播糜烹,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼违诗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疮蹦?” 一聲冷哼從身側(cè)響起诸迟,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亮蒋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妆毕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年慎玖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笛粘。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趁怔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出薪前,到底是詐尸還是另有隱情润努,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布示括,位于F島的核電站铺浇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏垛膝。R本人自食惡果不足惜鳍侣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吼拥。 院中可真熱鬧倚聚,春花似錦、人聲如沸凿可。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枯跑。三九已至惨驶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敛助,已是汗流浹背敞咧。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辜腺,地道東北人休建。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像评疗,于是被迫代替她去往敵國和親测砂。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容