作者:Less Wright
編譯:ronghuaiyang
導讀
新的state of the art優化器:Rectified Adam(RAdam),相比adam,可以穩定提高準確率,關鍵是,真的有用。
Liu, Jian, He等人的一篇新論文介紹了RAdam,也叫作「Rectified Adam」。這是經典Adam優化器的一個新變種,在自動的、動態的調整自適應學習率的基礎上,他們詳細研究了訓練期間的變化和動量的影響。與vanilla Adam相比,RAdam有希望即刻對每一個AI架構進行提升。
RAdam對不同的學習率具有魯棒性,同時仍能快速收斂並獲得更高的精度(CIFAR數據集)
我已經在FastAI框架內測試了自己的RAdam,並很快獲得了新的高精度記錄,而在ImageNette上,只有兩項難以擊敗FastAI排行榜得分。和我測試過的很多論文不一樣,那些論文中的工作只適合他們特定的論文中使用的數據集,而並沒有新數據集上做得很好,我試了一下RAdam,真的有提升。
RAdam and XResNet50, 86% in 5 epochs
Imagenet排行榜,當前最高是84.6%
因此,我們需要深入研究下RAdam,了解它在內部做了什麼,以及為什麼它有希望為幾乎所有AI應用提供了更好的收斂性、更好的訓練穩定性(對選擇的學習率不那麼敏感)和更好的準確性和泛化能力。
不僅僅是CNNs,RAdam在對十億個單詞數據集的LSTM語言模型上也表現出色
所有人工智慧研究員的目標:一個快速和穩定的優化算法…
作者指出,儘管每個人都在朝著擁有快速穩定的優化算法的目標努力,但自適應學習率優化器(包括Adam、RMSProp等)都面臨著陷入糟糕的局部優化(如果沒有實現warmup方法的話)的風險。因此,幾乎每個人都使用某種形式的warmup(FastAI在Fit_One_Cycle中內置了warmup功能)……但是為什麼需要熱身呢?
由於目前對人工智慧社區中warmup啟發式的潛在原因甚至最佳實踐的理解有限,作者試圖揭示這個問題的基礎。他們發現,根本問題在於自適應學習率優化器的方差太大,特別是在訓練的早期階段,並且基於有限的訓練數據進行過多的跳躍,從而會陷入較差的局部優化。
因此,當優化器只處理有限的訓練數據時,warmup(初始訓練階段,學習速度要低得多)是自適應優化器抵消過多差異的必要條件。
下面是一個可視化的演示,展示了在沒有warmup的情況下Adam最初的情況——在10次疊代中,梯度分布很快就被打亂了:
注意,在沒有warmup的情況下,初始正態分布是如何迅速扭曲的。
簡而言之,vanilla Adam和其他自適應學習率優化器在早期的訓練中,由於數據太少做出了錯誤的決策。因此,如果沒有某種形式的warmup,他們很可能一開始就陷入糟糕的局部最優狀態,因為糟糕的開始使得訓練曲線更長、更困難。
然後,作者測試了在沒有熱身的情況下運行Adam,但是在前2000次疊代中避免使用任何動量(Adam-2k)。他們發現,取得了與Adam加熱身類似的結果,從而驗證了熱身功能在最初的訓練中是一種「減少方差」的功能,並避免了Adam在一開始沒有足夠的數據可用時陷入糟糕的優化狀態。
RAdam中的「整流器」:
考慮到熱身是一種方差衰減器,但所需的熱身程度是未知的,而且數據集之間是不同的,因此,作者決定用一種數學算法來作為一種動態方差衰減器。因此,他們構建了一個整流器項,這允許自適應動量作為一個潛在的方差的函數緩慢但穩定地得到充分表達。他們的完整模型是這樣的:
RAdam的核心部分,藍色方框突出了整流器r(t)在步長上的最終應用。
作者指出,在某些情況下,由於衰減速率和潛在方差的驅動,RAdam可以退化為具有等效動量的SGD。
總結一下,RAdam根據方差的潛在散度動態地打開或關閉自適應學習率。實際上,它提供了不需要可調參數的動態warmup。
作者證實,RAdam的性能優於傳統的手動warmup調優,需要猜測warmup步驟的數量:
RAdam自動提供方差衰減,在不同的熱身長度和不同的學習速度下,它的性能優於手動的warmups
總結:RAdam可以說是AI最新state of the art優化器
正如你所看到的,RAdam提供了一個動態啟發式方法來提供自動化的方差衰減,從而消除了在訓練期間熱身所涉及手動調優的需要。
此外,RAdam對學習速率變化(最重要的超參數)具有更強的魯棒性,並在各種數據集和各種AI體系結構中提供更好的訓練精度和泛化。
簡而言之,我強烈建議您將RAdam放到你的AI架構中,看看你有沒有立即獲得好處。我願意提供退款保證,但因為它的成本是0.00美元…
PyTorch的官方github提供了RAdam的實現:https://github.com/LiyuanLucasLiu/RAdam。
FastAI用戶可以很容易地使用RAdam如下:
導入RAdam,聲明為一個局部函數(根據需要添加參數)
通過前面聲明的部分用RAdam覆蓋默認的AdamW優化器。
更多的內容請閱讀原始論文:https://arxiv.org/abs/1908.03265v1
英文原文:https://medium.com/@lessw/new-state-of-the-art-ai-optimizer-rectified-adam-radam-5d854730807b
請長按或掃描二維碼關注本公眾號