可以丟掉SGD和Adam了,新的深度學習優化器Ranger:RAdam + LookAhead強強結合

2021-02-13 極市平臺

Ranger 優化器結合了兩個非常新的發展(RAdam + Lookahead)到一個單一的優化器中。為了證明它的有效性,我們的團隊最近使用 Ranger 優化器在 FastAI 全球排行榜上獲得了 12 個排行榜記錄。

Lookahead 是 Ranger 優化器的其中一半,是由著名的深度學習研究員 Geoffrey Hinton 在 2019 年 7 月的一篇新論文「LookAhead optimizer: k steps forward, 1 step back「中介紹的。LookAhead 的靈感來自於最近在理解神經網絡損失曲面方面的進展,並提出了一種全新的穩定深度學習訓練和收斂速度的方法。基於 RAdam(Rectified Adam)在深度學習的方差管理方面取得的突破,我發現將 RAdam + LookAhead 組合在一起(Ranger)可以產生一個夢之隊,可以得到甚至比單獨的 RAdam 更好的優化器。

Ranger 優化器是一個易於使用和高效的單一代碼庫(加載/保存和一個循環處理的所有參數的更新),集成到了 FastAI 中,Ranger 的原始碼你可以直接拿來用:

https://github.com/lessw2020/Ranger-Deep-Learning-Optimizer

Adam,SGD和Look Ahead + Adam/SGD在LSTM上的對比

為什麼 RAdam 和 LookAhead 是互補的

可以說,RAdam 為優化器在開始訓練時提供了最好的基礎。RAdam 利用一個動態整流器來根據變化調整 Adam 的自適應動量,針對當前數據集,有效地提供了一個自動 warm-up,,以確保可以得到一個紮實的訓練開頭。

LookAhead 的靈感來自於最近對深度神經網絡損失曲面的理解,並為在整個訓練過程中進行健壯和穩定的探索提供了突破。

引用 LookAhead 團隊的話說,LookAhead「減少了對大量超參數調優的需求」,同時「以最小的計算開銷在不同深度學習任務之間實現更快的收斂」。

因此,兩者都在深度學習優化的不同方面提供了突破,並且兩者的結合具有高度的協同性,可能為你的深度學習結果提供了兩種改進的最佳效果。因此,對更穩定和更健壯的優化方法的追求將繼續下去,通過結合兩個最新的突破(RAdam + LookAhead),Ranger 的集成有望為深度學習提供另一個進步。

Hinton 等人— 「我們通過實驗證明,即使在 ImageNet、CIFAR-10/100、神經機器翻譯和 Penn Treebank 上使用預設超參數設置, LookAhead 也可以顯著提高 SGD 和 Adam 的性能。」

由於LookAhead具有雙向探索的設置,因此對比SGD,Lookahead可以優化到距離minima更近的位置。

因此,本文在前面的 RAdam 介紹的基礎上,解釋了什麼是 LookAhead,以及如何將 RAdam 和 LookAhead 合併到一個單一的優化器 Ranger 中,從而獲得新的高精度。在我測試的前 20 個 epoch 中,我獲得了一個新的高準確率,比目前的 FastAI 排行榜高出 1%。

Ranger的第一次測試達到了93%

FastAI排行榜,20個epochs, 92%

更重要的是,任何人都可以使用 Ranger,看看它有沒有提高你的深度學習結果的穩定性和準確性!

因此,讓我們深入研究驅動 Ranger 的兩個組件 — RAdam 和 LookAhead:

1、什麼是 RAdam (Rectified Adam):

有個簡短的總結,開發 RAdam 的研究人員調查了為什麼自適應動量優化器(Adam,RMSProp 等等),所有這些都需要 warmup,否則他們在訓練開始前就會陷入糟糕的/可疑的局部最佳狀態。

原因是在開始訓練時,當優化器沒有看到足夠的數據來做出準確的自適應動量決策時,數據的方差就會出現非常大的情況。因此,Warmup 可以減少訓練開始時的方差……但即使是決定 Warmup 的程度,也需要根據數據集改變手動調整。

因此,Rectified Adam 是通過使用一個整流函數來確定一個「啟發式的 Warmup」,這個整流函數是基於實際遇到的方差來確定的。整流器動態的關閉和開啟自適應動量,這樣它就不會全速跳躍,直到數據的方差穩定下來。

通過這樣做,就避免了手動熱身的需要,並自動穩定了訓練。

一旦方差穩定下來,RAdam 基本上就變成了 Adam,甚至是 SGD。因此,RAdam 的貢獻是在訓練的開始。

讀者注意到,在結果部分,雖然 RAdam 超過了 Adam,但從長遠來看,SGD 最終可以趕上並超過 RAdam 和 Adam 的最終精度。

這就是我們現在要使用 LookAhead 的地方,整合一種新的探索機制,即使在 1000 個 epochs 之後也能超越 SGD。

Lookahead使用alpha= 0.5和變化學習率 vs SGD,1000個epoch

2、 Lookahead — 用於探索損失超平面的小夥伴 =更快、更穩定的探索和收斂。


正如 Lookahead 的研究人員所指出的,目前,大多數成功的優化器都是在 SGD 的基礎上進行優化的

1 、自適應動量(Adam, AdaGrad)

2 、一種加速形式(Nesterov 動量或 Polyak Heavy Ball)

來完善探索和訓練過程,最終趨同。

然而,Lookahead 是一種新的發展,它維持兩組權重,然後在它們之間進行插值 — 實際上,它允許一組更快的權重「向前看」或探索,而較慢的權重留在後面,以提供更長期的穩定性。

結果減少了訓練過程中的方差,大大降低了對次優超參數的敏感性,並減少了對大量超參數調優的需要。這是在完成各種深度學習任務時實現更快的收斂。換句話說,這是一個令人印象深刻的突破。

通過簡單的類比,可以將 LookAhead 理解為以下內容。想像你在一個山頂,周圍有各種各樣的落差。其中一條通往成功的底部,而其他的只是倒黴的裂縫。

你自己獨自探索是困難的,因為你必須選一條路下去,並假設它是一個死胡同,然後再找路出來。

但是,如果你有一個朋友,他呆在或接近頂部,如果你選的路是好的,就幫助你備份,這樣你可能會更好的找到最優的路徑,因為探索全地形會更快,困倒黴的裂縫的可能性會更小。

這就是 LookAhead 的基本功能。它保留一個額外的權值副本,然後讓內部化的「更快」優化器(對於 Ranger,即 RAdam)進行 5 或 6 個 batch 的搜索。batch 間隔由 k 參數指定。

當 k 個 batch 的探索完成時,LookAhead 將它保存的權值與 RAdam 的最新權值之間的差值乘以一個 alpha 參數(默認情況下為 0.5),r 然後更新 RAdam 的權值。

Range代碼顯示Lookahead更新RAdam的參數

結果實際上是內部優化器(在本例中是 RAdam)的快速移動平均和通過 LookAhead 獲得的較慢的指數移動平均的綜合效應。速度快的人探索,而速度慢的人則充當拉回或穩定機制 — 通常在速度快的人探索時留在後面,但在某些情況下,當速度快的人繼續探索時,速度慢的人會把速度快的人推下一個更有希望的斜坡。

由於具有 LookAhead 的安全性,優化器可以更充分地探索前景,而不必擔心陷入困境。

這種方法與目前使用的兩種主要方法完全不同——自適應動量或「heavy ball」/Nesterov 類型動量。

因此,LookAhead 在探索和尋找「下降的方式」方面更勝一籌,因為它增強了訓練的穩定性,甚至超過了 SGD。

3、Ranger — 一個集成的代碼庫,提供了把 RAdam 和 LookAhead 結合在一起的優化器

Lookahead 可以和任何優化器一起使用,作為「fast」權值,論文中使用的是 vanilla Adam,因為 RAdam 當時還不可用。

LookAhead的PyTorch集成

然而,為了便於代碼集成,簡化用法,我合併了成一個單一的優化器,名為 Ranger。

個人看到的ImageNette最高的20個epoch的分數 — 實際上是Ranger的第一次運行。(92%是目前的排行榜)。還要注意穩定的訓練進度。

4、現在就來用 Ranger 吧!

在 github 上有幾個 LookAhead 的實現,我從 LonePatient 的一個開始,因為我喜歡它簡潔的代碼,然後在此基礎上構建。RAdam,當然來自官方的 RAdam github 代碼庫。

使用步驟:

1 、 把 ranger.py 拷貝到你的文件夾中

2 、 import ranger:

3 、使用 FastAI 構建一個訓練準備使用 Ranger。

4 、開始測試!

LookAhead 參數:

k parameter :— 這個參數控制了在與 LookAhead 權值合併之前要運行多少個 batch,常見的默認值是 5 或者 6,論文中使用到了 20。

alpha = 這個參數控制了與 LookAhead 參數差異更新的百分比。Hinton 等人做了一個強有力的證明 0.5 可能是理想值,但值得做個簡短的實驗驗證一下。這篇論文提到的一個未來的想法可能是把 k 和或 alpha 放在一個基於訓練進展程度的時間表上。


總結

兩個獨立的研究團隊在實現快速、穩定的深度學習優化算法的目標上取得了新的突破。我發現,通過結合這兩個,RAdam + LookAhead,產生了一個增強的優化器(Ranger),並在 ImageNette 驗證了運行 20 個 epoch 分數的新高。

需要進一步的測試來優化 LookAhead 的 k 參數和 RAdam 學習率 ,但 LookAhead 和 RAdam 都減少了在達到 state of the art 之前的手動超參數調優,應該可以幫助你得到最好的訓練結果。

英文原文:

https://medium.com/@lessw/new-deep-learning-optimizer-ranger-synergistic-combination-of-radam-lookahead-for-the-best-of-2dc83f79a48d

相關焦點

  • 最強深度學習優化器Ranger開源:RAdam+LookAhead強強結合,性能更優速度更快
    AI 前線導讀:Ranger 優化器將 RAdam 與 Lookahead 這兩大新興成果加以結合,共同構建起一套用於深度學習的優化器。為了證明其功效,本文作者團隊最近利用 Ranger 優化器捕捉了 FastAI 全球排行榜上的 8 項上榜記錄。
  • 要得到最強的優化器,只需要把RAdam和LookAhead合二為一
    雷鋒網 AI 科技評論按:今年 7 月,「深度學習教父」Geoffrey Hinton 和他的團隊發表了一篇關於深度神經網絡優化器的論文,介紹了一種新的優化器「LookAhead」 (《LookAhead optimizer: k steps forward, 1 step back》,https://arxiv.org/abs/1907.08610)。
  • SGD、Adam優化器
    所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了局部的最優,沒有全局思想。)5.Momentum [mə'mentəm] 動量優化器Momentum旨在加速學習,特別是處理高曲率、小但一致的梯度,或帶噪音的梯度。
  • Adam作者大革新,聯合Hinton等人推出全新優化方法Lookahead
    多倫多大學的「Look ahead」Michael R. Zhang 和 Geoffrey Hinton 等研究者提出了一種新的最優化方法 Lookahead,該算法與之前已有的方法都不相同。此外,因為 Lookahead 與其它最優化器是正交的,這意味著我們可以使用 Lookahead 加強已有最優化方法的性能。
  • 自Adam 出現以來,深度學習優化器發生了什麼變化?
    :Phúc Lê機器之心編譯參與:高璇、王淑婷Adam 自出道以來,就一直是最流行的深度學習優化器除非把具有學習率硬編碼的代碼直接從 GitHub 裡複製到所選優化器中,否則我可能只會把 3e-4 放到 Adam 優化器中,然後讓模型訓練。如果損失減少,今天就可以收工大吉。但是,那些美好的日子已經一去不復返了。所以在這篇博客中,我將概述一些人們想出來推翻 Adam 的方法。
  • 深度學習/NLP調參trick整理(附代碼)
    整體分為三部分數據集,模型結構/初始化,模型超參數一.數據集1.數據集的選取為了儘快調整參數和模型,應當選取小數據集進行測試和調參二.模型結構/初始化1.模型初始化作用:參數初始化很重要,它決定了模型的訓練速度與是否可以躲開局部極小1.lstm的h用orthogonal2.relu
  • 技術分享|深度學習之Keras簡介與使用
    () 函數,函數命令如下,主要參數為optimizer、loss和metrics。是否使用Nesterov momentum2.1.2 RMSprop 優化器keras.optimizers.RMSprop(learning_rate=0.001, rho=0.9)建議除了學習率外,保留此優化器的默認參數。
  • Adam真的是最好的優化器嗎?有人認為不過是神經網絡進化的結果
    但近日,波士頓大學的一位助理教授做出了一個假設,他認為 Adam 或許不是最佳的優化器,只是神經網絡的訓練使其成為了最佳。Adam 優化器是深度學習中最流行的優化器之一。它適用於很多種問題,包括帶稀疏或帶噪聲梯度的模型。其易於精調的特性使得它能夠快速獲得很好的結果,實際上,默認的參數配置通常就能實現很好的效果。
  • 【TensorFlow】優化器AdamOptimizer的源碼分析
    點擊上方「MLNLP」,選擇「星標」公眾號重磅乾貨,第一時間送達來自 | 知乎作者 | 藥師地址 | https://zhuanlan.zhihu.com/p/63500952專欄 | 非凸優化學習之路
  • 那些年「號稱」要超越Adam的優化器
    近日一篇NeurIPS 2020 Spotlight論文引起了深度學習社區的關注,這篇論文來自耶魯大學、伊利諾伊大學香檳分校等研究機構,提出了一種全新的深度學習優化器AdaBelief,論文一開頭就亮出了自己的三個招牌:3.保證一定的訓練穩定性,可以提升GAN網絡的訓練效果。
  • 歷史最全深度學習與NLP核心概念、模型、策略及最新論文整理分享
    本資源整理了與自然語言處理(NLP)相關的深度學習技術核心概念,以及2019年概念相關最新的論文,涉及算法優化(Adam,Adagrad、AMS、Mini-batch SGD等),參數初始化(Glorot initialization、 He initialization),模型約束(Dropout、 Word Dropout、Patience、Weight Decay等),
  • 「穿越擁擠山谷」:一次深度學習優化器大閱兵
    而優化器(optimizer)通常指的就是更新參數的算法。近年來,數百種的優化方法噴湧而出,這些大規模隨機優化方法推動著各種各樣的深度學習任務的發展。考慮到選擇正確的優化算法並有效地調整其超參數,可能會在很大程度上影響學習模型的訓練速度和最終性能,如何選擇優化器則是深度學習中最關鍵的設計決策之一。這並非易事。
  • 2020年深度學習調參技巧合集
    以上方式的效果要根據label個數,數據集規模等特徵具體問題具體分析,表現可能不同,方式無非是probs融合和投票法的單獨使用or結合。差分學習率與遷移學習首先說下遷移學習,遷移學習是一種很常見的深度學習技巧,我們利用很多預訓練的經典模型直接去訓練我們自己的任務。雖然說領域不同,但是在學習權重的廣度方面,兩個任務之間還是有聯繫的。
  • 深度學習調參tricks總結!
    以上方式的效果要根據label個數,數據集規模等特徵具體問題具體分析,表現可能不同,方式無非是probs融合和投票法的單獨使用or結合。差分學習率與遷移學習首先說下遷移學習,遷移學習是一種很常見的深度學習技巧,我們利用很多預訓練的經典模型直接去訓練我們自己的任務。
  • 你有哪些深度學習(rnn、cnn)調參的經驗?
    你有哪些深度學習(rnn、cnn)調參的經驗?解析:解析一@陳運文:cnn的調參主要是在優化函數、embedding的維度還要殘差網絡的層數幾個方面。優化函數方面有兩個選擇:sgd、adam,相對來說adam要簡單很多,不需要設置參數,效果也還不錯。
  • 7 Papers|Hinton、李飛飛各有新作;深度學習硬體性能評價
    Hinton 等提出了新的優化算法,而李飛飛等在視頻預測任務上實現了新的 SOTA 模型。此外還有自然語言理解評價方法、文本+圖像數據融合任務的綜述,以及對深度學習的硬體進行評價的文章等。直觀來說,Lookahead 算法通過提前觀察另一個優化器生成的「fast weights」序列,來選擇搜索方向。該研究發現,Lookahead 算法能夠提升學習穩定性,不僅降低了調參需要的功夫,同時還能提升收斂速度與效果。研究表示,Lookahead 在殘差網絡(ImageNet)、Transformer(WMT 2014)等模型上,算法的性能顯著優於 SGD 和 Adam。
  • [機器學習基礎二] 深度學習優化器一覽
    本文為機器學習基礎 第二篇Hello大家好,本期將和大家一起分享和討論一下深度學習中的一個基礎組件:Optimizer,也就是優化器。
  • 深度學習筆記 | 第3講:深度學習優化算法之從SGD到Adam
    又到了每周一狗熊會的深度學習時間了。在上一期中,小編和大家介紹了機器學習和深度學習中的核心任務以及神經網絡的正則化方法和dropout方法來防止過擬合。本期將借著第一期推送小編關於模型與算法的討論的引子,和大家深入探討機器學習和深度學習的數學本質,並在此基礎上重點介紹深度學習中常用的優化算法。
  • 深度學習100問-11:什麼是學習率衰減?
    深度學習100問Author:louwillMachine Learning