跳到主要内容

训练监控与诊断

本节定位

很多训练失败并不是“模型不够强”,而是:

  • 数据有问题
  • 学习率不对
  • 训练过程在悄悄崩

所以训练时最关键的能力之一不是“会开训”,而是:

看得懂训练过程到底出了什么问题。

学习目标

  • 理解训练监控应该看哪些关键信号
  • 学会区分过拟合、欠拟合、学习率异常等常见问题
  • 通过可运行示例建立训练曲线诊断直觉
  • 学会把问题定位到数据、优化器或模型结构层

一、为什么训练诊断这么重要?

1.1 因为训练失败很少会直接报“真正原因”

你更常看到的是:

  • loss 不降
  • 验证集突然变差
  • 准确率卡住

但这些只是现象,不是根因。

1.2 真正的诊断要回答

  • 是学习率问题?
  • 是数据问题?
  • 是过拟合?
  • 还是模型容量不够?

二、先看一个最常见的诊断入口:训练曲线

history = [
{"epoch": 1, "train_loss": 0.95, "val_loss": 0.98},
{"epoch": 2, "train_loss": 0.72, "val_loss": 0.81},
{"epoch": 3, "train_loss": 0.51, "val_loss": 0.79},
{"epoch": 4, "train_loss": 0.35, "val_loss": 0.92},
]

for row in history:
print(row)

2.1 这个例子里最明显的信号是什么?

  • train_loss 一直下降
  • val_loss 先降后升

这通常非常像:

  • 过拟合

2.2 为什么训练曲线是第一入口?

因为它是最早暴露问题的地方,
而且很多问题都能先从曲线形状看出端倪。


三、几种常见问题长什么样?

3.1 欠拟合

典型表现:

  • train_loss 高
  • val_loss 也高
  • 两边都下不去

3.2 过拟合

典型表现:

  • train_loss 继续下降
  • val_loss 开始变差

3.3 学习率太大

典型表现:

  • loss 抖动
  • 甚至突然爆炸

3.4 学习率太小

典型表现:

  • loss 在降,但极慢
  • 很久没有明显进展

四、除了 loss,还该看什么?

4.1 梯度是否异常

例如:

  • 梯度爆炸
  • 梯度消失

4.2 预测分布是否异常

例如:

  • 模型总预测同一类
  • 置信度极端偏斜

4.3 数据本身是否有问题

例如:

  • 标签错误
  • 类别不平衡
  • 训练/验证分布差异大

五、一个最小诊断规则示例

def diagnose(train_losses, val_losses):
if train_losses[-1] > 0.8 and val_losses[-1] > 0.8:
return "可能欠拟合"
if train_losses[-1] < train_losses[0] and val_losses[-1] > min(val_losses):
return "可能过拟合"
if max(train_losses) - min(train_losses) > 1.5:
return "可能学习率过大或训练不稳定"
return "需要结合更多信号判断"


train_losses = [0.95, 0.72, 0.51, 0.35]
val_losses = [0.98, 0.81, 0.79, 0.92]

print(diagnose(train_losses, val_losses))

5.1 这个例子不是要替代人工判断

它主要是在帮你建立一种很重要的诊断习惯:

  • 先从现象归类
  • 再去找可能原因

六、最容易踩的坑

6.1 误区一:只看最终准确率

这样你很难理解训练过程中发生了什么。

6.2 误区二:一看 loss 不降就立刻换模型

很多时候问题根本不在模型结构。

6.3 误区三:觉得训练问题只能靠经验猜

其实很多问题都能通过:

  • 曲线
  • 统计
  • 样本检查

有系统地定位。


小结

这节最重要的是建立一个训练诊断直觉:

先从 loss 曲线和验证表现识别问题类型,再把根因逐步定位到学习率、数据、泛化或模型容量。

只要这个习惯建立起来,训练就不会再只是“开盲盒”。


练习

  1. 自己构造一组“欠拟合”曲线,看看 diagnose 会不会变化。
  2. 为什么说训练集和验证集的差距,是诊断里非常关键的信号?
  3. 如果模型总预测同一类,你会优先怀疑哪些问题?
  4. 想一想:为什么训练诊断能力本身就是工程能力?