中國(guó)學(xué)霸本科生提出AI新算法:速度比肩Adam,性能媲美SGD
兩位學(xué)霸本科生,一位來(lái)自北大,一位來(lái)自浙大。
他們?cè)趯?shí)習(xí)期間,研究出一種新的AI算法,相關(guān)論文已經(jīng)被人工智能***會(huì)議ICLR 2019收錄,并被領(lǐng)域主席贊不絕口,完全確定建議接收。
在這篇論文中,他們公布了一個(gè)名為AdaBound的神經(jīng)網(wǎng)絡(luò)優(yōu)化算法,簡(jiǎn)單地說(shuō),這個(gè)算法訓(xùn)練速度比肩Adam,性能媲美SGD。
這個(gè)算法適用于CV、NLP領(lǐng)域,可以用來(lái)開(kāi)發(fā)解決各種流行任務(wù)的深度學(xué)習(xí)模型。而且AdaBound對(duì)超參數(shù)不是很敏感,省去了大量調(diào)參的時(shí)間。
兩位本科生作為共同一作的這篇論文,也在Reddit上引發(fā)了熱贊,作者本人也在這個(gè)論壇上展開(kāi)了在線的答疑交流。
AdaBound已經(jīng)開(kāi)源,還放出了Demo。
AdaBound是什么
AdaBound結(jié)合了SGD和Adam兩種算法,在訓(xùn)練開(kāi)始階段,它能像Adam一樣快速,在后期又能像SGD一樣有很好的收斂性。
SGD(隨機(jī)梯度下降)算法歷史悠久,它是讓參數(shù)像小球滾下山坡一樣,落入山谷,從而獲得最小值。
但它***的缺點(diǎn)是下降速度慢(步長(zhǎng)是恒定值),而且可能會(huì)在溝壑的兩邊持續(xù)震蕩,停留在一個(gè)局部***點(diǎn)。
Adam(自適應(yīng)矩估計(jì))就是為了提高訓(xùn)練速度而生的。它和自適應(yīng)優(yōu)化方法AdaGrad、RMSProp等一樣,通過(guò)讓小球在更陡峭的山坡上下降,速率加快,來(lái)更快地讓結(jié)果收斂。
雖然Adam算法跑得比SGD更快,卻存在兩大缺陷:結(jié)果可能不收斂、可能找不到全局***解。也就是說(shuō)它的泛化能力較差,在解決某些問(wèn)題上,表現(xiàn)還不如SGD。
而造成這兩大缺陷的原因,可能是由于不穩(wěn)定和極端的學(xué)習(xí)率。
AdaBound是如何解決這個(gè)問(wèn)題的?
它給學(xué)習(xí)率劃出動(dòng)態(tài)變化的界限,讓實(shí)現(xiàn)從Adam到SGD的漸進(jìn)和平滑過(guò)渡,讓模型在開(kāi)始階段有和Adam一樣快的訓(xùn)練速度,后期又能保證和SGD一樣穩(wěn)定的學(xué)習(xí)率。
這種思路是受到2017年Salesforce的研究人員的啟發(fā)。他們通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),Adam后期的學(xué)習(xí)率太低影響了收斂結(jié)果。如果控制一下Adam的學(xué)習(xí)率的下限,實(shí)驗(yàn)結(jié)果會(huì)好很多。
對(duì)學(xué)習(xí)率的控制就和梯度裁剪差不多。在防止梯度爆炸問(wèn)題上,我們可以剪掉大于某個(gè)閾值的梯度。同樣的,我們也可以剪裁Adam學(xué)習(xí)率實(shí)現(xiàn)AdaBound。
在上面的公式中,學(xué)習(xí)率被限制在下限 η𝑙 和上限 η𝑢之間。當(dāng)η𝑙 = η𝑢 = α時(shí),就是SGD算法;當(dāng)η𝑙=0、 η𝑢 =∞時(shí),就是Adam算法。
為了實(shí)現(xiàn)從Adam到SGD的平滑過(guò)渡,讓η𝑙 和 η𝑢變成隨時(shí)間變化的函數(shù):η𝑙 遞增從0收斂到α,η𝑢從∞遞減收斂到α。
在這種情況下,AdaBound開(kāi)始時(shí)就像Adam一樣訓(xùn)練速度很快,隨著學(xué)習(xí)率邊界越來(lái)越受到限制,它又逐漸轉(zhuǎn)變?yōu)镾GD。
AdaBound還有個(gè)非常大的優(yōu)點(diǎn),就是它對(duì)超參數(shù)不是很敏感,省去了大量調(diào)參的時(shí)間。
實(shí)驗(yàn)結(jié)果
作者分別對(duì)不同模型進(jìn)行實(shí)驗(yàn),比較了Adam與業(yè)界流行方法SGD,AdaGrad,Adam和AMSGrad在訓(xùn)練集和測(cè)試集上的學(xué)習(xí)曲線。
以上結(jié)果證明了AdaBound確實(shí)有比SGD更快的訓(xùn)練速度。
在LSTM上的實(shí)驗(yàn)則證明Adam更好的泛化能力。Adam算法在該實(shí)驗(yàn)條件下沒(méi)有收斂到***解,而AdaBound和SGD算法一樣收斂到***解。
上圖中,還無(wú)法完全體現(xiàn)AdaBound算法相比SGD的在訓(xùn)練速度上的優(yōu)點(diǎn),但AdaBound對(duì)超參數(shù)不敏感,是它相比SGD的另一大優(yōu)勢(shì)。
但使用AdaBound不代表完全不需要調(diào)參,比如上圖中α=1時(shí),AdaBound的表現(xiàn)很差,簡(jiǎn)單的調(diào)整還是需要的。
目前實(shí)驗(yàn)結(jié)果的測(cè)試范圍還比較小,評(píng)審認(rèn)為論文可以通過(guò)更大的數(shù)據(jù)集,比如CIFAR-100,來(lái)獲得更加可信的結(jié)果。
Reddit網(wǎng)友也很好奇AdaBound在GAN上的表現(xiàn),但作者表示自己計(jì)算資源有限,還沒(méi)有在更多的模型上測(cè)試。希望在開(kāi)源后有更多人驗(yàn)證它的效果。
自己動(dòng)手
目前作者已經(jīng)在GitHub上發(fā)布了基于PyTorch的AdaBound代碼。
它要求安裝Python 3.6或更高版本,可以用pip直接安裝:
- pip install adabound
使用方法和Pytorch其他優(yōu)化器一樣:
- optimizer = adabound.AdaBound(model.parameters(), lr=1e-3, final_lr=0.1)
作者還承諾不久后會(huì)推出TensorFlow版本,讓我們拭目以待。
學(xué)霸本科生
這項(xiàng)研究的共同一作,是兩位學(xué)霸本科生。他們?cè)诘蔚螌?shí)習(xí)的時(shí)候一起完成了這項(xiàng)研究。
一位名叫駱梁宸,就讀于北京大學(xué)地球與空間科學(xué)學(xué)院,今年大四。
另一位名叫熊遠(yuǎn)昊,就讀于浙江大學(xué)信電學(xué)院,今年也是大四。
駱梁宸
這名學(xué)霸今年大四,已經(jīng)有四篇一作論文被人工智能***學(xué)術(shù)會(huì)議收錄,其中1篇EMNLP 2018、2篇AAAI 2019,還有我們今天介紹的這篇,發(fā)表于ICLR 2019。
他高中畢業(yè)于北京師范大學(xué)附屬實(shí)驗(yàn)中學(xué),連續(xù)三年獲得全國(guó)青少年信息學(xué)奧林匹克競(jìng)賽一等獎(jiǎng)。
在2015年到2018年期間,是北大PKU Helper團(tuán)隊(duì)的安卓開(kāi)發(fā)工程師和負(fù)責(zé)人。
2016年春季,擔(dān)任數(shù)據(jù)結(jié)構(gòu)與算法課程助教,還帶著實(shí)驗(yàn)室同學(xué)們開(kāi)發(fā)了一個(gè)回合制的游戲平臺(tái)坦克大戰(zhàn)。
2016年7月到2017年6月,擔(dān)任UniBike技術(shù)開(kāi)發(fā)VP,負(fù)責(zé)軟件開(kāi)發(fā)。
2017年7月到2018年5月,在微軟亞洲研究院實(shí)習(xí),做研究助理。在這段研究經(jīng)歷中,發(fā)表了兩篇被AAAI收錄的論文。
2018年7月至今,在滴滴人工智能實(shí)驗(yàn)室做研究助理,本篇文章介紹的研究成果,就是這一工作中的成果。
目前,他也在北大語(yǔ)言計(jì)算與機(jī)器學(xué)習(xí)組實(shí)習(xí),導(dǎo)師為研究員孫栩,也是這篇論文的作者之一。
熊遠(yuǎn)昊
他現(xiàn)在是浙江大學(xué)信電學(xué)院信息工程專(zhuān)業(yè)的大四學(xué)生,同樣是學(xué)霸級(jí)人物,三年綜合成績(jī)排名年級(jí)***。
在發(fā)表這篇ICLR論文之前,他還以第二作者身份在通信領(lǐng)域的權(quán)威期刊上發(fā)表過(guò)論文1篇。
此外,論文還有一位作者,是南加州大學(xué)的副教授Yan Liu。
如果,你對(duì)他們的研究感興趣,請(qǐng)收好下面的傳送門(mén):
論文:
ADAPTIVE GRADIENT METHODS WITH DYNAMIC BOUND OF LEARNING RATE
https://openreview.net/pdf?id=Bkg3g2R9FX
論文評(píng)審頁(yè)面:
https://openreview.net/forum?id=Bkg3g2R9FX
GitHub地址:
https://github.com/Luolc/AdaBound
Reddit討論地址:
https://www.reddit.com/r/MachineLearning/comments/auvj3q/r_adabound_an_optimizer_that_trains_as_fast_as/