K 的一隅

AI 神经网络基础

训练集全对,为什么换批数据就错:泛化、拟合与遗忘

训练误差低不等于模型真的学会了。用三种拟合结局,分清泛化、欠拟合、过拟合与灾难性遗忘。

5 分钟阅读 更新于 2026-07-28
本文目录

训练集准确率几乎满分,看上去是好消息,但还缺少最关键的信息:模型面对没见过的数据会怎样?下面直接对比三种训练结果,观察同一批样本如何导向不同表现。

三种训练结局

同一批点,模型可以学成三种样子

切换曲线,比较它对训练集与验证集的误差。数字是固定教学数据,不是某个真实模型的评测结果。

泛化良好的拟合曲线灰色圆点是训练样本,彩色曲线是当前选择的模型拟合结果。特征目标

当前结局

泛化良好

曲线抓住了趋势,但没有追着每一个样本点的细小波动跑。

两边误差接近且都不高,这是更想要的状态。

训练误差
0.11
验证误差
0.13

读图时先盯两条误差:训练误差和验证误差。它们同升同降、一低一高,对应的诊断完全不同。

情况一:训练集和验证集都不理想——欠拟合

欠拟合意味着模型还没有捕捉到足够的规律。它可能太简单、训练不够久,或者输入特征本身不够有信息。于是训练数据都做不好,换到验证集也不会突然变好。

验证集是训练期间不参与参数更新、专门用来检查新数据表现的数据。这时不要急着说“模型泛化差”。更准确的诊断是:它连要泛化的基本规律都还没学到。先让模型有能力把主要趋势学出来,才值得讨论它有没有背题。

情况二:两边误差都低——泛化

泛化是模型从训练样本中学到可迁移规律的能力。它不是把每个训练样本的编号背下来,而是在新样本出现时,仍能给出合理判断。

交互图中“泛化良好”的曲线没有穿过每一个点;它抓住的是点群的大方向。现实数据里会有测量误差、标注误差和偶然波动。把每一个小波动都当真,反而会损害新数据表现。

最后上线前,还会用独立的测试集做一次确认:测试集既不参与训练,也不参与“何时停训”的选择,避免验证集本身被反复调参“偷看”。

情况三:训练集近乎满分,验证集变差——过拟合

过拟合像一位把练习册答案和笔迹都背下来的学生:训练误差非常低,但换一套题就失灵。模型容量过大、数据太少、训练过久,或者数据噪声较多,都可能让它开始追逐不该学习的细节。

所以训练时通常同时看两条曲线:训练误差下降是必要信号;验证误差是否也能下降,才决定这是不是有价值的进步。常见对策包括补充和清洗数据、做数据增强、限制模型复杂度、加入正则化,以及在验证误差开始反弹时停止训练(早停)。

切换交互里的三种模式时,可以只问一个问题:曲线是在描述大趋势,还是在追逐每一个抖动点?

怎么读训练曲线,而不是只看最后一个数

单看“最终训练准确率 99%”几乎没有诊断力。更有用的是时间轴上的形状:

  • 两条曲线都居高不下 → 先怀疑欠拟合;
  • 两条曲线一起下降并贴近 → 泛化方向对了;
  • 训练曲线继续下探,验证曲线拐头向上 → 过拟合正在发生。

早停的直觉就在这里:不是训练越久越好,而是在验证曲线开始变坏之前取一版参数。学习率、模型宽度、正则强度都会改变拐头出现的早晚;调参时改一项,就重新看这对曲线,比只比较终点分数更稳。

批量大小和 Epoch:它们不改变三种结局的定义

前面每一次前向与反向计算可以只看一个样本,也可以看一大批。实践中更常用 Mini-Batch(小批量):一次取几十到几百个样本,合并它们的梯度后更新一次参数。它比单样本更新稳定,又不像全量数据那样每一步都很慢。

当训练数据被完整走过一遍,叫一个 Epoch(训练轮次)。一个 Epoch 不是“模型已经学会”的保证:训练 100 个 Epoch,仍可能欠拟合,也可能已在第 20 个 Epoch 后开始过拟合。需要把训练集指标和验证集指标放在一起看。

批量与轮次回答的是“参数更新怎么组织”;欠拟合 / 泛化 / 过拟合回答的是“学到的规律能不能迁移”。前者是训练工程旋钮,后者是结果诊断——不要用“我已经跑了很多 Epoch”代替看验证曲线。

旁支提醒:灾难性遗忘不是过拟合

主线三种情况都发生在同一个任务上:训练数据与新数据的差距。另有一类问题会出现在继续学习时——灾难性遗忘不是过拟合。

它发生在:模型先训练任务 A,之后只用任务 B 的数据继续更新;为了适应 B 而改动的权重,可能破坏了 A 原有能力。过拟合讨论“同一任务上背题”;灾难性遗忘讨论“新任务覆盖旧任务”。两者都与参数更新有关,但对策不同:前者防噪声记忆,后者要在继续训练时保留旧任务数据或约束。

本章交互只演示同一任务的三种拟合;看到“学新任务后旧任务崩掉”,不要套用过拟合那一套早停故事,先换诊断框架。

用一张小检查单收尾

观察到的现象优先判断
训练误差高,验证误差也高欠拟合:先检查模型能力、特征和训练是否充分
训练误差低,验证误差也低泛化良好:继续用独立测试集做最后确认
训练误差很低,验证误差明显更高过拟合:模型可能记住了噪声或样本细节
学新任务后旧任务快速退化灾难性遗忘:需要保留旧任务信息或加入约束