RMSProp/zh
| Article | |
|---|---|
| Topic area | optimization |
| Prerequisites | Stochastic Gradient Descent, Backpropagation, Gradient Descent |
概述
RMSProp(Root Mean Square Propagation,均方根傳播)是一種通過隨機梯度下降訓練神經網絡的自適應學習率優化算法。該方法由 Geoffrey Hinton 在其 2012 年 Coursera 神經網絡課程中提出,RMSProp 按照對迄今所見梯度平方進行指數衰減的滑動平均來縮放每個參數的更新。梯度持續較大的參數獲得較小的有效步長,而梯度較小或稀疏的參數則獲得較大的更新。這種逐參數的重新縮放幫助優化器在損失曲面的平緩方向上快速前進,同時避免在陡峭方向上發散;在 Adam 興起之前,它一直是循環神經網絡的默認優化器。[1]
該方法在原始的梯度下降與 Adam 等完全自適應方法之間占據中間位置。它解決了 AdaGrad 一個廣為人知的失效模式:梯度平方的累積和單調增長,最終將有效學習率縮減為零。RMSProp 用指數滑動平均代替累積和,使步長能夠響應近期的曲率信息,因此在長時間訓練以及深度學習和強化學習中常見的非平穩目標上仍然可用。
直覺
核心思想是為每個參數估計近期梯度的典型量級,並將每次更新除以該估計值。如果某參數的梯度絕對值持續較大,則梯度平方的滑動平均也較大,更新被抑制。如果梯度較小,除數也較小,因此相同的標稱學習率就會產生更大的有效步長。其效果是對每個參數的步長進行近似歸一化,而不需要諸如海森矩陣這樣的二階信息。
一個有用的直觀比喻是損失曲面上一條狹長的山谷。使用單一全局學習率的普通SGD要麼在陡峭的谷壁之間來回振盪(學習率過大),要麼在谷底緩慢爬行(學習率過小)。RMSProp在梯度平方較大的陡峭方向上縮小步長,同時在平緩方向上保留相對較大的步長。軌跡因此更平滑,沿谷底的前進也加速。與 AdaGrad 不同,梯度平方的估計會隨時間衰減,因此優化器在訓練後期需要時仍能採取較大的步長。
公式
設 $ \theta_t \in \mathbb{R}^n $ 表示第 $ t $ 步的參數向量,並令 $ g_t = \nabla_\theta L(\theta_t) $ 為損失 $ L $ 關於參數的梯度,在一個小批量上計算。RMSProp維護逐元素梯度平方的指數滑動平均 $ v_t $,並用其平方根來重新縮放更新:
$ {\displaystyle v_t = \rho\, v_{t-1} + (1 - \rho)\, g_t \odot g_t} $
$ {\displaystyle \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{v_t} + \epsilon}\, g_t} $
其中 $ \eta $ 為全局學習率,$ \rho \in [0, 1) $ 為滑動平均的衰減率(常記為 $ \beta $ 或 $ \gamma $),$ \epsilon $ 為防止除以零的小常數。運算 $ \odot $ 表示逐元素乘法,平方根與除法也按元素逐一進行。狀態 $ v_0 $ 初始化為零。
一種常見的替代寫法將分母記為 $ \sqrt{v_t + \epsilon} $,將 $ \epsilon $ 放在平方根內部而不是之後再加上;這是 TensorFlow 採用的形式,在訓練初期會產生略有不同的數值行為,但本質上是等價的。超參數的典型默認值為 $ \eta = 10^{-3} $、$ \rho = 0.9 $ 和 $ \epsilon = 10^{-8} $,但學習率通常需要針對具體問題進行調優。
訓練與推理
RMSProp僅在訓練時使用;在推理時,訓練好的權重被直接使用,不涉及優化器狀態。訓練期間,優化器維護一個與參數形狀相同的額外張量(即滑動平均 $ v_t $),因此內存開銷大約等於模型本身。這比同時存儲一階矩和二階矩的 Adam 更省內存,但比不存儲任何狀態的標準 SGD 占用更多內存。
每一步需要一次逐元素平方運算、一次逐元素乘加運算以更新 $ v_t $、一次逐元素平方根運算以及一次逐元素除法運算。這些運算在 GPU 上是高度並行的,相對於網絡的前向和反向傳播開銷可以忽略不計。由於矩估計是按批次累積的,進度的有意義單位是優化器步數而不是掛鍾時間;學習率調度和預熱階段通常以步數表示。
從檢查點恢復訓練時,必須同時恢復參數和優化器狀態。僅恢復參數實際上會將梯度平方的估計重置為零,導致最初的幾次更新過大,從而可能在冷啟動時破壞訓練的穩定性。大多數深度學習框架在保存檢查點時會自動保存和恢復優化器狀態。
變體
基礎算法的若干變體出現在文獻和實踐中。Hinton 最初的課程描述了不帶動量的 RMSProp,但一個常見的擴展通過維護獨立的速度緩衝區加入動量:
$ {\displaystyle m_t = \mu\, m_{t-1} + \frac{\eta}{\sqrt{v_t} + \epsilon}\, g_t} $
$ {\displaystyle \theta_{t+1} = \theta_t - m_t} $
當 TensorFlow 的動量超參數非零時,它公開的就是這種帶動量的 RMSProp 形式,在曲率條件較差的問題上往往表現更好。Graves 提出的進一步擴展將 Nesterov 風格的前瞻應用於動量步。[2]
與之密切相關的 AdaDelta 算法由 Zeiler 於 2012 年獨立提出,得到的更新規則類似,但還額外用參數更新平方的滑動平均對分子進行重新縮放,從而無需指定全局學習率。[3] Adam 可以視作在 RMSProp 的基礎上增加了一階矩估計(平滑後的梯度)和偏置校正項;在實踐中兩者在監督學習任務上常給出可比的結果,而在現代訓練流水線中通常將 Adam 作為默認選擇。
與其他優化器的比較
與 AdaGrad 相比,RMSProp通過對舊的梯度平方信息進行指數衰減來避免步長無限縮小;這使其更適合長時間訓練和非平穩問題。與採用固定全局學習率的標準 SGD 相比,RMSProp 對學習率選擇不當更為寬容,並且在參數尺度不均勻的問題上收斂更快,例如同時訓練不同類型的層或不同模態時。代價是每個參數多一個狀態張量,並且每一步的算術開銷略有增加。
與 Adam 相比,RMSProp 省略了一階矩(速度)估計和偏置校正步驟。在一階矩對噪聲梯度起到明顯平滑作用的場景中,例如小批量或噪聲較大的強化學習採樣,Adam 通常優於 RMSProp。在梯度本身較為平穩的場景中,兩者通常可以互換,而 RMSProp 的簡潔性和略低的內存占用可成為優勢。從經驗上看,2010 年代中期,許多深度循環網絡和策略梯度訓練流水線默認使用帶動量的 RMSProp,而它至今仍作為強化學習庫中的基線方法出現。
局限性
RMSProp繼承了自適應優化器的一般局限性。逐參數縮放會干擾顯式權重衰減;將正則化項與重新縮放後的更新耦合所產生的有效懲罰,與將其與原始梯度耦合時不同,這正是促使解耦權重衰減變體被提出的原因,後者後來成為 Adam 類方法的標準做法。在將 RMSProp 與學習率預熱或調度的突變結合使用時也需謹慎,因為滑動平均 $ v_t $ 需要數千步才能穩定下來,可能與步長的突然跳變產生意外的相互作用。
該算法在非凸目標上的收斂保證並不比 SGD 更強;並且在某些凸問題上,已被證明即使在無限樣本極限下也無法收斂到穩定點,這是它與 Adam 共有的缺陷。[4] 在實踐中,對於過參數化的神經網絡這很少成為問題,但這也意味着在收斂保證至關重要的場景下,不應將 RMSProp 作為黑箱求解器。最後,與所有逐元素的自適應方法一樣,RMSProp 忽略參數之間的相關性,因此無法利用真正的二階方法所能捕獲的曲率結構。
參考文獻
- ↑ Hinton, G. Lecture 6.5 - rmsprop: Divide the gradient by a running average of its recent magnitude. Coursera: Neural Networks for Machine Learning, 2012.
- ↑ Graves, A. Generating Sequences With Recurrent Neural Networks. arXiv:1308.0850, 2013.
- ↑ Zeiler, M. D. ADADELTA: An Adaptive Learning Rate Method. arXiv:1212.5701, 2012.
- ↑ Reddi, S. J., Kale, S., Kumar, S. On the Convergence of Adam and Beyond. ICLR, 2018.