交叉熵:对正确类别给低概率为什么惩罚很大
分类模型选对标签并不说明概率分布理想。正确类别得到 0.51 和 0.99,虽然预测标签相同,训练损失却不同。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
What is backpropagation really doing?
结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
分类模型选对标签并不说明概率分布理想。正确类别得到 0.51 和 0.99,虽然预测标签相同,训练损失却不同。
理解核心机制
单标签分类的负对数似然是 -log(p_true)。正确类别概率趋近零时损失迅速变大;对样本求均值时,要明确每个样本或 token 的权重。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
import math
truth = [0, 1]
probabilities = [[0.8, 0.2], [0.4, 0.6]]
losses = [-math.log(row[label]) for row, label in zip(probabilities, truth)]
mean_loss = sum(losses) / len(losses)
assert -math.log(0.9) < -math.log(0.6)
print(losses, mean_loss)适用边界与常见误区
示例假定输入是合法且非零的概率。实际训练通常直接传 logits 给框架损失函数;多标签分类、标签平滑与 padding 掩码会改变具体定义。
继续练习
保留预测标签但降低正确类别概率,观察准确率与损失是否同步变化,并解释两种指标各自反映什么。