Categorical Cross-Entropy/zh
| Article | |
|---|---|
| Topic area | Loss Functions |
| Prerequisites | Softmax Function, Cross-Entropy Loss, KL Divergence |
概述
分类交叉熵是用于训练分类器的损失函数,这类分类器必须将每个输入分配到若干互斥类别中的恰好一个。它衡量预测的类别概率分布与真实分布之间的差异,在普通的监督学习中,真实分布集中于单个正确标签。配合 softmax 输出层使用时,它是现代神经网络中多类分类的标准目标,涵盖图像分类器、语言模型以及大多数预训练Transformer。
该损失有两种互补的解释。从信息论角度,它等于在使用对预测分布最优的编码时,编码真实标签所需的平均比特数(或纳特数);将其最小化会使预测分布趋近于真实分布。从统计角度,它是观测标签在分类模型下的负对数似然,因此最小化分类交叉熵恰好就是最大似然估计。这两种视角解释了为何同一公式出现在信息论、统计学和深度学习中,并解释了为何它具有良好的梯度性质,使随机梯度下降优化变得切实可行。
直观理解
设想一个模型,给定一张照片,必须判断图像中显示的是猫、狗还是鸟。模型为每个类别给出一个概率,例如猫 0.7、狗 0.2、鸟 0.1。如果正确答案是"猫",一个好的损失函数应当奖励赋予该类别的高概率而忽略其他类别。分类交叉熵正是这样做的:它对赋予正确类别的概率取负对数。接近 1 的概率产生很小的损失,而接近 0 的概率产生任意大的损失,因此模型在自信地犯错时会受到强烈惩罚。
自信正确与自信错误的预测之间的不对称性是该损失的核心特征。对真实类别预测 0.99 产生约 0.01 的损失,而对真实类别预测 0.01 则产生约 4.6 的损失。这种对数缩放意味着,当模型偏离很远时梯度恰好变大,从而在训练初期提供强有力的纠正信号,而在接近收敛时变得温和。这一行为与平方误差形成鲜明对比,后者在自信预测时梯度趋于消失,并在与 softmax 输出搭配时可能发生饱和,从而减慢学习。
公式表述
设有 $ K $ 个类别。对于一个具有 one-hot 真实标签 $ y \in \{0,1\}^K $(即恰有一个分量为 1)和预测概率向量 $ \hat{y} \in [0,1]^K $(满足 $ \sum_k \hat{y}_k = 1 $)的样本,分类交叉熵定义为
$ {\displaystyle L(y, \hat{y}) = -\sum_{k=1}^{K} y_k \log \hat{y}_k.} $
由于 $ y $ 是 one-hot 的,求和坍缩为单个项 $ -\log \hat{y}_{c} $,其中 $ c $ 是真实类别的索引。对于 $ N $ 个独立样本组成的数据集,经验风险是每个样本损失的平均,
$ {\displaystyle \mathcal{L} = -\frac{1}{N}\sum_{i=1}^{N} \log \hat{y}^{(i)}_{c^{(i)}}.} $
在实践中,预测概率来自施加在 logits $ z \in \mathbb{R}^K $ 上的 softmax:
$ {\displaystyle \hat{y}_k = \frac{\exp(z_k)}{\sum_{j=1}^{K} \exp(z_j)}.} $
代入并化简,得到以 logits 表达的损失:
$ {\displaystyle L(y, z) = -z_c + \log \sum_{j=1}^{K} \exp(z_j).} $
右侧的项是 logits 的 log-sum-exp,也称为分类指数族的累积量函数。这是数值库实际计算的形式,因为分别施加 softmax 再取对数对于较大的 logits 在数值上不稳定。
与信息论及最大似然的联系
分类交叉熵是当 $ p $ 为经验(one-hot)标签分布、$ q $ 为模型预测时,对交叉熵 $ H(p, q) = -\sum_k p_k \log q_k $ 的求值。它可分解为 $ H(p, q) = H(p) + D_{\text{KL}}(p \,\|\, q) $,其中 $ H(p) $ 是真实分布的熵,$ D_{\text{KL}} $ 是 Kullback-Leibler 散度。对 one-hot 标签有 $ H(p) = 0 $,因此交叉熵与 KL 散度重合,最小化其一等同于最小化另一个。
统计解释源于观察到 softmax 分类器定义了一个分类似然 $ P(Y = c \mid x; \theta) = \hat{y}_c $。数据的负对数似然为
$ {\displaystyle -\sum_{i=1}^{N} \log P(Y = c^{(i)} \mid x^{(i)}; \theta),} $
在差一个常数的意义下,这恰好等于分类交叉熵。因此用此损失训练 softmax 分类器在数值上等同于在多项模型下进行最大似然估计,这一事实证明了在分析分类器校准和置信度时使用标准频率派工具(如 Fisher 信息矩阵)是合理的。
训练与反向传播
softmax与交叉熵的组合具有异常简洁的梯度。给定 logits $ z $ 和 one-hot 标签 $ y $,有
$ {\displaystyle \frac{\partial L}{\partial z_k} = \hat{y}_k - y_k.} $
梯度就是预测概率与真实类别指示函数之差。没有遗留的指数或对数因子,这正是深度学习框架将 softmax 与交叉熵合并为单一原语的原因(例如 PyTorch 中的 nn.CrossEntropyLoss,TensorFlow 中的 SparseCategoricalCrossentropy)。随后反向传播使用这一具有残差形态的误差信号在网络其余部分中正常进行。
为保持数值稳定,库直接从 logits 出发,使用 log-sum-exp 技巧计算损失,在取指数前先减去 $ \max_k z_k $:
$ {\displaystyle \log \sum_j \exp(z_j) = m + \log \sum_j \exp(z_j - m), \quad m = \max_k z_k.} $
这样可避免 logits 过大时的上溢和过小(极负)时的下溢。那些先施加 softmax 再单独取对数的朴素流水线可能在训练时产生 NaN 值,尤其是在混合精度设置下。
变体
若干变体针对具体的实际问题:
- 稀疏分类交叉熵接受整数类别索引而非 one-hot 向量。数学公式完全相同,但实现避免了显式构造大型 one-hot 矩阵,这对于语言模型中拥有数十万 token 的词表至关重要。
- 标签平滑将 one-hot 目标替换为软化分布,将 $ 1-\epsilon $ 分配给真实类别,将 $ \epsilon/(K-1) $ 分配给其他类别。它防止模型产生任意尖锐的预测,从而改善校准并往往提升泛化能力。该方法由 Inception-v3 推广,已成为Transformer训练中的标准做法。[1]
- Focal loss将每个样本的损失乘以 $ (1 - \hat{y}_c)^\gamma $,降低简单样本的权重,使优化聚焦于困难样本。它最初为稠密目标检测提出,因为该场景中绝大多数候选框为背景。[2]
- 类别加权交叉熵按类别相关的权重缩放每个样本的损失,以缓解类别不平衡,是相对于重采样的一种简单替代方案。
- 温度缩放交叉熵在 softmax 之前用温度 $ T $ 除以 logits。它不改变 argmax,但被广泛用于知识蒸馏和事后校准。
与其他损失的比较
分类交叉熵是分类问题可选的若干损失之一,正确的选择取决于标签结构和输出激活函数:
- 二元交叉熵是两类的特例,配合 sigmoid 输出用于单标签二分类问题,并按类别独立应用于标签互不排斥的多标签问题。
- 均方误差作用于 one-hot 目标在技术上定义了一个有效的损失,但其梯度与 softmax 饱和的相互作用较差,导致训练缓慢且概率校准不佳。它在分类中很少使用。
- 铰链损失及其多类扩展用于支持向量机,优化间隔而非似然。它们产生稀疏的决策边界,但不给出概率估计,在现代深度学习中并不常见。
- 三元组、对比与 InfoNCE 损失优化相对相似度而非绝对类别概率,更适合表示学习和检索任务。
对于标签集合固定且使用 softmax 输出的标准分类,分类交叉熵是默认选择,其他替代方案在很大程度上已被取代。
Practical Considerations and Limitations
Despite its dominance, categorical cross-entropy has known limitations. Models trained with it are often overconfident: probabilities estimated by deep networks tend to be poorly calibrated, with confidence systematically higher than empirical accuracy.[3] Temperature scaling, label smoothing, and focal loss all partially address this. The loss is also sensitive to label noise: a single mislabeled example can produce an unbounded gradient because $ -\log \hat{y}_c \to \infty $ as $ \hat{y}_c \to 0 $. Robust alternatives such as the generalized cross-entropy and symmetric cross-entropy trade off some accuracy on clean data for resilience to noisy labels.
A more subtle issue is that categorical cross-entropy treats all classes as exchangeable: misclassifying a husky as a wolf incurs the same loss as misclassifying it as a banana. When the label space has structure (hierarchical categories, semantic embeddings, ordinal levels), specialized losses or auxiliary objectives can encode that structure and outperform the plain cross-entropy. Finally, in extreme classification with millions of classes, the normalizing log-sum-exp becomes a computational bottleneck, motivating sampled approximations such as sampled softmax, noise-contrastive estimation, and hierarchical softmax.