Skip to content

06. 怎样衡量预测好坏 ​

上一阶段已经能够改变参数、得到预测。现在要让程序自动比较两组参数:一组把 1 千克预测得更准,另一组把 3 千克预测得更准,应该选哪个?需要先把同一批样本上的偏差汇总成一个可计算的目标。

先保留误差的方向 ​

仍用 ŷ=wx+b,ŷ 是模型预测,y 是记录中的目标。先用“预测减目标”算出差值,叫残差,简记为 r=ŷ-y。它像账单上的差额:预测太高时为正,预测太低时为负。取 w=1,b=1:

重量 / 千克目标 y / 元预测 ŷ / 元残差 r / 元
132-1
253-2
374-3

残差保留方向很有用,但直接相加会出问题。假设两个包裹分别高估 2 元、低估 2 元,相加得到 0,两个预测却都错了。我们需要一套不会让正负互相抵消的评分规则,分数越低表示偏差越小。这个供程序比较预测的分数,就是损失,通常用字母 L 表示。把预测与目标交进去、算出这个分数的规则,称为损失函数。

为什么要平方,为什么还要乘 0.5 ​

一种做法是去掉正负号,只看相差多少,叫绝对误差;另一种做法是把残差乘它自己,叫平方误差。比如 (-2)²=(-2)×(-2)=4,2² 也等于 4,两种方向的错误都会被记下来。

平方还会更重地惩罚大偏差:误差从 1 元变成 2 元,平方后的分数从 1 变成 4。并且平方画出来是一条底部平滑的碗形曲线,便于后面计算“往哪改参数,损失会减少”。这是本例选平方误差的原因。它是一种选择,其他任务也可以采用不同的评分方法。

本系列在平方后再乘 0.5,即取一半。先只看一条样本:

text
单条损失 = 0.5 × 残差²
         = 0.5 × (预测值 - 目标值)²
         = 0.5 × (wx+b-y)²

乘 0.5 像是把同一张评分表上的所有分数打五折:两个模型谁高谁低不会变,零分的位置也不会变。它是人为选定的缩放系数,取 1 也能用来评分。这里选择一半,是因为后面求平方的变化率时会产生一个系数 2,二者刚好抵消,计算式会简洁一些。第 07 篇会展开这一步;现在只需知道,它统一缩放了分数。

例如预测 3 元、目标 5 元,残差是 -2,平方为 4,单条损失就是 2。如果先固定 b=0,上面的式子就简化为 L=0.5(wx-y)²。括号里始终是“预测减目标”,只是把当前模型代入了同一套评分规则。

多条记录怎样合成一个分数 ​

一条样本的分数还不足以评价整组参数。把上表三条记录逐条平方、取半,再求平均:

残差平方取一半
-110.5
-242
-394.5

得到 (0.5+2+4.5)/3=7/3≈2.3333。求平均,是为了让同一批数据复制一遍时分数保持不变;如果只相加,复制后分数就会翻倍。把这套操作写得紧凑一些,就是平均半平方损失:

text
L = (1/N) × Σ [0.5 × (预测值 - 目标值)²]

这里 N 是样本数量,本例为 3;Σ 读作“求和”,意思是对每条样本都做方括号内的计算,再把结果加起来;1/N 就是最后除以样本数。先按上表手算,再看这个式子,做的是同一件事。

资料里常见的均方误差(MSE)是“平方后求平均”,没有这里的 0.5,所以本例 MSE 为 14/3≈4.6667。两种规则会选中相同的最低分参数,但分数和后面算出的梯度都相差两倍。改动评分尺度后,每次更新参数的幅度也会受影响,因此比较实验时要核对损失定义。

04812运费 / 元重量 / 千克123
预测 = 0 × 重量 + 0损失 L 13.8333

琥珀点:教学目标;蓝线和蓝点:当前预测;红色虚线:预测减目标的差。

将参数调为 w=1,b=1,读数应约为 2.3333。再调成 w=2,b=1,三个残差都为零,损失也为零。再把 b 增大一点,观察三条预测一起偏高,损失重新上升:分数评价的是整组参数带来的预测。

如果某条记录本身错了 ​

误差从 1 元增至 2 元,绝对误差增为两倍,平方误差却增为四倍。因此某条异常记录可能明显牵动拟合结果。若一条 2 千克记录被错误标成 500 元,先增加训练步数可能只会让模型更努力地迎合错误目标。

实际任务需要先检查异常来源,再选择合适的误差定义。不能为了得到更低损失而随意删除难样本,也不能仅凭损失大就认定标签有错。

损失不是业务效果 ​

损失供训练程序比较参数。业务可能更关心每个包裹少收了多少、是否违反报价规则,或者高重量包裹是否系统性低估。平方损失的单位是“元的平方”,本身也不等于平均差了多少元。

求和还是求平均、目标值用元还是分,都会影响日志中的损失大小。先固定样本、目标和计算规则,才有比较意义。预测分类标签时,后面还会引入与类别分数匹配的损失,不能用一个平方误差公式包办所有任务。

预测与目标的偏差先按明确规则汇总,才成为训练目标。损失低说明更符合当前目标,不自动证明目标正确或新数据表现良好。下一篇研究怎样使当前损失下降:07. 梯度与学习率。

别急,先让缓存热一下。