返回 M01~M90 教材库
M04 · 预习教材教材已备 ≠ 学习已完成

M04:从 loss 与 gradient 症状定位训练故障

训练诊断不是看到 loss 异常就猜原因,而是联合观察损失、梯度、参数更新、输入数据和实现状态,逐步排除故障。

2026-08-27训练诊断、梯度累积、学习率、激活饱和、数据质量

内容类型:预习教材(不代表已完成)
日期:2026-08-27
阶段:P1 · AI Model Engineering 90
周次:W1 · 张量、梯度、autograd
节奏:周四案例与连接
状态:教材已备;学习未完成
标签:训练诊断、梯度累积、学习率、激活饱和、数据质量

一句话定义

训练诊断不是看到 loss 异常就猜原因,而是联合观察损失、梯度、参数更新、输入数据和实现状态,逐步排除故障。

学习目标

  1. 区分忘记清梯度、学习率过大、激活饱和和数据错误的典型信号。
  2. 学会建立“症状 → 假设 → 最小验证”的诊断表。
  3. 理解相似曲线可能来自不同根因,不能只看单一指标。
  4. 能设计一个只改变单因素的小实验。

核心知识

PyTorch 默认累加梯度。若训练循环忘记在正确位置清梯度,第 n 步使用的可能是前多步梯度之和,更新幅度逐渐失控。典型线索包括梯度范数随 step 异常增长、相同 batch 重复训练仍出现不合逻辑的更新,但具体曲线也取决于梯度方向,不能把“loss 爆炸”当作唯一症状。

学习率过大意味着局部下降方向正确,步幅却跨过低谷,loss 可能振荡、突然发散或出现非有限值;过小则表现为曲线缓慢、参数更新相对参数尺度极小。观察 update-to-weight ratio 比只看学习率数字更有意义,因为不同模型和参数组尺度不同。

sigmoid/tanh 在输入绝对值较大时进入饱和区,局部导数趋近零,前层梯度可能消失。ReLU 也可能因长期位于负区间形成“死亡单元”。数据错误包括标签错位、单位不一致、归一化遗漏、padding 被当成有效 token、训练/验证处理不一致等;它们可能让训练 loss 看似正常,却破坏验证或业务行为。

机制与诊断路径

建立最小观测集:batch 输入范围与标签分布、当前 loss、各层梯度范数、参数范数、更新范数、是否出现 NaN/Inf。随后每次只验证一个假设:

  • 清梯度假设:固定一个 batch,对比每步清零与不清零的梯度序列。
  • 学习率假设:保持其他条件不变,仅把学习率按数量级缩小。
  • 饱和假设:查看激活分布及其导数有效区间,或换用非饱和输入尺度。
  • 数据假设:直接打印少量原始样本、变换后样本、标签与 mask 对齐关系。

诊断顺序通常先查数据和实现不变量,再查超参数,最后才扩大模型。因为错误数据上的大模型只会更快拟合错误。

最小观察步骤

  1. 为同一个极小模型准备固定 batch 和固定初始参数。
  2. 设计四个独立变体:不清梯度、极大学习率、饱和激活输入、标签打乱。
  3. 每个变体只计划记录 loss、gradient norm、update norm 和一项数据检查。
  4. 在运行前先写出预期症状,运行后再填写实际观察,禁止倒推故事。
  5. 汇总为“现象—可能原因—区分实验—修复动作”四列表。

常见误区

  • loss 不下降就立刻加深模型,忽略标签与预处理。
  • 用一次随机运行判断根因,没有固定 seed 和初始状态。
  • 只看总梯度范数,漏掉某一层全零或异常大的局部问题。
  • 梯度裁剪后曲线稳定就认为根因消失;裁剪可能只抑制表面症状。
  • 把训练 loss 低等同于数据正确、泛化良好或决策成本低。

场景连接

AML 数据常有金额单位、时间窗口、标签延迟和样本选择问题。若模型效果异常,先核对“交易发生时是否已知该特征”和“标签是否晚于决策时点”,往往比调学习率更关键。

自检问题

  1. 忘记 zero-grad 为什么不一定从第一步就立刻爆炸?
  2. 如何区分学习率过大与标签随机造成的 loss 不降?
  3. 哪些观测能支持“激活饱和”而不仅是猜测?
  4. 为什么一次只改变一个变量有助于形成因果判断?

专业课程对齐

  • Stanford CS231n:对应神经网络训练、参数更新与训练过程诊断。重点关注 loss 曲线、激活分布、梯度量级和学习率之间的联系。
  • Stanford CS229 Materials:对应偏差—方差、优化和正则化,用于区分“没优化好”与“泛化不好”。
  • PyTorch Tutorials:对应标准训练循环,核对 train/eval、梯度清零、反传和更新的正确顺序。

深入学习提示

先精读 CS231n 的训练诊断思路,再用 PyTorch 官方循环逐行建立观测点,最后选读 CS229 的偏差—方差材料。应同时观察训练/验证损失、梯度范数、参数更新比、激活饱和比例和预测分布;单一 loss 无法定位故障。公式上比较更新尺度 η‖g‖/‖w‖,理解学习率过大与梯度爆炸虽都造成剧烈更新,但根因不同。反例包括:训练损失下降而验证恶化、准确率不变但概率逐渐校准、忘记 model.eval() 使验证抖动、标签泄漏带来异常完美曲线。诊断顺序应从数据与目标、前向输出、梯度、更新,再到泛化,不先靠更复杂模型掩盖问题。

学后填写区

  • 我的症状—原因表:____
  • 运行前预测:____
  • 实际观察(未运行可留空):____
  • 最先会检查的不变量:____
  • 实际学习日期与用时:____
学完后,请把自己的理解、练习结果和仍不确定的问题写入文末“学后填写区”,再到唯一进度账本更新状态。预先阅读后续教材不会自动增加完成数。