交叉熵是信息论中的一个量,用于衡量模型分布为参考分布所生成的结果赋予的概率,其负对数的平均值。它将概率预测与信息编码联系起来:如果预测为频繁出现的结果赋予较低的概率,就会产生较大的代价。在机器学习中,交叉熵被广泛用作损失函数,以拟合概率模型并评估其预测结果。(deeplearningbook.org)
数学定义
对于定义在同一结果空间 上的两个离散概率分布 和 ,交叉熵为
其中,期望值按 计算,而概率的对数来自 。因此,参数的顺序很重要。以 2 为底的对数对应的单位是比特;自然对数对应的单位是奈特。按照约定, 的项贡献为零。如果 而 ,交叉熵就是无穷大:模型将某个结果判定为不可能发生,而参考分布却允许它发生。(deeplearningbook.org)
量 是 为结果 赋予的自信息。因此,交叉熵平均的是模型赋予各结果的惊讶程度,而不是参考分布自身的惊讶程度。对于离散分布,交叉熵非负,但即使两个分布相同,它也不一定为零。(deeplearningbook.org)
与熵和散度的关系
其中
对于有限离散分布,吉布斯不等式表明 ,且等号成立当且仅当 。因此,在固定 的情况下,关于 最小化交叉熵,等价于最小化这一方向上的 KL 散度。交叉熵不是距离度量:它通常不对称,而且 ,而不是零。(cs229.stanford.edu)
在无损数据压缩中,基于 的理想码长为 。这些码长在实际信源分布 下的平均值就是交叉熵,而 KL 散度表示其超出熵的部分。这一解释针对的是理想码长或渐近编码率;单个二进制码字的长度必须是整数。(cs229.stanford.edu)
统计估计与学习
在监督学习中,模型为给定输入的标签赋予条件概率 。对于训练数据中的 个样本,经验目标函数为
当各样本的标签在给定输入的条件下相互独立时,它们的似然函数就是这些概率的乘积。取对数会将乘积转化为求和,因此最小化 等价于最大似然估计。平均损失是对预测对数损失期望值的经验估计。(deeplearningbook.org)
交叉熵可以作为人工神经网络的训练目标。总目标函数还可能包含正则化项;在这种情况下,它就不再只是未经修改的负对数似然。其具体表达式取决于模型所假设的输出分布。(deeplearningbook.org)
二分类与多分类形式
对于二分类目标 和预测的正类概率 ,伯努利分布的交叉熵为
同一公式也适用于软目标 ,此时 被解释为目标概率。在多标签分类中,可以为可能同时出现的标签分别计算二分类损失,而不是将所有标签强行纳入一个互斥的分布。(docs.pytorch.org)
对于 个互斥类别,目标概率 和预测概率 对应的损失为
如果对正确类别 使用独热编码,该式就简化为 。因此,公式中显式出现的只有赋予正确类别的概率,尽管归一化使所有类别的概率相互关联。具体实现可以接受类别索引,而不必显式提供独热向量。(docs.pytorch.org)
例如,为正确类别赋予 的概率会产生约 奈特的损失;赋予 的概率则会产生约 奈特的损失。这些数值可由公式直接得出,说明交叉熵会对高置信度的错误预测施加较强惩罚。
数值计算
多分类模型通常使用Softmax函数将原始得分 转换为概率:
对于归一化的目标分布,交叉熵对某个得分的导数为
这一简洁表达式提供了用于反向传播的输出层梯度。它可以由 Softmax 和损失函数的公式通过代数运算推导出来。(docs.pytorch.org)
直接从得分计算对数概率,可以避免不必要的数值不稳定性。多分类损失可以用 log-sum-exp(指数和的对数)形式表示,而二分类实现可以将逻辑斯蒂函数与对数损失结合计算。因此,程序库会区分接收概率的损失函数和接收原始得分的损失函数。类别权重、平均方式以及被忽略的目标也会影响最终的目标函数。(docs.pytorch.org)
语言建模与连续分布
语言模型为依次出现的词元赋予条件概率。在独立测试集上计算的平均负对数概率,可用于估计每个词元的预测交叉熵。以相同的对数底数对这一平均值取指数,就得到困惑度。进行比较时,必须使用可比的词元单位和评估数据。(nlp.stanford.edu)
对于概率密度为 和 的连续变量,类似的定义为
与离散交叉熵不同,这个量可能为负,因为概率密度可以大于 1。当相关量均有良好定义时,它通过相应的 KL 分解与微分熵联系起来;其数值取决于所选的坐标和参考测度。(deeplearningbook.org)