在深度学习的训练过程中,优化器 (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。它同时利用了一阶矩(均值)和二阶矩(方差)。
- 计算梯度 $g_t$
- 更新一阶矩:$m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t$
- 更新二阶矩:$v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2$
- 偏差修正:$\hat{m}_t = m_t / (1-\beta_1^t)$, $\hat{v}_t = v_t / (1-\beta_2^t)$
- 更新参数:$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。





