过拟合

过拟合封面

训练时我们总盼着损失越降越好。可降着降着,会撞上一件怪事:训练集上越答越对,一到没见过的新题就拉垮。这就是过拟合(overfitting)。一句话定义:模型把训练集学得太死——连其中的噪声和偶然巧合都当成规律背了下来,导致对新数据泛化能力差。

最贴切的类比是「死记答案的学生」。想象一个学生复习考试,不做理解、只把练习册每道题的答案逐字背下来。练习册他回回满分,可一上考场、题目稍微换张脸,他就懵了——他背的是「这道题答案是 A」,而不是「为什么该选 A」。过拟合的模型就是这样的学生:它把训练集里每一条数据(连手抖标错的那几条)都记死了,却没学到背后真正的规律。我们训练模型,要的从来不是「把练习册背下来」,而是「举一反三」——这个「举一反三」的能力,AI 里有个专门的词叫泛化(generalization)。

它在 AI 体系里的位置

过拟合不是一个孤立的麻烦,而是贯穿整个机器学习训练的核心风险——只要你在训练模型,就要时刻提防它。它和几个概念紧密绑定:

  • 训练集 / 验证集(training / validation set):训练集是模型用来「学习」的数据,验证集是模型没见过的数据,专门用来检验它到底有没有学会。判断过拟合靠的就是这两者的对比。
  • 泛化能力:模型在没见过的新数据上依然表现好的能力,这才是训练真正的目标。
  • 欠拟合(underfitting):过拟合的反面——模型太简单,连练习册都没学明白,新题旧题一起拉垮。过拟合和欠拟合是一根轴上的两个极端,我们要找的是中间那个「刚刚好」。
  • 正则化 / Dropout / 早停:都是专门用来对付过拟合的手段,下文会讲。

「噪声」(noise)是什么?就是数据里那些偶然的、不代表规律的波动——比如一条本该标「猫」的图片被手误标成了「狗」,或者传感器读数抖了一下产生的随机值。好模型应当忽略噪声,过拟合的模型却把它当宝贝一起背下来了。

怎么发现它:两条分岔的曲线

判断过拟合最经典的方法,是把训练损失验证损失画在同一张图上,看它们会不会「分岔」。

  • 训练一开始,两条线一起往下掉(都在变好)。
  • 训练到某个点,验证损失突然掉头向上,而训练损失还在继续降——这一刻起,过拟合就发生了。

这张「验证损失拐头向上」的图,就是过拟合的标志性画像:模型在练习册上越答越对(训练损失降),考场表现却越来越差(验证损失升)。两条线的差距越大,过拟合越严重。

训练损失与验证损失曲线对比

图 1:训练损失一路下降,验证损失却在拐点后掉头向上——这就是过拟合的信号。

为什么会过拟合

根子就一句话:模型的容量(学习能力)富余到去「背」数据,而不是「学」规律。常见诱因有四个:

  • 模型太复杂:参数(模型自己学出来的那些权重,相当于一堆可调的旋钮)太多、层数太深,记下整本练习册绰绰有余,自然懒得去归纳规律。
  • 训练数据太少:练习题就那么几道,模型只能把每道题死记下来,没机会发现共性。
  • 训练太久:同样的题反复刷,刷到最后连标点符号都背下来了。
  • 数据噪声多:练习册里错题、怪题越多,模型越容易把偶然当成必然。

过拟合、欠拟合、刚刚好

把模型复杂度从低到高拉一条轴,能看清三种状态:

  • 欠拟合(模型太简单):练习册都没学明白,训练损失和验证损失都偏高——学力不足。
  • 刚刚好:抓住了规律,又没死记噪声,验证损失最低——这才是我们要的。
  • 过拟合(模型太复杂):练习册背得滚瓜烂熟,新题却一塌糊涂。

这背后是机器学习里著名的偏差-方差权衡(bias-variance tradeoff)。「偏差」高对应欠拟合(模型太死板,抓不住规律),「方差」高对应过拟合(模型太敏感,连噪声都跟着抖)。调模型,本质就是在这两端之间找那个最优的折中点。

欠拟合、刚刚好、过拟合三种状态对比

图 2:同一组数据下,欠拟合画一条直线抓不住趋势、刚刚好用平滑曲线贴住规律、过拟合则连每个点都硬贴成波浪。

怎么对付过拟合

对症下药,手段分三类:

  • 给数据加料:收集更多训练数据是最根本的办法;样本不够时,对现有数据做翻转、裁剪、加噪等数据增强(data augmentation),也能变相「扩容」。
  • 给模型上枷锁:降低复杂度(砍层数、减神经元);加正则化(regularization,在损失里给大权重上惩罚,逼模型用小而分散的权重);用 Dropout(训练时随机关掉一部分神经元,防止模型过度依赖某几个特征)。
  • 给训练踩刹车早停法(early stopping)——盯着验证损失,它一旦不再下降就立刻停止训练,趁模型还没开始死记就收手。

一个常见误区:觉得「训练损失降得越低越好」。这其实是错的。训练损失低只代表练习册背得好,不代表真的学会了;真正该盯的是验证损失,它才是「能不能上考场」的成绩单。

小结

过拟合就是模型「死记训练集、应付不了新数据」——连噪声都背下来了,泛化能力却垮了。发现它靠训练/验证两条曲线分岔,治它靠「加数据、降复杂度、早刹车」三板斧。记住一句话:我们训练模型,要的不是「背答案」,而是「懂规律」。

参考资料

  1. 模型选择、欠拟合和过拟合 - 动手学深度学习(李沐等) https://zh.d2l.ai/chapter_multilayer-perceptrons/underfit-overfit.html
  2. 过拟合 - Google 机器学习速成课 https://developers.google.com/machine-learning/crash-course/overfitting/overfitting
  3. 什么是过拟合 - IBM https://www.ibm.com/cn-zh/think/topics/overfitting