Adam優(yōu)化器再次改進(jìn),用長期記憶限制過高學(xué)習(xí)率,北大孫栩課題組提出
無需預(yù)熱
曉查 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI
Adam作為一種快速收斂的優(yōu)化器被廣泛采用,但是它較差的收斂性限制了使用范圍,為了保證更優(yōu)的結(jié)果,很多情況下我們還在使用SGD。
但SGD較慢的收斂速度也令人頭疼,所以人們一直在研究進(jìn)一步優(yōu)化Adam的方法。AdaBound、RAdam都是在這方面的嘗試。
最近北京大學(xué)孫栩課題組提出了一種新的優(yōu)化器AdaMod。這是一種基于Adam的改進(jìn)優(yōu)化器,具有自動預(yù)熱試探法和長期學(xué)習(xí)速率緩沖。
AdaMod的名稱來自Adaptive(自適應(yīng))和Momental Bound(矩限制)。
在訓(xùn)練過程中,AdaMod可以輕松擊敗Adam,同時對學(xué)習(xí)率超參數(shù)、訓(xùn)練曲線都不那么敏感,并且不需要預(yù)熱。
優(yōu)點
AdaMod的原理是,在訓(xùn)練的同時計算自適應(yīng)學(xué)習(xí)率的指數(shù)長期平均值,并使用該平均值來修剪訓(xùn)練過程中過高的學(xué)習(xí)率。
這一做法提高了優(yōu)化器的收斂性,無需進(jìn)行預(yù)熱,并且降低了對學(xué)習(xí)率的敏感性。
在上圖中,我們可以看出,SGDM和Adam的訓(xùn)練結(jié)果都依賴于初始學(xué)習(xí)率的選擇。而AdaMod即使學(xué)習(xí)率相差兩個數(shù)量級,也能收斂到同一結(jié)果。
相比Adam優(yōu)化器,AdaMod只增加了一個超參數(shù)β3,用來描述訓(xùn)練中記憶長短的程度。
這種長期記憶解決了自適應(yīng)學(xué)習(xí)率的異常過大數(shù)值,免于讓優(yōu)化器陷入了不良的狀態(tài)。
與之前的RAdam優(yōu)化器類似,AdaMod能夠從訓(xùn)練開始就控制自適應(yīng)學(xué)習(xí)率的變化,從而確保訓(xùn)練開始時的穩(wěn)定性,無需預(yù)熱。
相關(guān)報道:
RAdam優(yōu)化器又進(jìn)化:與LookAhead強強結(jié)合,性能更優(yōu)速度更快
在3個基于Transformer的神經(jīng)機器翻譯模型上,沒有預(yù)熱的AdaMod顯示出了比預(yù)熱的Adam有著更快的收斂速率和更好的收斂結(jié)果。
而Adam優(yōu)化器如果不預(yù)熱,效果可能會非常差,達(dá)到完全不可用的程度。
算法實現(xiàn)
其實,AdaMod的思路也很簡單,只是在Adam的基礎(chǔ)上做了一個小幅的修改。
如AdaBound所描述的,不穩(wěn)定和異常的學(xué)習(xí)率通常出現(xiàn)在訓(xùn)練快結(jié)束時,這會危及自適應(yīng)方法的泛化性能。
相關(guān)報道:
中國學(xué)霸本科生提出AI新算法:速度比肩Adam,性能媲美SGD,ICLR領(lǐng)域主席贊不絕口
所以AdaBound的思路是,先定義學(xué)習(xí)率的下限ηl和ηu,一開始下限為0,上限為∞,隨著訓(xùn)練過程的進(jìn)行,上下限分別收斂到SGD的學(xué)習(xí)率α。
Adam會根據(jù)一階矩和二階矩的梯度估計值計算自適應(yīng)學(xué)習(xí)率。受指數(shù)滑動平均(EMA)的啟發(fā),AdaMod計算梯度的低階矩,并通過參數(shù)β3將記憶帶到下一個步驟中。
可以看出,Adam和AdaMod的前8步完全相同,后者只是比前者多了9、10兩步。
具體來說,在Adam中進(jìn)行以下操作:
指數(shù)滑動平均的范圍是1/β3。β3就是記憶長短的量度,它越接近1,記憶長度也就越長。
例如當(dāng)β3=0.9時,記憶平均范圍是10個周期;當(dāng)β3=0.999時,平均范圍是1000個周期。
根據(jù)β3可以算出當(dāng)前步驟的平滑值和之前平滑值的關(guān)系。
通過這個方程,我們定義了當(dāng)前平滑值和過去“長期記憶”(long-term-memory)的關(guān)系。顯然,當(dāng)β3=0時,AdaMod則完全等價于Adam。
計算出當(dāng)前平滑值后,在它和當(dāng)前Adam算出的學(xué)習(xí)率ηt中選出一個最小值,從而避免了出現(xiàn)過高學(xué)習(xí)率的情況。
這項操作可以看作是逐個元素地削減學(xué)習(xí)率,從而使輸出受到當(dāng)前平滑值的限制。
現(xiàn)在你已經(jīng)可以直接通過pip安裝。
pip install adamod
局限性
盡管AdaMod勝過Adam,但是在更長的訓(xùn)練條件下,SGDM仍然可以勝過AdaMod。
因此,有人提出了結(jié)合DiffGrad和AdaMod的DiffMod算法,使用另一個參數(shù)“l(fā)en_memory”代替β3,可以將batch的總數(shù)傳遞它,更易于記憶和追蹤。
關(guān)于作者
這篇文章的第一作者是Ding Jianbang,通訊作者是孫栩副教授,他本科畢業(yè)華中科技大學(xué),2010年從東京大學(xué)博士畢業(yè),曾在微軟公司美國雷蒙德研究院實習(xí)。
他的研究方向為自然語言處理、機器學(xué)習(xí)、深度學(xué)習(xí),曾擔(dān)任EMNLP、IJCNLP等國際學(xué)術(shù)會議的領(lǐng)域主席。
之前的AdaBound優(yōu)化器就是孫栩組的駱梁宸同學(xué)提出的。本文的第一作者也感謝了與駱梁宸等人參與的討論。
傳送門
博客討論:
https://medium.com/@lessw/meet-adamod-a-new-deep-learning-optimizer-with-memory-f01e831b80bd
論文地址:
https://arxiv.org/abs/1910.12249v1
AdaMod源代碼:
https://github.com/lancopku/AdaMod
DiffMod源代碼:
https://github.com/lessw2020/Best-Deep-Learning-Optimizers/blob/master/adamod/diffmod.py