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