Cross-Entropy Loss
交叉熵损失比较预测的类别概率与目标标签,为分类和分割模型在训练过程中提供指导。
交叉熵损失用于衡量模型预测的类别概率与目标标签的匹配程度。正确类别的概率较高时,它会施加较小的惩罚;该概率较低时,则会施加较大的惩罚。作为一种损失函数,它为监督学习提供了训练期间需要最小化的目标。
克劳德·香农于 1948 年发表的《通信的数学理论》奠定了交叉熵的熵理论基础。D. F. Kerridge 在其 1961 年的论文《不准确性与推断》中将交叉熵度量引入,并称之为“不准确性”。在分类中,对数损失是它的同义词;逻辑回归和神经网络分类器都会使用它。
交叉熵损失的工作原理#
对于一个只有一个正确类别的样本,未加权交叉熵为 loss = -ln(p_correct)。正确类别的概率为 0.9 时,损失约为 0.105;概率为 0.1 时,损失约为 2.303。结果使用自然对数表示,单位称为奈特。训练时通常会对一个批次中的这些惩罚取平均值。
更一般地说,交叉熵会将每个目标概率乘以其预测概率的负对数,并对所有类别求和。独热目标会在正确类别的位置设为 1,在其他位置设为 0,因此只留下正确类别对应的项。对于未加权的独热目标,最小化交叉熵等价于最大化观测标签的似然。反向传播会计算梯度,而梯度下降会更新模型参数。
二元、类别和稀疏交叉熵#
应使用哪种形式取决于标签:
- 二元交叉熵与 sigmoid:对于取值为 0 或 1 的目标
y,以及类别 1 的预测概率p,损失为-[y * ln(p) + (1 - y) * ln(1 - p)]。多标签分类会对可以同时出现的标签分别应用该损失。 - 类别交叉熵与 softmax:这种方法用于评估概率之和为 1 的互斥类别。Softmax 会将模型的原始分数(称为 logits)转换为这种概率分布。
- 稀疏类别交叉熵:这种方法使用整数类别索引,而非独热向量。它计算的损失相同;“稀疏”描述的是目标的编码方式。
软目标会在多个类别之间分配概率。它们用于标签平滑和知识蒸馏,在知识蒸馏中,学生模型会学习教师模型的概率分布。
在 PyTorch 中计算交叉熵#
PyTorch在 CrossEntropyLoss中接受原始 logits。对于类别索引目标,其计算方式等价于先进行 log-softmax,再计算负对数似然。若提前应用 softmax,该函数就会把概率当作 logits 处理,从而改变损失和梯度。整数目标使用 torch.long;概率目标使用浮点值,且形状与 logits 相同。
import torch
from torch import nn
# Both predictions select class 0; the second is more confident.
logits = torch.tensor([[2.0, 0.0, 0.0], [4.0, 0.0, 0.0]])
targets = torch.tensor([0, 0], dtype=torch.long)
loss_fn = nn.CrossEntropyLoss(reduction="none")
losses = loss_fn(logits, targets)
print(f"Lower confidence loss: {losses[0].item():.4f}")
print(f"Higher confidence loss: {losses[1].item():.4f}")损失从 0.2395 降至 0.0360,而两种预测都仍然正确。准确率记录类别判定结果;交叉熵还会根据概率分配情况作出响应。对于二元或多标签 logits,BCEWithLogitsLoss会结合 sigmoid 和二元交叉熵。
计算机视觉中的应用#
单标签图像分类使用交叉熵来学习每张图像对应的一个类别。Ultralytics YOLO26分类训练使用类别 logits 上交叉熵的均值,更新分类器,使其预测趋向标签所指示的类别。
在医疗图像分割中,原始的 U-Net使用像素级 softmax 和加权交叉熵,在生物医学显微图像上进行训练。它的权重图会增加相互接触的细胞边界处的惩罚,从而帮助分开相邻细胞。这种方法在语义分割中对每个像素进行分类。
解读损失值#
对于有效目标分布和非负权重,离散交叉熵非负。对于未加权的硬目标,当正确类别的概率为 1 时,交叉熵为零;随着该概率趋近于零,交叉熵会无限增大。负值表明输入或实现存在错误,例如目标条目或权重为负。
熵衡量单个分布中的不确定性;交叉熵比较目标与预测。交叉熵等于目标熵加上 Kullback–Leibler 散度,即额外的不匹配惩罚。因此,当软目标的熵为正时,其交叉熵最小值也为正。
类别加权会提高所选类别的贡献。焦点损失会降低简单样本的贡献,以解决目标检测中的前景与背景不平衡问题。对于均匀预测,未加权的对数损失等于 ln(number_of_classes):两个类别时约为 0.693,十个类别时约为 2.303。










