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

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

作者 | Less Wright

編譯 | ronghuaiyang

來源 | AI公園(ID:AI_Paradise)

【導讀】給大家介紹一個新的深度學習優化器,Ranger,同時具備RAdam和LookAhead的優點,一行代碼提升你的模型能力。

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。

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

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 的性能。”

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

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

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

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

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

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

FastAI排行榜,20個epochs, 92%

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

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

1、什麼是 RAdam (Rectified Adam):

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

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

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

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

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

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

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

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

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

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

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

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

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

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

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

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

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

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

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

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

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

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

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

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

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

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

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

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

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

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

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

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

LookAhead的PyTorch集成

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

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

4、現在就來用 Ranger 吧!

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

使用步驟:

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

2 、 import ranger:

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

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

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

4 、開始測試!

可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合可以丢掉SGD和Adam了,新的深度学习优化器Ranger:RAdam + LookAhead强强结合

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

(*本文為AI科技大本營轉載文章,轉載請聯繫原作者)


分享到:


相關文章: