翻譯 | AI科技大本營(yíng)(微信ID:rgznai100) 梯度下降算法是機(jī)器學(xué)習(xí)中使用非常廣泛的優(yōu)化算法,,也是眾多機(jī)器學(xué)習(xí)算法中最常用的優(yōu)化方法,。幾乎當(dāng)前每一個(gè)先進(jìn)的(state-of-the-art)機(jī)器學(xué)習(xí)庫或者深度學(xué)習(xí)庫都會(huì)包括梯度下降算法的不同變種實(shí)現(xiàn)。但是,,它們就像一個(gè)黑盒子一樣,,很難得到它們優(yōu)缺點(diǎn)的實(shí)際解釋。 近日,,Sebastian Ruder針對(duì)2017年優(yōu)化算法的一些新方法,,整理出了一份2017深度學(xué)習(xí)優(yōu)化研究亮點(diǎn)報(bào)告,值得關(guān)注,。 近年來有很多不同的優(yōu)化算法被提出來了,,這些算法采用不同的方程來更新模型的參數(shù)。如2015年推出的Adam算法(Kingma and Ba, 2015),,可以說在今天仍然是最常用的一種優(yōu)化算法之一,。從機(jī)器學(xué)習(xí)實(shí)踐者的角度來看,這表明優(yōu)化深度學(xué)習(xí)的最佳實(shí)踐在很大程度上還是保持不變的,。 在過去的一年中,,我們已經(jīng)提出了新的算法優(yōu)化想法,這將有助于未來我們優(yōu)化模型的方式,。在這篇博客文章中,,我將介紹在我看來是深度學(xué)習(xí)上最令人興奮的亮點(diǎn)和最有前途的優(yōu)化方向。注意,,閱讀這個(gè)博客的基礎(chǔ)是熟悉SGD算法和自適應(yīng)調(diào)節(jié)學(xué)習(xí)率的算法,,如Adam算法。 改進(jìn)的Adam優(yōu)化算法 盡管像Adam這樣的自適應(yīng)調(diào)節(jié)學(xué)習(xí)率的方法使用非常廣泛,,但是在計(jì)算機(jī)視覺和自然語言處理等許多相關(guān)任務(wù)上如目標(biāo)識(shí)別(Huang et al.,,2017)或機(jī)器翻譯(Wu et al.,2016)[ 3 ],,大多數(shù)先進(jìn)的(state of the art)結(jié)果仍然是由傳統(tǒng)的梯度下降算法SGD得到的,。最近的理論(Wilson et al.,2017)提供了一些證據(jù)證明跟帶動(dòng)量的SGD算法相比,自適應(yīng)學(xué)習(xí)率算法更難收斂到(并且不太理想的)最小值點(diǎn),??梢酝ㄟ^經(jīng)驗(yàn)推測(cè),在目標(biāo)檢測(cè),,字符級(jí)的語言建模和選區(qū)解析等任務(wù)上,,自適應(yīng)學(xué)習(xí)率方法找到的極小值比帶動(dòng)量 的SGD算法找到的極小值結(jié)果要差一些。這似乎是反直覺的,,因?yàn)樽赃m應(yīng)學(xué)習(xí)率算法Adam能夠保證良好的收斂,,其結(jié)果應(yīng)當(dāng)比正常的SGD算法好。但是,,Adam和其他的自適應(yīng)學(xué)習(xí)率方法并不是沒有自己的缺陷,。 解耦權(quán)重衰減 在一些數(shù)據(jù)集上,與帶動(dòng)量的SGD算法相比,, Adam算法泛化能力差的部分解釋就是權(quán)重衰減,。權(quán)重衰減最常用在圖像分類問題里面,衰變的權(quán)重? 每次更新參數(shù)后乘以一個(gè)略小于1的衰減率 ??,。 這可以防止權(quán)重值變得太大,。因此,權(quán)重衰減也可以理解為一個(gè)L2正則化項(xiàng),,它依賴于權(quán)重衰減率? ?加上損失值: 權(quán)重衰減在許多神經(jīng)網(wǎng)絡(luò)庫中都有實(shí)現(xiàn),,可以作為上述的正則化項(xiàng)或者直接修改梯度。由于可以在動(dòng)量和Adam算法的更新方程(通過與其他衰減項(xiàng)相乘)中修改梯度,,所以權(quán)重衰減跟L2正則化也不一樣,。因此,Loshchilov和Hutter(2017)提出通過在像原始定義中那樣梯度參數(shù)更新之后再添加解耦權(quán)重衰減,。帶動(dòng)量和權(quán)重衰減更新的SGD算法(SGDW)如下所示: 其中? 是學(xué)習(xí)率,,第二個(gè)方程中的第三項(xiàng)是解耦權(quán)重衰減。同樣,,對(duì)于帶權(quán)重衰減的Adam算法(AdamW),,我們得到: 其中 , ,, ??和?? 分別是第一和第二時(shí)刻的偏差和偏差校正估計(jì),, ??和? ?是它們的衰減率,同時(shí)加入相同的權(quán)重衰減項(xiàng),。作者表示,,這大大提高了Adam算法的泛化性能,并讓它與SGD算法在圖像分類數(shù)據(jù)集上達(dá)到差不多的效果,。 另外,,它將學(xué)習(xí)率的選擇與權(quán)重衰減的選擇分開,,這使得超參數(shù)的優(yōu)化更好,因?yàn)槌瑓?shù)不再相互依賴,。它還將優(yōu)化器的實(shí)現(xiàn)與權(quán)重衰減的實(shí)現(xiàn)分開,,這有助于實(shí)現(xiàn)更整潔和更可重用的代碼(例如參見 fast.ai AdamW/SGDW implementation)。 修正指數(shù)滑動(dòng)平均值 最近幾篇論文(Dozat和Manning,,2017; Laine和Aila,,2017)通過實(shí)驗(yàn)發(fā)現(xiàn),,在Adam算法上,,一個(gè)較低的? 值可以控制基于使用前面迭代所產(chǎn)生梯度平方的指數(shù)滑動(dòng)平均值(the exponential moving average)。例如 0.99或者0.9,,而默認(rèn)的0.999在它們各自的應(yīng)用中效果更好,,表明可能存在指數(shù)滑動(dòng)平均的問題。 一篇已經(jīng)提交正式的ICLR 2018論文提出了這樣一個(gè)問題,,指出基于使用前面迭代所產(chǎn)生梯度平方的指數(shù)滑動(dòng)平均值是自適應(yīng)學(xué)習(xí)率方法的泛化能力差的另一個(gè)原因,。通過基于之前梯度平方的指數(shù)滑動(dòng)平均來更新參數(shù)是自適應(yīng)學(xué)習(xí)率方法的核心,例如Adadelta,,RMSprop和Adam,。指數(shù)平均的貢獻(xiàn)應(yīng)該在于:可以防止學(xué)習(xí)率隨著訓(xùn)練的進(jìn)行而變得極小,這是Adagrad算法的關(guān)鍵缺陷,。但是,,梯度的短期存儲(chǔ)成為了其他情況下的障礙。 在Adam算法收斂到次優(yōu)解的環(huán)境中,,已經(jīng)觀察到一些minibatches提供了大的信息梯度,,但是由于這些minibatches很少發(fā)生,指數(shù)平均減小了它們的影響,,所以導(dǎo)致了收斂性差,。作者提供了一個(gè)簡(jiǎn)單的凸優(yōu)化問題的例子,利用Adam算法也可以觀察到相同的行為,。 為了解決這個(gè)問題,,作者提出了一種新的算法AMSGrad,它使用基于之前梯度平方的最大值而不是指數(shù)平均值來更新參數(shù),。沒有偏差糾正估計(jì)的完整的AMSGrad更新如下所示: 與Adam算法相比,,作者在小數(shù)據(jù)集和CIFAR-10數(shù)據(jù)上看到了性能的提升。 微調(diào)學(xué)習(xí)率 在許多情況下,,我們的模型是不需要改進(jìn)和調(diào)整的,,而是我們的超參數(shù)。最近的語言建模例子證明,,與更復(fù)雜的模型相比,,調(diào)整LSTM參數(shù)(Melis等,2017)和正則化參數(shù)(Merity等,2017)可以產(chǎn)生更好的(state of the art)結(jié)果,。 在深度學(xué)習(xí)中優(yōu)化的一個(gè)重要超參數(shù)是學(xué)習(xí)率? ?,。 實(shí)際上,SGD已經(jīng)被證明是需要一個(gè)學(xué)習(xí)率退火方案,,以更快的收斂到一個(gè)好的最小值,。人們經(jīng)常認(rèn)為,像Adam這樣的自適應(yīng)學(xué)習(xí)率方法對(duì)于不同的學(xué)習(xí)率更具有魯棒性,,因?yàn)樗麄兪亲约焊铝藢W(xué)習(xí)率,。但是即使對(duì)于這些方法,好的學(xué)習(xí)率和最佳的學(xué)習(xí)率也可能有很大的差別,。 Zhang et al. (2017)表明,,具有調(diào)整學(xué)習(xí)率退火方案和動(dòng)量參數(shù)的SGD不僅與Adam算法相當(dāng),而且收斂速度更快,。另一方面,,雖然我們可能認(rèn)為Adam算法的學(xué)習(xí)率的適應(yīng)性可能模仿學(xué)習(xí)率退火,但是明確的退火方案仍然是有益的:在機(jī)器翻譯(Denkowski和Neubig,,2017)上,,如果我們對(duì)Adam算法增加SGD樣式的學(xué)習(xí)率退火,它的收斂速度更快,。 事實(shí)上,,學(xué)習(xí)率退火方案似乎是新的特征工程,因?yàn)槲覀兘?jīng)??梢哉业礁倪M(jìn)的學(xué)習(xí)率退火方案,,從而改善我們模型的最終收斂路徑。一個(gè)有趣的例子是Vaswani et al. (2017)論文中提出的,,雖然看到一個(gè)模型的超參數(shù)要經(jīng)受大規(guī)模的超參數(shù)優(yōu)化是很正常的,,但有趣的是將學(xué)習(xí)率減小時(shí)間表看作是對(duì)細(xì)節(jié)同樣重視的點(diǎn):作者使用? 和非默認(rèn)參數(shù)? ?的Adam算法,可以說是最精細(xì)的學(xué)習(xí)率? ?減小調(diào)度表之一: 其中? ?是模型的參數(shù)數(shù)目,,而? Smith et al. (2017) 最近的另一篇論文展示了學(xué)習(xí)率和批量大小之間的一個(gè)有趣的聯(lián)系,,兩個(gè)超參數(shù)通常被認(rèn)為是相互獨(dú)立的:他們表明,減小學(xué)習(xí)率相當(dāng)于增加批量大小,,而后者 允許增加并行,。相反,我們可以減少模型更新次數(shù),,從而通過增加學(xué)習(xí)率的值和縮放批量大小來加快訓(xùn)練速度,。這對(duì)于大規(guī)模的深度學(xué)習(xí)是有影響的,可以在不需要調(diào)整超參數(shù)的情況下,,重新調(diào)整現(xiàn)有的訓(xùn)練方式,。 熱重啟(warm restarts) 加入重啟的隨機(jī)梯度下降算法(SGD with restarts) 另外一個(gè)最近提出的有效方法是SGDR ((Loshchilov and Hutter, 2017) [6]),,是隨機(jī)梯度下降算法的改進(jìn),使用了熱重啟技術(shù)取代學(xué)習(xí)率衰減,。每次重啟時(shí),,學(xué)習(xí)率初始化為一些值,然后逐漸減少,。更重要的是,,這機(jī)制是熱重啟,因?yàn)閮?yōu)化不是從頭開始的,,而是從模型在上一步收斂的參數(shù)開始的,。關(guān)鍵的因素是學(xué)習(xí)率的衰減是基于陡峭的余弦衰減過程,這將很快的降低學(xué)習(xí)率,,如下所示: 其中,,? 和? 為第i次運(yùn)行時(shí)學(xué)習(xí)率的取值范圍, ?表示從上次重啟時(shí)已完成的迭代次數(shù),,? ?指定了下一次重啟的迭代次數(shù)。熱重啟訓(xùn)練參數(shù)(? )與常規(guī)的學(xué)習(xí)率衰減方法之間的比較見圖1,。 圖1 使用了熱重啟的學(xué)習(xí)率迭代表(Loshchilov and Hutter, 2017) 重啟后使用一個(gè)高的初始學(xué)習(xí)率能從根本上把參數(shù)的最優(yōu)值彈射出去,,到達(dá)之前收斂的地方,即到達(dá)損失函數(shù)曲面的不同區(qū)域,。這種陡峭的衰減能使模型快速收斂到一個(gè)新的且更好的解,。作者從經(jīng)驗(yàn)發(fā)現(xiàn),使用了熱重啟的隨機(jī)梯度下降比學(xué)習(xí)率衰減方法迭代次數(shù)減少了2~4倍,,并能達(dá)到相似的或者更好的性能,。 使用熱重啟的學(xué)習(xí)率衰減也被稱為循環(huán)學(xué)習(xí)率,最初由Smith提出的,。fast.ai學(xué)生的另外兩篇文章討論了熱重啟和循環(huán)學(xué)習(xí)率,,兩篇文章分別可以從這里找到。
快照集合(Snapshot ensembles) 快照集合(Huang et al., 2017)是一個(gè)最近提出的非常巧的方法,,它使用熱啟動(dòng)組裝成一個(gè)整體,當(dāng)訓(xùn)練單模型時(shí)不用額外的代價(jià),。這種方法可以訓(xùn)練一個(gè)單模型,,按照我們之前看到的余弦衰減時(shí)間表收斂,然后保存模型參數(shù),,并進(jìn)行熱重啟,,重復(fù)這一個(gè)步驟M次。最后,,所有保存的模型快照形成一個(gè)集合,。從圖2可以看到常用的隨機(jī)梯度下降優(yōu)化過程的錯(cuò)誤曲面與快照集合過程的對(duì)比,。 圖2 隨機(jī)梯度下降與快照集合(Huang et al., 2017) 一般來說,集合的成功在于集合中每個(gè)單獨(dú)模型的多樣性,。因此,,快照集合依賴于余弦衰減時(shí)間表能使模型在每次重啟后都能收斂到不同的局部極值。作者在實(shí)踐中證明,,這是成立的,,并在CIFAR-10, CIFAR-100, 和SVHN三個(gè)數(shù)據(jù)集上取得了目前最好的結(jié)果。 帶重啟動(dòng)的Adam算法 正如我們之前看到的,,由于權(quán)重衰減不正常,,熱啟動(dòng)最開始對(duì)Adam算法并不適用。在固定權(quán)重衰減后,,Loshchilov and Hutter (2017) 同樣的把熱啟動(dòng)擴(kuò)展到Adam,。他們?cè)O(shè)置參數(shù)為 ?,得到下式: 他們建議一開始選取較小的? (迭代次數(shù)在1-10之間),,在每次重啟時(shí)都乘以一個(gè)系數(shù)? ?(例如? ) 學(xué)習(xí)優(yōu)化 去年最有意思的一篇文章(榮獲Reddit網(wǎng)站 “2016年最好文章”)是由Andrychowicz et al. (2016)提出的,,他們訓(xùn)練了一個(gè)長(zhǎng)短期記憶網(wǎng)絡(luò)優(yōu)化器,在訓(xùn)練主要模型時(shí)更新參數(shù),。不幸的是,,學(xué)習(xí)一個(gè)獨(dú)立的長(zhǎng)短期記憶網(wǎng)絡(luò)優(yōu)化器或者使用預(yù)訓(xùn)練的長(zhǎng)短期記憶網(wǎng)絡(luò)優(yōu)化器進(jìn)行優(yōu)化會(huì)大大的增加訓(xùn)練模型的復(fù)雜度。 今年另外一個(gè)很有影響力的“學(xué)會(huì)學(xué)習(xí)(learning-to-learn)”論文在特定語言領(lǐng)域,,使用了一個(gè)長(zhǎng)短期記憶網(wǎng)絡(luò)來生成模型架構(gòu),。雖然搜索過程需要大量的資源,但是所發(fā)現(xiàn)的結(jié)構(gòu)可以用來替代已有的方法,。這個(gè)搜索過程被證明是有效的,,且在語言建模上取得了最好的(state-of-the-art)結(jié)果,并且再CIFAR-10上取得很有競(jìng)爭(zhēng)力的結(jié)果,。 同樣的搜索策略也可以應(yīng)用到任何以前手工定義核心過程的其他領(lǐng)域,,其中一個(gè)領(lǐng)域就是深度學(xué)習(xí)的優(yōu)化算法。正如我們以前看到的,,優(yōu)化算法比他們看起來更相似:他們都使用指數(shù)滑動(dòng)平均指數(shù)(如動(dòng)量)和過去梯度平方的指數(shù)滑動(dòng)平均值(如:Adadelta, RMSprop, and Adam)的組合 Bello等人定義了一種特定領(lǐng)域的語言,,包含了對(duì)優(yōu)化有用的原語,比如這些指數(shù)滑動(dòng)平均值,。然后,,他們通過在所有可能的更新規(guī)則空間中采樣,形成更新規(guī)則,,使用這些規(guī)則訓(xùn)練模型,,基于訓(xùn)練模型在測(cè)試集中的表現(xiàn)更新循環(huán)神經(jīng)網(wǎng)絡(luò)控制器。完整的流程見圖3 圖3:神經(jīng)優(yōu)化搜索 (Bello et al., 2017) 特別是他們定義了兩個(gè)更新公式,,PowerSign和AddSign,,PowerSign的更新公式如下: α是一個(gè)超參數(shù),,往往設(shè)置為e或者2. 函數(shù)f(t)設(shè)置為1或者衰減函數(shù)(線性、循環(huán)或者隨著時(shí)間t衰減),,m^t是過去梯度的滑動(dòng)平均,。通常設(shè)置為α=e,且無衰減,。我們注意到,,這個(gè)更新分別縮放梯度為? ,依賴于梯度的方向與滑動(dòng)平均的角度是否一致,。這說明這種類似動(dòng)量的過去梯度與現(xiàn)在梯度的一致性是用于優(yōu)化神經(jīng)網(wǎng)絡(luò)模型優(yōu)化的重要信息,。 AddSign定義如下 α經(jīng)常設(shè)置為1或者2,與上面相似,,這次的梯度尺度更新為? ?或者? ,,取決于梯度方向的一致性。作者指出,,在CIFAR-10數(shù)據(jù)集上PowerSign與AddSign的性能優(yōu)于Adam,、RMSprop和使用動(dòng)量的隨機(jī)梯度下降法,且能夠很好的轉(zhuǎn)換到其他的任務(wù)中,,比如ImageNet圖像分類和機(jī)器翻譯,。 理解泛化 優(yōu)化問題和泛化能力是密切相關(guān)的,因?yàn)槟P褪諗康淖钚≈禌Q定了模型泛化的程度,。因此,優(yōu)化問題的研究進(jìn)展與理解這種極小值的泛化行為的理論進(jìn)展是密切相關(guān)的,,并且需要更深入地了解深度學(xué)習(xí)中的泛化問題,。 然而,我們對(duì)深度神經(jīng)網(wǎng)絡(luò)泛化行為的理解仍然很淺,。最近的研究表明,,可能為局部最小值的數(shù)量隨著參數(shù)數(shù)量呈指數(shù)型增長(zhǎng)(Kawaguchi, 2016) [9]??紤]到當(dāng)前深度學(xué)習(xí)結(jié)構(gòu)巨大的參數(shù)數(shù)量,,這樣的模型能夠很好的泛化得到解決方案,特別是考慮到它們能夠完全記住隨機(jī)的輸入值,,這似乎仍然是神奇的,。 Keskar et al. (2017) [11] 認(rèn)為最小值的清晰度是泛化能力不好的源頭:他們特別地指出批量梯度下降所發(fā)現(xiàn)的尖銳極小值具有較高的泛化誤差。這是直觀的,,因?yàn)槲覀兺ǔ?huì)希望我們的函數(shù)是平滑的,,尖銳的最小值表示相應(yīng)誤差表面高度的不規(guī)則性。但是,,最近的研究表明,,清晰度可能并不是一個(gè)好的指標(biāo),,因?yàn)樗砻骶植孔钚≈的軌蚝芎玫胤夯?(Dinh et al., 2017) [12]。Eric Jang在Quora上的回答也討論了這篇文章,。 提交給ICLR 2018的一份論文通過一系列消融分析,,表明一個(gè)模型在激活空間會(huì)對(duì)單個(gè)方向有依賴性,即單個(gè)單元或特征圖的激活是其泛化性能的良好預(yù)測(cè),。他們證明了這種模式適用于不同數(shù)據(jù)集的模型,,以及不同程度的標(biāo)簽損壞。他們發(fā)現(xiàn)dropout并不能幫助解決這個(gè)問題,,而批次規(guī)范化將阻礙單方向的依賴性,。 雖然以上這些研究表明依然還存在很多我們所不知道的深度學(xué)習(xí)優(yōu)化知識(shí),但重要的是記住,,收斂保證和存在于凸優(yōu)化中的大量工作,,在一定程度上現(xiàn)有的想法和見解也可以應(yīng)用于非凸優(yōu)化問題上。 NIPS2016上大量的優(yōu)化教程提供了該領(lǐng)域更多理論工作的完美概述,,可以幫助你了解更多這方面的知識(shí),。真的是一個(gè)非常讓人興奮的研究方向。
|
|