交叉熵:把分类概率变成训练目标#
TL;DR#
本页内容7 个部分
1. 背景与问题#
分类模型输出一组 logits,但“预测类别对不对”只取决于最大值的位置,不能给每个 logit 连续的学习信号。交叉熵把标签转成目标分布,再按模型分配给目标的概率计算损失;错误且自信的预测会受到更大惩罚。
2. 目标与定义#
设有 C 个类别,logits 为 z∈RC。Softmax 将它们转成预测分布 qi=ezi/∑jezj。用 pi 表示固定目标分布,单样本目标为:
H(p,q)=−i=1∑Cpilogqi.
本文用自然对数,单位为 nat。硬标签 y 对应 pi=1{i=y},损失变成 −logqy;软标签允许不止一个类别提供监督。batch 损失还需按有效样本数或有效 token 数聚合。[1]
3. 方法与推导#
3.1 从似然得到负对数损失#
独立样本的标签似然为 ∏nqyn(xn)。最大化该乘积,等价于最大化其 log,再等价于最小化 −∑nlogqyn(xn)。因此交叉熵把标签概率连接到了可加的训练目标。
利用 logqi=zi−log∑jezj 和 ∑ipi=1:
H(p,q)=−i∑pizi+logj∑ezj,∂zk∂H=qk−pk.
目标概率高于预测概率时,梯度下降提高该 logit;反之降低。对 logits 的梯度有界,不能把 −logqy 对概率的巨大导数直接当作 logit 梯度。
3.2 与 KL 和标签平滑的关系#
把 KL 展开,得到 DKL(p∥q)=H(p,q)−H(p)。目标 p 固定时,其熵不随模型变化,最小化交叉熵等价于最小化这个方向的 KL。需要 pi>0 的位置上 qi>0;KL 一般不是对称距离。
标签平滑以系数 ε∈[0,1] 混入均匀分布 ui=1/C:pi=(1−ε)1{i=y}+ε/C。由交叉熵对目标的线性性:
H(p,q)=(1−ε)(−logqy)+εDKL(u∥q)+εlogC.
这增加了从均匀分布到预测分布的 KL 项。教师软标签则可包含各错误类不同的概率,二者的监督信息不同。[2]
3.3 为什么要直接计算 log-softmax#
有限 logits 下,令 M=maxjzj,则 log∑jezj=M+log∑jezj−M。指数的输入不再大于零,可避免直接计算巨大指数。实现应使用稳定的交叉熵或 log-softmax;先 softmax 再取 log 可能把已下溢的零变成负无穷。
4. 计算过程#
给定三个类别的 logits 为 (log2,0,0),预测分布为 (0.5,0.25,0.25),真实类别为第一类:
取 logit 空间的一步示意,学习率为 0.1:硬标签把第一类 logit 提高 0.05,另两类各降低 0.025;平滑目标把这个变化减为 0.03 与 −0.015。真实网络还要通过 logit 对参数的 Jacobian 传播。
再核对大数计算:z=(1000,1001,999),最大值为 1001,得到 log∑jezj≈1001.407606。若正确类 logit 为 1000,损失约为 1.407606,而无需计算 e1000。
5. 比较与边界#
交叉熵优化目标分布的概率,不直接等于准确率、校准或下游任务表现。可分且无正则时,硬标签 loss 的下确界可能只在 margin 不断增大时接近;有限模型与实际训练的结果仍依赖数据和优化约束。
标签平滑完全拟合时的最低 loss 为目标的正熵,不是零。C=1000,ε=0.1 时正确类目标为 0.9001、各错误类为 0.0001;这是混入全 C 类均匀分布的约定。标签平滑研究观察到的校准和蒸馏变化有其模型与实验范围。
参考资料#
- CrossEntropyLoss(PyTorch 2.9). 文档:硬标签、软标签与平均分母。
- When Does Label Smoothing Help?(NeurIPS 2019). 原文:平滑监督、表征与蒸馏的实验结果。