深度學(xué)習(xí)優(yōu)化器總結(jié)

Batch gradient descent

每次更新我們需要計(jì)算整個(gè)數(shù)據(jù)集的梯度,因此使用批量梯度下降進(jìn)行優(yōu)化時(shí)禾乘,計(jì)算速度很慢澎埠,而且對于不適合內(nèi)存計(jì)算的數(shù)據(jù)將會(huì)非常棘手。批量梯度下降算法不允許我們實(shí)時(shí)更新模型始藕。

但是批量梯度下降算法能確保收斂到凸平面的全局最優(yōu)和非凸平面的局部最優(yōu)蒲稳。

SGD(Stochastic gradient descent)

隨機(jī)梯度下降算法參數(shù)更新針對每一個(gè)樣本集x(i) 和y(i) 。批量梯度下降算法在大數(shù)據(jù)量時(shí)會(huì)產(chǎn)生大量的冗余計(jì)算伍派,比如:每次針對相似樣本都會(huì)重新計(jì)算江耀。這種情況時(shí),SGD算法每次則只更新一次诉植。因此SGD算法通過更快祥国,并且適合online。

但是SGD以高方差進(jìn)行快速更新晾腔,這會(huì)導(dǎo)致目標(biāo)函數(shù)出現(xiàn)嚴(yán)重抖動(dòng)的情況舌稀。一方面,正是因?yàn)橛?jì)算的抖動(dòng)可以讓梯度計(jì)算跳出局部最優(yōu)灼擂,最終到達(dá)一個(gè)更好的最優(yōu)點(diǎn)壁查;另一方面,SGD算法也會(huì)因此產(chǎn)生過調(diào)缤至。

Min-batch gradient descent

該算法有兩個(gè)好處潮罪,1):減少了參數(shù)更新的變化,這可以帶來更加穩(wěn)定的收斂领斥。2:可以充分利用矩陣優(yōu)化漏麦,最終計(jì)算更加高效兽赁。但是Min-batch梯度下降不保證好的收斂性。

Batch gradient descent、SGD缩搅、min-batch gradient descent算法都需要預(yù)先設(shè)置學(xué)習(xí)率逮光,并且整個(gè)模型計(jì)算過程中都采用相同的學(xué)習(xí)率進(jìn)行計(jì)算盖呼。這將會(huì)帶來一些問題瓣颅,比如

1):選擇一個(gè)合適的學(xué)習(xí)率是非常困難的事情。學(xué)習(xí)率較小唬涧,收斂速度將會(huì)非常慢疫赎;而學(xué)習(xí)率較大時(shí),收斂過程將會(huì)變得非常抖動(dòng)碎节,而且有可能不能收斂到最優(yōu)捧搞。

2):預(yù)先制定學(xué)習(xí)率變化規(guī)則。比如,計(jì)算30輪之后胎撇,學(xué)習(xí)率減半介粘。但是這種方式需要預(yù)先定義學(xué)習(xí)率變化的規(guī)則,而規(guī)則的準(zhǔn)確率在訓(xùn)練過程中并不能保證晚树。

3):上述三種算法針對所有數(shù)據(jù)采用相同的學(xué)習(xí)速率姻采,但是當(dāng)我們的數(shù)據(jù)非常稀疏的時(shí)候,我們可能不希望所有數(shù)據(jù)都以相同的方式進(jìn)行梯度更新爵憎,而是對這種極少的特征進(jìn)行一次大的更新慨亲。

4):高度非凸函數(shù)普遍出現(xiàn)在神經(jīng)網(wǎng)絡(luò)中,在優(yōu)化這類函數(shù)時(shí)纲堵,另一個(gè)關(guān)鍵的挑戰(zhàn)是使函數(shù)避免陷入無數(shù)次優(yōu)的局部最小值巡雨。

Momentum

動(dòng)量可以加速SGD算法的收斂速度,并且降低SGD算法收斂時(shí)的震蕩席函。

通過添加一個(gè)衰減因子到歷史更新向量,并加上當(dāng)前的更新向量冈涧。當(dāng)梯度保持相同方向時(shí)茂附,動(dòng)量因子加速參數(shù)更新;而梯度方向改變時(shí)督弓,動(dòng)量因子能降低梯度的更新速度营曼。

NAG(Nesterov accelerated gradient)

滾雪球游戲中,我們希望有一個(gè)智能的雪球愚隧,它能夠預(yù)知運(yùn)動(dòng)的方向蒂阱,以至于當(dāng)它再次遇到斜坡的時(shí)候會(huì)減慢速度。我們可以通過計(jì)算來漸進(jìn)估計(jì)下一個(gè)位置的參數(shù)(梯度并不是完全更新)狂塘,即為

Adagrad

Adagrad優(yōu)化算法是一種自適應(yīng)優(yōu)化算法录煤,針對高頻特征更新步長較小,而低頻特征更新較大荞胡。因此該算法適合應(yīng)用在特征稀疏的場景妈踊。

先前的算法對每一次參數(shù)更新都是采用同一個(gè)學(xué)習(xí)率,而adagrad算法每一步采用不同的學(xué)習(xí)率進(jìn)行更新泪漂。我們計(jì)算梯度的公式如下:

SGD算法進(jìn)行參數(shù)更新的公式為:

Adagrad算法在每一步的計(jì)算的時(shí)候廊营,根據(jù)歷史梯度對學(xué)習(xí)率進(jìn)行修改

這里G是一個(gè)對角矩陣,對角線元素是截止當(dāng)前時(shí)刻的歷史梯度的平方和萝勤,eta是一個(gè)平方項(xiàng)露筒。如果不執(zhí)行均方根操作,算法的性能將會(huì)變得很差敌卓。

G包含了針對所有歷史梯度的平方和慎式,因此我們可以用矩陣元素乘的形式來表達(dá)上式:

Adagrad算法的主要優(yōu)點(diǎn)是它避免了手動(dòng)調(diào)整學(xué)習(xí)率的麻煩,大部分的實(shí)現(xiàn)都采用默認(rèn)值0.01。

Adagrad算法主要的缺點(diǎn)在于瞬捕,其分母梯度平方的累加和鞍历。因?yàn)槊看渭尤氲亩际且粋€(gè)正數(shù),隨著訓(xùn)練的進(jìn)行肪虎,學(xué)習(xí)率將會(huì)變得無限小劣砍,此時(shí)算法將不能進(jìn)行參數(shù)的迭代更新。

Adadelta

Adadelta算法是adagrad算法的改進(jìn)版扇救,它主要解決了adagrad算法單調(diào)遞減學(xué)習(xí)率的問題刑枝。通過約束歷史梯度累加來替代累加所有歷史梯度平方。這里通過在歷史梯度上添加衰減因子迅腔,并通過迭代的方式來對當(dāng)前的梯度進(jìn)行計(jì)算装畅,最終距離較遠(yuǎn)的梯度對當(dāng)前的影響較小,而距離當(dāng)前時(shí)刻較近的梯度對當(dāng)前梯度的計(jì)算影響較大沧烈。

通常掠兄,我們設(shè)置lambda參數(shù)為0.9。為了清楚的表達(dá)锌雀,這里我們再次列出SGD算法的計(jì)算公式:

而adagrad算法的計(jì)算公式為:

這里我們簡單的替換對角矩陣G為E(帶衰減的歷史梯度累加)

上式分母正好是均方誤差根(RMS)蚂夕,這里我們用簡寫來表達(dá):

作者提到參數(shù)更新應(yīng)該有相同的假設(shè),因此我們定義另一個(gè)指數(shù)衰減平均腋逆,這里采用的是參數(shù)更新的平方

因?yàn)閠時(shí)刻婿牍,RMS[]項(xiàng)未知,因此我們采用先前的參數(shù)RMS對當(dāng)前時(shí)刻進(jìn)行漸進(jìn)表示惩歉。最終我們有如下表達(dá)式:

采用Adadelta算法作為模型優(yōu)化器算法時(shí)等脂,我們已經(jīng)不需要設(shè)置默認(rèn)學(xué)習(xí)率。

RMSprop

RMSPprop算法和adadelta算法都是adagrad算法的優(yōu)化版撑蚌,用于解決adagrad算法學(xué)習(xí)率消失的問題上遥,從最終的計(jì)算公式來看,RMSProp算法和Adadelta算法有相似的計(jì)算表達(dá)式

Adam

Adam算法是另一種自適應(yīng)參數(shù)更新算法锨并。和Adadelta露该、RMSProp算法一樣,對歷史平方梯度v(t)乘上一個(gè)衰減因子第煮,adam算法還存儲(chǔ)了一個(gè)歷史梯度m(t)解幼。

mt和vt分別是梯度一階矩(均值)和二階矩(方差)。當(dāng)mt和vt初始化為0向量時(shí)包警,adam的作者發(fā)現(xiàn)他們都偏向于0撵摆,尤其是在初始化的時(shí)候和衰減率很小的時(shí)候(例如,beta1和beta2趨近于1時(shí))害晦。

通過計(jì)算偏差校正的一階矩和二階矩估計(jì)來抵消偏差:

利用上述的公式更新參數(shù)特铝,得到adam的更新公式:

AdaMax

Adam算法對歷史梯度的二范數(shù)進(jìn)行計(jì)算

這里我們可以改為計(jì)算歷史梯度的p范數(shù)

較大的p暑中,將會(huì)使數(shù)值計(jì)算不穩(wěn)定,這也是實(shí)際中大量使用1范數(shù)和2范數(shù)的原因鲫剿。然而鳄逾,無窮范數(shù)則是穩(wěn)定的。鑒于此灵莲,作者提出Adamax算法雕凹,通過計(jì)算無窮范數(shù),使矩估計(jì)收斂到穩(wěn)定政冻。為了和adam算法區(qū)分開枚抵,這里用u(t)表示:

替換adam算法參數(shù)更新公式分母,可得:

Nadam

Adam算法可以看作是RMSProp算法和Momentum的結(jié)合版明场。RMSProp算法通過對歷史梯度平方乘上衰減因子來計(jì)算v(t)汽摹,動(dòng)量則計(jì)算歷史梯度。我們知道NAG算法優(yōu)于momentum算法苦锨。這里nadam結(jié)合了adam算法和NAG算法逼泣,為了使用NAG算法,我們需要修改動(dòng)量表達(dá)式m(t)逆屡。

首先圾旨,回憶動(dòng)量更新表達(dá)式

將第二項(xiàng)代入第三項(xiàng)中有

從上述分析可知,動(dòng)量考慮了歷史動(dòng)量方向和當(dāng)前梯度方向魏蔗。NAG算法通過在梯度計(jì)算項(xiàng)中加入歷史動(dòng)量信息來達(dá)到一個(gè)更精確的計(jì)算,因此我們修改公式為:

Dozat提出對NAG進(jìn)行如下修改:不再進(jìn)行兩次動(dòng)量計(jì)算(一次更新梯度痹筛,一次更新參數(shù))莺治,而是采用直接更新當(dāng)前的參數(shù):

注意這里我們沒有采用前一時(shí)刻的動(dòng)量m(t-1),而是采用當(dāng)前的動(dòng)量m(t)帚稠。為了加入NGA算法谣旁,我們同樣可以替換先前的動(dòng)量向量為當(dāng)前的動(dòng)量向量。首先滋早,我們回憶adam更新規(guī)則

將上式1榄审、2帶入式3中可得

通過使用動(dòng)量的偏差校正估計(jì),可得

現(xiàn)在我們加入nesterov 動(dòng)量杆麸,采用當(dāng)前動(dòng)量的偏差校正估計(jì)替換前一時(shí)刻動(dòng)量的偏差校正估計(jì)搁进,可得:

總結(jié)

當(dāng)訓(xùn)練數(shù)據(jù)特征較為稀疏的時(shí)候,采用自適應(yīng)的優(yōu)化器通常能獲得更好的性能昔头,而且我們采用自適應(yīng)優(yōu)化器的默認(rèn)值即可獲得較優(yōu)的性能饼问。

RMSprop算法是adagrad算法的優(yōu)化版,它解決了學(xué)習(xí)率趨近于零的問題揭斧。Adadelta算法和RMSprop算法類似莱革,區(qū)別在于Adadelta用參數(shù)的RMS作為更新規(guī)則的分子。最后,Adam則是在RMSprop的基礎(chǔ)上加入了偏差校正和動(dòng)量盅视。綜上來看捐名,Adam可能是最佳的選擇。

最近很多paper都采用不帶動(dòng)量的SGD算法闹击,輔助一些簡單的學(xué)習(xí)率退火策略镶蹋。如上所述,SGD算法能夠找到極小值拇砰,但是比其他優(yōu)化器花費(fèi)的時(shí)間更多梅忌。和其他算法相比,SGD算法更加依賴于初始化參數(shù)的設(shè)置和退火策略除破,而且SGD算法更加容易陷入鞍點(diǎn)牧氮。所以,如果你想模型更快的收斂或者訓(xùn)練一個(gè)深層次瑰枫、復(fù)雜度較高的網(wǎng)絡(luò)踱葛,自適應(yīng)的優(yōu)化器應(yīng)該是首選優(yōu)化器。

參考文獻(xiàn)

Optimization for Deep Learning Highlights in 2017

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末光坝,一起剝皮案震驚了整個(gè)濱河市尸诽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盯另,老刑警劉巖性含,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸳惯,居然都是意外死亡商蕴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門芝发,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绪商,“玉大人,你說我怎么就攤上這事辅鲸「裼簦” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵独悴,是天一觀的道長例书。 經(jīng)常有香客問我,道長绵患,這世上最難降的妖魔是什么雾叭? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮落蝙,結(jié)果婚禮上织狐,老公的妹妹穿的比我還像新娘暂幼。我一直安慰自己,他們只是感情好移迫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布旺嬉。 她就那樣靜靜地躺著,像睡著了一般厨埋。 火紅的嫁衣襯著肌膚如雪邪媳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天荡陷,我揣著相機(jī)與錄音雨效,去河邊找鬼。 笑死废赞,一個(gè)胖子當(dāng)著我的面吹牛徽龟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唉地,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼据悔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耘沼?” 一聲冷哼從身側(cè)響起极颓,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎群嗤,沒想到半個(gè)月后菠隆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狂秘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年浸赫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赃绊。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖羡榴,靈堂內(nèi)的尸體忽然破棺而出碧查,到底是詐尸還是另有隱情,我是刑警寧澤校仑,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布忠售,位于F島的核電站,受9級特大地震影響迄沫,放射性物質(zhì)發(fā)生泄漏稻扬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一羊瘩、第九天 我趴在偏房一處隱蔽的房頂上張望泰佳。 院中可真熱鬧盼砍,春花似錦、人聲如沸逝她。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黔宛。三九已至近刘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間臀晃,已是汗流浹背觉渴。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徽惋,地道東北人案淋。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像寂曹,于是被迫代替她去往敵國和親哎迄。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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