深度模型優化器是訓練神經網絡的核心工具,其目標是高效地找到損失函數的最小值。從基礎的隨機梯度下降(SGD)到結合一階動量修正與兩階段更新的Ranger,優化器的發展始終圍繞著加速收斂、提升穩定性、適應參數差異和增強泛化能力四大核心目標。以下從簡單到復雜逐步梳理優化器的演進脈絡,分析其公式、思想、優劣及改進方向,并總結實用訓練技巧。
優化器的主要改進目標有以下幾個方向:
- 更快的收斂速度
- 更穩定的收斂效果
- 更泛化的擬合能力
一、基礎優化器:隨機梯度下降(SGD)
SGD是最基礎的優化器,也是后續所有優化器的起點。其核心思想是利用隨機采樣的批次數據計算梯度,并基于梯度方向更新參數。
- 公式
參數更新公式:
θt+1=θt?η??L(θt;Bt) \theta_{t+1} = \theta_t - \eta \cdot \nabla L(\theta_t; \mathcal{B}_t) θt+1?=θt??η??L(θt?;Bt?)
其中:- θt\theta_tθt? 是t時刻的參數;
- η\etaη 是學習率(全局固定);
- ?L(θt;Bt)\nabla L(\theta_t; \mathcal{B}_t)?L(θt?;Bt?) 是基于批次數據Bt\mathcal{B}_tBt?計算的損失函數梯度;
- η??L\eta \cdot \nabla Lη??L 是參數更新量。
- 核心思想
基于 “梯度下降” 原理:損失函數沿梯度方向下降最快,因此每次更新參數時,朝著梯度的反方向移動,移動步長由學習率η\etaη控制。“隨機” 體現在用批次數據(而非全量數據)計算梯度,降低計算成本。 - 優劣分析
- 優點:
- 實現簡單,內存占用極低(僅需存儲當前梯度);
- 適合大規模數據或高維模型(如深度學習);
- 隨機性可能幫助跳出局部最優,泛化能力較強(相比全量梯度下降)。
- 缺點:
- 收斂速度慢:梯度方向受批次噪聲影響大,更新路徑震蕩劇烈(尤其在高維非凸函數中);
- 對學習率敏感:η\etaη過大易發散,過小則收斂過慢;
- 難以應對 “溝壑區域”:在梯度方向頻繁變化的區域(如損失函數的 “溝壑”),更新方向反復震蕩,效率極低。
- 改進方向
SGD 的核心問題是缺乏對歷史梯度的利用,導致更新方向不穩定。因此,第一個改進方向是引入 “動量” 以平滑梯度震蕩,模擬物理中的 “慣性” 效應。
二、一階動量優化器:SGD with Momentum 與 Nesterov Momentum
為解決 SGD 的震蕩問題,動量(Momentum)優化器通過累積歷史梯度方向,減少隨機噪聲的影響,加速收斂。
-
SGD with Momentum(動量 SGD)
公式
引入“動量項”mtm_tmt?(累積歷史梯度的加權和),參數更新公式:
mt=γ?mt?1+?L(θt;Bt)θt+1=θt?η?mt\begin{aligned}m_t &= \gamma \cdot m_{t-1} + \nabla L(\theta_t; \mathcal{B}_t)\\\theta_{t+1} &= \theta_t - \eta \cdot m_t \end{aligned}mt?θt+1??=γ?mt?1?+?L(θt?;Bt?)=θt??η?mt??
其中:- γ\gammaγ 是動量衰減系數(通常取 0.9),控制歷史梯度的權重;
- mtm_tmt? 可理解為 “累積梯度”,融合了當前梯度與歷史動量(類似物理中的 “慣性”)。
核心思想- 模擬物體運動的 “慣性”:若連續多步梯度方向一致(如沿 “溝壑” 的下坡方向),動量項會累積能量,加速收斂;若梯度方向突變(如噪聲導致),動量項會平滑震蕩(歷史方向抑制突變)。
優劣分析
- 優點:相比純 SGD,收斂速度提升 2-3 倍,震蕩顯著減少,尤其在 “溝壑區域” 表現更穩定。
- 缺點:動量可能導致 “過沖”(動量過大時,參數超過最優值后難以回調);對梯度方向的 “預判” 不足,在梯度方向即將變化時仍會延續歷史方向。
-
Nesterov Momentum(涅斯捷羅夫動量)
為解決動量 SGD 的 “過沖” 問題,Nesterov 動量引入 “提前更新” 機制,先基于當前動量預判下一步位置,再計算梯度,提升方向準確性。
公式
參數更新分兩步:- 先基于當前動量 “預判” 一步更新:θ~t=θt?γ?mt?1\tilde{\theta}_t = \theta_t - \gamma \cdot m_{t-1}θ~t?=θt??γ?mt?1?;
- 基于預判位置計算梯度,再更新動量和參數:
mt=γ?mt?1+?L(θ~t;Bt)θt+1=θt?η?mt \begin{aligned}m_t &= \gamma \cdot m_{t-1} + \nabla L(\tilde{\theta}_t; \mathcal{B}_t)\\\theta_{t+1} &= \theta_t - \eta \cdot m_t \end{aligned} mt?θt+1??=γ?mt?1?+?L(θ~t?;Bt?)=θt??η?mt??
核心思想
“先移動,再看方向”:通過預判位置θ~t\tilde{\theta}_tθ~t?計算梯度,相當于提前修正動量方向,減少因歷史動量導致的偏差。例如,若參數即將進入 “上坡” 區域,預判后計算的梯度會更早抑制動量,避免過沖。
優劣分析- 優點:比普通動量收斂更精準,過沖現象減少,在凸優化問題中理論收斂速度更快。
- 缺點:實現略復雜,在非凸問題(如深度學習)中優勢不如凸問題明顯。
-
改進方向
動量優化器解決了 “震蕩與收斂速度” 問題,但仍存在一個核心缺陷:學習率全局固定。神經網絡中不同參數的梯度特性差異很大(如稀疏特征的參數梯度小,密集特征的梯度大),固定學習率無法適配這種差異。因此,下一步改進是引入 “自適應學習率”。
三、一階動量 + 自適應學習率:AdaGrad、RMSprop 與 Adam
自適應學習率優化器的核心是:為每個參數分配獨立的學習率,梯度大的參數學習率小(避免更新過度),梯度小的參數學習率大(加速收斂)。
-
AdaGrad(自適應梯度)
AdaGrad 是首個實現參數自適應學習率的優化器,通過累積參數的歷史梯度平方來動態調整學習率。
公式
參數更新公式:
gt=?L(θt;Bt)ht=ht?1+gt2(累積梯度平方,初始?h0=0)θt+1=θt?ηht+??gt\begin{aligned}g_t &= \nabla L(\theta_t; \mathcal{B}_t)\\h_t &= h_{t-1} + g_t^2 \quad (\text{累積梯度平方,初始} \ h_0=0)\\\theta_{t+1} &= \theta_t - \frac{\eta}{\sqrt{h_t + \epsilon}} \cdot g_t\end{aligned}gt?ht?θt+1??=?L(θt?;Bt?)=ht?1?+gt2?(累積梯度平方,初始?h0?=0)=θt??ht?+??η??gt??
其中:- hth_tht? 是參數的 “梯度平方累積和”(每個參數獨立累積);
- ?≈10?8\epsilon \approx 10^{-8}?≈10?8 是防止分母為 0 的微小常數;
- ηht+?\frac{\eta}{\sqrt{h_t + \epsilon}}ht?+??η? 是參數的自適應學習率(梯度平方越大,學習率越小)。
核心思想
“梯度大的參數慢更,梯度小的參數快更”:例如,文本中的稀疏特征(如低頻詞)梯度小,hth_tht?累積慢,學習率較大,可快速更新;高頻特征梯度大,hth_tht?累積快,學習率較小,避免震蕩。優劣分析
- 優點:適合稀疏數據(如 NLP、推薦系統),能自適應參數差異。
- 缺點:hth_tht?隨訓練步數單調遞增,導致學習率逐漸趨近于 0,最終參數更新停滯(訓練提前終止)。
-
RMSprop(均方根傳播)
為解決 AdaGrad 學習率 “單調衰減至 0” 的問題,RMSprop 用指數移動平均(EMA) 替代梯度平方的累積和,使hth_tht?更關注近期梯度,避免學習率過早消失。
公式
參數更新公式:
gt=?L(θt;Bt)ht=γ?ht?1+(1?γ)?gt2(γ≈0.9)θt+1=θt?ηht+??gt\begin{aligned}g_t &= \nabla L(\theta_t; \mathcal{B}_t)\\h_t &= \gamma \cdot h_{t-1} + (1-\gamma) \cdot g_t^2 \quad (\gamma \approx 0.9)\\\theta_{t+1} &= \theta_t - \frac{\eta}{\sqrt{h_t + \epsilon}} \cdot g_t\end{aligned}gt?ht?θt+1??=?L(θt?;Bt?)=γ?ht?1?+(1?γ)?gt2?(γ≈0.9)=θt??ht?+??η??gt??
核心思想
用 EMA 平滑hth_tht?:hth_tht?是 “近期梯度平方的加權平均”(γ\gammaγ控制歷史權重衰減),而非全量累積。例如,γ=0.9\gamma=0.9γ=0.9時,hth_tht?主要由最近 10 步的梯度平方決定,避免長期累積導致的學習率消失。
優劣分析- 優點:解決了 AdaGrad 的學習率衰減問題,收斂更穩定,適合在線學習(流式數據)。
- 缺點:僅關注梯度的 “大小”(二階矩),未考慮梯度的 “方向”(一階矩),在梯度方向變化劇烈的場景中收斂速度仍有限。
-
Adam(自適應動量, Adaptive Moment Estimation)
Adam 是優化器發展的里程碑,它融合了動量(一階矩)和 RMSprop(二階矩)的優點,同時考慮梯度的方向和大小,實現 “方向穩健 + 步長自適應”。
公式
參數更新分三步:- 計算一階矩(動量項,關注方向):
mt=β1?mt?1+(1?β1)?gt(β1≈0.9) m_t = \beta_1 \cdot m_{t-1} + (1-\beta_1) \cdot g_t \quad (\beta_1 \approx 0.9) mt?=β1??mt?1?+(1?β1?)?gt?(β1?≈0.9) - 計算二階矩(梯度平方的 EMA,關注大小):
vt=β2?vt?1+(1?β2)?gt2(β2≈0.999) v_t = \beta_2 \cdot v_{t-1} + (1-\beta_2) \cdot g_t^2 \quad (\beta_2 \approx 0.999) vt?=β2??vt?1?+(1?β2?)?gt2?(β2?≈0.999) - 修正一階矩和二階矩的偏差(訓練初期mtm_tmt?和vtv_tvt?偏小):
m^t=mt1?β1t,v^t=vt1?β2t \hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} m^t?=1?β1t?mt??,v^t?=1?β2t?vt?? - 參數更新:
θt+1=θt?ηv^t+??m^t \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \cdot \hat{m}_t θt+1?=θt??v^t??+?η??m^t?
核心思想
- 一階矩mtm_tmt?:累積梯度方向(類似動量),減少方向震蕩;
- 二階矩vtv_tvt?:累積梯度大小(類似 RMSprop),自適應步長;
- 偏差修正:訓練初期(t較小時),β1t\beta_1^tβ1t?和β2t\beta_2^tβ2t?較大,修正后m^t\hat{m}_tm^t?和v^t\hat{v}_tv^t?更接近真實值,避免低估。
優劣分析
- 優點:收斂速度快(比 SGD 快 5-10 倍),穩定性強(兼顧方向和大小),適用場景廣(CV、NLP、推薦等)。
- 缺點:
- 泛化能力可能弱于 SGD:自適應學習率可能導致過擬合(尤其在小數據集上);
- 小批量偏差:當批次大小過小時(如batch=1batch=1batch=1),m^t\hat{m}_tm^t?和v^t\hat{v}_tv^t?估計誤差大,更新不穩定。
- 計算一階矩(動量項,關注方向):
-
AdamW
AdamW(Adam with Weight Decay)的核心算法原理和 Adam 是一樣的,也是基于梯度的一階矩和二階矩估計來更新參數。但它在權重衰減(weight decay)的實現方式上進行了改進,使其更符合 L2 正則化的本質含義。
對正則化的處理方式- Adam 優化器:在 Adam 中,若要使用 L2 正則化(權重衰減),通常是在計算梯度時直接將正則化項加入到損失函數中,然后計算帶有正則化項的梯度。即:
gt=?(L(θt)+λθt) g_t = \nabla \left(L(\theta_t) + \lambda \theta_t\right) gt?=?(L(θt?)+λθt?)其中λ\lambdaλ是正則化系數。這種方式下,正則化項會參與到一階矩和二階矩的計算中。 - AdamW 優化器:AdamW 將權重衰減從損失函數中分離出來,不把它納入到梯度計算中,而是直接在參數更新時應用權重衰減,公式為:θt+1=(1?λη)θt?ηv^t+??m^t \theta_{t + 1} = (1 - \lambda \eta) \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \cdot \hat{m}_t θt+1?=(1?λη)θt??v^t??+?η??m^t?這樣,權重衰減就獨立于自適應學習率機制,避免了自適應學習率對權重衰減的影響,使得權重衰減更加穩定和合理。
實際表現
- Adam 優化器:在一些場景下,由于正則化項參與了一階矩和二階矩的計算,可能會導致在訓練后期,隨著自適應學習率的變化,正則化的效果變得不穩定,從而容易出現過擬合的情況,尤其是在數據量較小或者模型較復雜時。
- AdamW 優化器:因為其合理的權重衰減實現方式,使得在訓練過程中能夠更有效地抑制過擬合,在許多實驗中,特別是在像自然語言處理、計算機視覺等領域的大規模模型訓練任務中,AdamW 相比 Adam 能取得更好的泛化性能,在驗證集和測試集上表現出更低的誤差。
應用場景
- Adam 優化器:適用于一些對計算資源要求不是特別高,且對模型泛化性能要求不是極致嚴格的簡單實驗或者小型項目中,在快速驗證想法和初步訓練模型時可以使用。
- AdamW 優化器:更適合于大規模、復雜的深度學習模型訓練任務,尤其是在需要關注模型泛化能力,防止過擬合的場景,比如 BERT 等預訓練語言模型的訓練中被廣泛應用。
- Adam 優化器:在 Adam 中,若要使用 L2 正則化(權重衰減),通常是在計算梯度時直接將正則化項加入到損失函數中,然后計算帶有正則化項的梯度。即:
-
改進方向
Adam/AdamW的核心問題是小批量場景下的一階矩估計偏差。后續的 RAdam(Rectified Adam)通過動態判斷矩估計的 “穩定性”,在不穩定階段切換為動量 SGD 更新,解決了這一缺陷。
四、二階優化器:牛頓法與擬牛頓法
一階優化器(SGD、Adam 等)僅利用梯度(一階導數),而二階優化器引入 Hessian 矩陣(二階導數),考慮損失函數的 “曲率”,理論上收斂速度更快。
-
牛頓法
牛頓法的核心是用二次函數近似損失函數,利用 Hessian 矩陣的逆(曲率信息)調整更新方向,實現 “精準步長”。
公式
參數更新公式:
θt+1=θt?H?1(θt)??L(θt)\theta_{t+1} = \theta_t - H^{-1}(\theta_t) \cdot \nabla L(\theta_t)θt+1?=θt??H?1(θt?)??L(θt?)
其中:- H(θt)H(\theta_t)H(θt?) 是損失函數在θt\theta_tθt?處的 Hessian 矩陣(二階導數矩陣),描述函數的曲率;
- H?1??LH^{-1} \cdot \nabla LH?1??L 是結合曲率的更新量(步長由曲率決定)。
核心思想
一階優化器的更新方向是 “梯度反方向”,而牛頓法的更新方向是 “梯度反方向除以曲率”:在曲率大的區域(梯度變化快),步長自動減小;在曲率小的區域(梯度變化慢),步長自動增大。對于二次函數,牛頓法可 “一步收斂”,遠快于一階方法。
優劣分析- 優點:收斂速度快(二次收斂),步長自適應(無需手動調學習率)。
- 缺點:
- 計算成本極高:Hessian 矩陣是n×nn \times nn×n(n為參數數量,深度學習中n可達百萬級),存儲和求逆的復雜度為O(n3)O(n^3)O(n3),完全無法適用于大規模模型;
- 非正定風險:Hessian 矩陣可能非正定(特征值為負),導致更新方向錯誤(反而遠離最小值)。
-
擬牛頓法(BFGS 與 L-BFGS)
為降低牛頓法的計算成本,擬牛頓法用近似矩陣替代 Hessian 逆,通過梯度的變化量迭代更新近似矩陣,避免直接計算二階導數。
核心思想
(以 BFGS 為例)用矩陣BtB_tBt?近似 Hessian 矩陣H,或用DtD_tDt?近似H?1H^{-1}H?1;
迭代更新規則:
Dt+1=(I?ρtstytT)Dt(I?ρtytstT)+ρtststT(其中st=θt+1?θt,yt=?Lt+1??Lt) D_{t+1} = (I - \rho_t s_t y_t^T) D_t (I - \rho_t y_t s_t^T) + \rho_t s_t s_t^T \\(其中s_t = \theta_{t+1} - \theta_t,y_t = \nabla L_{t+1} - \nabla L_t) Dt+1?=(I?ρt?st?ytT?)Dt?(I?ρt?yt?stT?)+ρt?st?stT?(其中st?=θt+1??θt?,yt?=?Lt+1???Lt?)
最終更新公式:
θt+1=θt?Dt??Lt \theta_{t+1} = \theta_t - D_t \cdot \nabla L_t θt+1?=θt??Dt???Lt?
優劣分析- 優點:比牛頓法計算成本低(無需求 Hessian 逆),收斂速度快于一階方法。
- 缺點:
- BFGS 仍需存儲n×nn \times nn×n的近似矩陣(不適合高維模型);
- L-BFGS(Limited-memory BFGS)通過存儲最近m步的梯度變化降低內存,但計算復雜度仍高于一階方法(尤其在批量大時),因此在深度學習中應用有限。
-
改進方向
二階方法的核心瓶頸是高維場景下的計算與存儲成本。目前實用化的改進是 “輕量級二階近似”(如 K-FAC,用 Fisher 信息矩陣近似 Hessian),但尚未普及。
五、RAdam
RAdam 通過動態調整自適應學習率的方差來解決 Adam 在小批量場景下的不穩定性,核心機制包括以下三點:
- 動態判斷是否啟用自適應學習率
RAdam 引入了一個自由度參數ρt\rho_tρt?,其計算公式為:
ρt=21?β2?2?1?β2t1?β2+1 \rho_t = \frac{2}{1 - \beta_2} - 2 \cdot \frac{1 - \beta_2^t}{1 - \beta_2} + 1 ρt?=1?β2?2??2?1?β2?1?β2t??+1
其中,β2\beta_2β2?是 Adam 中二階矩的衰減系數(通常取 0.999)。當ρt≤4\rho_t \leq 4ρt?≤4時,RAdam 認為當前小批量的梯度估計方差過大(如 batch size 過小或訓練初期數據不足),此時禁用自適應學習率,直接采用動量 SGD 的更新方式:
θt+1=θt?η?mt \theta_{t+1} = \theta_t - \eta \cdot m_t θt+1?=θt??η?mt?
這一策略避免了 Adam 在小批量時因二階矩估計偏差導致的學習率劇烈波動 - 整流項抑制方差放大
當ρt>4\rho_t > 4ρt?>4時,RAdam 恢復 Adam 的自適應學習率,但通過整流項r(t)r(t)r(t)對學習率進行修正:
r(t)=(ρt?4)(ρt?2)ρ∞(ρ∞?4)(ρ∞?2)ρt r(t) = \sqrt{\frac{(\rho_t - 4)(\rho_t - 2)\rho_\infty}{(\rho_\infty - 4)(\rho_\infty - 2)\rho_t}} r(t)=(ρ∞??4)(ρ∞??2)ρt?(ρt??4)(ρt??2)ρ∞???
其中,ρ∞=21?β2?1\rho_\infty = \frac{2}{1 - \beta_2} - 1ρ∞?=1?β2?2??1是理論最大自由度。整流項r(t)r(t)r(t)通過調整二階矩的縮放因子,抑制小批量梯度噪聲對方差估計的放大效應,使學習率更穩定。 - 自動實現動態warmup
Adam 在小批量時需要手動設置 warmup 階段以降低初始方差,但 RAdam 通過上述動態機制自動完成 warmup。例如,在訓練初期(t較小),ρt\rho_tρt?可能小于 4,此時 RAdam 切換為動量 SGD,逐步累積穩定的梯度統計量后再啟用自適應學習率,避免了 Adam 因初始方差過大導致的參數震蕩
思考1: 為什么 Adam 在小批量時不穩定,而 SGD 更穩定?
- Adam 的不穩定性根源:梯度估計的方差放大
Adam 的自適應學習率依賴梯度的一階矩和二階矩估計,但小批量梯度的方差會隨著 batch size 的減小而顯著增加。例如,當 batch size=1 時,梯度估計的方差是全量梯度的1/N1/N1/N倍(N為總樣本數),導致 Adam 的二階矩vtv_tvt?被噪聲污染,學習率η/vt\eta/\sqrt{v_t}η/vt??劇烈波動。
此外,Adam 的偏差修正項11?β2t\frac{1}{1 - \beta_2^t}1?β2t?1?在訓練初期(t小)會放大這種噪聲,進一步加劇不穩定性。例如,當t=10t=10t=10且β2=0.999\beta_2=0.999β2?=0.999時,修正因子約為 1000,可能將微小的梯度波動放大為學習率的劇烈變化
- SGD 的穩定性機制:噪聲魯棒性
SGD 直接使用當前小批量的梯度更新參數,不依賴歷史統計量,因此對梯度噪聲具有天然的魯棒性。例如,當 batch size=1 時,SGD 的更新方向完全由單個樣本的梯度決定,雖然噪聲大,但這種 “隨機擾動” 反而幫助模型探索更廣泛的參數空間,避免陷入局部最優。
此外,SGD 的學習率是全局固定的,不會因個別參數的梯度波動而改變整體更新步長,從而在小批量場景下保持穩定。
思考2: 為什么 SGD 的泛化能力優于 Adam?
- 噪聲正則化效應SGD 的小批量梯度噪聲相當于一種隱式正則化,迫使模型學習更魯棒的特征表示。例如,在高維非凸損失函數中,噪聲驅動參數在 “平坦區域”(泛化能力更強)附近震蕩,而非收斂到 “尖銳區域”(易過擬合)。
數學上,SGD 的噪聲動力學可等效于引入一個“景觀”(損失函數的高維度空間)依賴的正則化項:
R∝η?Tr(?2L?Cov(gt))R \propto \eta \cdot \text{Tr}\left( \nabla^2 L \cdot \text{Cov}(g_t) \right)R∝η?Tr(?2L?Cov(gt?))
其中,Cov(gt)\text{Cov}(g_t)Cov(gt?)是梯度噪聲的協方差矩陣。該正則化項懲罰損失函數的曲率,引導模型趨向更平坦的解。- 學習率的全局一致性
SGD 的固定學習率強制所有參數以相同步長更新,這在訓練后期尤為重要。例如,當模型接近最優解時,Adam 的自適應學習率可能因個別參數的梯度消失而停滯,而 SGD 通過持續的全局更新維持探索能力,避免過早收斂到局部最小值。- 損失景觀的選擇偏好
SGD 的噪聲更傾向于將參數推向寬谷區域(損失函數曲率小),而 Adam 的自適應學習率可能陷入窄谷區域(曲率大但訓練誤差低)。實驗表明,寬谷區域的解對輸入擾動更不敏感,泛化性能顯著優于窄谷解。例如,在 CIFAR-10 數據集上,SGD 訓練的 ResNet 測試誤差比 Adam 低 2% 以上。- 避免自適應學習率的過擬合風險
Adam 的自適應學習率會根據訓練數據動態調整每個參數的更新步長,這在小數據集上可能導致過擬合。例如,當某個參數的梯度長期為零時,Adam 會自動增大其學習率,可能放大該參數的隨機波動,而 SGD 的固定學習率能抑制這種波動。
優化器選擇的核心邏輯
場景 | 推薦優化器 | 原因 |
---|---|---|
小批量(batch ≤ 32) | RAdam 或 SGD | RAdam 通過動態機制平衡穩定性與效率;SGD 的噪聲正則項提升泛化。 |
大規模數據(batch ≥ 128) | Adam | 二階矩估計穩定,自適應學習率加速收斂 。 |
追求泛化能力 | SGD+Momentum | 噪聲正則化引導模型趨向寬谷解,泛化性能最優。 |
快速實驗或調參困難 | RAdam | 對學習率魯棒,無需手動 warmup。 |
六、Lookahead
Look Ahead 是一種優化器技術,它并非獨立的優化器,而是可以與其他優化器(如 Adam、SGD 等)結合使用,提升訓練效果。
- Lookahead 優化器原理
Lookahead 采用了兩階段更新機制,包括一個快速更新器(fast optimizer)和一個慢速更新器(slow optimizer),具體步驟如下:- 快速更新:使用常見的優化器(如 Adam、SGD 等)作為快速更新器,在每一步訓練中對參數進行快速更新。假設快速更新器在第t步更新后的參數為θtfast\theta_t^{\text{fast}}θtfast? ,其更新方式遵循對應優化器的規則。例如,若快速更新器是 Adam,那么就是按照 Adam 的參數更新公式來計算 θtfast\theta_t^{\text{fast}}θtfast? 。
- 慢速更新:每間隔k步(超參數,例如k=5k = 5k=5),對慢速更新器的參數 θtslow\theta_t^{\text{slow}}θtslow? 進行更新。更新公式為:
θtslow=α?θt?kslow+(1?α)?θtfast \theta_t^{\text{slow}} = \alpha \cdot \theta_{t - k}^{\text{slow}} + (1 - \alpha) \cdot \theta_t^{\text{fast}} θtslow?=α?θt?kslow?+(1?α)?θtfast?
其中,α\alphaα 是一個介于 0 和 1 之間的超參數(通常取值約為 0.5)。這意味著慢速更新器的參數是由上一次的慢速參數和當前快速更新后的參數加權平均得到的。 - 參數重置:將快速更新器的參數重置為慢速更新器的參數,即 θtfast=θtslow\theta_t^{\text{fast}} = \theta_t^{\text{slow}}θtfast?=θtslow?,然后繼續下一輪的快速更新。
- Lookahead 優化器優劣勢
- 優勢:
- 提升穩定性:通過慢速更新對快速更新產生的波動進行平滑,減少了參數更新過程中的噪聲影響,使訓練過程更加穩定,尤其在訓練初期,能有效避免參數的劇烈震蕩。
- 增強泛化能力:實驗表明,Lookahead 可以提升模型的泛化性能,減少過擬合現象。這是因為慢速更新的平滑機制使得模型學習到的參數更加魯棒,不會過度擬合訓練數據中的噪聲。
- 兼容性強:可以與多種不同類型的優化器結合使用,不需要對原優化器的核心算法進行大幅修改,應用起來比較靈活。
- 劣勢:
- 增加計算和調參復雜度:引入了額外的超參數k和α\alphaα,需要進行調參以找到最優的組合,增加了調參的工作量。同時,額外的更新步驟也會帶來一定的計算開銷。
- 并非適用于所有場景:在一些簡單任務或者數據量非常小的情況下,可能無法充分發揮其優勢,甚至可能會因為額外的復雜度而導致性能下降。
- Lookahead 優化器更穩定的原因
- 平滑參數更新路徑:快速更新器在每一步都基于當前批次的數據進行參數更新,容易受到批次噪聲的影響,導致參數更新路徑波動較大。而慢速更新器通過加權平均的方式,綜合了多步快速更新的結果,相當于對快速更新的結果進行了平滑處理,使得最終采用的參數(即慢速更新器的參數)變化更加平穩,減少了噪聲對參數更新的干擾。
- 抑制過擬合傾向:過擬合往往是由于模型在訓練過程中對訓練數據中的噪聲過度敏感,導致學到的特征過于特殊化。Lookahead 的慢速更新機制使得模型參數不會過度適應某幾個批次數據的噪聲,能夠學習到更具一般性的特征表示,從而使訓練過程更加穩定,模型在驗證集上的表現也更加穩定。
- 多尺度探索:快速更新器負責在小尺度上快速探索參數空間,尋找局部較優的參數;而慢速更新器則從更大的尺度上對參數進行調整和整合。這種多尺度的參數更新方式避免了快速更新器可能陷入局部最優的問題,讓模型在參數空間的搜索更加穩健,進而提升了訓練的穩定性。
- Lookahead 優化器直觀理解
想象在群山中,樹木茂密,我們不知道怎么下山。這時有一個探索機器人(fast optimizer),根據局部梯度探索走了N步(可能繞路、反復調整方向等),然后我們可以直接根據機器人當前位置指導我們的方向,避免了我們繞路(深度模型優化中某個Batch的噪聲)。我們可以朝著機器人的方向直接更新一大步,然后喚回機器人到我們位置,再次讓機器人探索N步。
七、融合型優化器:Ranger
Ranger 是當前工業界表現優異的融合型優化器,由RAdam(一/二階矩修正)+ Lookahead(兩階段更新) 組合而成,兼顧收斂速度與泛化能力。
-
核心組件
- RAdam:解決 Adam 的小批量偏差,動態切換更新策略(穩定時用 Adam,不穩定時用動量 SGD);
- Lookahead:兩階段更新機制 ——“快速更新器”(RAdam)探索參數空間,“慢速更新器” 每隔k步平滑參數(取快速參數與歷史慢速參數的加權平均),增強穩定性。
公式
- (Lookahead 部分)快速參數(RAdam 更新):
θtfast=RAdam(θt?1fast) \theta_t^{\text{fast}} = \text{RAdam}(\theta_{t-1}^{\text{fast}}) θtfast?=RAdam(θt?1fast?) - 慢速參數(每k步更新):
θtslow=α?θt?kslow+(1?α)?θtfast(α≈0.5,k≈5) \theta_t^{\text{slow}} = \alpha \cdot \theta_{t-k}^{\text{slow}} + (1-\alpha) \cdot \theta_t^{\text{fast}}\\ (\alpha \approx 0.5,k \approx 5) θtslow?=α?θt?kslow?+(1?α)?θtfast?(α≈0.5,k≈5) - 最終參數:θt=θtslow\theta_t = \theta_t^{\text{slow}}θt?=θtslow?(快速參數重置為慢速參數,繼續探索)。
核心思想- RAdam 保證 “高效探索”:解決小批量偏差,加速收斂;
- Lookahead 保證 “穩健收斂”:平滑快速更新的噪聲,抑制過擬合,提升泛化能力。
優劣分析- 優點:在 ImageNet、COCO 等大規模數據集上,收斂速度優于 Adam,泛化能力接近 SGD;
- 缺點:實現復雜度高于基礎優化器,需調參(如k和α\alphaα)。
八、訓練技巧:適配優化器的實用策略
優化器的性能不僅取決于自身設計,還需配合合理的訓練技巧。以下策略針對不同優化器的特性設計,可顯著提升訓練效果。
- 學習率調度(Learning Rate Scheduling)
學習率是優化器的核心超參,需根據訓練階段動態調整:- SGD / 動量 SGD:適合 “余弦退火”(cosine annealing)或 “循環學習率”(cyclic LR),通過波動學習率跳出局部最優;
- Adam/RAdam:適合 “線性衰減”(linear decay)或 “分段衰減”(step decay),避免自適應學習率過大導致過擬合;
- 通用策略:ReduceLROnPlateau(當驗證指標停滯時,學習率乘以 0.5),動態適配收斂瓶頸。
- 權重初始化與正則化初始化:
- 優化器對參數初始值敏感,需用適配激活函數的初始化方法(如 ReLU 用 He 初始化,Sigmoid 用 Xavier 初始化),避免梯度消失 / 爆炸;
- 正則化:SGD 適合 L2 正則化(直接在梯度中加入參數項);
- Adam/RAdam 適合 AdamW(將 L2 改為權重衰減,避免自適應學習率削弱正則效果)。
- 批量大小與梯度累積
- 批量大小影響優化器穩定性:
- SGD 在小批量(32-128)下泛化更好,Adam 在中批量(128-512)下更穩定;
- 梯度累積(Gradient Accumulation):當 GPU 內存有限時,用多步小批量累積梯度后更新參數(等效于增大批量),需注意學習率同步放大(如累積 4 步,學習率 ×4)。
- 批量大小影響優化器穩定性:
- 梯度裁剪(Gradient Clipping)
當梯度爆炸時(如 RNN 訓練中),需裁剪梯度范數至閾值(如max_norm=10max\_norm=10max_norm=10):
if?∥?L∥>max_norm,?L=?L?max_norm∥?L∥\text{if} \ \|\nabla L\| > \text{max\_norm}, \quad \nabla L = \nabla L \cdot \frac{\text{max\_norm}}{\|\nabla L\|}if?∥?L∥>max_norm,?L=?L?∥?L∥max_norm?
該策略對動量優化器(如 SGD+Momentum)和自適應優化器(如 Adam)均有效。 - 早停與溫啟動
- 早停(Early Stopping):以驗證集損失為指標,當連續N輪(如 20 輪)無提升時停止訓練,避免過擬合(對 Adam 類優化器尤其重要);
- 溫啟動(Warm-up):訓練初期用小學習率(如初始η=0.001\eta=0.001η=0.001,逐步增至η=0.01\eta=0.01η=0.01),避免參數劇烈波動(適合 Transformer 等大模型,配合 Adam 使用)。
- 優化器選擇指南
- 追求快速收斂:優先用 Adam/RAdam(適合大規模數據、高維模型);
- 追求強泛化能力:優先用 SGD+Momentum(適合小數據集、低維模型);
- 平衡兩者:用 Ranger(尤其在 CV、NLP 等復雜任務中)。
九、總結
優化器的演進是 “問題驅動” 的:從解決 SGD 的震蕩(動量),到適配參數差異(自適應學習率),再到修正估計偏差(RAdam),最終通過融合策略(Ranger)實現綜合性能提升。實際應用中,需根據模型規模、數據特性和訓練目標選擇優化器,并配合學習率調度、正則化等技巧,才能高效訓練出高性能模型。