優化算法:《Lookahead Optimizer: k steps forward, 1 step back》

《Lookahead Optimizer: k steps forward, 1 step back》

  作者:Michael R. Zhang, James Lucas,Geoffrey Hinton,Jimmy Ba(adam作者)
  來源:多倫多大學
  論文地址:https://arxiv.org/abs/1907.08610v1
  Pytorch實現:https://github.com/alphadl/lookahead.pytorch
  Tensorflow:https://github.com/Janus-Shiau/lookahead_tensorflow

0 前言

  最優化方法一直主導着模型的學習過程,沒有最優優化器,模型也就沒了靈魂。好的最優化方法一直是 ML 社區在積極探索的,它幾乎對任何機器學習任務都會有極大的幫助。

  從最開始的批量梯度下降,到後來的隨機梯度下降,然後到 Adam 等一大幫基於適應性學習率的方法,最優化器已經走過了很多年。儘管目前 Adam 差不多已經是默認的最優優化器了,但從 17 年開始就有各種研究表示 Adam 還是有一些缺陷的,甚至它的收斂效果在某些環境下比 SGD 還差。

  爲此,我們期待更好的標準優化器已經很多年了…

  最近,來自多倫多大學向量學院的研究者發表了一篇論文,提出了一種新的優化算法——Lookahead。值得注意的是,該論文的最後作者 Jimmy Ba 也是原來 Adam 算法的作者,Hinton 老爺子也作爲三作參與了該論文,所以作者陣容還是很強大的。

1 相關研究

  SGD 算法雖然簡潔,但其在神經網絡訓練中的性能堪比高級二階優化方法。儘管 SGD 每一次用小批量算出來的更新方向可能並非那麼精確,但更新多了效果卻出乎意料地好。

  一般而言,SGD 各種變體可以分成兩大類:

  • 自適應學習率機制,如 AdaGrad 和 Adam;
  • 加速機制,如 Polyak heavyball 和 Nesterov momentum 等

  這兩種方法都利用之前累積的梯度信息實現快速收斂,它們希望借鑑以往的更新方向。但是,要想實現神經網絡性能提升,通常需要花銷高昂的超參數調整

  其實很多研究者都發現目前的最優化方法可能有些缺點,不論是Adam還是帶動量的SGD,它們都有難以解決的問題。例如我們目前最常用的 Adam,我們拿它做實驗是沒啥問題的,但要是想追求收斂性能,那麼最好還是用SGD結合Momentum。但使用動量機制又會有新的問題,我們需要調整多個超參數以獲得比較好的效果,不能像 Adam 給個默認的學習率 0.0001 就差不多了。

  在 ICLR 2018 的最佳論文 On the Convergence of Adam and Beyond 中,研究者明確指出了 Adam 收斂不好的原因。他們表明在利用歷史梯度的移動均值情況下,模型只能根據短期梯度信息爲每個參數設計學習率,因此也就導致了收斂性表現不太好。

  那麼 Hinton 等研究者是怎樣解決這個問題的?他們提出的最優化方法能獲得高收斂性能的同時,還不需要調參嗎?

2 Lookahead

  本文提出的新的優化方法lookahead,該方法與之前的SGD有所不同, 整體算法如下圖:


在這裏插入圖片描述

  他擁有2套權重:

  • Fast Weights
    它是由內循環優化器(inner-loop)生成的k次序列權重;這裏的優化器就是原有的優化器,如SGD,Adam等均可;其優化方法與原優化器並沒有區別,例如給定優化器A,目標函數L,當前訓練mini-batch樣本d,其更新規則:
    θt,i+1=θt,i+A(L,θt,i1,d)\theta_{t,i+1} = \theta_{t,i}+A(L,\theta_{t,i-1},d)
    但這裏會將該輪循環的k次權重,用序列都保存下來

  • Slow Weights
    在每輪內循環結束後,根據本輪的k次權重,計算等到Slow Weights;這裏採用的是指數移動平均(exponential
    moving average (EMA))算法來計算,我之前有篇博客總結了該算法,有興趣可以去看看


    在這裏插入圖片描述

  最終模型使用的參數也是慢更新(Slow Weights)那一套,因此快更新(Fast Weights)相當於做了一系列實驗,然後慢更新再根據實驗結果選一個比較好的方向,這有點類似 Nesterov Momentum 的思想。

  該研究表明這種更新機制能夠有效地降低方差。研究者發現 Lookahead 對次優超參數沒那麼敏感,因此它對大規模調參的需求沒有那麼強。此外,使用 Lookahead 及其內部優化器(如 SGD 或 Adam),還能實現更快的收斂速度,因此計算開銷也比較小。

  研究者在多個實驗中評估 Lookahead 的效果。比如在 CIFAR 和 ImageNet 數據集上訓練分類器,並發現使用 Lookahead 後 ResNet-50 和 ResNet-152 架構都實現了更快速的收斂。

  研究者還在 Penn Treebank 數據集上訓練 LSTM 語言模型,在 WMT 2014 English-to-German 數據集上訓練基於 Transformer 的神經機器翻譯模型。在所有任務中,使用 Lookahead 算法能夠實現更快的收斂、更好的泛化性能,且模型對超參數改變的魯棒性更強。

  這些實驗表明 Lookahead 對內部循環優化器、fast weight 更新次數以及 slow weights 學習率的改變具備魯棒性

3 實驗分析

  研究人員在一系列深度學習任務上使用 Lookahead 優化器和業內最強的基線方法進行了對比,其中包括在 CIFAR-10/CIFAR-100、ImageNet 上的圖像分類任務。此外,研究人員在 Penn Treebank 數據集上訓練了 LSTM 語言模型,也探索了基於 Transformer 的神經機器翻譯模型在 WMT 2014 英語-德語數據集上的表現。對於所有實驗,每個算法都使用相同數量的訓練數據。

不同優化算法的性能比較
在這裏插入圖片描述
  (左)在 CIFAR-100 上的訓練損失;(右)使用不同優化器的 ResNet-18 在 CIFAR 數據集上的驗證準確率。研究者詳細研究了其它優化器的學習率和權重衰減;Lookahead 和 Polyak 超越了 SGD。

ImageNet 的訓練損失
在這裏插入圖片描述

  星號表示激進的學習率衰減機制,其中 LR 在迭代 30、48 和 58 次時衰減。右表展示了使用 Lookahead 和 SGD 的 ResNet-50 的驗證準確率。

Lookahead在Penn Treebank上的表現
在這裏插入圖片描述

  從這些實驗中,可以得到如下結論

  對於內部優化算法A、k 和 α 的魯棒性:研究人員在 CIFAR 數據集上的實驗表明,Lookahead 可以始終如一地在不同初始超參數設置中實現快速收斂。我們可以看到 Lookahead 可以在基礎優化器上使用更高的學習率進行訓練,且無需對 k 和 α 進行大量調整

  內循環和外循環評估:研究人員發現,在每個內循環中 fast weights 可能會導致任務性能顯著下降——這證實了研究者的分析:內循環更新的方差更高

4 lookahead在HRNet上的表現

待更新。。。

5 參考文獻

[1] Adam作者大革新, 聯合Hinton等人推出全新優化方法Lookahead: https://www.jiqizhixin.com/articles/2019-07-25-14
[2]lookahead : https://blog.csdn.net/jacke121/article/details/97296669

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章