LESSON 10 · 卷 神经网络

损失函数

「错得有多离谱」怎么变成一个可以比较的数?

第 1 站

同样是「预测错了」——错误程度一样吗?

先玩个你小时候一定玩过的游戏——猜数字。我心里想一个 1~100 的整数,你来猜; 你每报一个数,我只回三个字:「大了」「小了」。就靠这一句反馈,你几次就能逼到正确答案: 猜 50,「小了」,就往大里猜;猜 88,「大了」,就往小里收……范围一步步夹紧。

① 猜 50② 猜 88正确答案 = ?1100小了,往大猜大了,往小猜
图 10-1猜数字游戏:你看不到正确答案(★),但每次得到的「大了 / 小了」都指明了该往哪个方向改——靠这点反馈,瞎猜就变成了有方向的逼近。

这条反馈虽然简单,却恰好给了你最关键的东西——方向:大了就往小调,小了就往大调。 正是这一点「往哪边改」的信息,把「瞎猜」变成了「有方向地逼近」。

第 9 课说过,训练就是不断微调参数、让网络越猜越准。可神经网络的局面比猜数字难得多: 它一次要调成千上万个参数,输出的还是一组概率而不是一个数—— 它怎么知道自己这次是「大了」还是「小了」、每个参数又该往哪个方向挪?

这正是这一课要造的东西。我们给网络配一个损失(loss):先把「这一次猜得有多差」压成一个数。 有了这个数,梯度下降就能求出它对每个参数的导数,从而同时知道「大了还是小了」(方向)和「差多少」(步子)—— 比猜数字那句「大了 / 小了」,信息还更丰富。

可要把「差」变成这样一个能算、能求导的数字,并没有随手一减那么简单。 先用一个比分类更简单的场景找找感觉——预测数值。一个预测房价的网络,真实价格是 300 万,网络给出两个不同的预测:

  • 预测 A:299 万(差了 1 万)
  • 预测 B:100 万(差了 200 万)

显然 B 错得更离谱。但梯度下降想要知道的不只是「哪个更离谱」, 还要知道离谱多少——因为它需要算出一个梯度来更新权重。「错误」必须是一个可以计算导数的数字。

最直接的想法是「预测值减真实值」。这有什么问题?
第 2 站

取平方:均方误差 MSE

取平方消除符号,再对所有样本平均——这就是均方误差(MSE)

是预测值, 是真实值。检验一下:

预测 299,真实 300预测 100,真实 300

差 200 万,惩罚是差 1 万的 40000 倍——平方让大错的惩罚重得多,这一步好懂。 但真正要补一句的是:梯度下降用来调参数的,并不是损失这个值本身,而是它的「导数」

回忆第 5 课:导数就是「自变量动一点点,函数跟着变多少」的变化率,也就是曲线的斜率。 梯度下降的法则是「朝损失下降最快的方向迈一步」,而这个方向、这一步迈多大,全由导数给出。 说白了,导数就是上一站猜数字那句反馈的升级版——它的正负告诉你「大了还是小了」,它的大小告诉你「该使多大劲」。

那 MSE 的导数长什么样?把单个样本的损失看成预测值 的函数,对 求导 (套第 5 课的法则:平方求导,把指数 2 挪到前面、次数减一,再乘括号里那项的导数 1):

念一遍就懂:导数 = 2 ×(预测 − 真实)。预测大了)导数为正,提示「再调大只会更糟」,于是往小收; 预测小了导数为负,于是往大调。而且预测离真实越远,这个值的绝对值越大、推得越狠。形式简单、又处处可微,梯度下降拿来就能用。

xy预测线MSE = 每条红线(残差)的平方的平均。更大的误差,更大的红色小方块。
图 10-2MSE 的几何意义:残差(预测值与真实值的差)的平方面积。大误差对应大面积,梯度下降会优先缩小面积最大的那块。

MSE 适合预测连续数值(回归问题)。但如果要做分类—— 比如我们那台机器判断「是不是苹果」——直接用 MSE 会出现意想不到的问题。

第 3 站

MSE 用在分类上:信号太弱

那台机器最后输出一个 0~1 的概率(通过 Sigmoid)。手上这个水果真实答案:是苹果(标签 = 1)。 比较两种预测:

有 90% 把握是苹果只有 1% 把握是苹果

预测 B 错得那么厉害,损失是预测 A 的 98 倍——看着够狠了吧?可别急。 上一站说过:真正推动训练的是导数,不是损失值本身。所以得盯着导数看。

这里真实标签 ,损失就是 , 导数和上一站一模一样:。把两个「极度猜错」的情况代进去:

只有 1% 把握是苹果把握更低,错得更离谱

蹊跷就在这儿:网络从「1% 把握」掉到「0.1% 把握」,明明错得更离谱了, 导数却几乎纹丝不动(−1.98 → −1.998)。换句话说——不管错得多狠,MSE 给的「推力」都差不多大。

最该用力时,推力却封了顶

网络已经烂到家了(),本该被狠狠推一把;可 MSE 的导数最多也就到 −2 附近、再也不涨。 结果是:越离谱的错误,越得不到更强的纠正信号,训练拖拖拉拉、甚至原地打转。

我们想要的,是一个「越错,导数越大、推得越狠」的损失——当 趋近 0,损失该飙向无穷,它的导数也跟着飙起来。

需要一个函数:p=1 时为 0,p→0 时趋向无穷大,导数随 p 变小而增大。你能想到吗?
第 4 站

对数损失:交叉熵

这个 −log(p),名字你应该会觉得眼熟。第 6 课《概率与信息》里,我们从信息论推过它: 交叉熵衡量「用模型分布 q 去解读真实答案 p,平均有多意外」,当真实答案确定时塌缩成 −log(模型给正确答案的概率)。 当时它还是个抽象的信息论量;现在我们仅仅凭「损失函数该有的脾气」(猜对趋于 0、自信猜错趋于 ∞), 竟然又把同一个公式找了回来。两条完全不同的路——信息论、和工程直觉——殊途同归。

对正确类别的预测概率 p 取负对数,就是交叉熵损失

c = 正确类别

再用刚才那把尺子量量它的导数 求导是 。 代入和上面完全一样的两个点: 时导数 时导数 —— 错得越狠,推力越大、还成倍地大。和 MSE 那「封顶在 −2」一对比,差距一目了然:这正好补上了「最该用力时却使不上劲」的短板。

图 10-3同样是预测概率趋近 0,交叉熵(红线)的惩罚趋向无穷大;MSE(蓝虚线)的惩罚只是趋近 1,斜率不随错误程度增大。

把这条曲线接到我们那台机器上,你就能亲手感受损失在衡量「猜得有多差」。 先选定这个水果的真实答案,再转旋钮改变机器的预测,看黑点沿 曲线滑动、损失实时变化:

🎛 四个旋钮 = 四个输入特征
尺寸大小0.50
颜色0.50
偏绿偏红
酸甜度0.50
水分0.50
多汁
真实答案:
01给「正确答案」的概率 pᶜ损失
预测 P(苹果) = 55%;给「正确答案」的概率 pᶜ = 55%
交叉熵损失 = −log(pᶜ) = 0.60
把旋钮调到让机器「自信猜对」→ pᶜ 接近 1、损失趋近 0;调成「自信猜错」→ pᶜ 接近 0、损失飙升。这就是 loss 在实时量化「这次猜得有多差」。
互动 10-A交叉熵损失实验台:损失只看「给正确答案的概率 pᶜ」。自信猜对(pᶜ→1)损失趋近 0;自信猜错(pᶜ→0)损失飙升——梯度下降正是被这股「越错越痛」的劲儿推着走。

当有 个类别时(比如在苹果、香蕉、西瓜、柠檬里猜),完整的交叉熵是:

是真实标签(正确类为 1,其余为 0),所以只有正确类别那一项不为 0, 公式实际上就是 −log(正确类别的预测概率)。越有把握地猜对,损失越低;越自信地猜错,损失越高。

交叉熵几乎是所有分类任务的默认损失函数,配合下一课的 Softmax 输出效果最好。

第 5 站

总结

本课核心 · TAKEAWAY

损失函数是梯度下降的「方向标」——它把「猜得有多差」变成一个可微的数,那台猜水果的机器才知道每一步该往哪调。 回归用 MSE(平方差),分类用交叉熵(−log 概率)。 MSE 对误差线性敏感;交叉熵对「极度自信的错误」指数级惩罚,梯度信号更强,分类任务收敛更快。

这一课你亲手推导了

  • 损失函数:把预测误差变成一个可微的数,让梯度下降有方向走。
  • MSE:(ŷ−y)² 的平均,消除符号,惩罚大误差;适合回归任务。
  • MSE 的弱点:分类时对「极度错误」的梯度信号随 p 的变化很小。
  • 交叉熵:−log(正确类别概率),p→0 时损失趋向无穷,梯度信号更强。
小测验

学习小测验

做完这一课,来检测一下核心知识点。选出你的答案后点击「提交」,即可看到正确选项与讲解。

Q1损失函数(loss function)在训练中扮演什么角色?
Q2回归任务常用均方误差(MSE),分类任务常用交叉熵。选择损失函数时主要看什么?
NEXT · 第 11 课

Softmax

交叉熵需要「概率」,但网络输出的是任意大小的分数——怎么把分数变成概率?

0 人点赞,0 人看过