在 ICLR 2018 的高分論文中,有研究者表明因為歷史梯度平方的滑動平均值,Adam 等演算法並不能收斂到最優解,因此它在泛化誤差上可能要比 SGD 等方法差。最近 Salesforce 的研究者提出了一種轉換機制,他們試圖讓演算法在訓練過程中自動由 Adam 無縫轉換到 SGD 而保留兩種最佳化演算法的優良屬性。
隨機梯度下降(SGD)已經成為了深度神經網路最常用的訓練演算法之一。儘管它非常簡單,但在各種應用程式中都表現良好,且也有很強的理論基礎。這些理論基礎體現在避免陷入鞍點問題(Lee et al., 2016)、提高泛化效能(Hardt et al., 2015; Wilson et al., 2017)和解釋為貝葉斯推斷(Mandt et al., 2017)等方面。
訓練神經網路等價於解決以下非凸最佳化問題:
其中 f 為損失函式。SGD 的迭代更新公式可以表示為:
其中 w_k 表示第 k 次迭代,α_k 為控制下降步幅大小的引數序列,它同樣也可以稱為學習率。∇ f(w_k) hat 表示損失函式對 w_k 所求的隨機梯度。SGD 的變體 SGDM 使用迭代的慣性加速訓練過程,該方法已在實踐中表現出十分優秀的效能(Sutskever et al., 2013)。SGDM 的迭代更新表示式可以表示為:
其中 β ∈ [0, 1) 為動量引數,v_0 初始化為 0。
SGD 的缺點是它在所有方向上一致地縮放梯度而確定下降步長,這對病態問題可能特別有害。因此 SGD 需要依據實際情況頻繁地修正學習率 α。
為了糾正這些缺點,一些適應性方法透過估計函式的曲率而提出瞭解決方案,這些方法包括 Adam(Kingma & Ba, 2015)、Adagrad(Duchi et al., 2011)和 RMSprop(Tieleman & Hinton, 2012)。這些方法可以解釋為使用學習率向量的 SGD,即它們會根據訓練演算法的過程而自適應地修正學習率。此外,對於 SGD 與 SGDM 等方法來說,它們的學習率是一個標量。
然而有趣的是,Adam 雖然在初始部分的訓練和泛化度量都優於 SGD,但在收斂部分的效能卻停滯不前。這令很多研究者開始尋找結合 Adam 和 SGD 的新方法,他們希望新演算法不僅能利用 Adam 的快速初始化過程,同時還利用 SGD 的泛化屬性。
此外,Wilson 等人今年發表研究表明適應性方法因為非均勻的梯度縮放而導致泛化效能的損失,因此我們比較自然的策略是利用 Adam 演算法初始化訓練,然後在適當的時候轉換為 SGD 方法。
為了更進一步研究該問題,近日 Nitish Shirish Keskar 和 Richard Socher 提出了 SWATS 演算法,該演算法使用簡單的策略在訓練中從 Adam 轉換為 SGD 而結合兩種演算法的優點。SWATS 演算法的轉換過程是自動完成的,因此它並不會引入更多的超引數。
在 Nitish 等人的策略中,轉換點和 SGD 學習率都是作為引數而在訓練過程學習的。他們在梯度子空間中監控 Adam 迭代步的投影,並使用它的指數平均作為轉換後 SGD 學習率的估計。
論文:Improving Generalization Performance by Switching from Adam to SGD
論文連結:https://arxiv.org/abs/1712.07628
摘要:儘管訓練結果十分優秀,Adam、Adagrad 或 RMSprop 等適應性最佳化方法相比於隨機梯度下降(SGD)還是會有較差的泛化效能。這些方法在訓練的初始階段通常表現良好,但在訓練的後期的效能會被 SGD 所超越。我們研究了一種混合最佳化策略,其中初始化部分仍然使用適應性方法,然後在適當的時間點轉換為 SGD。具體來說,我們提出了 SWATS 演算法,一種在觸發條件滿足時由 Adam 轉化為 SGD 的簡單策略。我們提出的轉換條件涉及到梯度子空間中的 Adam 迭代步投影。透過設計,該轉換條件的監控過程只會新增非常少的計算開銷,且並不會增加最佳化器中超引數的數量。我們試驗了多個標準的基準測試,例如在 CIFAR-10 和 CIFAR-100 資料集上的 ResNet、SENet、DenseNet 和 PyramidNet,在 tiny-ImageNet 資料集上的 ResNet,或者是在 PTB、WT2 資料集上使用迴圈神經網路的語言模型。試驗結果表明,我們的策略能令 SGD 與 Adam 演算法之間的泛化差距在大多數任務中都能得到縮小。
如下圖 1 所示,SGD 的期望測試誤差能收斂到約為 5% 左右,而 Adam 的泛化誤差在 7% 左右就開始震盪,因此精調的學習率策略並沒有取得更好的收斂效能。
圖 1:在 CIFAR-10 資料集上使用四種最佳化器 SGD、Adam、Adam-Clip(1,∞)和 Adam-Clip(0,1)訓練 DenseNet 架構。SGD 在訓練中實現了最佳測試準確率,且與 Adam 的泛化差距大概為 2%。為 Adam 的每個引數設定最小的學習速率可以減小泛化差距。
正如圖 2 所示,在 10 個 epoch 之後切換會導致學習曲線非常類似於 SGD,而在 80 個 epoch 之後切換會導致精度下降約 6.5%。
圖 2:使用 CIFAR-10 資料集上訓練 DenseNet 架構,使用 Adam,在(10、40、80)epoch 後調整 SGD 學習速率至 0.1,動量為 0.9;切換點在圖中使用 Sw@ 表示。更早切換可以讓模型達到與 SGD 相比的準確率,而如果在訓練過程中切換過晚會導致與 Adam 相同的泛化差距。
圖 4:在 CIFAR-10 和 CIFAR-100 資料集上訓練 ResNet-32、DenseNet、PyramidNet 和 SENet,並比較 SGD(M)、Adam 和 SWATS 的學習速率。
圖 5:在 Tiny-ImageNet 資料集上訓練 ResNet-18,並比較 SGD(M)、Adam 和 SWATS 的學習速率。