1. 模型训练的三种状态
训练过程中,模型始终处于以下三种状态之一:
| 状态 | 训练集表现 | 验证集表现 | 本质 |
|---|---|---|---|
| 欠拟合 | 差 | 差 | 还没学到规律 |
| 适度拟合 | 好 | 好 | 学到了真正的底层规律 |
| 过拟合 | 好 | 差 | 死记硬背了训练数据 |
2. 欠拟合(Underfitting)
2.1 表现
模型连训练集上的表现都很差。
例如数据呈明显的抛物线分布,但用一个线性模型去拟合——不管怎么训练,MSE 都降不下来,因为模型的表达能力根本不足以描述数据的规律。
2.2 常见原因
| 原因 | 说明 |
|---|---|
| 数据本身没有规律 | 一大堆噪声,什么模型都学不到 |
| 模型太简单 | 假设函数表达能力不足,如数据有二次项却只用一次函数去拟合 |
| 训练不足 | 迭代次数不够,参数还没收敛 |
2.3 解决方向
- 换更复杂的模型(增加特征高次项、更深的网络)
- 增加训练迭代次数
- 如果数据本身无规律,则回到数据层面,检查特征是否选对了
3. 过拟合(Overfitting)
3.1 表现
训练集上表现极好,验证集上表现很差。
曲线完美穿过每一个训练点,但在点与点之间剧烈波动——这意味着模型记住了训练数据中每一个样本的具体位置,但没有学到背后的平滑规律。
3.2 判断标准
训练与验证损失还应在一致的评估模式、预处理和可比目标下比较,排除分布偏移或数据错误。差距大是诊断信号,不能单凭它证明过拟合。
常见曲线是:验证集 Loss 在降到某个点之后,开始重新上升(而训练集 Loss 还在继续下降)。
3.3 常见原因
| 原因 | 说明 |
|---|---|
| 模型太复杂 | 用高次多项式拟合简单的线性规律 |
| 训练数据太少 | 数据量不足以覆盖真实分布,模型把个例当规律 |
| 训练太久 | 迭代轮数过多,模型从”学规律”逐渐滑向”记答案” |
3.4 解决方向
- 简化模型(减少特征高次项、减少网络层数或神经元数)
- 增加训练数据
- 早停(Early Stopping):在验证集 Loss 开始上升前停下训练
- 正则化(Regularization):给复杂模型加惩罚项(后文会讲)
4. 适度拟合(Good Fit / Just Right)
4.1 表现
训练集和验证集上的表现都很好。
模型学到了数据底层的规律,这个规律在未见过的验证数据上也成立——这就是泛化能力(Generalization)。
4.2 什么叫泛化?
在训练数据上学到的能力,可以迁移到没见过的新数据上。
训练的终极目标不是”答对做过的题”,而是”能答对没见过的题”。泛化能力就是把前者转化为后者的能力。
5. 训练过程中的诊断最佳实践
定义评价指标 → 划分数据集 → 开始训练
训练循环中,每隔一定轮次:
├── 计算训练集指标
├── 计算验证集指标
│
├── 训练集指标差? → 欠拟合 → 加复杂度 / 加迭代
│
├── 训练集指标好 + 验证集指标好?
│ → 适度拟合 → ✅ 这就是你要的模型
│
└── 训练集指标好 + 验证集指标差?
→ 过拟合 → 减复杂度 / 加数据 / 早停
诊断顺序
先看训练集,再看验证集。
- 第一步:确保训练集上的指标达到预期。如果连训练集都不行,说明模型还在欠拟合——先把这个问题解决。
- 第二步:训练集达标后,对比验证集。验证集也满意 → 完成。验证集差 → 过拟合 → 调整。
- 循环:直到在两者上都获得满意的表现。
6. 总结
模型复杂度过低 → 欠拟合 → 训练集差 + 验证集差
模型复杂度适中 → 适度拟合 → 训练集好 + 验证集好 ← 目标状态
模型复杂度过高 → 过拟合 → 训练集好 + 验证集差
训练时:先确保训练集过关(解决欠拟合),再确保验证集过关(解决过拟合)