由北大、浙大兩位本科生為主開發(fā)的AdaBound算法,速度與Adam不相上下,性能媲美SGD,近期被ICLR 2019收錄,網(wǎng)友驚呼太酷太強大。昨天,論文的第一作者、北大大四學(xué)生駱梁宸向新智元進行了詳細解讀。
本科生又一次刷新了AI的新成績。
最近,來自北大和浙大的兩位大四學(xué)生,開發(fā)了一種名為AdaBound的算法,能夠?qū)崿F(xiàn)更快的訓(xùn)練速度和更好的性能,速度與Adam不相上下,性能媲美SGD。
AdaBound算法相關(guān)論文Adaptive Gradient Methods with Dynamic Bound of Learning Rate已經(jīng)被AI頂會 ICLR 2019收錄。
值得一提的是,論文一作第一次在GitHub上公布AdaBound代碼之后,就獲得了300多贊,評論中無數(shù)人感嘆:實在是太酷了!
昨天,論文一作、北京大學(xué)的駱梁宸向新智元解讀了AdaBound算法。
以下是他的分享:
AdaBound算法:像Adam一樣快,又像SGD一樣好的優(yōu)化器
以隨機梯度下降 (SGD) 為代表的一階優(yōu)化算法自上世紀(jì)50年代被提出以來,在機器學(xué)習(xí)領(lǐng)域被廣泛使用,如今也是我們訓(xùn)練模型時最為常用的工具。
但是,由于SGD在更新參數(shù)時對各個維度上梯度的放縮是一致的,這有可能導(dǎo)致訓(xùn)練速度緩慢,并且在訓(xùn)練數(shù)據(jù)分布極不均很時訓(xùn)練效果很差。為了解決這一問題,近些年來涌現(xiàn)了許多自適應(yīng)學(xué)習(xí)方法,包括 Adam、AdaGrad、RMSprop 等。其中 Adam 由于其快速的收斂速度,成為了如今最流行的 Optimizer 之一。
然而,在許多最新的State of The Art 中,研究者們沒有使用新穎流行的自適應(yīng)學(xué)習(xí)方法,而是仍然使用“過時的” SGD 或是其 +momentum 和 +nesterov 變種,這是為什么呢?事實上,Wilson 等人在其NeurIPS 2017的研究中指出,自適應(yīng)方法雖然可以在訓(xùn)練早期展現(xiàn)出快速的收斂速度,但其在測試集上的表現(xiàn)卻會很快陷入停滯,并最終被 SGD 超過。
ICLR 2018的最佳論文中,作者提出了名為 AMSGrad 的新方法試圖更好的避免這一問題,然而他們只提供了理論上的收斂性證明,而沒有在實際數(shù)據(jù)的測試集上進行試驗。而后續(xù)的研究者在一些經(jīng)典 benchmarks 比較發(fā)現(xiàn),AMSGrad 在未知數(shù)據(jù)上的最終效果仍然和 SGD 有可觀的差距。
我們每個人都希望在訓(xùn)練模型時可以收斂的又快又好,但似乎目前來看我們很難同時做到這兩點,或者至少我們需要對現(xiàn)有優(yōu)化算法的超參數(shù)進行精細的調(diào)整。機器學(xué)習(xí)和深度學(xué)習(xí)社區(qū)如今非常需要一個像 Adam 一樣快,又像 SGD 一樣好的優(yōu)化器。
關(guān)鍵點:限制極大和極小的實際學(xué)習(xí)率
最早的對各類流行的自適應(yīng)學(xué)習(xí)器和 SGD 進行系統(tǒng)的比較分析的工作來自上文提及的 Wilson 等,在他們的文章中,首次用系統(tǒng)的實驗和樣例問題指出了自適應(yīng)方法的性能問題。Wilson 等同時猜測,自適應(yīng)方法較差的泛化性能有可能是來源于訓(xùn)練后期不穩(wěn)定的極端學(xué)習(xí)率。然而,他們并沒有給出更多關(guān)于這一猜測的原因,包括理論分析或?qū)嶒灐?/p>
沿著這一思路,在Adaptive Gradient Methods with Dynamic Bound of Learning Rate 這篇文章中,作者首先進行了初步的實驗來作參考:他們在 ResNet-34 中隨機選取了 9 個卷積核和 1 個全連接層偏置向量,并從中再各隨機取樣一個維度的變量,統(tǒng)計其在 CIFAR-10 上訓(xùn)練末期的學(xué)習(xí)率。
采樣參數(shù)的學(xué)習(xí)率。每個單元格包含一個通過對學(xué)習(xí)率進行對數(shù)運算得到的值。顏色越淺的單元格代表越小的學(xué)習(xí)率。
我們可以看到,當(dāng)模型接近收斂時,學(xué)習(xí)率中有大量的極端值(包含許多小于 0.01 和大于 1000 的情況)。這一現(xiàn)象表明在實際訓(xùn)練中,極端學(xué)習(xí)率是實際存在的。
而還有兩個關(guān)鍵問題沒有明確:
(1) 過小的學(xué)習(xí)率是否真的對模型收斂產(chǎn)生不良影響?
(2) 實際的學(xué)習(xí)率很大程度上取決于初始學(xué)習(xí)率的設(shè)定,我們可不可以通過設(shè)定一個較大的學(xué)習(xí)率還避免這一影響呢?
于是,作者繼續(xù)給出了理論證明:
這一結(jié)果表明了極端學(xué)習(xí)率的潛在負面影響,在有效解決這一問題之前,我們很可能無法使用自適應(yīng)學(xué)習(xí)器得到足夠好的最終模型;需要設(shè)法對訓(xùn)練末期 Adam 的學(xué)習(xí)率做出限制。
AdaBound:對學(xué)習(xí)率進行動態(tài)裁剪
為了解決這一問題,我們希望能有一種優(yōu)化器可以結(jié)合 Adam 和 SGD 的優(yōu)勢,即分別是訓(xùn)練早期快速的收斂速度和訓(xùn)練末期好的最終性能?;蛘咧庇^的形容,我們希望它在訓(xùn)練早期像 Adam,而在訓(xùn)練末期更像 SGD。
基于這一思路,作者通過對學(xué)習(xí)率進行動態(tài)裁剪,提出了 Adam 和 AMSGrad 的變種,AdaBound 和 AMSBound。這一方法受到在工程實現(xiàn)中非常常用的梯度裁剪技術(shù)的啟發(fā)。只不過這時裁剪發(fā)生在學(xué)習(xí)率而非梯度上??紤]如下的裁剪操作:
其中 Clip 可以將實際學(xué)習(xí)率限制在下界和上界?之間。很容易發(fā)現(xiàn),SGD 和 Adam 分別是應(yīng)用梯度裁剪的特殊情況:學(xué)習(xí)率為?的 SGD 可視為;Adam 可視為,?。其他取值則介于兩者之間。那么,如果用兩個關(guān)于 t 的函數(shù)來取代固定值作為新的上下界,其中從 0 逐漸收斂至,從也逐漸收斂至
在這一設(shè)置下,在訓(xùn)練早期由于上下界對學(xué)習(xí)率的影響很小,算法更加接近于 Adam;而隨著時間增長裁減區(qū)間越來越收緊,模型的學(xué)習(xí)率逐漸趨于穩(wěn)定,在末期更加貼近于 SGD。AMSBound 可以對 AMSGrad 采用類似的裁剪得到。
實驗結(jié)果
作者將 AdaBound/AMSBound 和其他經(jīng)典的學(xué)習(xí)器在一些 benchmarks 上進行了實驗驗證,包括:SGD (或 momentum 變種)、AdaGrad、Adam、AMSGrad。以下是作者在論文中提供的學(xué)習(xí)曲線。
可以看到,在幾項 CV 和 NLP 的 benchmark 任務(wù)中,AdaBound/AMSBound 都在訓(xùn)練前期可以快速且平滑收斂的情況下,同時在末期得到了優(yōu)秀的最終性能,可以取得與 SGD 類似甚至更好的結(jié)果。
額外驚喜:對超參數(shù)更低的敏感性
AdaBound還帶給我們一個額外驚喜:它對超參數(shù)相對更不敏感,尤其是和 SGD(M) 比較。這一結(jié)果是非常意外也非常讓人驚喜的,因為這意味著AdaBound 有更高的魯棒性。通過使用這一新型優(yōu)化器,我們可能大大節(jié)省花在調(diào)整超參數(shù)上的時間。在常見的情形下,使用其默認參數(shù)即可取得相對優(yōu)秀和穩(wěn)定的最終結(jié)果。
當(dāng)然,作者也同樣指出,盡管 AdaBound 相對 SGD 更加穩(wěn)定,但這并不意味著我們可以一勞永逸再也不需要調(diào)整超參了,機器學(xué)習(xí)沒有銀彈。一個模型的最終結(jié)果取決于方方面面的因素,我們?nèi)匀恍枰Y(jié)合具體問題和數(shù)據(jù)特征具體分析,對 AdaBound 做出合適的調(diào)整。而 AdaBound 最大的優(yōu)勢在于,你很可能用在這上邊的時間會比以前少很多!
代碼已在GitHub開源
AdaBound 的 PyTorch 實現(xiàn)已經(jīng)在 GitHub 上開源。作者同樣提供了可以簡單只用 pip 安裝的版本,大家可以像使用其他任何一種 PyTorch optimizer 一樣使用 AdaBound。
此外,作者還提供了一個非常方便的可視化 Jupyter notebook 并提供了相應(yīng)的訓(xùn)練代碼,方便感興趣的同學(xué)復(fù)現(xiàn)和直觀比較新優(yōu)化器的結(jié)果。
論文地址:
https://openreview.net/pdf?id=Bkg3g2R9FX
GitHub地址:
https://github.com/Luolc/AdaBound
以上就是作者的解讀。
這個工作也在Reddit機器學(xué)習(xí)社區(qū)引起熱議,不少人表示非常cool,也有人提出建議和疑問:有沒有TensorFlow實現(xiàn)?能不能在更大的數(shù)據(jù)集工作?在GAN上的結(jié)果如何等等。
作者后來在Reddit帖子更新中表示:
正如許多人以及評審人員所建議的那樣,在更多、更大的數(shù)據(jù)集上,使用更多模型測試AdaBound會更好,但很不幸,我只有有限的計算資源。我?guī)缀醪豢赡茉贗mageNet這樣的大型基準(zhǔn)上進行實驗。如果誰能在更大的基準(zhǔn)上測試AdaBound,并告訴我它的缺點或bug,那就太好了!這對于改進AdaBound和進一步的工作很有幫助。
我相信在計算機科學(xué)領(lǐng)域沒有什么靈丹妙藥。這并不意味著使用AdaBound你就不用調(diào)參了。模型的性能取決于很多東西,包括任務(wù)、模型結(jié)構(gòu)、數(shù)據(jù)分布等等。你仍然需要根據(jù)具體情況決定使用哪些超參數(shù),但是在這上面花的時間可以比以前少很多!
這是我第一次研究優(yōu)化方法。由于這是一個由本科生、并且對這個領(lǐng)域來說完全是新人的團隊做的項目,我相信AdaBound非常需要進一步的改進。我會盡我最大的努力把它做好。再次感謝大家的建設(shè)性意見!這對我有很大的幫助。
-
算法
+關(guān)注
關(guān)注
23文章
4600瀏覽量
92646 -
AI
+關(guān)注
關(guān)注
87文章
30163瀏覽量
268427 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8378瀏覽量
132415
原文標(biāo)題:北大95后學(xué)霸親述:AI新算法媲美SGD,這是我第一次研究優(yōu)化方法
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論