交叉熵和KL散度
好文推荐:链接
交叉熵(Cross Entropy)与KL散度(Kullback-Leibler Divergence)均为衡量概率分布间差异程度的指标。它们在信息论与机器学习领域具有重要应用。特别地,在深度学习中这些指标通常被广泛应用于损失函数设计以及模型训练过程中
1. 交叉熵(Cross Entropy):
交叉熵常用于衡量两个概率分布之间的区别程度,并被视为一种指标。其计算方法如下:
对于离散型分布:
H(p, q) = -\sum_{x} p(x) \log(q(x)) =\sum_{x}p(x)\log(\frac{1}{q(x)})
对于连续型分布:
H(p, q) = -\int p(x) \log(q(x)) dx
其中,在分类问题中,
p 表示真实概率分布(ground truth),
q 表示预测概率分布(predicted probability distribution)。
commonly,
p represents probabilistic distributions representing true class labels,
通常以one-hot编码的形式,
而q represents the probabilistic distributions predicted by the model.
交叉熵函数具有以下特点:
交叉熵函数始终为非负值,并在两个概率分布完全一致时达到最小值零
在机器学习领域中,交叉熵函数常被用作分类任务中的损失函数,在评估模型预测值与真实标签间差异程度的同时促进模型性能提升
使用 PyTorch 内置函数计算交叉熵的示例:
import torch
import torch.nn.functional as F
# 定义真实标签和预测概率
target = torch.tensor([0, 1]) # 真实标签
output = torch.tensor([[0.6, 0.4], [0.2, 0.8]]) # 预测概率,注意:这里需要是概率值,而不是 logit 或 log-probability
# 计算交叉熵
cross_entropy = F.cross_entropy(output, target)
print("Cross Entropy:", cross_entropy.item())
python

2. KL散度(Kullback-Leibler Divergence):
KL散度用于衡量两个概率分布间的差异程度, 即前者相对于后者的不确定性差异. 其计算公式如下:
D_{KL}(p||q) = \sum_{x} p(x) \log \frac{p(x)}{q(x)}
其中我们定义为p和q分别代表两个概率分布模型。KL散度则衡量了将q用于拟合p时所造成的期望信息损失量(或信息增益)。
KL散度函数具有以下特点:
- 其值始终为非负数,并且仅在两个分布完全相同时达到最小值0。
- 其计算结果表明该散度指标具有不对称性特征。
KL散度常被用来表征两个概率分布之间的差异程度,在信息论领域中被广泛应用于数据压缩和信息传输问题中。然而,在数学上它不具备距离度量的所有性质;例如,在某些情况下它并不满足对称性和三角不等式的条件。
使用 PyTorch 内置函数计算 KL 散度的示例:
import torch
import torch.nn.functional as F
# 定义真实分布和预测分布
p = torch.tensor([0.3, 0.7]) # 真实分布
q = torch.tensor([0.4, 0.6]) # 预测分布
# 计算 KL 散度
kl_divergence = F.kl_div(q.log(), p, reduction='sum')
print("KL Divergence:", kl_divergence.item())
python

联系和区别:
联系: 交叉熵函数等同于KL散度的一种特殊情况。事实上,在信息论领域中(或上下文中的相关领域),交叉熵等于两个概率分布之间计算出的KL散度再加上一个常数值。在机器学习应用中(或具体应用场景下),交叉熵常被结合使用作为损失函数,在这种情况下它量化了预测概率分布与真实概率分布之间的差距。
区别: * 交叉熵函数作为一种评估工具,在衡量模型预测结果与实际数据差距方面表现出色。
- KL散度则用于量化两个概率空间之间的不一致程度,在使用一个空间的概率分布来近似另一个空间时会引入的信息损失。
