过拟合,指的是模型把训练数据背得太熟,连数据里的噪声和偶然细节都一起记住,结果在训练题上分数很高,换一批没见过的新数据就明显变差。判断一个模型好不好,不能只看它在练过的题目上表现如何,关键看它面对新问题时能不能把规律用出来。过拟合的模型不是学到了规律,而是记住了答案。
训练分数和真实水平为什么会脱节
模型训练的过程,本质上是在数据里找规律。但数据里既有真正的规律,也有噪声:录入错误、偶然巧合、只在这一批数据里成立的特殊情况。训练轮次越多、模型参数越多,它越有能力把这些噪声也一并拟合进去。于是会出现一个典型信号:在训练集上的错误率持续下降,在验证集上先降后升。两条曲线分叉的位置,就是模型开始死记硬背的起点。
与过拟合相对的是欠拟合:模型连训练数据里的基本规律都没学够,新旧题目都做不好。一个学得刚好的模型,状态介于两者之间。还可以留意一个隐蔽来源——数据泄漏:本该留到考试时才出现的信息,提前混进了训练数据,比如用未来的数据预测过去、同一条样本换个形式同时出现在训练集和测试集里。泄漏造成的虚假高分,比普通过拟合更难察觉,因为表面看测试成绩也很好。
它在什么时候最容易发生
第一种情况是数据太少、模型太强。用几百条样本去训练一个参数量很大的模型,相当于让一个记忆力超群的学生只做十道题,他会把每道题的数字都背下来,但换个数字就不会了。第二种是同类数据反复喂、训练轮次过多,模型对见过的样本越答越顺,对分布稍微不同的新样本反而越僵硬。第三种是数据本身噪声大又没清洗,错标的样本会被模型当成规律认真学走。
微调大模型时同样会遇到这个问题:拿少量业务数据反复训练,模型在自家示例上回答得头头是道,换个问法就开始胡编,因为它记住的是示例的措辞,不是任务的逻辑。
关于过拟合的三个误解
误解一:训练分数越高,模型越强。训练分数只说明它对这批数据拟合得有多紧,超过某个点之后,分数每涨一点,真实泛化能力可能就在掉一点。业内比较模型时看的是没参与训练的测试集成绩,原因就在这里。
误解二:只有小模型才会过拟合。恰恰相反,参数越多、记忆容量越大的模型,背下训练数据的能力越强。大模型在预训练阶段靠海量数据稀释了这个问题,但到了小数据微调环节,过拟合反而是第一件要防的事。
误解三:数据越多就不会过拟合。如果新增数据全是同一批内容的复制、改写和重复,去重又没做好,模型会把这些样本的权重反复放大,等于变相多训练了很多轮。数据量要看的是有效信息量,不是文件体积。
普通人怎么识别一个模型在背题
最直接的办法是换问法:把问题里的数字、人名、顺序换掉,或者把同一件事拆成两步问。如果它对原题流畅无比、稍加改动就错误百出,大概率是在复述记忆而不是运用规律。其次看它处理新领域的方式:从没训练过的内容,它应该表现出合理的不确定,而不是用训练过的模板硬套。最后看评测与实际体验的落差:榜单分数很高、日常使用却频繁翻车的模型,往往是评测集与训练数据重叠太多,或者厂商针对榜单做了过度优化。
对正在选型或微调模型的人来说,防过拟合的动作并不复杂:留出一批从不参与训练的数据做最终检验,训练时盯住验证集曲线,该停就停,再把数据去重和清洗做扎实。记住那条分界线——模型是在学规律还是在背答案,决定了它走出训练室之后还剩几成功力。