你让模型从会议通知里提取时间和地点。准备好的几十条示例,它几乎全答对;换成同事临时发来的消息,地点没写,它却补出了一个会议室。
它究竟是还没学会,还是只学会了你给它出的那套题?判断这个问题,需要把“旧样本答得怎样”“真正的新样本答得怎样”“以后会遇到什么样的样本”分开。
本篇不讨论模型有没有人的理解体验。我们给“学会”一个能检验的含义:经过训练得到的计算关系,在明确的任务和使用范围内,对未参与训练的新输入也有用。
1.先把训练真正改变的东西找出来
从一个很小的任务开始。输入一个数x,希望预测另一个数y。手里有三条记录:输入1,结果3;输入2,结果5;输入4,结果9。
我们先选一种计算形式:预测结果=a×x+b。a、b是待确定的参数。a控制输入每增加1时,输出增加多少;b控制整体向上或向下移动多少。
取a=1、b=0,三次预测是1、2、4。取a=2、b=1,预测就变成3、5、9,与记录完全一致。训练要做的,是根据数据和误差标准来确定参数;本篇先手工挑选,下一阶段再解释怎样自动调整。
用某种计算关系贴合已观察数据,叫拟合。贴合得有多好,需要统一的尺子。例如,把每次“预测减去目标”的差平方,再求平均,就是平均平方误差。
第一组参数的三次平方误差是4、9、25,平均为38÷3,约12.67;第二组的误差全为0。这把尺子奖励预测接近记录,却没有单独检查模型会怎样回答新问题。
参数确定以后,输入3,按2×3+1得到7,这叫一次预测。算出一个新答案并不要求重新训练,a和b可以始终保持不动。
2.三道旧题全对,仍有无数种解释
现在摆出另一条故意构造的规则:
预测结果=2×x+1+(x-1)×(x-2)×(x-4)
看着长,检查起来很简单。输入1、2或4时,最后三个括号里必有一个等于0,整个追加项就变成0。因此,这条规则在三道旧题上也全部正确。
输入3,追加项却是2×1×(-1)=-2,预测成了5。简单规则预测7,复杂规则预测5。它们都解释了已有记录,却对没见过的位置产生分歧。
这揭示了学习中一个根本限制:有限样本通常不能唯一确定所有新输入的答案。选择直线、曲线、怎样的网络结构,以及训练时更倾向哪种解,都会给推断加入额外的限制或偏好。这些选择统称为归纳偏置。
这里的“偏置”不是贬义。如果完全不作任何假设,已知1、2、4的答案,对3几乎不会提供约束。偏好平滑、偏好某种简单结构,能帮助我们利用有限数据;遇到不符合这些偏好的任务,也可能限制效果。
我们眼下选择直线,只是把“这段范围可能近似保持同一增长率”作为假设。不能因为它比较简洁,就证明真实世界一定遵循它。两条规则也是人为构造的候选,尚未展示训练算法如何找到它们。
3.盖住答案,做一次纸笔实验
在纸上写下五张卡片:1→3、2→5、3→7、4→9、5→11。它们是为本篇安排的教学数据。
先只露出1、2、4三张,用它们拟合候选规则;把3号卡作为验证题,用来比较两个候选;5号卡暂时封起来,等方案选定再用。
揭开3号卡,真实结果是7。直线预测7,平方误差0;带追加项的规则预测5,平方误差4。如果我们依据这道题选择直线,这张卡片就已经参与了方案选择。
最后揭开5号卡。已选定的直线预测11,误差0。仅作教学对照,另一条规则会预测23,平方误差144;这里不再依据测试成绩重新挑选方案。这给出了新的一份证据:在这个小实验里,直线对留出的两个位置更合适。
图1先画两条规则的实际曲线,再标不同阶段才揭开的点。观察它们如何同时通过三个训练点,又在别处拉开距离;曲线形状本身不能裁定哪条更符合新数据。

图1|A=2x+1;B=2x+1+(x-1)(x-2)(x-4)。两者通过相同训练点;x=3时A预测7、B预测5;x=5时A预测11、B预测23。空心圆为验证目标,方形为选定方案后揭开的测试目标;测试处的B仅供教学对照,不参与再选择。
把训练经验用于未参与学习的新输入,叫泛化。刚才只检查了两个位置,所以能支持的范围很小。它不证明输入100也可靠,更不证明真实业务必然是一条直线。
如果一个模型连训练中的主要关系也没贴合好,常会讨论欠拟合;如果它贴合了训练样本的偶然细节,新样本表现却较差,就要警惕过拟合。但看到成绩下降,还应检查数据来源、评分规则与使用范围,不能只凭“新题更差”就断定原因。Google机器学习课程:拟合与过拟合
4.训练集、验证集、测试集分别负责什么
把刚才的卡片放大,就得到常见的三种数据职责。训练集直接用于拟合参数;验证集用于挑选模型、训练时长和其他设置;测试集则在方案确定后,评价这套最终方案。Google机器学习课程:数据集划分
关键在信息怎么流动。假如你看了测试题,发现模型总漏掉某种通知,于是专门补数据、改提示词、换模型,再用同一套题报告成绩,那么这套测试题已经影响了系统设计。哪怕没有把答案直接送进参数更新,它也失去了原先那种独立性。
可以继续用它定位问题,但应另外保留新题,评估最终版本。工程里的回归测试可以反复帮助修错;统计评估若要继续声称是独立检查,就必须承认已看过的错题已经参与设计。这两类测试都重要,支持的结论不同。验证集也会因为反复挑方案而逐渐被“适应”,因此验证成绩同样不是无限可靠的保证。
还有更隐蔽的泄漏。训练集放“周五15点在A室开会”,测试集放“会议地点A室,时间周五下午三点”。文字不同,事件和答案却几乎相同。如果目标是处理全新的会议,这道测试题就过于熟悉了。
同一篇文章的段落、同一张图片的裁剪、同一份通知的改写,也可能造成类似问题。应该先按原始文档、事件或其他相关单位分组,再把整组分到不同集合,而不是只把文本行随机打散。若任务本来只要求识别已知事件的不同表达,可以专门做改写测试,但应说清测的是这种能力。
图2把同一事件的原文与改写先系在一起,再把整组交给一个集合。这里选择“事件”作为分组单位,是因为我们要检查新事件的处理能力;如果实际目标不同,分组单位也需要相应调整。

图2|教学划分:事件甲与全部改写进入训练集;事件乙与全部改写进入验证集;事件丙与全部改写进入测试集。训练用于拟合,验证用于选择,测试在方案固定后评估;共享事件没有跨集合。图中的每组只用于解释机制,不代表实际评估应只用三个事件。
某些预处理也会泄漏信息。例如,用全体样本算出平均值,再用这个平均值调整训练输入,测试数据就提前影响了准备步骤。需要从训练数据估计的变换,应先只用训练集确定,再原样应用到验证和测试数据。scikit-learn:数据泄漏与预处理
“各留百分之多少”没有统一答案。真正重要的是独立性、代表性和样本量。只测两条全对,可信程度显然不同于在足够多、覆盖关键场景的新题上稳定答对。
同一个模型换一批新题,分数也会有抽样波动。两个方案只差一点时,先看具体错在什么地方、样本是否足够,别急着把微小差距解释成稳定提升。业务中代价很高的少见错误,也值得单独安排测试,不能等平均分替我们发现。
5.同一模型,换一批问题,平均分为什么会变
数据分布可以先理解为:哪些输入和答案容易出现,各类情况大约占多少,以及输入与答案存在怎样的对应关系。它既关心“有什么”,也关心“什么更常见”。
假设一套通知测试题中,90条写明地点,10条没写。模型在前一类答对90条,在后一类全部胡乱补地点,整体正确率仍有90%。
后来业务变化,两类各占50条。假设模型在每一类里的行为都没变,它只会答对50条,整体正确率降为50%。这里不需要模型突然变笨,只要题目构成改变,平均成绩就会改变。
图3让每类表现保持不变,只改变两类题的比例。两条总长度相同的条带,是两次各100条的评测,比例不能凭视觉任意伸缩。

图3|“写明地点”类始终全对,“没写地点”类始终全错。两类数量从90/10变为50/50,整体正确率便从90%变为50%。总体分数变化来自样本构成,图中没有改变模型。
变化还可能来自别处:原先是规范通知,后来是带错别字的语音转写;原先只处理一种语言,后来加入另一种语言;原先有效的业务规定变了,同一句描述对应的答案也可能改变。这些情况需要分别检查,不能用一个总分抹平。
普通随机留出的测试集,主要告诉我们模型对相近数据来源的新样本怎样。若计划处理未来通知,可以按时间留出较晚的数据;若计划服务新客户,可以把整个客户留出。前提是避免相关事件跨集合,同时保留能反映实际使用的样本组成。
分布发生变化时,旧测试成绩的适用范围也会变。Google的生产机器学习课程专门强调,离线训练后仍需监测输入和数据关系的变化。静态训练与数据变化
6.真实研究怎样拆开“记住”与“泛化”
一个经典实验比口头比喻更直接。Zhang等人在《Understanding deep learning requires rethinking generalization》中,把图像分类训练集的标签随机化,再训练卷积神经网络。实验发现,这些网络仍能很好地拟合随机标签。原论文
标签就是样本对应的目标类别。正确标签表达我们想学的任务;随机改配以后,这种对应关系不再提供原来的分类规律。模型仍能把旧样本的标签拟合好,说明“能贴合一批记录”与“这批记录教出了可迁移的规律”需要分别检验。
这项实验不能推出“神经网络永远只会背答案”。同一类网络也可能在有规律的数据上形成有用的表示。它提供的反例更具体:很低的训练误差,单独不足以证明泛化;参数多、能表示复杂关系,也不是对新样本可靠的保证。
现实任务里,记忆与可迁移模式还可能同时存在。一些专有名称需要被记住,一种提取规则需要适用于新名称。评价应对准用途,而不是试图用一个分数给整个模型贴上“只会记忆”或“已经理解”的标签。
公开训练示例也需要这道检查。Qwen官方教程提供了Qwen3-32B的Axolotl微调路线;查看其所用示例的v0.9.2固定版本,能看到val_set_size设为0.0,即没有从这份训练数据中划出验证集。Qwen官方教程、固定版本配置
这份配置帮助读者启动训练,并不自动提供完整的独立评估。若换成自己的通知任务,仍应先按事件留出验证与测试数据。暂时不必认识配置里的每个训练术语;只要先问清“在哪里检查没见过的题”,就能避免把一次成功运行误当成效果证明。
7.想改善成绩,先确定是哪一种问题
回到会议通知。训练题都很差,先检查任务是否说清、标注是否一致、模型是否有能力表示需要的关系、训练是否充分。训练题很好、同来源的新题差,重点检查泄漏、覆盖不足和过拟合。旧测试很好、新业务差,则应比较新旧数据的区别。
增加训练数据可能有帮助,但要看新增了什么。把同一模板改写很多遍,会增加行数,却未必补上“没写地点”“临时改地点”“一条消息提到两场会议”这些真正的缺口。
限制模型灵活度、给参数加惩罚、根据验证结果选择停止位置,改变的是不同环节。仍用最初的三条记录,比较y=2x+1与y=1.8x+1。前者训练平均平方误差为0;后者的三项平方误差为0.04、0.16、0.64,平均为0.28。只看拟合,前者胜出。
现在人为把训练目标改成“平均平方误差+a²”,只惩罚斜率a,偏置固定为1。前者目标值0+4=4,后者目标值0.28+3.24=3.52,排序反过来了。加入惩罚是在明确偏好:愿意接受一点训练误差,换取较小斜率。它没有凭空证明新题更准,惩罚强度仍需验证;若约束过强,必要的关系也可能学不进去。L2正则化与早停的官方解释
早停则可以依据验证表现挑训练进度:例如训练损失仍在下降,验证损失却在第3次检查后开始回升,那么第3次保存的参数可能更值得保留。这里是在已有训练轨迹上选择位置,不是在当前损失里额外加一项a²。第07章会画出这一类训练与验证曲线。
另外,预测关联不自动等于因果解释。模型可能利用通知模板判断地点是否缺失,这在当前数据里有效,却不能据此认为“换一个模板就会使会议产生地点”。预测记录,与研究改变某件事会造成什么结果,需要不同的证据。
因此,“模型学会了”后面最好接上一句完整限定:在哪种任务、什么来源的新数据、按哪些指标、表现到什么程度。格式正确、字段正确、遇到缺信息能否克制,应分别看清。
本章练习
题目
问题1|拿留出的点检查规则
本章A=2x+1,B=2x+1+(x-1)(x-2)(x-4)。验证点为x=3、目标7。算出两条规则的预测与平方误差,并按这一次验证选择候选。
问题2|设计检查新事件的划分
要评价提取全新会议通知的能力。数据里每个事件有一条原文和两条改写。应怎样划分训练、验证、测试数据?看过测试错题并改提示词以后,还应怎样评估最终版?
问题3|预测总体分数怎样变化
模型在“写明地点”类正确率100%,在“没写地点”类正确率0%。新一批100条通知中,前者70条、后者30条,整体正确率是多少?若只报告这个总分,会漏掉什么?
问题4|改变训练偏好
偏置固定为1,只比较a=2与a=1.8。两者训练平均平方误差分别为0与0.28。若目标改为“平均平方误差+a²”,各为多少,哪一个更低?这个选择是否已经经过独立测试?
思考提示
提示1|对应问题1
追加项中有一个负括号;先求预测,再与目标相减平方。
提示2|对应问题2
先确定哪些文本共享同一事件与答案,再追踪测试信息有没有影响选择。
提示3|对应问题3
分别计算每类答对条数,再相加;还要看全错的那类是否具有实际代价。
提示4|对应问题4
惩罚项使用各自的a,再与该候选的训练误差相加;目标评分不等于新样本成绩。
参考答案与解析
答案1|对应问题1
A预测7,平方误差0;B追加项2×1×(−1)=−2,预测5,平方误差4。按这次验证选择A,但一个验证点不足以保证它对所有新输入都更好。
答案2|对应问题2
先按事件把原文及两条改写分组,再把整组分给某一个集合;不要让同一事件跨集合。用训练集拟合、验证集选择,最后以未参与选择的测试集评估。若已经用测试错题改提示词,可继续把旧题用于修错与回归检查,但应另留新的独立测试数据评估最终版。
答案3|对应问题3
答对70×1+30×0=70条,总正确率70%。总分会掩盖“没写地点”这一类仍全部失败,无法说明模型遇到缺失信息时会可靠地克制补写。
答案4|对应问题4
a=2时为0+2²=4;a=1.8时为0.28+1.8²=3.52,后者更低。这说明新目标偏好较小斜率,并未提供独立测试;是否适合新数据还须验证与最终测试。
下一章
我们已经知道,选择计算结构会影响可拟合的关系,评价还需要独立数据。那么,多层神经网络到底增加了什么?下一章沿着一套固定的权重、偏置和激活走一遍,看“很多参数”具体放在哪里。