Math-04.优化-04.Momentum与Adam

本页讲解 DL 最常用的自适应优化器:MomentumAdamAdamW

段末注释Adam(Adaptive Moment Estimation,自适应矩估计)对每个参数维护梯度一阶矩(动量)与二阶矩(平方梯度均值),实现逐参数自适应学习率。

系列入口00.系列规划 | 前置:03 SGD


1. Momentum(D3)

图 1 动量累积方向

$$
\mathbf{v}_{t+1} = \beta \mathbf{v}_t + \nabla L(\boldsymbol{\theta}t), \quad
\boldsymbol{\theta}
{t+1} = \boldsymbol{\theta}t - \eta , \mathbf{v}{t+1}
$$

$\beta \approx 0.9$:指数加权历史梯度,加速一致方向、抑制震荡。

Nesterov 动量:在 lookahead 位置算梯度,收敛常更快(Nesterov 变体)。


2. RMSProp 与 Adam(D3)

图 2 Adam 双矩估计

RMSProp:自适应缩放

$$
\mathbf{s}_{t+1} = \rho \mathbf{s}t + (1-\rho) (\nabla L)^2, \quad
\boldsymbol{\theta}
{t+1} = \boldsymbol{\theta}t - \eta \frac{\nabla L}{\sqrt{\mathbf{s}{t+1}}+\epsilon}
$$

Adam(结合动量 + RMSProp):

$$
\mathbf{m}{t} = \beta_1 \mathbf{m}{t-1} + (1-\beta_1) \nabla L, \quad
\mathbf{v}{t} = \beta_2 \mathbf{v}{t-1} + (1-\beta_2) (\nabla L)^2
$$

偏差校正(初期 $\mathbf{m},\mathbf{v}$ 偏向 0):

$$
\hat{\mathbf{m}}_t = \frac{\mathbf{m}_t}{1-\beta_1^t}, \quad
\hat{\mathbf{v}}_t = \frac{\mathbf{v}_t}{1-\beta_2^t}
$$

$$
\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \frac{\hat{\mathbf{m}}_t}{\sqrt{\hat{\mathbf{v}}_t} + \epsilon}
$$

默认:$\beta_1=0.9$,$\beta_2=0.999$,$\epsilon=10^{-8}$。


3. AdamW(D3–D6)

AdamWweight decay 与梯度更新解耦

$$
\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \left( \frac{\hat{\mathbf{m}}_t}{\sqrt{\hat{\mathbf{v}}_t} + \epsilon} + \lambda \boldsymbol{\theta}_t \right)
$$

Adam + L2 AdamW
权重衰减 常并入梯度 直接 shrink $\boldsymbol{\theta}$
Transformer 微调 次优 推荐

Math-03/06 范数正则Math-08 衔接。


4. 选型(D7)

图 3 优化器选型

优化器 适用
SGD + Momentum CV 经典、需精细调 lr;有时泛化更好
Adam 默认首选、稀疏梯度、快速实验
AdamW Transformer / LLM / 蛋白 LM 微调
Adagrad 稀疏特征(少用于深网)
LAMB 超大 batch 预训练

5. 局限(D8)

图 4 局限

问题 说明
Adam 泛化 部分 CV 任务 SGD 更优
默认 lr=$10^{-3}$ 未必最优 需配合调度 05
$\epsilon$ 过小 + FP16 数值问题
二阶矩 $\mathbf{v}$ 停滞 长期训练后期或需 SWA/重启

6. PyTorch 示例(D12)

1
2
3
4
5
6
7
8
import torch

model = torch.nn.Linear(100, 10)
adam = torch.optim.Adam(model.parameters(), lr=1e-3, betas=(0.9, 0.999))
adamw = torch.optim.AdamW(model.parameters(), lr=1e-4, weight_decay=0.01)

# 同一 forward/backward 后
# adam.step() 或 adamw.step()

7. 小结

Momentum 平滑轨迹;Adam 自适应各维步长;AdamW 为现代 LM 微调标配。下一篇:05 学习率调度

系列导航03 SGD | 10 DL 实践

-------------本文结束感谢您的阅读-------------