# Ml Deep Training Playbook

> 深度网络训练不动的系统排查纪律。当用户报"loss 不降/NaN/训练发散"、纠结初始化(Xavier/He)、 BatchNorm 还是 LayerNorm、Adam 还是 SGD、warmup、梯度消失爆炸怎么治时激活。核心动作：按 "数据管道→小样本过拟合→初始化归一化→学习率扫描→优化器调度→梯度监控"固定顺序排除， 先廉价检查后昂贵实验，每步带完成标准与判停条件。不适用于：训练正常但泛化差（ml-diagnosis）、 架构未定（ml-transformer-era）。触发词: loss 不降, NaN, diverge, gradient vanishing, warmup, Adam vs SGD

- Skill: `fieldlu/ml-deep-training-playbook` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add fieldlu/ml-deep-training-playbook`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fieldlu/ml-deep-training-playbook/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: fieldlu (https://skillmd.com/u/fieldlu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fieldlu/ml-deep-training-playbook

---


# 深度训练排障手册 — 训练不动时按固定顺序逐层排除

## R — 原文 (Reading)

> （转述）Glorot 与 Bengio 主张：初始化应让信号在前向与反向传播中都保持稳定的方差尺度，否则深层网络的激活与梯度会随深度指数衰减或放大；He 等随后针对 ReLU 的单边响应修正方差系数，使极深网络从第一步起就能有效收敛。
>
> — Xavier Glorot & Yoshua Bengio (2010)；Kaiming He 等《Delving Deep into Rectifiers》(2015)

> （转述）Ioffe 与 Szegedy 提出：把每层输入按 mini-batch 统计量重新标准化，可显著缓解训练中层间输入分布的持续漂移，从而允许更大学习率、放宽对初始化的敏感度；训练用批统计量、推理须换滑动平均统计量。
>
> — Sergey Ioffe & Christian Szegedy《Batch Normalization》(2015)

> （转述）He 等观察到 56 层普通网络的训练误差反而高于 20 层——退化源于优化困难而非过拟合；将堆叠层重构为学习相对输入的残差映射（F(x)+x）后，上百层网络得以稳定训练。
>
> — Kaiming He 等《Deep Residual Learning for Image Recognition》(2016)

---

## I — 方法论骨架 (Interpretation)

深度训练失败极少是单一的神秘原因，绝大多数落在一条确定的排查链上。链的骨架由四组奠基工作搭起：

- **初始化**（Glorot & Bengio 2010; He 2015）：各层激活与梯度方差若不被刻意稳定，信号会沿深度指数衰减或放大——训练不动先问"第一层出来的东西还活着吗"。
- **归一化**（BatchNorm 2015 / LayerNorm 2016）：对层间输入重新标准化，允许更大学习率并放宽初始化敏感度；卷积/大批量场景 BN、序列与 Transformer 场景 LN 是当前共识分工。
- **优化器**（momentum 2013; Adam 2015; AdamW 2019）：SGD+动量泛化口碑好但对超参娇气；Adam 系鲁棒省心，但权重衰减必须与自适应更新解耦（AdamW）才真正生效。
- **调度**（warmup + 余弦/线性衰减，Vaswani 2017 起）：初期小步试探防热启动发散，后期退火做精修。

操作纪律三条：①先证明数据管道是通的（小样本过拟合测试），再谈优化器；②一次只动一个变量，否则涨跌都无法归因；③把梯度范数当仪表盘看——消失查激活/初始化/缺残差，爆炸上裁剪与降学习率。

---

## A1 — 文献中的经典应用 (Past Application)

*（本批主题超出西瓜书覆盖范围，A1 改引奠基文献的经典案例，均为学界公认的原始实验叙述）*

### 案例 1: ResNet 与"退化问题"的定性
- **问题**: He 等在 CIFAR-10 上发现 56 层普通卷积网的训练误差反而高于 20 层——不是过拟合（训练误差也高），是更深的网络优化不动。
- **方法论的使用**: 先把"加深必然更好"的假设拆开，确认瓶颈在优化端而非容量端；再将堆叠层重构为 F(x)+x 的残差形式，给恒等映射留出默认通路，让梯度拥有跨层高速通道。
- **结论**: 退化是优化问题而非容量问题；残差重构后 152 层网络可稳定训练。
- **结果**: ResNet 拿下 2015 年 ImageNet/COCO 多项冠军；残差连接成为包括 Transformer 在内所有深层架构的标配组件。

### 案例 2: BatchNorm 的训练加速
- **问题**: 深层 CNN 对初始化与学习率极度敏感、训练缓慢，层间输入分布在训练中不断变动被怀疑是元凶。
- **方法论的使用**: 在每个 mini-batch 内对各层输入重新标准化，用可学习缩放参数恢复表达力；推理阶段改用滑动平均统计量保证输出确定。
- **结论**: BN 允许大得多的学习率、对初始化不敏感，论文报告达到同等精度的训练步数缩减一个数量级（转述）。
- **结果**: BN 成为计算机视觉训练十年的标配；其对批大小的依赖与训练/推理不一致的缺陷，后来催生 LayerNorm 在序列与生成模型中的全面取代。

### 案例 3: 优化器之争的裁决
- **问题**: Wilson 等 (2017) 报告 Adam 类自适应方法在部分深度任务上泛化劣于 SGD 动量，引发"Adam 不如 SGD"的恐慌；而 NLP 从业者发现 Transformer 用 Adam 明显更稳。
- **方法论的使用**: 把矛盾拆成两个变量——自适应步长本身，以及 L2 正则在自适应缩放下被稀释而失效。Loshchilov & Hutter 将权重衰减从梯度更新中解耦（AdamW）后逐一验证。
- **结论**: 问题主要出在耦合方式而非自适应思想；解耦后的 AdamW 在视觉与 NLP 任务上同时改善泛化。
- **结果**: AdamW 成为 Transformer 训练默认；"视觉常用 SGD 动量、NLP 默认 AdamW"的分工格局形成，优化器选型从信仰之争变成有据可依的决策。

---

## A2 — 触发场景 (Future Trigger) ★

### 用户会在什么情境下需要这个 skill?

1. 用户报告"loss 纹丝不动 / 一开始就 NaN / 训练到一半发散"，手里只有一个失败现象，不知从哪查起。
2. 用户在配置训练脚本时纠结：初始化用哪种、BN 和 LN 怎么选、SGD 还是 Adam、warmup 加多少步、cosine 还是线性衰减。
3. 用户怀疑梯度消失/爆炸（深层网络后半段没学到东西、loss 剧烈震荡），想知道确诊手段和对应处置。
4. 用户换了硬件/框架后同样的配置训不出原来的结果，怀疑训练方差或复现性问题。

### 语言信号 (用户的话里出现这些就应激活)

- "**loss 不降**" / "**训练发散**" / "**NaN**" / "loss 爆了" / "converge 不了" / "training diverges"
- "**梯度消失**/**爆炸**" / "vanishing gradient" / "gradient exploding" / "**残差连接**要不要加"
- "**初始化**用 Xavier 还是 He" / "**BatchNorm** 还是 **LayerNorm**" / "**warmup** 要不要加" / "**cosine** 调度"
- "**Adam** 还是 **SGD**" / "AdamW 为什么好用" / "learning rate 怎么定" / "**收敛慢**"

### 与相邻 skill 的区分

- 与 `ml-diagnosis` 的区别: 那是"训练正常但效果不好"的泛化归因（偏差/方差/噪声）；本 skill 管"训练过程本身不动/不稳"。loss 平稳下降但验证集差 → diagnosis；loss 降不动或 NaN → 本 skill。
- 与 `ml-transformer-era` 的区别: 那是训练前的架构选型；本 skill 假设架构已定、进入执行层。不同架构的默认训练配方不同，先选骨架再来本 skill。
- 与 `ml-overfitting-modern` 的区别: 那是 train-val gap 已经出现后的正则工具箱；本 skill 处理 gap 出现之前的训练动力学问题。

---

## E — 可执行步骤 (Execution)

当 skill 被激活后, agent 应按以下步骤执行:

1. **管道健全性测试（永远的第一步）**
   - 取 10~100 条训练样本（关闭增强与正则），把模型训到训练 loss≈0，并肉眼核对若干预测与标签的对齐关系。
   - 完成标准: 小样本上训练损失趋近 0，预测-标签对齐无误。
   - 判停条件: 若小样本都无法过拟合 → 问题在实现层（标签错位/预处理 train-test 不一致/损失配置错/容量过小），**禁止进入优化器调参**，回代码审查；能过拟合 → 进步骤 2。

2. **初始化与归一化体检**
   - 检查初始化是否匹配激活函数族（sigmoid/tanh 用 Xavier，ReLU 族用 He）；打印前向传播逐层激活的均值与标准差；确认归一化层位置符合架构惯例（Transformer 主流为前置 LayerNorm）。
   - 完成标准: 各层激活 std 同数量级、不随深度塌缩至 1e-3 以下或膨胀到 1e3 以上。
   - 判停条件: 激活统计已显示塌缩/爆炸 → 先修初始化或补归一化，暂不触碰优化器。

3. **学习率量级扫描**
   - 对数间隔扫 LR（如 1e-5 到 1），每个值跑数十 step 观察 loss 走向。
   - 完成标准: 圈出"稳定下降不震荡"的最大量级与"纹丝不动"的最小量级，工作点取前者下方。
   - 判停条件: 任何 LR 都 NaN → 查数值稳定性（fp16 溢出、log(0)、除零），加梯度裁剪/AMP scaler 后重扫；无任何 LR 能降 → 回步骤 1-2。

4. **优化器与调度定型**
   - 按架构惯例取默认：Transformer 类 → AdamW + 线性 warmup（约总步数 1%-10%）+ 余弦/线性衰减；CV CNN → SGD+momentum 与 AdamW 皆值得一试。
   - 完成标准: 配置卡写明 optimizer/lr/batch/warmup/scheduler 及选择依据（文献共识或本任务消融）。
   - 判停条件: 算力只够一次实验 → 采用领域默认配置并如实标注"未经消融"。

5. **梯度健康监控**
   - 全程记录梯度全局范数与逐层范数曲线。
   - 完成标准: 给出"健康/消失/爆炸"判定及证据；消失 → 查激活饱和与初始化、加残差/密集连接；爆炸 → 设裁剪阈值并降 LR。
   - 判停条件: loss 呈锯齿剧烈震荡 → 先降 LR 或加大 batch 再观察梯度，勿急于改架构。

6. **收敛判定与方差确认**
   - 至少 3 个随机种子完整复跑最优配置，记录均值±标准差与环境信息（库版本/硬件）。
   - 完成标准: 交付报告含多 seed 方差；seed 间差异大于效应量的结论不得写入报告。
   - 判停条件: seed 间方差过大 → 先排查数据洗牌与非确定算子，再谈继续调参。

---

## B — 边界 (Boundary) ★

### 不要在以下情况使用此 skill

- 训练本身正常（loss 平稳下降）但验证/测试不佳 → 这是泛化归因问题，走 `ml-diagnosis`；在这里调初始化是南辕北辙。
- 架构尚未确定 → 先走 `ml-transformer-era`；不同架构默认配方不同，先鸡后蛋必然返工。
- 传统 ML 模型（GBDT/线性/核方法）"训不动" → 这些模型没有初始化/归一化/梯度裁剪的概念，走 `ml-diagnosis`。

### 文献反复警告的失败模式

- **一次改三个旋钮**: 同时换优化器+改 LR+加归一化，涨点不知归功谁、跌点不知怪谁——单变量消融是本 skill 的底线纪律。
- **小 batch 上迷信 BN**: batch 个位数时批统计噪声极大且训练/推理不一致；序列与小 batch 场景改用 LayerNorm 是共识修正。
- **warmup 缺失导致的假性发散**: 大 batch/大模型直接热启动常在头几百步炸掉，容易被误诊为"模型不行"。
- **只盯终点 loss**: NaN 常源于 fp16 溢出或 log(0) 这类局部数值事故；曲线形态（台阶/尖刺/平台期）才是诊断信息的主体。
- **单 seed 下结论**: 深度训练方差远大于传统模型，单次运行的小差距多数是噪声。

### 作者盲点 / 时代局限（本批为外推补全）

- **必须声明**: 本 skill 主题超出西瓜书覆盖范围——BOOK_OVERVIEW 批判节明确指出西瓜书（2016）第 5 章止于 BP 算法与浅层讨论，深度训练工程完全缺席；本 skill 是对该时代局限的外推补全，素材为 2010-2019 奠基文献的共识转述，**方法论仍在快速演化**（新型优化器与归一化变体层出不穷），执行时应以最新实证为准。
- 大参数量下"训练不动"的含义已分化：scaling law 语境下 loss 平滑但绝对值偏高是常态，与病态发散/平台期是完全不同的问题，经典"loss 不降 = 出 bug"的直觉需要重新标定。
- **随机种子与训练方差**议题长期被文献低估：大模型训练的报告方差、数据顺序敏感性至今缺乏统一规范，本 skill 只能给出最低纪律（多 seed 报告），无法给出"多大方差算异常"的普适阈值。
- 过拟合的新形态（插值训练集却泛化良好）意味着"训练 loss 降到 0"不再自动等于红旗，详见 `ml-overfitting-modern` 的双下降讨论。

### 容易混淆的邻近方法论

- **AutoML/HPO**: 自动化的是超参搜索，替代不了本 skill 的因果排查链——搜索空间漏了 warmup，搜一万组也白搜；先诊断再搜索。
- **"炼丹玄学论"**: 把深度训练当不可理喻的巫术；上述排查链是确定性的，绝大多数"玄学"是变量未被控制的后果。
- **分布式/系统工程故障**: 多卡同步 bug、数据加载器死锁同样表现为"训练慢/不动"，症状相似但根因在工程侧，应最先排除。

---

## 相关 skills

- depends-on: ml-transformer-era（架构定型才有默认训练配方）
- contrasts-with: ml-diagnosis（训练不动 vs 训练正常但泛化差，一线之隔）
- composes-with: ml-overfitting-modern（gap 出现后接力正则工具箱）, ml-methodology-router

---

## 审计信息

- **来源性质**: 扩充批B·深度学习与大模型时代——主题超出西瓜书(2016)覆盖范围，R 段为经典文献共识的转述表述（均已标注"（转述）"）
- **验证通过**: 待流水线三重验证复核
- **测试通过率**: 待阶段 4 测试 (详见 test-prompts.json)
- **skill_version**: 0.0.1
- **蒸馏时间**: 2026-08-24

