3.3 分类任务:交叉熵是怎么长出来的


3.3 分类任务:交叉熵是怎么长出来的

本节摘要:分类问题的主角是交叉熵。本节从"用概率惩罚错误"的直觉讲起,推演二元与多类交叉熵的来龙去脉,解释它为何取代平方误差、以及稀疏标签如何省去 one-hot 的功夫,最后用一个小例子测出"错误自信"是否更伤人。

上一节回归用的是"距离",这一节分类用的是"概率"。分类任务的天空完全不同:我们要的不是"差多远",而是"猜对的概率该多该少"。交叉熵正是在这种逻辑里被"长"出来的。

一、为什么分类不直接量距离

分类网络的最后一层往往输出一个"伪概率"(经 Softmax 后和为 1)。如果这时候也用平方误差去度量,"预测概率 0.3 vs 标签 1"会被当成普通残差。可分类的语义是概率应有"置信度质量":你判 0.51 和判 0.99 都对,但一个踌躇、一个笃定,该不该同价?

直觉告诉我们:错误且自信的预测,比错误但犹豫的预测更该被重罚。 平方误差不这样想,它对"0.3 错成 1"和"0.8 错成 1"惩罚得差不多。而"惩罚越笃定的错"恰恰是交叉熵的灵魂。

二、从信息论把它"长"出来

交叉熵的种子是对数。它惩罚一个样本的方式是 −log(预测该真实类别的概率)。理由很巧妙:

  • 预测那个真实类别的概率越接近 1,−log 越接近 0,几乎不罚。
  • 概率越小(越笃定地错),−log 越大,罚得越狠。
  • 且在 Softmax + 交叉熵的组合下,梯度的表达式会化简得非常干净。

二元情形(标签 y 为 0 或 1)写成:L = −( y·log(p) + (1−y)·log(1−p) ),其中 p 是正类概率。多类情形(K 个类别、标签 one-hot)写成:L = −Σᵢ yᵢ·log(pᵢ)。

皮实的做法是把预测概率夹一个极小值再取对数,防止 0 网页崩出 log(0)。

import math log_clip = 1e-12 def binary_ce(p, y): p = min(max(p, log_clip), 1.0 - log_clip) return -(y * math.log(p) + (1 - y) * math.log(1 - p)) # 场景 A:犹豫地错 print(f"{binary_ce(0.51, 1):.3f}") # 约 0.673,罚得轻 # 场景 B:笃定地错 print(f"{binary_ce(0.01, 1):.3f}") # 约 4.605,罚得极狠

同一套标签,预测越自信地猜错,惩罚越重——这正是"置信度质量"的体现。

三、为什么交叉熵取代了平方误差

老问题:都是惩罚,凭什么用交叉熵?因为在这个组合里,梯度的性格天差地别。只管算一个样本、忽略系数:

  • Softmax + 交叉熵:对预激活值的梯度通常正比于 (p − y)——当下的错误有多大,信号就有多强,始终有补救动力。
  • Softmax + 平方误差:错误越大时梯度反而可能越小。预测 0.01 而标签是 1,差距近乎极限,但平方的梯度在高层会被 Softmax 的平坦区掐小——面对最大的错误,反而不太肯出力。

一次训练里从百万老样本整体看,交叉熵"给错误的步脉冲更大"的特征会让收敛明显更顺。这也是它在现代分类网络里近乎唯一的默认答案。

四、稀疏标签省了哪一步

多类场景里,标签若要做成 one-hot(一个热向量),需要手动转换。而"稀疏多类交叉熵"直接收整数标签,内部帮你完成 one-hot 的展开,省内存、少一步预处理。它数学上跟多类交叉熵是一致的,只是接口省了额外转换,别记忆成两种不同的损失。

损失 标签形态 典型搭配 场景
二元交叉熵 0 / 1 标量 输出层 Sigmoid 二分类
多类交叉熵 one-hot 向量 输出层 Softmax 多分类
稀疏多类交叉熵 整数索引 输出层 Softmax 多分类且免转换

五、一个真实例子

你训练垃圾短信检测,标签"垃圾"为 1、"正常"为 0。用二元交叉熵线上跑通后,你发现模型对"笃定但错的判断"非常敏感——那正是这对组合想要的行为。反过来,如果你当初错配了平方误差,模型会在"犹豫的地方"磨蹭太久,正例与负例分界一直拖泥带水。这个例子想说的是:换对的刻度,往往比反复调学习率更见效。

💡 关键直觉:交叉熵之所以成主角,不只是信息论好看,更因为和 Softmax 组合后梯度"老实"——错误越大越肯推,收敛自然顺。

六、Softmax 与损失为什么"天生一对"

说交叉熵常在,是因为它跟 Softmax 的输出天生配对。想要理解这种"婚配",只需看一个现象:把平方误差拿去做分类,由于 Softmax 的归一化,输出在边界处变得很"钝",梯度会整体变小;而交叉熵的本质(−log 对概率的惩罚)恰好抵消了这种钝化,让梯度在错误处保持有力。

所以现实里,"Softmax + 交叉熵"几乎是一体使用的标准对。你单独用 Softmax 做输出却不配交叉熵,往往会让收敛变慢、甚至卡住——这跟第 3.1 节"输出层激活与损失要配"是同一件事在分类世界的展开。

七、FAQ:几个分类损失常被问倒的话

Q:多分类时,交叉熵和稀疏交叉熵到底选哪个?
A:数学上它们算出的结果完全一致,差别只在标签的输入格式(one-hot 向量还是整数)。位数不大、想少一步预处理,直接用稀疏版本即可。把它俩当"同一个损失的两种输入接口"最省心。

Q:二元问题能不能当多类问题来处理?
A:可以,把类别数设成 2、用 Softmax 输出两个概率即可,等效结果与二元交叉熵一致。但二元版本通常更省、更直观,工程上大多沿用二元。

Q:交叉熵对类别不平衡敏感吗?
A:敏感的——如果某类样本占九成,交叉熵会天然偏向把一切判成那个类以换得更低的平均损失。应对手法(如加权交叉熵、focal 变体)属于进阶内容,虽不展开,但你要知道这个坑真实存在。

本节要点回顾

  • 惩罚坚定地错:交叉熵用负对数放大"自信的错",而不只是量距离。
  • 公式两条径:二元尖 log(1−p),多类尖 −Σy·log(p),都内括夹值防 log(0)。
  • 取代平方误差:Softmax 下交叉熵梯度正比 (p−y),错误越大信号越足。
  • 稀疏标签:只是免去 one-hot 转换,数学等价于多类交叉熵。
  • 换刻度 > 调学习率:目标与损失不匹配时,改刻度才是治本。

分类、回归两大派都看完了。可刻度桌的角落还坐着特殊派——合页、KL、以及其他疑难杂症,下一节去跟他们打个照面。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U