第 12 课的机器装好了,可以真开训了。训完你会看到一个非常漂亮的数字: 训练 loss 掉到 0.002。 而你把同一份训练攒出来的考卷递过去,它只答对 66.5% —— 加减题 99.0%,乘除题 34.0%。 这两个数之间那道缝,就是这一课的全部内容。 「训练 loss 掉得越低越好吗」—— 这一课要给你的答案是:训练 loss 根本就不是那个该盯的数字。
先造一个能亲眼看完的例子。真的训练一个模型太慢、也太难看清;但「过拟合」这件事跟模型大小无关 —— 我们用最老实的东西复现它:24 道题,真规则是 y = x²(一个 2 次的规律),每道题的答案上叠一点 ±3 的观测噪声(同一道题问两次答案会差一点,这是题目本身的属性, 谁也消不掉)。然后拿多项式去拟合它:多项式几次, 就有几个可调参数。
上面那个实验里最该盯着看的,是同一档配置下的两个数。 把数据量钉在 12 个点,然后把次数一路往上加: 训练误差从 1.37 一路降到 0.00, 而验证误差先贴着地板(这一列最好的一格是 1.44),然后掉头冲到 55.09。
计算方式一模一样,唯一的区别是用哪些点算: 训练误差只用喂给它的点,验证误差只用那 6 道它一个都没见过的点(2 / 6 / 10 / 14 / 18 / 22)。 所以两个数的差距不是算法差异造成的,它恰好就是 「背下来的题」和「没见过的题」之间的差距。
为什么 12 个点配 12 个参数就能精确穿孔? 因为这是个线性方程组:12 个未知数、12 个方程, 一般恰好有唯一解。曲线必须从每个点上穿过 —— 所以训练误差必然是 0,跟模型好不好没有任何关系。 这就是「训练 loss 低」最不值钱的样子。
那道缝不是随便裂开的,它由两个旋钮共同决定: 模型有多大的能力(几次多项式 = 几个参数)、 手里有多少数据(喂它几个点)。把这两件事铺成一张表, 每一格都是当场解一次最小二乘算出来的验证误差:
请注意你刚刚看到了什么:每一列的 ★ 都落在 2~3 次上,没有一列是次数越高越好。这不是巧合 —— 数据里的真规则本来就是 2 次的。能力低于它就是「装不下」(欠拟合),高过它就是「拿多余的自由度去描噪声」(过拟合), 而多出来的那些自由度正好够它把 12 个点一个一个记住。
「大模型一定更好」这句话要配一个前提:数据也要跟着大。 看地图上 12 个点那一列:能力从 3 个参数加到 12 个参数, 验证误差是 1.62 → 55.09,涨了差不多 34 倍。 把同样这 12 个参数放到 18 个点那一列,它才回到 4.78。
所以真实世界里那句话不是「做大模型」,而是「在数据允许的范围内尽量做大」 —— 规模定律(scaling law)说的正是「模型、数据、算力要一起长」, 只长一头就是在给过拟合发邀请函。
现在把尺子转回第 7 阶段那个真模型。它两笔账都很清楚:训练 loss 0.002(低到几乎为零),考卷 66.5%(不高)。 只看这两个数,你会以为它是典型的过拟合。可是拆开看题型呢: 加减 99.0%、乘除 34.0% —— 差了 65.0 个百分点。
分开病之后,药就好开了。我们的模型两种病都得, 而两种病各有各的刹车 —— 一共三个,前两个上面已经亲手拧过:
第三个刹车是我们在真实训练里唯一还用得上的(因为数据是有限的、 模型大小也常常不能随便改):早停。 下面这张表就是第 7 阶段那次训练的实测记录,训练 loss 和考卷分数并排放着 —— 请你自己选一个停手的时机。
它不需要更多数据、也不需要改模型结构,只是在正确的时候停手。 代价只有一个,而且是必须付的:
这就是「验证集」在工程上的真正用处:它不是为了写论文好看, 它是一个你必须留出来的刹车信号。 我们那 4,000 条语料里, 最后真拿来出考卷的是 1000 × 4 = 4000 道题,剩下的才是训练集 —— 第 14 课会把这笔账一条一条算清楚。
还有一类刹车统称正则化:权重衰减(第 12 课那个超参)就是其中之一 —— 在更新参数时顺手把它往 0 拽一点,等于给「参数长得很大」加罚金, 让它不敢拿自由度去描噪声。它们和上面三个是同一个目的,只是从损失函数那一侧下手,而不是从数据、容量、时机那一侧下手。
训练 loss 是成绩单,验证 loss 才是考试。模型把训练集背得越熟,训练 loss 就越低 —— 所以它降得越低越不能证明什么:12 个参数配 12 个点, 训练误差必然精确为 0,可验证误差是 55.09, 噪声地板的 35 倍。 真正该盯的是两个数之间那道缝:训练误差和验证误差一起降,那是在学习; 训练误差还在降、验证误差掉头向上,那是在背题。 缝的成因是能力超过了数据撑得起的量 —— 我们那个模型 798,720 参数配 4,000 条语料(199.68 个参数/条),这个比例失衡; 但比例只是体检指标,诊断还得靠分题型看考卷: 它加减 99.0%、乘除 34.0%, 差 65.0 个百分点 ——前半是过拟合的口味,后半是容量装不下的病,两种病同时得。药一共三副:更多数据(55.09 → 4.78)、减小容量(55.09 → 1.62)、早停(考卷不涨了就停, 从第 6000 步硬练到 8000 步那 2000 步是白练的)。