作者 | 賽文

編輯 | 陳老師

剛剛有兩個年輕人問我,Adam老師,發生腎麼事了?

我說腫麼了?

塔燜啪的一下發來了一張截圖,很快噢!

嗷!源賴氏佐田,有個新算法,被人號稱又要超越我了,俺又要退休了......

陳老師說婷婷! 上面的全刪除,這篇文章咱正常寫,小心被消費。

好的陳老師

,已經刪了。

近日一篇NeurIPS 2020 Spotlight論文引起了深度學習社區的關注,這篇論文來自耶魯大學、伊利諾伊大學香檳分校等研究機構,提出了一種全新的深度學習優化器AdaBelief,論文一開頭就亮出了自己的三個招牌:

1.擁有可以媲美Adam的快速收斂速度;

2.能達到像SGD那樣的泛化能力;

3.保證一定的訓練穩定性,可以提升GAN網絡的訓練效果。

論文鏈接:https://arxiv.org/abs/2010.07468

論文介紹:https://juntang-zhuang.github.io/adabelief/

代碼鏈接:https://github.com/juntang-zhuang/Adabelief-Optimizer

而在這個時候保準會有一些人站出來“戲謔”說:

Adam又被超越了!

Adam又雙叒叕被退休了!

......

在仔細看這篇論文之前,就讓AI科技評論先帶大家回顧一下那些年“號稱”要超越Adam的優化器吧。

本文最後需要指出的是,怕大家看不到,想了想把它放到這裏來

Adam和SGD確實是座大山,如果研究出新的優化器真的超越了Adam和SGD,那這項研究肯定能AI史上留名。

但是大家也不都是抱着非要超越的目的,不能不讓人做優化器相關的研究吧,如果每次發表相關論文都被人戲謔妄想超越Adam/SGD,那這種風氣正常嗎?

所以,本文所說到的“號稱”大多是指被別人號稱被別人所戲謔,而新的優化器論文研究者是否有主動去提“超越/Beyond”,還是被別人或媒體去強加的“唉,這又有一篇號稱要超越Adam的優化器”,但是這些人真的去做實驗驗證了嗎?

當然,如果作者本人去主動提“超越/Beyond Adam”,那就歡迎大家對着相應算法做實驗拿出證據錘就是了。

1 那些年“號稱”要超越Adam的優化器

近年來針對傳統優化器的工作層出不窮,研究者們往往都會進行大量的實驗來證明自己的方法要比SGD和Adam的性能好,作爲目前使用最爲廣泛的兩種優化器,他們本身到底存在什麼樣的問題呢。

我們首先來分析一下這兩種優化器的侷限性,其中隨機梯度下降算法(SGD)可謂是歷史悠久,但是其常被詬病計算速度緩慢,同時由於訓練過程中學習率恆定,往往只能獲得一個局部最優點,所以SGD往往和動量方法結合在一起,這樣既能對訓練過程進行加速,同時也提高了泛化能力。

Adam算法是在ICLR 2015上在論文《Adam: A Method for Stochastic Optimization》中被提出:

Adam算法一經提出,就常年保持在ICLR會議引用量第一名的位置,Adam的設計目標就是尋求更快的計算速度,相對於SGD固定的學習率,其利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率,但是ICLR 2018的最佳論文《On the Convergence of Adam and Beyond》

論文鏈接:https://arxiv.org/abs/1904.09237

曾對Adam進行了更加詳細的實驗和證明,該論文表明Adam的優化結果往往不如帶動量的SGD方法,並分析可能原因是Adam算法使用了指數滑動平均(exponential moving average)操作,指數滑動平均會導致算法無法到達收斂點,這也給學者指明瞭一條優化Adam的方向,之後出現了很多對這一點的改進工作。

1.1 ICLR 2019中國北大本科生提出的AdaBound

論文鏈接:https://arxiv.org/abs/1902.09843

該論文表明Adam在訓練末期會出現較大或者較小的學習率的現象,而導致模型無法完全收斂,同時訓練過程中不斷變化的學習率也給訓練的穩定性提出了挑戰,這些都會影響最後的泛化能力。

AdaBound針對該問題,提出了一種“學習率裁剪”方法,即給定一組學習率閾值,防止在訓練末期學習率出現異常值和震盪情況,裁剪公式如下,

其中

、和

並不是常數,而是時間t的函數,初始值爲0,隨着訓練時間t逐漸收斂到

,而初始值爲∞,隨着時間t也逐漸收斂到。

在裁剪公式的作用下,AdaBound在訓練初始階段表現的像Adam,擁有較快的訓練速度,而在訓練末期,由於學習率受到限制,其性能表現又像SGD一樣,可以得到泛化的解。

1.2 “整流版Adam”——RAdam

論文鏈接:https://arxiv.org/abs/1908.03265

這篇文章重點對原始Adam的自適應學習率進行了分析,發現訓練初期由於樣本量不足,會導致自適應學習率的方差過高,這會使梯度的分佈變扭曲,進而就導致了Adam無法完全收斂,對於這個問題,RAdam首先將簡單移動平均值(SMA)作爲方差修正的控制量

,然後根據的閾值在訓練初期切換RAdam的學習率變換模式,在訓練中後期動態的計算方差的修正範圍,從而達到更好的優化性能。

目前RAdam已被ICLR2020接收。

1.3 可以自動預熱的AdaMod

論文鏈接:https://arxiv.org/abs/1910.12249

AdaMod同樣是對原始Adam的學習率進行改進,改進的依據是學習率的長期變化特性,作者只在原始Adam的基礎上增加了一個超參數

,用來描述訓練過程中學習率記憶長短的程度,指數滑動平均的範圍就是

,所以根據就能算出當前時刻的學習率的平滑插值進而結合長期記憶就可以得到學習率的值,從而避免出現極端學習率的情況。

1.4 更加省顯存的AdaFactor

論文鏈接:https://arxiv.org/abs/1804.04235

對於CV模型,很多時候需要使用帶動量的SGD才能得到最佳的收斂結果,而在NLP領域,以Adam爲代表的自適應學習率優化器纔是主角,目前隨着NLP模型的參數量越來越大,我們不得不開始考慮在各種地方來節省顯存,AdaFactor就是一種輕型的自適應學習率優化器,其首先分析了原始Adam中佔用顯存較多的成分是動量和用來計算梯度前兩階矩的緩存變量,AdaFactor直接拋棄了動量成分,但是爲了仍然保留Adam自適應學習率的特點,其保留了緩存變量並做了進一步的壓縮處理。

2 來看看最新的AdaBelief吧

AdaBelief同樣是在Adam的基礎上進行改進,作者直接將其與Adam的算法過程進行了對比:

二者的區別已經用藍色字體標出,從最終梯度更新的公式來看,AdaBelief僅僅對分母進行了修改,其中Adam的更新方向爲

,AdaBelief的梯度更新方向爲

,作者形象的將

比喻爲當前梯度方向的“belief”,其中

的區別在於它們分別是

的指數滑動平均(EMA)值,其中

爲t時刻梯度的觀測值,而

是t時刻梯度的預測值,然後在梯度更新時比較觀測值和預測值的大小,如果當前觀察到的梯度非常接近梯度預測,就獲得一個較大的更新步長,反之獲得一個較小的更新步長。

映射到代碼實現中也就需要像下面修改幾行代碼即可:

原始Adam:

# Decay the first and second moment running average coefficientexp_avg.mul_(beta1).add_(1 - beta1, grad)exp_avg_sq.mul_(beta2).addcmul_(1 - beta2, grad, grad)

AdaBelief代碼:

# Update first and second moment running averageexp_avg.mul_(beta1).add_(1 - beta1, grad)grad_residual = grad - exp_avgexp_avg_var.mul_(beta2).addcmul_(1 - beta2, grad_residual, grad_residual)

這麼小的改動的確讓人感到非常驚訝,但是背後仍然具有相當有意思的理論支持,比如作者考慮了損失函數的曲率信息,在每一步更新時根據曲率調整更新步長的大小。

上圖中區域3的梯度值很大,但是曲率很小,爲了跳出這個局部區域,我們實際上需要一個較大的更新步長,對於Adam,此時的值較大,分母較大,導致更新步長很小,而對於AdaBelief,此時的值較小,分母較小,所以更新步長很大,可以達到理想的效果。

下面是使用一些toy數據繪製的AdaBelief優化可視化效果:

3 實驗

本文分別對圖像分類、時間序列建模和GAN訓練三個方面進行了實驗。

圖像分類baseline選擇了VGG、ResNet和DenseNet,數據集使用Cifar和ImageNet,實驗結果如下:

時間序列實驗中,baseline選擇LSTM,數據集使用Penn TreeBank,實驗結果如下:

GAN訓練實驗中,baseline選擇WGAN和WGAN-GP,數據集使用Cifar,不過目前論文GAN的實驗結果引發了大家的質疑,作者團隊已經在補充實驗,相信不久就會更新論文。

4 討論

AdaBeilef一經NeurIPS 2020接收,就在Reddit上面引發了激烈的討論,很多網友對這項工作表示贊同,當然也有網友對論文中的實驗提出了質疑,作者也在第一時間進行了回覆。

我們挑選了其中幾個大家重點關注的問題,並一一諮詢了本文的第一作者,下面我們來看一下作者如何回答這些問題。

1、AI科技評論:我們看到大家的質疑主要是針對實驗部分,尤其是對於GAN的訓練,想問一下團隊是在初期就有對GAN做提升的計劃嗎?

作者:最初的時候並沒有想到GAN。增加了GAN的原因是在reddit上瀏覽關於optimizer的帖子時,發現有人指出不少新提出的optimizer在其他task上很好,但是在GAN上很差,所以心血來潮試了一下。

由於我們沒有做過GAN方面的工作,所以選擇model的時候很隨意,從PyTorch官網上隨便抄了一段最簡單的代碼。最開始用的model過於簡單是我們的疏忽,經網友提醒後選擇了大一點的模型,SN-GAN在CIFAR10得到了低於13的FID,基本算得上是大家所說的SOTA。

在這個模型下,公平比較各種optimizer,我們的方法依然不弱於Adam。我們團隊對於各方面的質疑是很認真的,所以基本上看到這些質疑後一天內就重新實驗並開源代碼。這一點還是要感謝網友,估計審稿人是主要做優化的,偏理論一點,所以對於偏實踐的SOTA沒有概念,也沒有指出這個問題。我們會更新文章。

另外還有一位朋友問到關於mode collapse的,我沒有來得及解答,在這裏回覆一下:首先13的FID應該沒有mode collapse,說明實際效果還可以;其次新的優化器不能完全解決mode collapse的問題,如果模型有問題是無法靠優化器彌補的。

2、AI科技評論: NeurlPS審稿人對這個工作是什麼看法?

作者:我們的得分是785,review比較長,大家可以在公開後去官網看,這裏先放一下meta review:

3、AI科技評論:這個工作背後有特殊的故事嗎?

作者:沒有,就是普通的research project,唯一特殊的地方就是我不是計算機系的,只有倆1080Ti GPU,跑ImageNet還是借別人的GPU,大概很少這麼窮的。

4、AI科技評論:你對目前大家看不上這種新式優化器工作的現象有什麼看法,你覺得導致這種現象的原因是什麼?

作者:可以理解,會認爲新的優化器是噱頭,很少有實際效果好的。這個想法是基於自己的經驗,從經驗到這種想法沒啥問題。不過可能要比較一下花了多久調Adam,又花了多久測試新的優化器,是不是本人對於超參的設置已經“過擬合”到Adam了;當然同樣的問題也會出現在我們的實驗中,所以我們儘量用官方的實現去比較,或者直接從別人的文章裏引用結果,儘量避免自己跑別人的方法。另外一個原因是爲了寫文章吧,如果和之前的文章比較,用同一種優化器纔是公平的,這個應該也是很重要的原因。

5、AI科技評論:你認爲這個方向今後的潛力如何。

作者:應該提供了一種新的思路,把分母修改一下就得到了,不考慮可讀性的話在Adam改兩行就夠了,個人覺得算不上“魔改”。如果大家還有其他問題,建議到github提交issue,不過請儘可能提供詳細的信息,我們會盡快解答。

至於AdaBeilef效果到底如何,還有哪些不足之處,就交給有心人去評判吧,畢竟大家還是抱着

的心態多一些,反正接着用SGD/Adam唄。

有優化器方面的研究者最好能和作者多battle幾回,說不定改進改進,駭!最後真成了,那論文大家一起掛名唄。

相信目前絕大多數煉丹師在訓練時都是SGD或者Adam一把梭,時間一長就形成了習慣,要問爲什麼這種新提出的優化器還無法代替SGD和Adam,筆者賽文認爲,就算是有效果很好的優化器,可能也是因爲Pytorch和Tensorflow這些深度學習框架中還沒有完整的庫實現吧(不手動

保命)。

相關文章