本页汇总深度学习训练中与优化器配合的工程实践:在 03–05 公式之上,让大模型/深网稳定可训。
段末注释:梯度裁剪(gradient clipping)当 $|\mathbf{g}|_2 > c$ 时将梯度缩放至范数 $c$;梯度累积(gradient accumulation)多步 backward 再一次 step,等效增大 batch。
系列入口:00.系列规划 | 前置:04 Adam、05 学习率
1. 梯度裁剪(D3–D7)

按范数裁剪(常用):
$$
\mathbf{g} \leftarrow \mathbf{g} \cdot \min\left(1, \frac{c}{|\mathbf{g}|_2}\right)
$$
按值裁剪:$g_i \leftarrow \mathrm{clip}(g_i, -c, c)$。
| 场景 | 建议 |
|---|---|
| RNN / LSTM | 常需 clip,$c=1$–$5$ |
| Transformer | 中等深度可 clip=1.0 |
| 蛋白 LM 长序列 | 配合 AdamW + warmup |
PyTorch:torch.nn.utils.clip_grad_norm_(params, max_norm=1.0)(Math-03/06 范数)。
2. 梯度累积(D3)

每 accum 步 backward 一次,loss 缩放 $1/\mathrm{accum}$,第 accum 步 optimizer.step():
$$
\text{等效 batch} = B_{\mathrm{micro}} \times \mathrm{accum}
$$
用途:GPU 装不下大 batch 时模拟 linear scaling;大模型微调常见 accum=4–32。
3. 混合精度(D7)

自动混合精度(AMP):前向/部分 matmul FP16/BF16,loss scaling 防下溢,master weights FP32。
| 精度 | 特点 |
|---|---|
| FP32 | 基准 |
| FP16 | 快;需 loss scaling |
| BF16 | 动态范围大;A100/H100 常用 |
Adam + FP16:注意 $\epsilon$ 与 clip;BF16 预训练更稳。
4. 与归一化层(D6)
BatchNorm:每 batch 统计;小 batch 时不稳 → GroupNorm / LayerNorm(Transformer 用 LN)。
优化影响:BN 使 loss landscape 更平滑;LN 使不同层尺度一致 → 可用较大 lr(配合 warmup)。
5. 训练 Checklist(D7–D8)

| 症状 | 排查 |
|---|---|
| loss NaN | 降 lr、clip、查 log(0)、AMP scaling |
| loss 不降 | lr 太小、标签错、模型/数据 bug |
| train↓ val↑ | 过拟合 → Math-08 |
| 震荡 | 降 lr、增 batch、Adam→SGD |
| OOM | 累积、checkpoint、LoRA、ZeRO |
ZeRO / FSDP(大模型):分片 optimizer 状态 → 见 20 大模型。
6. PyTorch 训练片段(D12)
1 | import torch |
7. 小结
稳定训练 = 合适 optimizer + lr 调度 + clip/累积/精度。大模型专篇:20 大模型训练与微调。
系列导航:05 学习率 | Math-05 RLHF