乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      梯度下降優(yōu)化算法綜述

       無(wú)名小卒917 2018-01-14

      本文翻譯自Sebastian Ruder的“An overview of gradient descent optimization algoritms”,作者首先在其博客中發(fā)表了這篇文章,其博客地址為:An overview of gradient descent optimization algoritms,之后,作者將其整理完放在了arxiv中,其地址為:An overview of gradient descent optimization algoritms,在翻譯的過(guò)程中以作者發(fā)布在Arxiv的論文為主,參考其在博客中的內(nèi)容。

      本文的翻譯已經(jīng)獲得作者的同意。


      摘要

      雖然梯度下降優(yōu)化算法越來(lái)越受歡迎,但通常作為黑盒優(yōu)化器使用,因此很難對(duì)其優(yōu)點(diǎn)和缺點(diǎn)的進(jìn)行實(shí)際的解釋。本文旨在讓讀者對(duì)不同的算法有直觀的認(rèn)識(shí),以幫助讀者使用這些算法。在本綜述中,我們介紹梯度下降的不同變形形式,總結(jié)這些算法面臨的挑戰(zhàn),介紹最常用的優(yōu)化算法,回顧并行和分布式架構(gòu),以及調(diào)研用于優(yōu)化梯度下降的其他的策略。

      1 引言

      梯度下降法是最著名的優(yōu)化算法之一,也是迄今優(yōu)化神經(jīng)網(wǎng)絡(luò)時(shí)最常用的方法。同時(shí),在每一個(gè)最新的深度學(xué)習(xí)庫(kù)中都包含了各種優(yōu)化的梯度下降法的實(shí)現(xiàn)(例如:參見(jiàn)lasagne,caffekeras的文檔)。然而,這些算法通常是作為黑盒優(yōu)化器使用,因此,很難對(duì)其優(yōu)點(diǎn)和缺點(diǎn)的進(jìn)行實(shí)際的解釋。

      本文旨在讓讀者對(duì)不同的優(yōu)化梯度下降的算法有直觀的認(rèn)識(shí),以幫助讀者使用這些算法。在第2部分,我們首先介紹梯度下降的不同變形形式。在第3部分,我們將簡(jiǎn)要總結(jié)在訓(xùn)練的過(guò)程中所面臨的挑戰(zhàn)。隨后,在第4部分,我們將介紹最常用的優(yōu)化算法,包括這些算法在解決以上挑戰(zhàn)時(shí)的動(dòng)機(jī)以及如何得到更新規(guī)則的推導(dǎo)形式。在第5部分,我們將簡(jiǎn)單討論在并行和分布式環(huán)境中優(yōu)化梯度下降的算法和框架。最后,在第6部分,我們將思考對(duì)優(yōu)化梯度下降有用的一些其他策略。

      梯度下降法是最小化目標(biāo)函數(shù)J(θ)的一種方法,其中,θ?d為模型參數(shù),梯度下降法利用目標(biāo)函數(shù)關(guān)于參數(shù)的梯度?θJ(θ)的反方向更新參數(shù)。學(xué)習(xí)率η決定達(dá)到最小值或者局部最小值過(guò)程中所采用的步長(zhǎng)的大小。即,我們沿著目標(biāo)函數(shù)的斜面下降的方向,直到到達(dá)谷底。如果你對(duì)梯度下降法不熟悉,你可以從http://cs231n./optimization-1/找到介紹神經(jīng)網(wǎng)絡(luò)優(yōu)化的材料。

      2 梯度下降法的變形形式

      梯度下降法有3中變形形式,它們之間的區(qū)別為我們?cè)谟?jì)算目標(biāo)函數(shù)的梯度時(shí)使用到多少數(shù)據(jù)。根據(jù)數(shù)據(jù)量的不同,我們?cè)趨?shù)更新的精度和更新過(guò)程中所需要的時(shí)間兩個(gè)方面做出權(quán)衡。

      2.1 批梯度下降法

      Vanilla梯度下降法,又稱(chēng)為批梯度下降法(batch gradient descent),在整個(gè)訓(xùn)練數(shù)據(jù)集上計(jì)算損失函數(shù)關(guān)于參數(shù)θ的梯度:

      θ=θ?η??θJ(θ)

      因?yàn)樵趫?zhí)行每次更新時(shí),我們需要在整個(gè)數(shù)據(jù)集上計(jì)算所有的梯度,所以批梯度下降法的速度會(huì)很慢,同時(shí),批梯度下降法無(wú)法處理超出內(nèi)存容量限制的數(shù)據(jù)集。批梯度下降法同樣也不能在線更新模型,即在運(yùn)行的過(guò)程中,不能增加新的樣本。

      批梯度下降法的代碼如下所示:

      for i in range(nb_epochs):
          params_grad = evaluate_gradient(loss_function, data, params)
          params = params - learning_rate * params_grad
      • 1
      • 2
      • 3

      對(duì)于給定的迭代次數(shù),首先,我們利用全部數(shù)據(jù)集計(jì)算損失函數(shù)關(guān)于參數(shù)向量params的梯度向量params_grad。注意,最新的深度學(xué)習(xí)庫(kù)中提供了自動(dòng)求導(dǎo)的功能,可以有效地計(jì)算關(guān)于參數(shù)梯度。如果你自己求梯度,那么,梯度檢查是一個(gè)不錯(cuò)的主意(關(guān)于如何正確檢查梯度的一些技巧可以參見(jiàn)http://cs231n./neural-networks-3/)。

      然后,我們利用梯度的方向和學(xué)習(xí)率更新參數(shù),學(xué)習(xí)率決定我們將以多大的步長(zhǎng)更新參數(shù)。對(duì)于凸誤差函數(shù),批梯度下降法能夠保證收斂到全局最小值,對(duì)于非凸函數(shù),則收斂到一個(gè)局部最小值。

      2.2 隨機(jī)梯度下降法

      相反,隨機(jī)梯度下降法(stochastic gradient descent, SGD)根據(jù)每一條訓(xùn)練樣本x(i)和標(biāo)簽y(i)更新參數(shù):

      θ=θ?η??θJ(θ;x(i);y(i))

      對(duì)于大數(shù)據(jù)集,因?yàn)榕荻认陆捣ㄔ诿恳粋€(gè)參數(shù)更新之前,會(huì)對(duì)相似的樣本計(jì)算梯度,所以在計(jì)算過(guò)程中會(huì)有冗余。而SGD在每一次更新中只執(zhí)行一次,從而消除了冗余。因而,通常SGD的運(yùn)行速度更快,同時(shí),可以用于在線學(xué)習(xí)。SGD以高方差頻繁地更新,導(dǎo)致目標(biāo)函數(shù)出現(xiàn)如圖1所示的劇烈波動(dòng)。


      這里寫(xiě)圖片描述
      圖1:SGD波動(dòng)(來(lái)源:Wikipedia

      與批梯度下降法的收斂會(huì)使得損失函數(shù)陷入局部最小相比,由于SGD的波動(dòng)性,一方面,波動(dòng)性使得SGD可以跳到新的和潛在更好的局部最優(yōu)。另一方面,這使得最終收斂到特定最小值的過(guò)程變得復(fù)雜,因?yàn)镾GD會(huì)一直持續(xù)波動(dòng)。然而,已經(jīng)證明當(dāng)我們緩慢減小學(xué)習(xí)率,SGD與批梯度下降法具有相同的收斂行為,對(duì)于非凸優(yōu)化和凸優(yōu)化,可以分別收斂到局部最小值和全局最小值。與批梯度下降的代碼相比,SGD的代碼片段僅僅是在對(duì)訓(xùn)練樣本的遍歷和利用每一條樣本計(jì)算梯度的過(guò)程中增加一層循環(huán)。注意,如6.1節(jié)中的解釋?zhuān)诿恳淮窝h(huán)中,我們打亂訓(xùn)練樣本。

      for i in range(nb_epochs):
          np.random.shuffle(data)
          for example in data:
              params_grad = evaluate_gradient(loss_function, example, params)
              params = params - learning_rate * params_grad
      • 1
      • 2
      • 3
      • 4
      • 5

      2.3 小批量梯度下降法

      小批量梯度下降法最終結(jié)合了上述兩種方法的優(yōu)點(diǎn),在每次更新時(shí)使用n個(gè)小批量訓(xùn)練樣本:

      θ=θ?η??θJ(θ;x(i:i+n);y(i:i+n))

      這種方法,a)減少參數(shù)更新的方差,這樣可以得到更加穩(wěn)定的收斂結(jié)果;b)可以利用最新的深度學(xué)習(xí)庫(kù)中高度優(yōu)化的矩陣優(yōu)化方法,高效地求解每個(gè)小批量數(shù)據(jù)的梯度。通常,小批量數(shù)據(jù)的大小在50到256之間,也可以根據(jù)不同的應(yīng)用有所變化。當(dāng)訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型時(shí),小批量梯度下降法是典型的選擇算法,當(dāng)使用小批量梯度下降法時(shí),也將其稱(chēng)為SGD。注意:在下文的改進(jìn)的SGD中,為了簡(jiǎn)單,我們省略了參數(shù)x(i:i+n);y(i:i+n)。

      在代碼中,不是在所有樣本上做迭代,我們現(xiàn)在只是在大小為50的小批量數(shù)據(jù)上做迭代:

      for i in range(nb_epochs):
          np.random.shuffle(data)
          for batch in get_batches(data, batch_size=50):
              params_grad = evaluate_gradient(loss_function, batch, params)
              params = params - learning_rate * params_grad
      • 1
      • 2
      • 3
      • 4
      • 5

      3 挑戰(zhàn)

      雖然Vanilla小批量梯度下降法并不能保證較好的收斂性,但是需要強(qiáng)調(diào)的是,這也給我們留下了如下的一些挑戰(zhàn):

      • 選擇一個(gè)合適的學(xué)習(xí)率可能是困難的。學(xué)習(xí)率太小會(huì)導(dǎo)致收斂的速度很慢,學(xué)習(xí)率太大會(huì)妨礙收斂,導(dǎo)致?lián)p失函數(shù)在最小值附近波動(dòng)甚至偏離最小值。
      • 學(xué)習(xí)率調(diào)整[17]試圖在訓(xùn)練的過(guò)程中通過(guò)例如退火的方法調(diào)整學(xué)習(xí)率,即根據(jù)預(yù)定義的策略或者當(dāng)相鄰兩代之間的下降值小于某個(gè)閾值時(shí)減小學(xué)習(xí)率。然而,策略和閾值需要預(yù)先設(shè)定好,因此無(wú)法適應(yīng)數(shù)據(jù)集的特點(diǎn)[4]。
      • 此外,對(duì)所有的參數(shù)更新使用同樣的學(xué)習(xí)率。如果數(shù)據(jù)是稀疏的,同時(shí),特征的頻率差異很大時(shí),我們也許不想以同樣的學(xué)習(xí)率更新所有的參數(shù),對(duì)于出現(xiàn)次數(shù)較少的特征,我們對(duì)其執(zhí)行更大的學(xué)習(xí)率。
      • 高度非凸誤差函數(shù)普遍出現(xiàn)在神經(jīng)網(wǎng)絡(luò)中,在優(yōu)化這類(lèi)函數(shù)時(shí),另一個(gè)關(guān)鍵的挑戰(zhàn)是使函數(shù)避免陷入無(wú)數(shù)次優(yōu)的局部最小值。Dauphin等人[5]指出出現(xiàn)這種困難實(shí)際上并不是來(lái)自局部最小值,而是來(lái)自鞍點(diǎn),即那些在一個(gè)維度上是遞增的,而在另一個(gè)維度上是遞減的。這些鞍點(diǎn)通常被具有相同誤差的點(diǎn)包圍,因?yàn)樵谌我饩S度上的梯度都近似為0,所以SGD很難從這些鞍點(diǎn)中逃開(kāi)。

      4 梯度下降優(yōu)化算法

      下面,我們將列舉一些算法,這些算法被深度學(xué)習(xí)社區(qū)廣泛用來(lái)處理前面提到的挑戰(zhàn)。我們不會(huì)討論在實(shí)際中不適合在高維數(shù)據(jù)集中計(jì)算的算法,例如諸如牛頓法的二階方法。

      4.1 動(dòng)量法

      SGD很難通過(guò)陡谷,即在一個(gè)維度上的表面彎曲程度遠(yuǎn)大于其他維度的區(qū)域[19],這種情況通常出現(xiàn)在局部最優(yōu)點(diǎn)附近。在這種情況下,SGD搖擺地通過(guò)陡谷的斜坡,同時(shí),沿著底部到局部最優(yōu)點(diǎn)的路徑上只是緩慢地前進(jìn),這個(gè)過(guò)程如圖2a所示。


      這里寫(xiě)圖片描述
      圖2:來(lái)源:Genevieve B. Orr

      如圖2b所示,動(dòng)量法[16]是一種幫助SGD在相關(guān)方向上加速并抑制搖擺的一種方法。動(dòng)量法將歷史步長(zhǎng)的更新向量的一個(gè)分量γ增加到當(dāng)前的更新向量中(部分實(shí)現(xiàn)中交換了公式中的符號(hào))

      vt=γvt?1+η?θJ(θ)

      θ=θ?vt

      動(dòng)量項(xiàng)γ通常設(shè)置為0.9或者類(lèi)似的值。

      從本質(zhì)上說(shuō),動(dòng)量法,就像我們從山上推下一個(gè)球,球在滾下來(lái)的過(guò)程中累積動(dòng)量,變得越來(lái)越快(直到達(dá)到終極速度,如果有空氣阻力的存在,則γ<1)。同樣的事情也發(fā)生在參數(shù)的更新過(guò)程中:對(duì)于在梯度點(diǎn)處具有相同的方向的維度,其動(dòng)量項(xiàng)增大,對(duì)于在梯度點(diǎn)處改變方向的維度,其動(dòng)量項(xiàng)減小。因此,我們可以得到更快的收斂速度,同時(shí)可以減少搖擺。

      4.2 Nesterov加速梯度下降法

      然而,球從山上滾下的時(shí)候,盲目地沿著斜率方向,往往并不能令人滿意。我們希望有一個(gè)智能的球,這個(gè)球能夠知道它將要去哪,以至于在重新遇到斜率上升時(shí)能夠知道減速。

      Nesterov加速梯度下降法(Nesterov accelerated gradient,NAG)[13]是一種能夠給動(dòng)量項(xiàng)這樣的預(yù)知能力的方法。我們知道,我們利用動(dòng)量項(xiàng)γvt?1來(lái)更新參數(shù)θ。通過(guò)計(jì)算θ?γvt?1能夠告訴我們參數(shù)未來(lái)位置的一個(gè)近似值(梯度并不是完全更新),這也就是告訴我們參數(shù)大致將變?yōu)槎嗌?。通過(guò)計(jì)算關(guān)于參數(shù)未來(lái)的近似位置的梯度,而不是關(guān)于當(dāng)前的參數(shù)θ的梯度,我們可以高效的求解 :

      vt=γvt?1+η?θJ(θ?γvt?1)

      θ=θ?vt

      同時(shí),我們?cè)O(shè)置動(dòng)量項(xiàng)γ大約為0.9。動(dòng)量法首先計(jì)算當(dāng)前的梯度值(圖3中的小的藍(lán)色向量),然后在更新的累積梯度(大的藍(lán)色向量)方向上前進(jìn)一大步,Nesterov加速梯度下降法NAG首先在先前累積梯度(棕色的向量)方向上前進(jìn)一大步,計(jì)算梯度值,然后做一個(gè)修正(綠色的向量)。這個(gè)具有預(yù)見(jiàn)性的更新防止我們前進(jìn)得太快,同時(shí)增強(qiáng)了算法的響應(yīng)能力,這一點(diǎn)在很多的任務(wù)中對(duì)于RNN的性能提升有著重要的意義[2]。


      這里寫(xiě)圖片描述
      圖3:Nesterov更新(來(lái)源:G. Hinton的課程6c

      對(duì)于NAG的直觀理解的另一種解釋可以參見(jiàn)http://cs231n./neural-networks-3/,同時(shí)Ilya Sutskever在其博士論文[18]中給出更詳細(xì)的綜述。

      既然我們能夠使得我們的更新適應(yīng)誤差函數(shù)的斜率以相應(yīng)地加速SGD,我們同樣也想要使得我們的更新能夠適應(yīng)每一個(gè)單獨(dú)參數(shù),以根據(jù)每個(gè)參數(shù)的重要性決定大的或者小的更新。

      4.3 Adagrad

      Adagrad[7]是這樣的一種基于梯度的優(yōu)化算法:讓學(xué)習(xí)率適應(yīng)參數(shù),對(duì)于出現(xiàn)次數(shù)較少的特征,我們對(duì)其采用更大的學(xué)習(xí)率,對(duì)于出現(xiàn)次數(shù)較多的特征,我們對(duì)其采用較小的學(xué)習(xí)率。因此,Adagrad非常適合處理稀疏數(shù)據(jù)。Dean等人[6]發(fā)現(xiàn)Adagrad能夠極大提高了SGD的魯棒性并將其應(yīng)用于Google的大規(guī)模神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,其中包含了YouTube視頻中的貓的識(shí)別。此外,Pennington等人[15]利用Adagrad訓(xùn)練Glove詞向量,因?yàn)榈皖l詞比高頻詞需要更大的步長(zhǎng)。

      前面,我們每次更新所有的參數(shù)θ時(shí),每一個(gè)參數(shù)θi都使用的是相同的學(xué)習(xí)率η。由于Adagrad在t時(shí)刻對(duì)每一個(gè)參數(shù)θi使用了不同的學(xué)習(xí)率,我們首先介紹Adagrad對(duì)每一個(gè)參數(shù)的更新,然后我們對(duì)其向量化。為了簡(jiǎn)潔,令gt,i為在t時(shí)刻目標(biāo)函數(shù)關(guān)于參數(shù)θi的梯度:

      gt,i=?θJ(θi)

      t時(shí)刻,對(duì)每個(gè)參數(shù)θi的更新過(guò)程變?yōu)椋?/p>

      θt+1,i=θt,i?η?gt,i

      對(duì)于上述的更新規(guī)則,在t時(shí)刻,基于對(duì)θi計(jì)算過(guò)的歷史梯度,Adagrad修正了對(duì)每一個(gè)參數(shù)θi的學(xué)習(xí)率:

      θt+1,i=θt,i?ηGt,ii+??gt,i

      其中,Gt?d×d是一個(gè)對(duì)角矩陣,對(duì)角線上的元素i,i是直到t時(shí)刻為止,所有關(guān)于θi的梯度的平方和(Duchi等人[7]將該矩陣作為包含所有先前梯度的外積的完整矩陣的替代,因?yàn)榧词故菍?duì)于中等數(shù)量的參數(shù)d,矩陣的均方根的計(jì)算都是不切實(shí)際的。),?是平滑項(xiàng),用于防止除數(shù)為0(通常大約設(shè)置為1e?8)。比較有意思的是,如果沒(méi)有平方根的操作,算法的效果會(huì)變得很差。

      由于Gt的對(duì)角線上包含了關(guān)于所有參數(shù)θ的歷史梯度的平方和,現(xiàn)在,我們可以通過(guò)Gtgt之間的元素向量乘法向量化上述的操作:

      θt+1=θt?ηGt+?gt

      Adagrad算法的一個(gè)主要優(yōu)點(diǎn)是無(wú)需手動(dòng)調(diào)整學(xué)習(xí)率。在大多數(shù)的應(yīng)用場(chǎng)景中,通常采用常數(shù)0.01。

      Adagrad的一個(gè)主要缺點(diǎn)是它在分母中累加梯度的平方:由于沒(méi)增加一個(gè)正項(xiàng),在整個(gè)訓(xùn)練過(guò)程中,累加的和會(huì)持續(xù)增長(zhǎng)。這會(huì)導(dǎo)致學(xué)習(xí)率變小以至于最終變得無(wú)限小,在學(xué)習(xí)率無(wú)限小時(shí),Adagrad算法將無(wú)法取得額外的信息。接下來(lái)的算法旨在解決這個(gè)不足。

      4.4 Adadelta

      Adadelta[21]是Adagrad的一種擴(kuò)展算法,以處理Adagrad學(xué)習(xí)速率單調(diào)遞減的問(wèn)題。不是計(jì)算所有的梯度平方,Adadelta將計(jì)算計(jì)算歷史梯度的窗口大小限制為一個(gè)固定值w。

      在Adadelta中,無(wú)需存儲(chǔ)先前的w個(gè)平方梯度,而是將梯度的平方遞歸地表示成所有歷史梯度平方的均值。在t時(shí)刻的均值E[g2]t只取決于先前的均值和當(dāng)前的梯度(分量γ類(lèi)似于動(dòng)量項(xiàng)):

      E[g2]t=γE[g2]t?1+(1?γ)g2t

      我們將γ設(shè)置成與動(dòng)量項(xiàng)相似的值,即0.9左右。為了簡(jiǎn)單起見(jiàn),我們利用參數(shù)更新向量Δθt重新表示SGD的更新過(guò)程:

      Δθt=?η?gt,i

      θt+1=θt+Δθt

      我們先前得到的Adagrad參數(shù)更新向量變?yōu)椋?/p>

      Δθt=?ηGt+?gt

      現(xiàn)在,我們簡(jiǎn)單將對(duì)角矩陣Gt替換成歷史梯度的均值E[g2]t

      Δθt=?ηE[g2]t+?gt

      由于分母僅僅是梯度的均方根(root mean squared,RMS)誤差,我們可以簡(jiǎn)寫(xiě)為:

      Δθt=?ηRMS[g]tgt

      作者指出上述更新公式中的每個(gè)部分(與SGD,動(dòng)量法或者Adagrad)并不一致,即更新規(guī)則中必須與參數(shù)具有相同的假設(shè)單位。為了實(shí)現(xiàn)這個(gè)要求,作者首次定義了另一個(gè)指數(shù)衰減均值,這次不是梯度平方,而是參數(shù)的平方的更新:

      E[Δθ2]t=γE[Δθ2]t?1+(1?γ)Δθ2t

      因此,參數(shù)更新的均方根誤差為:

      RMS[Δθ]t=E[Δθ2]t+?

      由于RMS[Δθ]t是未知的,我們利用參數(shù)的均方根誤差來(lái)近似更新。利用RMS[Δθ]t?1替換先前的更新規(guī)則中的學(xué)習(xí)率η,最終得到Adadelta的更新規(guī)則:

      Δθt=?RMS[Δθ]t?1RMS[g]tgt

      θt+1=θt+Δθt

      使用Adadelta算法,我們甚至都無(wú)需設(shè)置默認(rèn)的學(xué)習(xí)率,因?yàn)楦乱?guī)則中已經(jīng)移除了學(xué)習(xí)率。

      4.5 RMSprop

      RMSprop是一個(gè)未被發(fā)表的自適應(yīng)學(xué)習(xí)率的算法,該算法由Geoff Hinton在其Coursera課堂的課程6e中提出。

      RMSprop和Adadelta在相同的時(shí)間里被獨(dú)立的提出,都起源于對(duì)Adagrad的極速遞減的學(xué)習(xí)率問(wèn)題的求解。實(shí)際上,RMSprop是先前我們得到的Adadelta的第一個(gè)更新向量的特例:

      E[g2]t=0.9E[g2]t?1+0.1g2t

      θt+1=θt?ηE[g2]t+?gt

      同樣,RMSprop將學(xué)習(xí)率分解成一個(gè)平方梯度的指數(shù)衰減的平均。Hinton建議將γ設(shè)置為0.9,對(duì)于學(xué)習(xí)率η,一個(gè)好的固定值為0.001。

      4.6 Adam

      自適應(yīng)矩估計(jì)(Adaptive Moment Estimation,Adam)[9]是另一種自適應(yīng)學(xué)習(xí)率的算法,Adam對(duì)每一個(gè)參數(shù)都計(jì)算自適應(yīng)的學(xué)習(xí)率。除了像Adadelta和RMSprop一樣存儲(chǔ)一個(gè)指數(shù)衰減的歷史平方梯度的平均vt,Adam同時(shí)還保存一個(gè)歷史梯度的指數(shù)衰減均值mt,類(lèi)似于動(dòng)量:

      mt=β1mt?1+(1?β1)gt

      vt=β2vt?1+(1?β2)g2t

      mtvt分別是對(duì)梯度的一階矩(均值)和二階矩(非確定的方差)的估計(jì),正如該算法的名稱(chēng)。當(dāng)mtvt初始化為0向量時(shí),Adam的作者發(fā)現(xiàn)它們都偏向于0,尤其是在初始化的步驟和當(dāng)衰減率很小的時(shí)候(例如β1β2趨向于1)。

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

      mt=mt1?βt1

      vt=vt1?βt2

      正如我們?cè)贏dadelta和RMSprop中看到的那樣,他們利用上述的公式更新參數(shù),由此生成了Adam的更新規(guī)則:

      θt+1=θt?ηvt+?mt

      作者建議β1取默認(rèn)值為0.9,β20.999?10?8。他們從經(jīng)驗(yàn)上表明Adam在實(shí)際中表現(xiàn)很好,同時(shí),與其他的自適應(yīng)學(xué)習(xí)算法相比,其更有優(yōu)勢(shì)。

      4.7 算法可視化

      下面兩張圖給出了上述優(yōu)化算法的優(yōu)化行為的直觀理解。(還可以看看這里關(guān)于Karpathy對(duì)相同的圖片的描述以及另一個(gè)簡(jiǎn)明關(guān)于算法討論的概述)。

      在圖4a中,我們看到不同算法在損失曲面的等高線上走的不同路線。所有的算法都是從同一個(gè)點(diǎn)出發(fā)并選擇不同路徑到達(dá)最優(yōu)點(diǎn)。注意:Adagrad,Adadelta和RMSprop能夠立即轉(zhuǎn)移到正確的移動(dòng)方向上并以類(lèi)似的速度收斂,而動(dòng)量法和NAG會(huì)導(dǎo)致偏離,想像一下球從山上滾下的畫(huà)面。然而,NAG能夠在偏離之后快速修正其路線,因?yàn)镹AG通過(guò)對(duì)最優(yōu)點(diǎn)的預(yù)見(jiàn)增強(qiáng)其響應(yīng)能力。

      圖4b中展示了不同算法在鞍點(diǎn)出的行為,鞍點(diǎn)即為一個(gè)點(diǎn)在一個(gè)維度上的斜率為正,而在其他維度上的斜率為負(fù),正如我們前面提及的,鞍點(diǎn)對(duì)SGD的訓(xùn)練造成很大困難。這里注意,SGD,動(dòng)量法和NAG在鞍點(diǎn)處很難打破對(duì)稱(chēng)性,盡管后面兩個(gè)算法最終設(shè)法逃離了鞍點(diǎn)。而Adagrad,RMSprop和Adadelta能夠快速想著梯度為負(fù)的方向移動(dòng),其中Adadelta走在最前面。

      (a)損失去面的等高線上SGD優(yōu)化
      (b)在鞍點(diǎn)處的SGD優(yōu)化


      圖4:來(lái)源和全部動(dòng)畫(huà):Alec Radford

      正如我們所看到的,自適應(yīng)學(xué)習(xí)速率的方法,即 Adagrad、 Adadelta、 RMSprop 和Adam,最適合這些場(chǎng)景下最合適,并在這些場(chǎng)景下得到最好的收斂性。

      4.8 選擇使用哪種優(yōu)化算法?

      那么,我們應(yīng)該選擇使用哪種優(yōu)化算法呢?如果輸入數(shù)據(jù)是稀疏的,選擇任一自適應(yīng)學(xué)習(xí)率算法可能會(huì)得到最好的結(jié)果。選用這類(lèi)算法的另一個(gè)好處是無(wú)需調(diào)整學(xué)習(xí)率,選用默認(rèn)值就可能達(dá)到最好的結(jié)果。

      總的來(lái)說(shuō),RMSprop是Adagrad的擴(kuò)展形式,用于處理在Adagrad中急速遞減的學(xué)習(xí)率。RMSprop與Adadelta相同,所不同的是Adadelta在更新規(guī)則中使用參數(shù)的均方根進(jìn)行更新。最后,Adam是將偏差校正和動(dòng)量加入到RMSprop中。在這樣的情況下,RMSprop、Adadelta和Adam是很相似的算法并且在相似的環(huán)境中性能都不錯(cuò)。Kingma等人[9]指出在優(yōu)化后期由于梯度變得越來(lái)越稀疏,偏差校正能夠幫助Adam微弱地勝過(guò)RMSprop。綜合看來(lái),Adam可能是最佳的選擇。

      有趣的是,最近許多論文中采用不帶動(dòng)量的SGD和一種簡(jiǎn)單的學(xué)習(xí)率的退火策略。已表明,通常SGD能夠找到最小值點(diǎn),但是比其他優(yōu)化的SGD花費(fèi)更多的時(shí)間,與其他算法相比,SGD更加依賴(lài)魯棒的初始化和退火策略,同時(shí),SGD可能會(huì)陷入鞍點(diǎn),而不是局部極小值點(diǎn)。因此,如果你關(guān)心的是快速收斂和訓(xùn)練一個(gè)深層的或者復(fù)雜的神經(jīng)網(wǎng)絡(luò),你應(yīng)該選擇一個(gè)自適應(yīng)學(xué)習(xí)率的方法。

      5 并行和分布式SGD

      當(dāng)存在大量的大規(guī)模數(shù)據(jù)和廉價(jià)的集群時(shí),利用分布式SGD來(lái)加速是一個(gè)顯然的選擇。SGD本身有固有的順序:一步一步,我們進(jìn)一步進(jìn)展到最小。SGD提供了良好的收斂性,但SGD的運(yùn)行緩慢,特別是對(duì)于大型數(shù)據(jù)集。相反,SGD異步運(yùn)行速度更快,但客戶端之間非最理想的通信會(huì)導(dǎo)致差的收斂。此外,我們也可以在一臺(tái)機(jī)器上并行SGD,這樣就無(wú)需大的計(jì)算集群。以下是已經(jīng)提出的優(yōu)化的并行和分布式的SGD的算法和框架。

      5.1 Hogwild!

      Niu等人[14]提出稱(chēng)為Hogwild!的更新機(jī)制,Hogwild!允許在多個(gè)CPU上并行執(zhí)行SGD更新。在無(wú)需對(duì)參數(shù)加鎖的情況下,處理器可以訪問(wèn)共享的內(nèi)存。這種方法只適用于稀疏的輸入數(shù)據(jù),因?yàn)槊恳淮胃轮粫?huì)修改一部分參數(shù)。在這種情況下,該更新策略幾乎可以達(dá)到一個(gè)最優(yōu)的收斂速率,因?yàn)镃PU之間不可能重寫(xiě)有用的信息。

      5.2 Downpour SGD

      Downpour SGD是SGD的一種異步的變形形式,在Google,Dean等人[6]在他們的DistBelief框架(TensorFlow的前身)中使用了該方法。Downpour SGD在訓(xùn)練集的子集上并行運(yùn)行多個(gè)模型的副本。這些模型將各自的更新發(fā)送給一個(gè)參數(shù)服務(wù)器,參數(shù)服務(wù)器跨越了多臺(tái)機(jī)器。每一臺(tái)機(jī)器負(fù)責(zé)存儲(chǔ)和更新模型的一部分參數(shù)。然而,因?yàn)楦北局g是彼此不互相通信的,即通過(guò)共享權(quán)重或者更新,因此可能會(huì)導(dǎo)致參數(shù)發(fā)散而不利于收斂。

      5.3 延遲容忍SGD

      通過(guò)容忍延遲算法的開(kāi)發(fā),McMahan和Streeter[11]將AdaGraad擴(kuò)展成并行的模式,該方法不僅適應(yīng)于歷史梯度,同時(shí)適應(yīng)于更新延遲。該方法已經(jīng)在實(shí)踐中被證實(shí)是有效的。

      5.4 TensorFlow

      TensorFlow[1]是Google近期開(kāi)源的框架,該框架用于實(shí)現(xiàn)和部署大規(guī)模機(jī)器學(xué)習(xí)模型。TensorFlow是基于DistBelief開(kāi)發(fā),同時(shí)TensorFlow已經(jīng)在內(nèi)部用來(lái)在大量移動(dòng)設(shè)備和大規(guī)模分布式系統(tǒng)的執(zhí)行計(jì)算。在2016年4月發(fā)布的分布式版本依賴(lài)于圖計(jì)算,圖計(jì)算即是對(duì)每一個(gè)設(shè)備將圖劃分成多個(gè)子圖,同時(shí),通過(guò)發(fā)送、接收節(jié)點(diǎn)對(duì)完成節(jié)點(diǎn)之間的通信。

      5.5 彈性平均SGD

      Zhang等人[22]提出的彈性平均SGD(Elastic Averaging SGD,EASGD)連接了異步SGD的參數(shù)客戶端和一個(gè)彈性力,即參數(shù)服務(wù)器存儲(chǔ)的一個(gè)中心變量。EASGD使得局部變量能夠從中心變量震蕩得更遠(yuǎn),這在理論上使得在參數(shù)空間中能夠得到更多的探索。經(jīng)驗(yàn)表明這種增強(qiáng)的探索能力通過(guò)發(fā)現(xiàn)新的局部最優(yōu)點(diǎn),能夠提高整體的性能。

      6 優(yōu)化SGD的其他策略

      最后,我們介紹可以與前面提及到的任一算法配合使用的其他的一些策略,以進(jìn)一步提高SGD的性能。對(duì)于其他的一些常用技巧的概述可以參見(jiàn)[10]。

      6.1 數(shù)據(jù)集的洗牌和課程學(xué)習(xí)

      總的來(lái)說(shuō),我們希望避免向我們的模型中以一定意義的順序提供訓(xùn)練數(shù)據(jù),因?yàn)檫@樣會(huì)使得優(yōu)化算法產(chǎn)生偏差。因此,在每一輪迭代后對(duì)訓(xùn)練數(shù)據(jù)洗牌是一個(gè)不錯(cuò)的主意。

      另一方面,在很多情況下,我們是逐步解決問(wèn)題的,而將訓(xùn)練集按照某個(gè)有意義的順序排列會(huì)提高模型的性能和SGD的收斂性,如何將訓(xùn)練集建立一個(gè)有意義的排列被稱(chēng)為課程學(xué)習(xí)[3]。

      Zaremba and Sutskever[20]只能使用課程學(xué)習(xí)訓(xùn)練LSTM來(lái)評(píng)估簡(jiǎn)單程序,并表明組合或混合策略比單一的策略更好,通過(guò)增加難度來(lái)排列示例。

      6.2 批量歸一化

      為了便于學(xué)習(xí),我們通常用0均值和單位方差初始化我們的參數(shù)的初始值來(lái)歸一化。 隨著不斷訓(xùn)練,參數(shù)得到不同的程度的更新,我們失去了這種歸一化,隨著網(wǎng)絡(luò)變得越來(lái)越深,這種現(xiàn)象會(huì)降低訓(xùn)練速度,且放大參數(shù)變化。

      批量歸一化[8]在每次小批量數(shù)據(jù)反向傳播之后重新對(duì)參數(shù)進(jìn)行0均值單位方差標(biāo)準(zhǔn)化。通過(guò)將模型架構(gòu)的一部分歸一化,我們能夠使用更高的學(xué)習(xí)率,更少關(guān)注初始化參數(shù)。批量歸一化還充當(dāng)正則化的作用,減少(有時(shí)甚至消除)Dropout的必要性。

      6.3 Early stopping

      如Geoff Hinton所說(shuō):“Early Stopping是美麗好免費(fèi)午餐”(NIPS 2015 Tutorial slides)。你因此必須在訓(xùn)練的過(guò)程中時(shí)常在驗(yàn)證集上監(jiān)測(cè)誤差,在驗(yàn)證集上如果損失函數(shù)不再顯著地降低,那么應(yīng)該提前結(jié)束訓(xùn)練。

      6.4 梯度噪音

      Neelakantan等人[12]在每個(gè)梯度更新中增加滿足高斯分布N(0,σ2t)的噪音:

      gt,i=gt,i+N(0,σ2t)

      高斯分布的方差需要根據(jù)如下的策略退火:

      σ2t=η(1+t)γ

      他們指出增加了噪音,使得網(wǎng)絡(luò)對(duì)不好的初始化更加魯棒,同時(shí)對(duì)深層的和復(fù)雜的網(wǎng)絡(luò)的訓(xùn)練特別有益。他們猜測(cè)增加的噪音使得模型更優(yōu)機(jī)會(huì)逃離當(dāng)前的局部最優(yōu)點(diǎn),以發(fā)現(xiàn)新的局部最優(yōu)點(diǎn),這在更深層的模型中更加常見(jiàn)。

      7 總結(jié)

      在這篇博客文章中,我們初步研究了梯度下降的三個(gè)變形形式,其中,小批量梯度下降是最受歡迎的。 然后我們研究了最常用于優(yōu)化SGD的算法:動(dòng)量法,Nesterov加速梯度,Adagrad,Adadelta,RMSprop,Adam以及不同的優(yōu)化異步SGD的算法。 最后,我們已經(jīng)考慮其他一些改善SGD的策略,如洗牌和課程學(xué)習(xí),批量歸一化和early stopping。

      參考文獻(xiàn)

      • [1] Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., … Zheng, X. (2015). TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed Systems.
      • [2] Bengio, Y., Boulanger-Lewandowski, N., & Pascanu, R. (2012). Advances in Optimizing Recurrent Networks. Retrieved from http:///abs/1212.0901
      • [3] Bengio, Y., Louradour, J., Collobert, R., & Weston, J. (2009). Curriculum learning. Proceedings of the 26th Annual International Conference on Machine Learning, 41–48. http:///10.1145/1553374.1553380
      • [4] Darken, C., Chang, J., & Moody, J. (1992). Learning rate schedules for faster stochastic gradient search. Neural Networks for Signal Processing II Proceedings of the 1992 IEEE Workshop, (September), 1–11. http:///10.1109/NNSP.1992.253713
      • [5] Dauphin, Y., Pascanu, R., Gulcehre, C., Cho, K., Ganguli, S., & Bengio, Y. (2014). Identifying and attacking the saddle point problem in high-dimensional non-convex optimization. arXiv, 1–14. Retrieved from http:///abs/1406.2572
      • [6] Dean, J., Corrado, G. S., Monga, R., Chen, K., Devin, M., Le, Q. V, … Ng, A. Y. (2012). Large Scale Distributed Deep Networks. NIPS 2012: Neural Information Processing Systems, 1–11. http:///10.1109/ICDAR.2011.95
      • [7] Duchi, J., Hazan, E., & Singer, Y. (2011). Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research, 12, 2121–2159. Retrieved from http:///papers/v12/duchi11a.html
      • [8] Ioffe, S., & Szegedy, C. (2015). Batch Normalization : Accelerating Deep Network Training by Reducing Internal Covariate Shift. arXiv Preprint arXiv:1502.03167v3
      • [9] Kingma, D. P., & Ba, J. L. (2015). Adam: a Method for Stochastic Optimization. International Conference on Learning Representations, 1–13.
      • [10] LeCun, Y., Bottou, L., Orr, G. B., & Müller, K. R. (1998). Efficient BackProp. Neural Networks: Tricks of the Trade, 1524, 9–50. http:///10.1007/3-540-49430-8_2
      • [11] Mcmahan, H. B., & Streeter, M. (2014). Delay-Tolerant Algorithms for Asynchronous Distributed Online Learning. Advances in Neural Information Processing Systems (Proceedings of NIPS), 1–9. Retrieved from http://papers./paper/5242-delay-tolerant-algorithms-for-asynchronous-distributed-online-learning.pdf
      • [12] Neelakantan, A., Vilnis, L., Le, Q. V., Sutskever, I., Kaiser, L., Kurach, K., & Martens, J. (2015). Adding Gradient Noise Improves Learning for Very Deep Networks, 1–11. Retrieved from http:///abs/1511.06807
      • [13] Nesterov, Y. (1983). A method for unconstrained convex minimization problem with the rate of convergence o(1/k2). Doklady ANSSSR (translated as Soviet.Math.Docl.), vol. 269, pp. 543– 547.
      • [14] Niu, F., Recht, B., Christopher, R., & Wright, S. J. (2011). Hogwild! : A Lock-Free Approach to Parallelizing Stochastic Gradient Descent, 1–22.
      • [15] Pennington, J., Socher, R., & Manning, C. D. (2014). Glove: Global Vectors for Word Representation. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing, 1532–1543. http:///10.3115/v1/D14-1162
      • [16] Qian, N. (1999). On the momentum term in gradient descent learning algorithms. Neural Networks : The Official Journal of the International Neural Network Society, 12(1), 145–151. http:///10.1016/S0893-6080(98)00116-6
      • [17] H. Robinds and S. Monro, “A stochastic approximation method,” Annals of Mathematical Statistics, vol. 22, pp. 400–407, 1951.
      • [18] Sutskever, I. (2013). Training Recurrent neural Networks. PhD Thesis.
      • [19] Sutton, R. S. (1986). Two problems with backpropagation and other steepest-descent learning procedures for networks. Proc. 8th Annual Conf. Cognitive Science Society.
      • [20] Zaremba, W., & Sutskever, I. (2014). Learning to Execute, 1–25. Retrieved from http:///abs/1410.4615
      • [21] Zeiler, M. D. (2012). ADADELTA: An Adaptive Learning Rate Method. Retrieved from http:///abs/1212.5701
      • [22] Zhang, S., Choromanska, A., & LeCun, Y. (2015). Deep learning with Elastic Averaging SGD. Neural Information Processing Systems Conference (NIPS 2015), 1–24. Retrieved from http:///abs/1412.6651

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類(lèi)似文章 更多