从信息论视角深挖交叉熵:从公式推导到损失函数的本质探索
在算法与深度学习的核心领域,交叉熵(Cross Entropy,CE)作为分类任务的基石级概念,却常让许多开发者陷入「知其然不知其所以然」的困境。从五年前接触深度学习至今,笔者也曾对交叉熵的本质困惑不已——这个频繁出现在Logistics回归与各类分类模型中的损失函数,为何以这样的数学形式定义?它究竟在衡量什么?直到系统学习信息论后,才豁然开朗。本文将以硬核推导的方式,从信息论的底层逻辑出发,带你看透交叉熵的诞生与演变,并基于其与KL散度的关系,解锁一个不常见却极具启发性的新型分类损失函数。
一、交叉熵:从公式到直观理解
在K分类任务中,贝叶斯最优分类器通过输出概率最大的类别作为预测结果。假设第iii个样本输入特征为x(i)\mathbf{x}^{(i)}x(i),真实标签y(i)\mathbf{y}^{(i)}y(i)经过one-hot编码,分类器输出概率向量p(i)∈RK\mathbf{p}^{(i)} \in \mathbb{R}^Kp(i)∈RK。one-hot编码的约束使得y(i)∈OK\mathbf{y}^{(i)} \in \mathbb{O}^Ky(i)∈OK,其中O={0,1}\mathbb{O} = \{0, 1\}O={0,1}。
交叉熵损失函数定义为:
LCE(i)=−∑j=1Kyj(i)logpj(i)
\mathcal{L}_{CE}^{(i)} = - \sum_{j=1}^K y_j^{(i)} \log p_j^{(i)}
LCE(i)=−j=1∑Kyj(i)logpj(i)
由于one-hot编码的特性,该公式可简化为仅保留真实类别对应项:
LCE(i)=−logpk(i)(i),其中 yk(i)(i)=1
\mathcal{L}_{CE}^{(i)} = -\log p_{k^{(i)}}^{(i)}, \quad \text{其中 } y_{k^{(i)}}^{(i)} = 1
LCE(i)=−logpk(i)(i),其中 yk(i)(i)=1
从直观层面,交叉熵衡量了预测概率与真实标签的「差异」。但这种定义绝非凭空出现,其背后隐藏着深刻的信息论原理。
二、信息论视角:交叉熵与前向KL散度的等价性
2.1 分布视角下的标签与预测
真实标签y(i)\mathbf{y}^{(i)}y(i)本质上定义了一个概率质量函数(PMF):
P(y(i)=j)={1,j=k(i)0,otherwise
P(\mathbf{y}^{(i)} = j) = \begin{cases}
1, & j = k^{(i)} \\
0, & \text{otherwise}
\end{cases}
P(y(i)=j)={1,0,j=k(i)otherwise
将该分布记为Y(i)Y^{(i)}Y(i),其事件集合Ω(Y(i))\Omega(Y^{(i)})Ω(Y(i))仅包含真实类别对应的概率为1的事件。而分类器输出p(i)\mathbf{p}^{(i)}p(i)服从参数为θ\thetaθ的分布Pθ(i)\mathcal{P}_\theta^{(i)}Pθ(i)。
2.2 交叉熵的信息论重构
对交叉熵公式进行变换:
LCE(i)=−∑j=1Kyj(i)logpj(i)=∑j∈Ω(i)yj(i)logyj(i)pj(i)−∑j∈Ω(i)yj(i)logyj(i)=∑j∈Ω(i)yj(i)logyj(i)pj(i)⏟DKL(Y(i)∥Pθ(i))+H(Y(i))
\begin{align*}
\mathcal{L}_{CE}^{(i)}
&= - \sum_{j=1}^K y_j^{(i)} \log p_j^{(i)} \\
&= \sum_{j \in \Omega^{(i)}} y_j^{(i)} \log \frac{y_j^{(i)}}{p_j^{(i)}} - \sum_{j \in \Omega^{(i)}} y_j^{(i)} \log y_j^{(i)} \\
&= \underbrace{\sum_{j \in \Omega^{(i)}} y_j^{(i)} \log \frac{y_j^{(i)}}{p_j^{(i)}}}_{D_{KL}(Y^{(i)} \parallel \mathcal{P}_\theta^{(i)})} + H(Y^{(i)})
\end{align*}
LCE(i)=−j=1∑Kyj(i)logpj(i)=j∈Ω(i)∑yj(i)logpj(i)yj(i)−j∈Ω(i)∑yj(i)logyj(i)=DKL(Y(i)∥Pθ(i))j∈Ω(i)∑yj(i)logpj(i)yj(i)+H(Y(i))
其中,DKL(Y(i)∥Pθ(i))D_{KL}(Y^{(i)} \parallel \mathcal{P}_\theta^{(i)})DKL(Y(i)∥Pθ(i))为前向KL散度,衡量了分布Y(i)Y^{(i)}Y(i)与Pθ(i)\mathcal{P}_\theta^{(i)}Pθ(i)的差异;H(Y(i))H(Y^{(i)})H(Y(i))为Y(i)Y^{(i)}Y(i)的信息熵。由于one-hot编码下H(Y(i))=0H(Y^{(i)}) = 0H(Y(i))=0,交叉熵本质上等价于前向KL散度:
LCE(i)=DKL(Y(i)∥Pθ(i))
\mathcal{L}_{CE}^{(i)} = D_{KL}(Y^{(i)} \parallel \mathcal{P}_\theta^{(i)})
LCE(i)=DKL(Y(i)∥Pθ(i))
2.3 深度学习推理的另一种解释
在推理阶段,分类器选择概率最大的类别作为输出:
y^(i)=argmaxj∈{1,…,K} pj(i)
\hat{y}^{(i)} = \underset{j \in \{1, \ldots, K\}}{\arg\max} \, p_j^{(i)}
y^(i)=j∈{1,…,K}argmaxpj(i)
从KL散度视角,该过程等价于寻找与预测分布Pθ(i)\mathcal{P}_\theta^{(i)}Pθ(i)前向KL散度最小的真实分布YkY_kYk(kkk为类别索引):
argminj∈{1,…,K} DKL(Yj∥P(i))⇔argmaxj∈{1,…,K} pj(i)
\underset{j \in \{1, \ldots, K\}}{\arg\min} \, D_{KL}(Y_j \parallel \mathcal{P}^{(i)}) \Leftrightarrow \underset{j \in \{1, \ldots, K\}}{\arg\max} \, p_j^{(i)}
j∈{1,…,K}argminDKL(Yj∥P(i))⇔j∈{1,…,K}argmaxpj(i)
这种等价性揭示了交叉熵损失驱动模型学习的核心逻辑——通过最小化预测分布与真实分布的差异,实现贝叶斯最优推断。
三、硬标签与软标签:标签平滑的原理与效果
3.1 硬标签的局限性
传统one-hot编码的标签被称为硬标签,其确定性(非0即1)可能导致模型过拟合。例如,当模型对某样本预测概率为[0.4,0.3,0.3][0.4, 0.3, 0.3][0.4,0.3,0.3]时,硬标签仅关注最大值对应的类别,忽略了其他类别的概率信息。
3.2 软标签与标签平滑
软标签通过引入概率分布软化硬标签的确定性。典型实现为标签平滑(Label Smoothing),将真实标签yj(i)y_j^{(i)}yj(i)替换为:
yj(i)={1−ϵ+ϵK,j=k(i)ϵK,otherwise
y_j^{(i)} = \begin{cases}
1 - \epsilon + \frac{\epsilon}{K}, & j = k^{(i)} \\
\frac{\epsilon}{K}, & \text{otherwise}
\end{cases}
yj(i)={1−ϵ+Kϵ,Kϵ,j=k(i)otherwise
其中ϵ\epsilonϵ为平滑系数(如ϵ=0.1\epsilon = 0.1ϵ=0.1)。软标签使得损失函数在优化时同时考虑所有类别的预测概率,增加模型泛化能力。
3.3 实验验证:决策边界的变化
通过Iris数据集实验,可视化标签平滑对决策边界的影响:
- 硬标签:决策边界尖锐,易过拟合
- 软标签(ϵ=0.1\epsilon = 0.1ϵ=0.1):边界平滑,类间过渡更自然
# 标签平滑示例代码
import torch
import torch.nn as nn
# 硬标签交叉熵
ce_loss = nn.CrossEntropyLoss()
# 软标签交叉熵
smoothed_ce_loss = nn.CrossEntropyLoss(label_smoothing=0.1)
四、反向KL散度:新型损失函数的探索
4.1 反向KL散度的定义
前向KL散度DKL(P∥Q)D_{KL}(P \parallel Q)DKL(P∥Q)衡量PPP与QQQ的差异,而反向KL散度定义为:
DKL(Pθ(i)∥Y(i))=∑j∈Ω(Pθ(i))pj(i)logpj(i)yj(i)
D_{KL}(\mathcal{P}_\theta^{(i)} \parallel Y^{(i)}) = \sum_{j \in \Omega(\mathcal{P}_\theta^{(i)})} p_j^{(i)} \log \frac{p_j^{(i)}}{y_j^{(i)}}
DKL(Pθ(i)∥Y(i))=j∈Ω(Pθ(i))∑pj(i)logyj(i)pj(i)
展开后:
DKL(Pθ(i)∥Y(i))=H(Pθ(i))+β(i)Tp(i)
D_{KL}(\mathcal{P}_\theta^{(i)} \parallel Y^{(i)}) = H(\mathcal{P}_\theta^{(i)}) + \boldsymbol{\beta}^{(i)T} \mathbf{p}^{(i)}
DKL(Pθ(i)∥Y(i))=H(Pθ(i))+β(i)Tp(i)
其中H(Pθ(i))H(\mathcal{P}_\theta^{(i)})H(Pθ(i))为预测分布的信息熵,βj(i)=−logyj(i)\beta_j^{(i)} = -\log y_j^{(i)}βj(i)=−logyj(i)为权重系数。
4.2 优化特性分析
- 信息熵项:H(Pθ(i))H(\mathcal{P}_\theta^{(i)})H(Pθ(i))促使预测概率向量「稀疏化」,倾向于输出one-hot形式的概率分布。
- 加权项:β(i)Tp(i)\boldsymbol{\beta}^{(i)T} \mathbf{p}^{(i)}β(i)Tp(i)引导模型关注真实类别,与交叉熵目标一致。
4.3 实验验证
在Iris数据集上使用反向KL散度作为损失函数,实验结果显示:
- 准确率:与交叉熵相当(均为0.97)
- 决策边界:与标签平滑的交叉熵类似,边界平滑且类间区分清晰
# 反向KL散度损失函数实现
def reverse_kl_loss(predictions, labels, smoothing=0.1):
K = predictions.size(1)
soft_labels = torch.full_like(predictions, smoothing / K)
soft_labels.scatter_(1, labels.unsqueeze(1), 1 - smoothing + smoothing / K)
log_p = torch.log_softmax(predictions, dim=1)
return torch.sum(-soft_labels * log_p, dim=1).mean()
五、总结:损失函数设计的底层逻辑
通过信息论的视角,我们揭示了交叉熵与KL散度的深层联系,并探索了反向KL散度作为损失函数的可能性。核心结论如下:
- 交叉熵本质上是前向KL散度在one-hot编码下的特例,用于衡量预测分布与真实分布的差异。
- 标签平滑通过软标签缓解硬标签的过拟合问题,本质是调整损失函数的优化方向。
- 反向KL散度从理论与实验上证明了其与交叉熵的等效性,为损失函数设计提供新思路。
在实际应用中,理解这些数学概念的底层逻辑,有助于开发者根据任务特性灵活设计损失函数,突破传统方法的限制。未来,随着数据形态的多样化(如概率性标签),基于信息论的损失函数设计将成为深度学习优化的重要方向。
2754

被折叠的 条评论
为什么被折叠?



