0
雷鋒網(wǎng) AI 科技評(píng)論按:今年 7 月,「深度學(xué)習(xí)教父」Geoffrey Hinton 和他的團(tuán)隊(duì)發(fā)表了一篇關(guān)于深度神經(jīng)網(wǎng)絡(luò)優(yōu)化器的論文,介紹了一種新的優(yōu)化器「LookAhead」 (《LookAhead optimizer: k steps forward, 1 step back》,https://arxiv.org/abs/1907.08610)。LookAhead 的設(shè)計(jì)得益于對(duì)神經(jīng)網(wǎng)絡(luò)損失空間理解的最新進(jìn)展,提供了一種全新的穩(wěn)定深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練、穩(wěn)定收斂速度的方法。
8 月,又有一篇關(guān)于優(yōu)化器的論文《On the Variance of the Adaptive Learning Rate and Beyond》(https://arxiv.org/abs/1908.03265)吸引了不少研究人員的關(guān)注,這篇來自韓家煒團(tuán)隊(duì)的論文研究了深度學(xué)習(xí)中的變差管理,并帶來了突破性進(jìn)展,提出了 RAdam(Rectified Adam)優(yōu)化器,也改善了網(wǎng)絡(luò)的優(yōu)化過程。
那有沒有機(jī)會(huì)結(jié)合這兩種方法的長(zhǎng)處,形成一個(gè)表現(xiàn)更出色的優(yōu)化器呢?研究員 Less Wright 就做了這個(gè)嘗試,他把兩者的思路集成在一起,得到了一個(gè)新的優(yōu)化器,得到了很棒的結(jié)果,當(dāng)然也比 RAdam 單獨(dú)使用更好。他撰寫了一篇博客介紹了他對(duì)這兩種方法的理解,也介紹了他自己的實(shí)現(xiàn)和簡(jiǎn)單測(cè)試。
雷鋒網(wǎng) AI 科技評(píng)論全文編譯如下。
毋庸置疑,在訓(xùn)練的初始階段,RAdam 能為優(yōu)化器提供最棒的基礎(chǔ)值。借助一個(gè)動(dòng)態(tài)整流器,RAdam 可以根據(jù)變差大小來調(diào)整 Adam 優(yōu)化器中的自適應(yīng)動(dòng)量,并且可以提供一個(gè)高效的自動(dòng)預(yù)熱過程;這些都可以針對(duì)當(dāng)前的數(shù)據(jù)集運(yùn)行,從而為深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練提供一個(gè)扎實(shí)的開頭。
LookAhead 的設(shè)計(jì)得益于對(duì)神經(jīng)網(wǎng)絡(luò)損失空間理解的最新進(jìn)展,為整個(gè)訓(xùn)練過程的魯棒、穩(wěn)定探索都提供了突破性的改進(jìn)。用 LookAhead 論文作者們自己的話說,LookAhead「減少了超參數(shù)調(diào)節(jié)的工作量」,同時(shí)「在許多不同的深度學(xué)習(xí)任務(wù)中都有更快的收斂速度、最小的計(jì)算開銷」。還有,「我們通過實(shí)驗(yàn)表明,LookAhead 可以顯著提高 SGD 和 Adam 的表現(xiàn),即便是用默認(rèn)的超參數(shù)直接在 ImageNet、CIFAR-10/100、機(jī)器翻譯任務(wù)以及 Penn Treebank 上運(yùn)行」。
那么,既然兩種方法是從不同的角度對(duì)深度學(xué)習(xí)的優(yōu)化過程提供了改進(jìn),我們?nèi)昕梢圆聹y(cè)兩者合并以后可以起到協(xié)同作用,帶來更棒的結(jié)果;也許這就是我們?cè)趯ふ腋€(wěn)定更魯棒的優(yōu)化方法之路上的最新一站。
在下文中,作者將會(huì)在 RAdam 介紹的基礎(chǔ)上解釋 LookAhead 的原理,以及如何把 RAdam 和 LookAhead 集成到同一個(gè)優(yōu)化器(Ranger)中。在作者的實(shí)驗(yàn)中,訓(xùn)練只運(yùn)行了前 20 個(gè) epoch,模型就給出了一個(gè)讓作者喜出望外的準(zhǔn)確率;實(shí)際上這個(gè)準(zhǔn)確率要比 FastAI 的排行榜第一名還要高出 1%。
更重要的是,文中有詳盡的源代碼和使用信息介紹,任何人都可以運(yùn)行這個(gè) Ranger 優(yōu)化器,看看能否看到穩(wěn)定性和準(zhǔn)確率的提升。
下面我們先分別認(rèn)識(shí)一下 RAdam 和 LookAhead。
簡(jiǎn)單來說,RAdam 的作者們研究了為什么帶有自適應(yīng)動(dòng)量的優(yōu)化器(Adam, RMSProp 等等)都需要一個(gè)預(yù)熱階段,不然在訓(xùn)練剛剛啟動(dòng)的時(shí)候就很容易陷入不好的、可能有問題的局部最優(yōu)。
他們找到的原因是,在訓(xùn)練剛開始時(shí)有非常大的變動(dòng),可以說是優(yōu)化器還沒見到足夠多的數(shù)據(jù),沒法做出準(zhǔn)確的自適應(yīng)動(dòng)量選擇。預(yù)熱過程就可以在訓(xùn)練的初始階段減小變差。根據(jù)上面這張圖可以看到,沒有預(yù)熱階段的時(shí)候,迭代早期的誤差分布會(huì)發(fā)生劇烈變化。不過,多長(zhǎng)的預(yù)熱過程才算夠需要手動(dòng)調(diào)整,而且在不同的數(shù)據(jù)集上也會(huì)有所不同。
所以,RAdam 的設(shè)計(jì)思路就是采用了一個(gè)整流器函數(shù),它可以基于實(shí)際遇到的變差計(jì)算出一個(gè)「預(yù)熱啟發(fā)值」。然后這個(gè)整流器可以動(dòng)態(tài)地對(duì)自適應(yīng)動(dòng)量進(jìn)行開、關(guān)或者加阻尼,避免它以全速運(yùn)動(dòng),直到來自數(shù)據(jù)的變差開始穩(wěn)定為止。這樣的做法就避免了用人工方法執(zhí)行一個(gè)預(yù)熱階段,訓(xùn)練過程也就自動(dòng)穩(wěn)定下來了。
當(dāng)變差穩(wěn)定下來之后,RAdam 在剩下的訓(xùn)練過程中基本就等效于 Adam 甚至 SGD。也所以,RAdam 只能為訓(xùn)練的開始階段帶來改善。
需要各位讀者注意的是,雖然在 RAdam 論文中的實(shí)驗(yàn)結(jié)果小節(jié)里 RAdam 的表現(xiàn)比 Adam 好,但是如果運(yùn)行非常長(zhǎng)的時(shí)間,那么 SGD 最終會(huì)追上來,而且會(huì)得到比 RAdam 和 Adam 更高的最終準(zhǔn)確率。
現(xiàn)在我們就需要轉(zhuǎn)頭看看 LookAhead 了,我們需要集成一種新的探索機(jī)制,能在超過 1000 個(gè) epoch 的訓(xùn)練之后仍然比 SGD 表現(xiàn)更好。
在介紹 LookAhead 之前,我們首先需要知道,在 SGD 基礎(chǔ)上改進(jìn)而來的大多數(shù)成功的優(yōu)化器都可以歸為以下兩類:
增加自適應(yīng)動(dòng)量,Adam、AdaGrad
增加某種加速機(jī)制,Nesterov 動(dòng)量或 Polyak Heavy Ball
它們用這些做法來改進(jìn)探索和訓(xùn)練過程,最終讓模型收斂。
LookAhead 和它們都有所不同,它采用了一種全新的設(shè)計(jì):會(huì)維持兩套權(quán)重,并在兩者之間進(jìn)行內(nèi)插,可以說是,它允許更快的那一組權(quán)重「向前看」(也就是探索),同時(shí)更慢的那一組權(quán)重可以留在后面,帶來更好的長(zhǎng)期穩(wěn)定性。
這種做法帶來的效果就是降低了訓(xùn)練過程中的變差,以及大大降低了對(duì)次優(yōu)的超參數(shù)的敏感性(從而減少了大量嘗試超參數(shù)調(diào)節(jié)的需要);同時(shí),它在許多種不同的深度學(xué)習(xí)任務(wù)中都可以達(dá)到更快的收斂速度??梢哉f這是一項(xiàng)飛躍式的進(jìn)步。
可以打個(gè)簡(jiǎn)單的比方,假想你在一個(gè)山頂區(qū)域,你周圍有很多條不同的路下山,有的也許可以讓你輕松到達(dá)山下,有的路則會(huì)遇到險(xiǎn)惡的懸崖和斷層。如果你孤身一人,去探索這些路就會(huì)有點(diǎn)麻煩,你得一條條嘗試,假如選的路走不通,你很可能會(huì)卡在半路,回不到山頂、沒辦法試下一條路了。但是如果你有個(gè)好朋友一起,他可以在山頂?shù)饶?,而且可以幫助你脫離險(xiǎn)境的話,那么你被卡在半路的機(jī)會(huì)就小多了、找到合適的下山路的機(jī)會(huì)就大多了。
可以說 LookAhead 基本就是這樣工作的,它會(huì)多存儲(chǔ)一份權(quán)重副本,然后讓那個(gè)內(nèi)部的「快」優(yōu)化器多探索 5 或 6 個(gè)批(在作者的 Ranger 實(shí)現(xiàn)中,快的優(yōu)化器就是 RAdam,多探索的批的數(shù)量通過 k 參數(shù)指定)。每經(jīng)過 k 個(gè)間隔,快優(yōu)化器 RAdam 多探索了 k 個(gè)批,然后 LookAhead 會(huì)計(jì)算存儲(chǔ)的權(quán)重副本和最新的 RAdam 的權(quán)重的差,把這個(gè)差乘上 alpha 參數(shù)(默認(rèn)為 0.5),然后更新 RAdam 的參數(shù),再開始下 k 個(gè)間隔的探索。
這樣做的效果就是,LookAhead 從內(nèi)部快優(yōu)化器(這里就是 RAdam)實(shí)現(xiàn)一個(gè)快速前進(jìn)的均值的同時(shí),還有一個(gè)慢一些的指數(shù)前進(jìn)的均值??焖偾斑M(jìn)有更好的探索效果,慢的那個(gè)起到一個(gè)拖拽回歸的作用,也可以看作是一個(gè)穩(wěn)定性維持機(jī)制 —— 一般情況下慢速前進(jìn)的這個(gè)都落在后面,但也可以在快的優(yōu)化器進(jìn)入了一個(gè)更有潛力的下坡卻又跑出去的時(shí)候把它拽回來。整個(gè)優(yōu)化器可以更細(xì)致地探索整個(gè)空間,同時(shí)不需要怎么擔(dān)心卡在不好的局部極值。
這種方法和上面提到的目前的兩種主流方法都完全不同,然后由于它的設(shè)計(jì)提升了訓(xùn)練穩(wěn)定性,所以它的探索速度更快、探索過程更魯棒,探索的結(jié)果也比 SGD 更好。
在解釋過 LookAhead 的工作原理以后我們可以看出來,其中的那個(gè)快優(yōu)化器可以選用任意一個(gè)現(xiàn)有的優(yōu)化器。在 LookAhead 論文中他們使用的是最初的 Adam,畢竟那時(shí)候 RAdam 還沒有發(fā)布呢。
那么顯然,要實(shí)現(xiàn) RAdam 加 LookAhead,只需要把原來的 LookAhead 中的 Adam 優(yōu)化器替換成 RAdam 就可以了。
在 FastAI 中,合并 RAdam 和 LookAhead 的代碼是一件非常容易的事情,他使用的 LookAhead 代碼來自 LonePatient,RAdam 則來自論文作者們的官方代碼。Less Wright 把合并后的這個(gè)新優(yōu)化器稱作 Ranger(其中的前兩個(gè)字母 RA 來自 RAdam,Ranger 整個(gè)單詞的意思“突擊隊(duì)員”則很好地體現(xiàn)出了 LookAhead 能出色地探索損失空間的特點(diǎn))。
Ranger 的代碼開源在 https://github.com/lessw2020/Ranger-Deep-Learning-Optimizer?source=post_page-----2dc83f79a48d----------------------
使用方法:
把 ranger.py 拷貝到工作目錄下
import ranger
創(chuàng)建一個(gè) partial,為 FastAI 調(diào)用 Ranger 做準(zhǔn)備,然后把學(xué)習(xí)者的 opt_func 指向它
開始測(cè)試吧!
LookAhead 中的參數(shù):
k - 它控制快優(yōu)化器的權(quán)重和 LookAhead 中的慢優(yōu)化器的權(quán)重協(xié)同更新的間隔。默認(rèn)值一般是 5 或者 6,不過 LookAhead 論文里最大也用過 20。
alpha - 它控制根據(jù)快慢優(yōu)化器權(quán)重之差的多少比例來更新快優(yōu)化器的權(quán)重。默認(rèn)值是 0.5,LookAhead 論文作者 Hinton 等人在論文里給出了一個(gè)強(qiáng)有力的證明,表示 0.5 可能就是理想值。不過大家也可以做自己的嘗試。
他們也在論文中指出,未來一個(gè)可能的改進(jìn)方向是根據(jù)訓(xùn)練進(jìn)行到不同的階段,規(guī)劃使用不同的 k 和 alpha 的值。
最近剛好有兩支團(tuán)隊(duì)各自在深度神經(jīng)網(wǎng)絡(luò)的優(yōu)化問題上做出了提高速度和穩(wěn)定性的成果,而且巧的是他們的成果是可以協(xié)同工作、帶來更好的結(jié)果的。結(jié)合兩者得到的新優(yōu)化器 Ranger 帶來了非常優(yōu)異的表現(xiàn),刷新了 FastAI 的在 ImageNet 上運(yùn)行 20 個(gè) epoch 的準(zhǔn)確率排行榜。
盡管其中的 k 參數(shù)和 RAdam 使用的學(xué)習(xí)率這兩個(gè)參數(shù)還有探究和調(diào)整的空間,但畢竟已經(jīng)大大降低了超參數(shù)調(diào)整的工作量,也可以輕松帶來更好的結(jié)果。大家可以立刻把這個(gè)方法投入使用。
LookAhead 論文地址:《LookAhead optimizer: k steps forward, 1 step back》
LonePatient 的 LookAhead 實(shí)現(xiàn):
https://github.com/lonePatient/lookahead_pytorch/blob/master/optimizer.py
RAdam 論文地址:
RAdam 論文作者的 RAdam 實(shí)現(xiàn):《On the Variance of the Adaptive Learning Rate and Beyond》
via https://medium.com/@lessw/new-deep-learning-optimizer-ranger-synergistic-combination-of-radam-lookahead-for-the-best-of-2dc83f79a48d,雷鋒網(wǎng) AI 科技評(píng)論編譯
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。