AI 工程地基 32|误差分三份,能治的只有两份

这是同一个模型在两个地方的成绩:训练误差 0.06,测试误差 3.95,差了六十一倍。模型是一个 15 阶多项式,数据是三十个点,从一个已知函数 sin(1.5x)+0.5x 里抽出来、加了点高斯噪声。

0.06 和 3.95。

这是同一个模型在两个地方的成绩:训练误差 0.06,测试误差 3.95,差了六十一倍。模型是一个 15 阶多项式,数据是三十个点,从一个已知函数 sin(1.5x)+0.5x 里抽出来、加了点高斯噪声。

换个模型再看。用一条直线拟合:训练误差 0.80,测试误差 0.65,两个都高,凑得很近。换成 4 阶多项式:0.30 和 0.32,齐齐整整。同一份数据,模型从小到大,训练误差一路变漂亮,测试误差先跟着降,然后突然爆掉。

这堂课讲的就是这个现象背后的机制。机器学习里最老的一对概念:偏差和方差。

误差分三份

把一个模型在某个点上的误差拆开,平方损失下恰好是三份。

第一份叫偏差。把同一套建模流程在几百份不同的训练数据上各跑一遍,每次都得到一个模型;把所有模型的预测取平均,这个平均值离真值有多远,就是偏差。它衡量的是系统性的歪。一条直线画一条弯的规律,数据给多少都画不弯它,这叫欠拟合。

第二份叫方差。还是那几百份模型,看它们的预测彼此散得多开。换一份数据模型就变一个脸,就是方差高。15 阶多项式能穿过每一个训练点,但换个点集,穿法完全不同——它拟合的是噪声,不是信号。这叫过拟合。

第三份叫噪声。数据生成过程本身的随机性,教科书用希腊字母 σ² 表示。这堂课的实验里 σ=0.5,噪声地板就是 0.25。不管模型多聪明,误差里都有这么一个垫底的数。

拿这三个量去套刚才的三个模型:1 阶的偏差平方 0.43、方差 0.04——病在偏差。5 阶的偏差平方 0.0012、方差 0.05,加上噪声地板,总误差 0.30,几乎全是地板——这是健康的状态,你能做到的极限就是地板本身。15 阶的方差爆到几百上千——病在方差。

这堂课最奢侈的地方

这套测量有一个前提:你得知道真函数。知道真函数,才能说「平均预测离真值多远」;还得能反复抽数据,才能说「换一份数据模型变多少」。这门课的沙盒两样都有。

顺带说一个名不符实的小地方。代码把这两百份重抽的训练集叫 bootstrap 样本,其实不是。真的 bootstrap 是在一份固定的数据集里有放回地重抽样,你手头永远只有一份数据。这里的做法是每次从真实分布重新抽——理论上更干净,但这是只有沙盒里才有的特权。真实世界里没人能给你两百份新数据,你能带走的只是这里的读数长什么样。

还有一个安静的设计决定影响巨大:训练数据散在 −3 到 3 之间,测试网格却是 −2.5 到 2.5。多项式最疯的地方是数据边缘,测试点缩进内圈,把最疯的一段绕开了。我把测试网格拉回 −3 到 3 再量一次,10 阶模型的方差从 1.4 涨到 99.3。一行 linspace,决定全部头条数字是六十九倍的差距。

一条永远不会失败的检验

课程教了一个检验:三个部分加起来,应当近似等于总误差。表格里也专门印了这两列,方便你对照。跑一遍,每一行都对上,对到小数点后四位。

但这不是检验。噪声那一份在代码里是手工加上去的,固定加 0.25,从头到尾没跟任何测量值发生过接触。剩下两份呢,对干净真函数量出来的总误差,跟偏差平方加方差,是同一个算式换个写法——对任意一组数都成立,跟模型好坏没有关系。两列当然每一位都相等。

想让它变成真的检验,得换一种量法:每一轮都给模型一份带新鲜噪声的标签,拿预测跟它比。我试了。这次对上的是 0.5% 到 2% 的差距——三个来源真的加起来等于总误差,这回是量出来的,不是恒等式送你的。

两把尺子量出的负差距

学习曲线把数据量从小扫到大,看训练误差和测试误差两条线怎么走。这是最实用的诊断:差距大而且还在缩,加数据有用;两条线都平了但都高,加数据没用,换模型。

这门课的学习曲线表格里,差距一列一路缩小,缩过零,变成负数。数据量 300 时,5 阶模型的训练误差 0.2497、测试误差 0.0051,差距 −0.24——差不多正好是负的噪声方差。

原因是两把尺子。训练误差是拿模型跟带噪声的训练标签比的,里面天然含着 0.25 的地板;测试误差是拿模型跟干净的真函数比的,不含。两张表两个标准,差距列就整体平移了一个 σ²。表格上方的总结写着「12 阶:训练误差保持低,测试误差保持高」;表格自己印出来的数字是,数据量 300 时 12 阶的测试误差 0.008。总结还说过 1 阶模型两个误差会收敛到同一个高值,表格印的是 0.72 和 0.44,两个数恰好差一个噪声地板。总结句说的是教科书该有的样子,数字给出的是另一种样子。

另一张表的总结句是「加数据降方差但不影响偏差」,它自己第一行印着:10 个样本时偏差平方 1.41,20 个样本时 0.0014。一千倍的变化。理论上这句渐近的说法没错,错的是第一行本身——那一行的方差是 235,两百次重抽平均下来的均值,自己就带着 ±1 量级的抖动,1.41 里大半是抽奖抽出来的。

旋钮的量程

治方差的第二个旋钮是正则化:给系数的大小加惩罚,用一点偏差换方差的下降。课程固定 15 阶多项式,把惩罚强度从 0.001 扫到 100,说你会看到一条 U 形曲线,左端方差主导,右端偏差主导,最优值在谷底。

右端在这门课的表格里从来没出现过。惩罚加到 100,印出来的还是方差 47、偏差平方 0.59——方差全程压着偏差打。

原因是量程。15 阶单项式基的第 15 列装的是 x 的 15 次方,x 最大是 3,3 的 15 次方约一千四百万。惩罚项 λ=100 加到千万量级的列上,等于没加。把基换成取值有界的切比雪夫多项式——同样的函数空间,同样的扫法——教科书曲线立刻回来了:λ 到 10,偏差平方 0.23 对方差 0.10,偏差第一次反超;λ 到 100,0.99 对 0.05。而原始基要加到一百万才勉强翻过来。

这件事的教训比这门课本身大:正则化强度从来不是 λ 自己,是 λ 相对于基的尺度。把 PolynomialFeatures 直接接上 Ridge 而不做特征缩放的人,会精确踩中这个坑——旋钮拧到底,机器没动。

四位小数的彩票

复杂度扫描表里,15 阶的方差印的是 26315.1214,精确到小数点后四位。

这个四位小数是假的。同一个实验换一份随机数种子再跑:8306、12370、14395、22 万、114 万。同一个度数,同一个设置,方差估计在两个数量级里跳。更麻烦的是,把重抽次数从 200 加到 2000,估计值反而涨到几百万——二阶矩被罕见的灾难样本主导,抽得越多,撞上的极端拟合越多。

极端到什么程度?量一下两百个拟合各自的最大预测值:中位数 1.9,最大 1262。绝大多数拟合是温顺的,偶尔一个训练点分布不巧,多项式直接起飞。方差这个数字,就是被这些起飞的少数派决定的,两百次抽样根本估不稳它。

这还解释了表格里另一件怪事:9 阶的方差 110,10 阶反而 2.7;14 阶 98 万,15 阶 2.6 万。复杂度增加方差反而暴降——这不是物理,是每一行各自抽了一次奖。趋势是真的(方差随复杂度上升),数字的次序是摇出来的。

平均十份,方差变十分之一?

课程对 bagging 的说法是:训十个模型取平均,每个方差 σ²,平均的方差就是 σ²/10;模型之间不完全独立,所以折扣不到十分之一,但仍然可观。练习五让你亲手做一遍。

我做了。3 阶多项式上,单模型方差 0.0222,十份平均 0.0022,缩减比 0.100——精确命中十分之一,教科书分毫不差。

12 阶上:单模型方差 21.2,十份平均 23.0。缩减比 1.08。没有缩减,反而略涨。

事后去量模型间的相关性:逐点只有 0.02,几乎是独立的。所以「不独立所以打折」这个解释在这里指错了方向。真正的原因还是那个彩票:偶尔一个成员起飞到 1262,十份的平均被拖到 647——不是 126,因为它一飞,同袋的成员往往跟着一起飞(它们共享同一份数据的几何弱点)。平均值治得了温和的抖动,治不了集体的起飞。

这大概是这堂课最值得记住的暗面:同一根制造方差的旋钮(模型容量),同时也废掉了治方差的药(取平均)。3 阶时药到病除,12 阶时药等于白吃。

U 曲线不是全部

2019 年之后大家知道经典 U 形不是故事的全部。容量推过「插值阈值」——参数量和样本数相当的那个点——测试误差可能再次下降。这门课用整整一节讲双下降,引用的两篇论文都是真的、链接也对。

但它的实验只走到 15 阶。三十个训练点,插值阈值在 29 阶附近,实验停在了半路上。

我把度数推了过去。29 阶附近,误差爆到 10 的 18 到 22 次方;从 36 阶到 60 阶,误差掉了八个数量级。右臂真实存在,就在这门课自己的沙盒里,只是没人走到那。不过要说清楚:在这个玩具里,第二段下坡永远回不到 5 阶的水平——60 阶的误差还在 10 的 14 次方量级,5 阶是 0.30。课程那句实用建议倒是被我的实验坐实了:最糟的位置恰好是阈值本身,要么待在下面,要么走过去,别站在上面。

把噪声关掉

课程练习一的问题:把噪声设成零,重跑分解,最优复杂度会变吗?

会,变得很彻底。噪声 0.5 时,最优是 5 阶,总误差 0.30——其中 0.25 是地板,你真正赢下的只有 0.05。把噪声设成零:7 阶的总误差 0.000015,10 阶到 25 阶一路印出 0.000000,随便挑一个都是零。最优度数从 5 跳到 7 到 25 之间的一整片平地。

让复杂度变贵的东西从来不是复杂度本身,是噪声。0.30 里的 0.25 没有药可买——误差分三份,能治的只有两份。

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens