术语 · · 1 分钟阅读
Overfitting
你经营着一个冰淇淋摊。10 天里,你在账本上记下了中午的气温和卖出的冰淇淋球数。你想把这些记录变成一条规则:明天预计 24°C,该准备多少冰淇淋?
最简单的规则是一条直线:“每高一度,就多卖几个球”。在这篇笔记的例子里,它在记下的这些天上的典型误差是 27.5 个球,因为它看不到最热的时候销量反而下降。于是可以给规则更多的自由,允许曲线拐弯。试过的曲线中最灵活的那条,恰好穿过全部 10 个点。它在账本里这些天上的误差是 0。
这看起来是一条完美的规则。只不过账本里的那些天已经过去了,而规则是要在明天起作用的。在同一个摊子的 400 个新日子上,这条“完美”曲线的典型误差是 236.5 个球。灵活度适中的曲线在账本上表现更差(10.9),在新日子上的误差却是 16.8。
Overfitting 指的是这样一种情形:模型在用于学习的数据上误差很小,而在同类的新数据上误差与之相比过大(Goodfellow、Bengio 和 Courville, Deep Learning, §5.2)。模型拟合了自己那份数据集中在别处不会重现的特征。相反的毛病叫 underfitting:规则太简单,连它见过的数据都描述不好。我们例子里的直线就是这样。

这种差别从何而来
账本里的每一条记录都由两样东西组成:规律(天更热,所以冰淇淋卖得更多)和偶然(恰好来了一个旅行团)。规则应当抓住前者,略过后者。可是模型并不知道哪个是哪个。它只看得到点。
模型会吸收多少偶然,取决于它的灵活度,文献中称之为 capacity:拟合许多不同形状的能力。例子中的曲线由 2 到 10 个数字描述,这些数字根据数据来选定;数字的个数等于曲线的次数加一。9 次曲线有 10 个这样的数字,对应 10 天,所以它能命中每一个点,连同全部的偶然。教科书的作者是这样描述的:非常灵活的模型能够表示正确的关系,但也能表示大量别的、同样符合训练数据的关系,而它恰好选中往后还管用的那一个的可能性很小(§5.2)。
典型的过程是这样的:灵活度增大时,训练数据上的误差减小,而新数据上的误差先减小,然后开始增大(§5.2,图 5.3)。由此得出一条实用的原则。不在模型学习过的数据上评估模型,也不按这些数据上的误差来选择灵活度,因为它总会指向最大的那个。要把一部分数据留出来:validation set [Polski] 用于选择设置,单独的 test set 用于最终评估(§5.3)。
自己试试
下面是同一个冰淇淋摊。这篇笔记里的所有数字都可以重现:点击“重新开始”后可以看到 10 天,而实验 1–5 会设置好文中描述的各种情形。
有两件事值得做一做,它们是静态图表展示不了的。第一,打开“另外 24 本账本”并改变次数:次数低时,灰线彼此靠得很近;次数高时,它们向四面八方散开,尽管每一条都来自同一个摊子。第二,把一个点高高地往上拖。2 次曲线只会挪动一点点,而 9 次曲线会为了命中它而在整条线上重新调整。
什么有帮助
- 更多数据。有 80 天时,同一条 9 次曲线在账本上的典型误差是 14.8 个球,在新日子上是 15.9。差别几乎消失了,因为曲线已经无法命中每一个点(§5.2)。
- 更小的灵活度。3 次曲线用 10 天:账本上 10.9,新日子上 16.8。
- Regularization,也就是对学习方式的改动,目的是减小新数据上的误差,而不是训练数据上的误差(§5.2.2)。一个例子是对大系数的惩罚,它与 Weight decay [Polski] 是近亲:带惩罚 λ = 0.01 的 9 次曲线,在账本上的误差是 5.8,在新日子上是 21.2,而不是 236.5。
这些设置中的任何一个,都无法只靠看训练数据上的误差来选定。
局限
- 这是一个自拟的例子,只有一个输入量,数据是模拟的。在这里,单是偶然就会带来典型值为 15 个球的误差,任何规则在新日子上都降不到它以下。
- “先变好,后变差”的形状是典型的,却不是必然的。作者指出,在深度网络中,甚至很难确定模型实际的灵活度,因为它还取决于学习算法(§5.2)。所以,单凭 LLM 的参数量,说明不了模型是否过拟合。
- 新数据上误差小,说的是来自同一来源的数据。如果摊子搬到了海边,城里的账本什么也保证不了。
相关条目
- Weight decay [Polski] 限制权重的大小,是缩小训练数据与新数据上误差之差的方法之一。
- Grokking [Polski] 描述的是这样一些情形:看起来已经过拟合的模型,在长时间的继续训练之后开始在新数据上表现良好。
- Fine-tuning [Polski] 在小数据集上进行时需要同样的把关:要有模型在学习时没有见过的单独数据。
- Catastrophic Forgetting [Polski] 是另一个问题:那里的模型在新的学习之后丢掉了旧的能力,而这里的模型从一开始就难以推广到自己的训练数据之外。