Nesterov Momentum/zh

    From Marovi AI
    This page is a translated version of the page Nesterov Momentum and the translation is 100% complete.
    Other languages:
    Article
    Topic area Optimization
    Prerequisites Stochastic Gradient Descent, Gradient Descent


    概述

    Nesterov 動量,又稱 Nesterov 加速梯度(NAG),是一種一階優化方法,它在 梯度下降 的基礎上引入了一個在前瞻點處計算的速度項。該方法由 Yurii Nesterov 於 1983 年針對光滑凸問題提出,對具有 Lipschitz 梯度的凸函數能夠達到最優最壞情形收斂速率 $ O(1/t^2) $,相比之下普通梯度下降僅為 $ O(1/t) $。在現代機器學習中,它最常用於替代 隨機梯度下降 中的動量選項,相較於經典的重球動量,往往能帶來略快的收斂和更好的穩定性。

    其核心思想很簡單:NAG 不在當前參數向量處計算梯度後再走一個動量加權步,而是先沿先前的速度移動到一個前瞻點,在該點計算梯度,然後再做修正。這種細微的次序調整帶來了顯著的算法差異,也正是該方法理論加速性質的來源。

    背景:經典動量

    經典動量(有時稱為 Polyak 重球法)通過對過去梯度進行指數加權累積來改進梯度更新。設 $ \theta_t $ 表示第 $ t $ 步的參數,$ \eta $學習率$ \mu \in [0,1) $ 為動量係數,$ \nabla f(\theta_t) $ 為目標函數的梯度。則經典更新公式為

    $ {\displaystyle v_{t+1} = \mu v_t + \nabla f(\theta_t),} $ $ {\displaystyle \theta_{t+1} = \theta_t - \eta\, v_{t+1}.} $

    速度 $ v_t $ 類似於在損失景觀中滾動的粒子的動量:它在狹長的山谷中抑制高頻振盪,同時在持續的下降方向上積累速度。重球動量可以在病態問題上顯著加快進展,但容易越過最優點,並且在一般光滑凸函數上無法達到最優的加速收斂速率

    Nesterov 更新

    Nesterov 的改動是將梯度在前瞻點 $ \theta_t - \eta \mu v_t $ 處計算,而不是在 $ \theta_t $ 處。更新公式變為

    $ {\displaystyle v_{t+1} = \mu v_t + \nabla f\!\left(\theta_t - \eta \mu v_t\right),} $ $ {\displaystyle \theta_{t+1} = \theta_t - \eta\, v_{t+1}.} $

    從左到右閱讀這個公式:優化器先承諾執行慣性步 $ -\eta \mu v_t $,然後再問「我即將落腳的位置上梯度是什麼?」,並用該梯度對速度進行修正。如果慣性步正朝著上坡方向走,前瞻點的梯度就會提前指向反向,從而在過沖發生之前就將其抑制。

    在其最初的凸優化形式中,Nesterov 使用了一個由輔助序列遞推得到的隨時間變化的係數 $ \mu_t $,且當 $ t \to \infty $$ \mu_t \to 1 $。大多數深度學習實現將其替換為一個常數 $ \mu $(通常取 0.9 或 0.99),這雖然捨棄了形式上的加速保證,但仍保留了實際的優勢。

    直觀理解:前瞻修正

    一個有用的直覺是把每次迭代分成兩個階段。第一階段,迭代點沿當前速度滑行,與經典動量的做法完全相同。第二階段,在這個被投影后的位置上計算的梯度作為校正力。相比之下,經典動量是基於當前位置的梯度做修正,而當前位置已「落後於」真實運動。因此前瞻使 NAG 在每次迭代中獲得半步額外的信息。

    這種效應在具有狹長等高線的二次目標函數上最為明顯。重球迭代沿著狹窄方向振盪,其振幅衰減得很慢。NAG 的迭代能更快地阻尼同樣的振盪,因為每次修正都基於參數將要去到的位置,而不是它當前所處的位置。

    收斂性質

    對於具有 $ L $-Lipschitz 梯度的凸函數 $ f $(其最小值為 $ f^* $),Nesterov 加速梯度步長 $ \eta = 1/L $ 下滿足

    $ {\displaystyle f(\theta_t) - f^* \le \frac{2L\,\|\theta_0 - \theta^*\|^2}{(t+1)^2},} $

    這與任何只訪問梯度信息的一階方法的下界相匹配。[1]$ \mu $ 強凸目標上,速率變為線性收斂,收縮因子為 $ 1 - \sqrt{\mu / L} $,仍嚴格優於梯度下降$ 1 - \mu / L $

    上述保證依賴於精確梯度以及最初的時變調度。在深度學習實踐中使用的隨機梯度下,形式上的加速性質不再成立,但前瞻結構在經驗上通常仍然有幫助。

    實用形式

    上面的形式需要在 $ \theta_t - \eta \mu v_t $ 處計算梯度,這在更習慣於在當前存儲參數處計算梯度的自動微分框架中並不方便。Sutskever 等人[2]證明了通過變量替換可以得到一個等價的更新形式,其始終在當前參數處計算梯度:

    $ {\displaystyle v_{t+1} = \mu v_t - \eta\, \nabla f(\theta_t),} $ $ {\displaystyle \theta_{t+1} = \theta_t + \mu v_{t+1} - \eta\, \nabla f(\theta_t).} $

    這正是 PyTorch(torch.optim.SGD(..., nesterov=True))和 TensorFlow Keras 等框架所採用的形式。它在重新參數化的意義下與前瞻形式產生完全相同的軌跡,也是大多數實際從業者所運行的版本。

    與相關方法的比較

    在優化器的設計空間中,Nesterov 動量介於經典重球動量AdamRMSprop 等自適應方法之間。與重球相比,它通常訓練更快、過沖更少;這種差異雖然不大但相當一致,特別是在卷積視覺模型上,使用 Nesterov 動量的 SGD 仍是一個強基線。與自適應方法相比,NAG 不對每個參數單獨調整梯度尺度,因此對梯度幅值不均勻的問題魯棒性較差,但在調優良好的視覺基準上,往往能帶來更好的最終泛化效果。

    Lookahead 優化器以及與之密切相關的 Anderson 加速法都與 NAG 思想相似:它們都使用輔助序列來消除振盪行為,但其修正發生在更粗的粒度上,或採用更一般的外推方案。

    局限性

    儘管理論優雅,Nesterov 動量在實踐中仍有若干局限。其形式加速性質依賴於光滑性、凸性和精確梯度,而這些條件在深度網絡訓練中均不成立;一旦學習率權重衰減調好,相對於經典動量的經驗增益往往有限,有時幾乎可以忽略。當動量係數非常高(接近 1)且學習率較大時,它在含噪問題上仍可能過沖乃至發散。最後,在自適應縮放至關重要的任務上,例如基於 transformer語言模型NAG 幾乎不敵 Adam 及其變體,鮮少作為默認選擇。

    參考文獻

    1. Nesterov, Y. Introductory Lectures on Convex Optimization: A Basic Course. Kluwer Academic, 2004.
    2. Sutskever, I., Martens, J., Dahl, G., Hinton, G. "On the importance of initialization and momentum in deep learning." ICML 2013.