在深度学习的训练过程中,优化器 (Optimizer) 扮演着至关重要的角色。它决定了网络参数更新的方式,直接影响模型的收敛速度和最终性能。本文将深入剖析深度学习中常见的优化器,从最基础的 SGD 到目前最流行的 AdamW,以及一些前沿的变体。

1. 梯度下降家族 (Gradient Descent Variants)

1.1 BGD, SGD 与 Mini-batch SGD

  • BGD (Batch Gradient Descent):每次迭代使用全部样本计算梯度。
    • 优点:梯度准确,收敛稳定。
    • 缺点:计算量大,内存无法承受,无法在线更新。
  • SGD (Stochastic Gradient Descent):每次迭代使用一个样本。
    • 优点:计算快,引入噪声有助于跳出局部最优。
    • 缺点:震荡剧烈,收敛慢,无法利用向量化加速。
  • Mini-batch SGD:折中方案,每次使用一批样本(如 32, 64)。这是实际中最常用的形式。
    $$ w_{t+1} = w_t - \eta \cdot \nabla L(w_t) $$

1.2 Momentum (动量法)

为了抑制 SGD 的震荡(特别是在峡谷地形),引入了物理学中的动量概念。
$$ v_t = \gamma v_{t-1} + \eta \nabla L(w_t) $$
$$ w_{t+1} = w_t - v_t $$

  • 核心:参数更新方向不仅取决于当前梯度,还保留了之前的速度 $v_{t-1}$。
  • 效果:在梯度方向一致的维度加速,在梯度方向改变的维度减速(抑制震荡)。

1.3 NAG (Nesterov Accelerated Gradient)

Momentum 是“盲目”的冲刺,NAG 则是“先看一眼再走”。
$$ v_t = \gamma v_{t-1} + \eta \nabla L(w_t - \gamma v_{t-1}) $$
$$ w_{t+1} = w_t - v_t $$

  • 区别:NAG 先按动量走一步,计算那个位置的梯度,再修正。这使得 NAG 收敛更快,震荡更小。

2. 自适应学习率家族 (Adaptive Learning Rate)

SGD 系列对所有参数使用相同的学习率,这在稀疏数据或特征频率差异大时效果不佳。

2.1 AdaGrad

$$ G_t = G_{t-1} + g_t^2 $$
$$ w_{t+1} = w_t - \frac{\eta}{\sqrt{G_t + \epsilon}} g_t $$

  • 机制:累积历史梯度的平方和 $G_t$ 作为分母。梯度大的参数,学习率衰减快;梯度小的参数,学习率衰减慢。
  • 缺点:$G_t$ 单调递增,导致学习率过早衰减至 0,训练提前停止。

2.2 RMSProp

为了解决 AdaGrad 的问题,Geoff Hinton 提出了 RMSProp(在 Coursera 课程中提出,未发表论文)。
$$ E[g^2]t = \beta E[g^2]{t-1} + (1-\beta) g_t^2 $$
$$ w_{t+1} = w_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} g_t $$

  • 机制:使用指数加权移动平均来计算梯度平方和。它只关注“最近”的梯度,解决了学习率过早消失的问题。适合 RNN 等变长序列任务。

2.3 Adadelta

Adadelta 也是为了解决 AdaGrad 学习率递减问题,它甚至不需要设置全局学习率 $\eta$,而是维护一个更新量的移动平均。

3. 集大成者:Adam 及其变体

3.1 Adam (Adaptive Moment Estimation)

Adam = Momentum + RMSProp。它同时利用了一阶矩(均值)和二阶矩(方差)。

  1. 计算梯度 $g_t$
  2. 更新一阶矩:$m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t$
  3. 更新二阶矩:$v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2$
  4. 偏差修正:$\hat{m}_t = m_t / (1-\beta_1^t)$, $\hat{v}_t = v_t / (1-\beta_2^t)$
  5. 更新参数:$w_{t+1} = w_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t$
  • 特点:收敛快,对超参数不敏感,是目前的默认选择。

3.2 AdaMax

Adam 中 $v_t$ 是基于 $L_2$ 范数的,AdaMax 将其推广到 $L_\infty$ 范数,更加稳定。

3.3 Nadam

Nadam = NAG + Adam。将 Nesterov 动量引入 Adam,理论上收敛速度更快。

4. 现代优化器:修正与进化

4.1 AdamW (Decoupled Weight Decay)

这是目前 Transformer (BERT, ViT, GPT) 的标配。

  • 问题:在 Adam 中,L2 正则化通常直接加在梯度上。但在自适应学习率算法中,这样做会导致正则化效果被学习率缩放,变得不均匀。
  • 解决:AdamW 将权重衰减 (Weight Decay) 从梯度更新中剥离,直接作用于权重:
    $$ w_{t+1} = w_t - \eta (\dots) - \eta \lambda w_t $$

4.2 RAdam (Rectified Adam)

Adam 在训练初期,由于样本少,二阶矩估计方差大,导致学习率激增,模型发散。RAdam 通过引入“整流器”机制,在初期自动降低学习率(起到 Warmup 的作用),后期恢复正常。

4.3 Lookahead

被称为“优化器的优化器”。它维护两组权重:快权重 (Fast Weights) 和慢权重 (Slow Weights)。快权重由标准优化器(如 Adam)更新 k 次,然后慢权重向快权重方向迈一步。这大大提高了收敛稳定性。

5. 总结与选型指南

优化器特点适用场景
SGD + Momentum收敛慢但稳,泛化性好CV (ResNet, VGG),对精度要求极高的任务
Adam收敛快,自适应NLP, RL,快速原型开发
AdamW修正了权重衰减,训练更稳定Transformer (BERT, ViT),生成模型
RMSProp适合非平稳目标RNN, LSTM

一句话建议

  • CV,先试 SGD + Momentum,再试 AdamW。
  • NLP/Transformer,无脑上 AdamW
  • 新手入门,用 Adam