← 返回笔记列表
深度学习 第 8 / 49 篇

深度学习:欠拟合与过拟合 — 模型训练的三种状态

查看“深度学习”专题目录(8/49)
本文目录 16 个小节

1. 模型训练的三种状态

训练过程中,模型始终处于以下三种状态之一:

状态训练集表现验证集表现本质
欠拟合差差还没学到规律
适度拟合好好学到了真正的底层规律
过拟合好差死记硬背了训练数据

2. 欠拟合(Underfitting)

2.1 表现

模型连训练集上的表现都很差。

例如数据呈明显的抛物线分布,但用一个线性模型去拟合——不管怎么训练,MSE 都降不下来,因为模型的表达能力根本不足以描述数据的规律。

2.2 常见原因

原因说明
数据本身没有规律一大堆噪声,什么模型都学不到
模型太简单假设函数表达能力不足,如数据有二次项却只用一次函数去拟合
训练不足迭代次数不够,参数还没收敛

2.3 解决方向

  • 换更复杂的模型(增加特征高次项、更深的网络)
  • 增加训练迭代次数
  • 如果数据本身无规律,则回到数据层面,检查特征是否选对了

3. 过拟合(Overfitting)

3.1 表现

训练集上表现极好,验证集上表现很差。

曲线完美穿过每一个训练点,但在点与点之间剧烈波动——这意味着模型记住了训练数据中每一个样本的具体位置,但没有学到背后的平滑规律。

3.2 判断标准

训练集 Loss≪验证集 Loss⇒过拟合\text{训练集 Loss} \ll \text{验证集 Loss} \quad \Rightarrow \quad \text{过拟合}

训练与验证损失还应在一致的评估模式、预处理和可比目标下比较,排除分布偏移或数据错误。差距大是诊断信号,不能单凭它证明过拟合。

常见曲线是:验证集 Loss 在降到某个点之后,开始重新上升(而训练集 Loss 还在继续下降)。

3.3 常见原因

原因说明
模型太复杂用高次多项式拟合简单的线性规律
训练数据太少数据量不足以覆盖真实分布,模型把个例当规律
训练太久迭代轮数过多,模型从”学规律”逐渐滑向”记答案”

3.4 解决方向

  • 简化模型(减少特征高次项、减少网络层数或神经元数)
  • 增加训练数据
  • 早停(Early Stopping):在验证集 Loss 开始上升前停下训练
  • 正则化(Regularization):给复杂模型加惩罚项(后文会讲)

4. 适度拟合(Good Fit / Just Right)

4.1 表现

训练集和验证集上的表现都很好。

模型学到了数据底层的规律,这个规律在未见过的验证数据上也成立——这就是泛化能力(Generalization)。

4.2 什么叫泛化?

在训练数据上学到的能力,可以迁移到没见过的新数据上。

训练的终极目标不是”答对做过的题”,而是”能答对没见过的题”。泛化能力就是把前者转化为后者的能力。


5. 训练过程中的诊断最佳实践

定义评价指标 → 划分数据集 → 开始训练

训练循环中,每隔一定轮次:
  ├── 计算训练集指标
  ├── 计算验证集指标
  │
  ├── 训练集指标差?     → 欠拟合 → 加复杂度 / 加迭代
  │
  ├── 训练集指标好 + 验证集指标好?
  │   → 适度拟合 → ✅ 这就是你要的模型
  │
  └── 训练集指标好 + 验证集指标差?
      → 过拟合 → 减复杂度 / 加数据 / 早停

诊断顺序

先看训练集,再看验证集。

  1. 第一步:确保训练集上的指标达到预期。如果连训练集都不行,说明模型还在欠拟合——先把这个问题解决。
  2. 第二步:训练集达标后,对比验证集。验证集也满意 → 完成。验证集差 → 过拟合 → 调整。
  3. 循环:直到在两者上都获得满意的表现。

6. 总结

模型复杂度过低 → 欠拟合 → 训练集差 + 验证集差
模型复杂度适中 → 适度拟合 → 训练集好 + 验证集好 ← 目标状态
模型复杂度过高 → 过拟合 → 训练集好 + 验证集差

训练时:先确保训练集过关(解决欠拟合),再确保验证集过关(解决过拟合)
继续学习本专题