1 定义与基本概念
交叉熵是衡量两个概率分布差异的重要指标,常用于描述“真实分布”与“模型预测分布”之间的不一致程度。在信息论中,它对应于在真实分布已知的情况下,使用某一备用分布进行编码所需的平均信息量;在机器学习中,它则经常作为分类模型的损失函数,用来度量预测结果与标签之间的偏离。
1.1 概念起源
交叉熵的思想来源于信息论与编码理论。早期研究关注如何用尽可能少的比特描述信息,而当编码方案并非完全匹配信息源时,就会产生额外开销。交叉熵正是对这种“编码不匹配成本”的抽象描述。后来,这一概念被统计学和机器学习吸收,逐步成为处理概率预测问题的基础工具。
1.2 数学定义
交叉熵通常记为 \(H(p, q)\),其中 \(p\) 表示真实分布,\(q\) 表示模型分布。它的核心含义是:如果真实数据服从 \(p\),但我们却按照 \(q\) 来表示或预测,那么平均需要付出的信息代价是多少。
1.2.1 离散情形的定义
对于离散随机变量,交叉熵可写为:
\[ H(p, q) = -\sum_i p(i)\log q(i) \]
其中,\(p(i)\) 是真实分布在第 \(i\) 个事件上的概率,\(q(i)\) 是预测分布在同一事件上的概率。对数底数不同会影响单位,常见的是以 2 为底表示比特,以自然对数为底表示纳特。
1.2.2 连续情形的定义
对于连续随机变量,交叉熵常写为:
\[ H(p, q) = -\int p(x)\log q(x)\,dx \]
这里 \(p(x)\) 和 \(q(x)\) 分别表示真实概率密度与模型概率密度。与离散情形类似,它刻画的是在真实分布下,按模型密度编码时的平均代价。
1.3 直观理解
交叉熵可以从“信息损失”和“编码长度”两个角度理解。前者强调预测偏差带来的代价,后者强调编码效率的下降。
1.3.1 作为信息损失的度量
当模型对某些真实可能性较大的事件给出较低概率时,交叉熵会显著增大。这意味着模型在关键位置“猜错”的代价更高,因此交叉熵常被视为一种对概率偏差较敏感的误差度量。
1.3.2 作为编码长度的解释
若用最优编码描述真实分布 \(p\) 的数据,平均长度与熵相关;若改用不匹配的编码方案 \(q\),则平均长度会增加,这部分额外长度由交叉熵体现。换言之,交叉熵描述了“按错误方案编码”所带来的平均开销。
2 数学性质
交叉熵与熵、KL 散度之间有紧密联系。它既能作为独立的目标函数使用,也能通过分解公式揭示其优化含义。
2.1 与熵的关系
熵是对单一分布自身不确定性的度量,而交叉熵则涉及两个分布。若 \(p=q\),交叉熵就退化为熵本身,因此熵可以看作交叉熵的特例。
2.1.1 自信息与平均信息量
自信息定义为 \(-\log p(x)\),表示某个事件发生所携带的信息量。对自信息按分布 \(p\) 求期望,就得到熵;而若对 \(-\log q(x)\) 按 \(p\) 求期望,则得到交叉熵。这说明交叉熵本质上是“真实分布视角下的平均编码代价”。
2.2 与KL散度的关系
交叉熵、熵与 KL 散度之间满足经典分解关系:
\[
| H(p, q) = H(p) + D_{\mathrm{KL}}(p\|q) |
|---|
\]
这表明,交叉熵可以看作真实分布自身熵与分布偏差项之和。
2.2.1 公式分解
| 在上式中,\(H(p)\) 仅由真实分布决定,与模型无关;而 \(D_{\mathrm{KL}}(p\|q)\) 则衡量模型分布 \(q\) 相对真实分布 \(p\) 的偏离程度。因此,最小化交叉熵等价于在真实熵固定时最小化 KL 散度。 |
|---|
2.2.2 非负性与最小化条件
由于 KL 散度非负,交叉熵总不小于真实熵。当且仅当 \(q=p\) 时,KL 散度取 0,交叉熵达到最小值。也就是说,若模型分布与真实分布完全一致,则不会产生额外的信息损失。
2.3 常见性质
交叉熵具有若干在建模中十分重要的性质,这些性质决定了它在优化问题中的适用性。
2.3.1 非对称性
交叉熵不是对称的,即一般有 \(H(p,q) \neq H(q,p)\)。这与很多距离概念不同。其原因在于它强调“以真实分布为基准”的编码代价,而不是两者之间的双向平均差异。
2.3.2 对分布偏差的敏感性
交叉熵会对低估真实高概率事件的情况特别敏感。只要模型给重要事件分配了过低概率,对数项就会显著增大,从而使损失迅速上升。这种特性使它非常适合训练概率分类器。
3 形式化表达
交叉熵在不同类型的概率模型中有不同的具体写法,但其核心结构保持一致:真实分布对预测对数概率取期望,再加负号。
3.1 离散概率分布
在离散场景中,交叉熵最常见于分类问题与离散语言建模。其计算简单,形式清晰,适合批量优化。
3.1.1 二元分布
对于二分类问题,若真实标签 \(y\in\{0,1\}\),预测正类概率为 \(p\),则二元交叉熵常写为:
\[ L = -\left[y\log p + (1-y)\log(1-p)\right] \]
当 \(y=1\) 时,损失为 \(-\log p\);当 \(y=0\) 时,损失为 \(-\log(1-p)\)。
3.1.2 多项分布
对于多类别情形,若真实分布为 one-hot 向量 \(y_k\),预测分布为 \(p_k\),则多分类交叉熵为:
\[ L = -\sum_k y_k \log p_k \]
若标签是 one-hot,公式会进一步简化为真实类别对应的负对数概率。
3.2 连续概率分布
在连续场景中,交叉熵通常用于概率密度建模,例如高斯分布拟合、生成模型与变分推断等。
3.2.1 概率密度函数形式
若真实密度为 \(p(x)\),模型密度为 \(q(x)\),则:
\[ H(p,q) = -\int p(x)\log q(x)\,dx \]
这个表达式强调的是在真实样本分布下,模型密度对样本赋予的平均对数代价。
3.2.2 归一化与积分条件
连续分布必须满足归一化条件,即 \(\int q(x)\,dx=1\)。如果模型密度未归一化,则其对数项可能失去概率解释,交叉熵也难以直接作为严格的概率度量。因此,在实际应用中通常需要确保模型输出可以构成合法密度。
3.3 特殊情形
某些常见数据表示方式会使交叉熵进一步简化,便于在工程中直接使用。
3.3.1 one-hot 编码下的表达
当标签采用 one-hot 编码时,真实类别位置为 1,其余位置为 0。此时交叉熵只保留真实类别对应项,因此损失就是模型对正确类别的负对数概率。这也是分类训练中最常用的形式。
3.3.2 均匀分布下的表达
如果真实分布是均匀分布,则每个事件的概率相同,交叉熵会反映模型对各类别概率分配的一致性。在这种情况下,损失更接近于对整体预测分布偏差的平均评估。
4 在机器学习中的应用
交叉熵是监督学习中最常见的目标函数之一,尤其适用于输出层可解释为概率的模型。
4.1 分类任务
在分类问题中,模型通常输出各类别的概率,交叉熵用来衡量这些概率与真实标签之间的偏差。
4.1.1 二分类交叉熵
二分类任务中,模型输出一个属于正类的概率。交叉熵会惩罚“把正样本判成低概率正类”或“把负样本判成高概率正类”的情况,因此在不平衡数据和概率预测任务中应用广泛。
4.1.2 多分类交叉熵
多分类场景下,模型需要在多个类别之间分配概率。交叉熵要求正确类别的概率尽可能高,同时压低其他类别的概率。它比简单的 0/1 判断更能反映模型的置信程度。
4.1.3 稀疏标签与软标签
稀疏标签通常只给出正确类别的索引,而软标签会为各类别分配一组概率或权重。交叉熵既能处理硬标签,也能处理软标签,因此常用于知识蒸馏、标签融合和不确定标注场景。
4.2 神经网络训练
在深度学习中,交叉熵几乎是分类网络的标准损失函数之一。
4.2.1 作为损失函数
训练时,网络通过最小化交叉熵来调整参数,使预测分布逐渐接近训练数据的真实分布。该目标通常比均方误差更适合概率输出,因为它直接优化分类置信度。
4.2.2 与 softmax 的配合
多分类神经网络通常将最后一层输出 logits 经过 softmax 变成概率,再与交叉熵结合计算损失。softmax 负责归一化,交叉熵负责评价预测分布与目标分布之间的差距,两者组合后形成稳定而高效的训练目标。
4.3 序列建模
在语言模型和序列生成任务中,交叉熵用于衡量每一步预测的准确性和分布质量。
4.3.1 语言模型中的交叉熵
语言模型预测下一个词或字符时,会输出一个词表上的概率分布。交叉熵衡量真实下一个词在该分布下的负对数概率,因此可直接反映模型对语料的拟合程度。
4.3.2 逐步预测与累计损失
序列任务通常按时间步逐个计算交叉熵,再对整段序列求和或平均。这样既能评估每一步预测,也能反映整条序列上的累计误差。实际中,序列越长,累计损失的解释就越接近“整体困惑程度”。
5 优化与计算
交叉熵之所以适合训练大规模模型,不仅因为其统计意义明确,还因为其梯度性质较好、数值实现成熟。
5.1 梯度计算
交叉熵与参数优化之间的联系主要体现在梯度上。它的梯度形式简洁,便于反向传播。
5.1.1 对输出概率的求导
若损失形式为 \(-\sum_i y_i\log p_i\),则对概率 \(p_i\) 的导数与 \(-y_i/p_i\) 成正比。这意味着当模型对真实类别给出很小概率时,梯度会变大,从而推动模型迅速修正错误。
5.1.2 对 logits 的求导
在 softmax 与交叉熵联合使用时,对 logits 求导后常出现“预测概率减去真实标签”的简洁形式。这种结构使得实现高效,也使训练过程具有良好的稳定性和可解释性。
5.2 数值稳定性
由于交叉熵包含对数运算,若直接对极小概率取对数,容易出现数值问题,因此工程实现通常会采用稳定化技巧。
5.2.1 防止对数下溢
当概率接近 0 时,\(\log p\) 会变成很大的负数,甚至在浮点表示中产生下溢。为避免这一问题,常在计算前加入极小常数,或改用更稳定的合并计算方式。
5.2.2 常用稳定化技巧
常见做法包括:先计算 logits 再融合 softmax 与交叉熵、使用对数和技巧、限制数值范围等。这些方法能够减少溢出和下溢,提高训练鲁棒性。
5.3 批量计算
实际训练往往以 mini-batch 方式进行,交叉熵会在一个批次内按样本计算后再汇总。
5.3.1 Mini-batch 平均损失
对一个批次中的多个样本,通常先分别求交叉熵,再取平均值作为当前批次损失。这样可以使梯度估计更平稳,也便于不同批次之间比较训练进展。
5.3.2 权重与样本不平衡处理
当某些类别样本过少时,直接使用普通交叉熵可能使模型偏向多数类。此时可对不同样本或类别赋予不同权重,使少数类在优化中具有更高影响力。
6 相关概念比较
交叉熵常与均方误差、KL 散度和对数似然一起出现,但这些概念侧重点并不相同。
6.1 与均方误差的比较
均方误差主要度量数值偏差,而交叉熵更关注概率分布偏差。两者适用场景并不完全一致。
6.1.1 适用场景差异
均方误差更常用于回归任务,尤其是输出值本身具有连续数值意义时;交叉熵则更适合分类和概率预测,因为它直接处理分布而非简单数值距离。
6.1.2 收敛特性差异
在分类问题中,交叉熵通常比均方误差更容易产生有效梯度,尤其当预测接近错误极端时,其惩罚更强,收敛效果往往更好。
6.2 与 KL 散度的比较
交叉熵与 KL 散度关系密切,但二者的表述侧重点不同。
6.2.1 目标函数视角
从优化角度看,交叉熵常被直接用作损失函数;KL 散度则更像一个纯粹的分布差异度量。由于两者只差一个与模型无关的熵项,在固定真实分布时,最小化交叉熵与最小化 KL 散度是等价的。
6.2.2 信息论视角
在信息论中,交叉熵强调编码代价,KL 散度强调“额外损失”。前者更贴近实际系统的平均成本,后者更贴近偏差的纯度量。
6.3 与对数似然的关系
交叉熵在统计建模中与对数似然有直接对应关系,因此它在参数估计中地位很高。
6.3.1 最大似然估计
最大似然估计的目标是让模型参数使观测数据出现的概率最大。对数化后,最大化对数似然等价于最小化负对数似然,而在分类任务中,这通常又等价于最小化交叉熵。
6.3.2 负对数似然形式
对单个样本而言,若真实标签对应的类别概率为 \(p\),则损失为 \(-\log p\)。这正是交叉熵在 one-hot 标签下的常见表现,因此二者经常被并用或互相替代。
7 扩展与变体
在实际应用中,标准交叉熵常会根据任务特点作出调整,以更好地适应数据分布、标签质量和训练目标。
7.1 标签平滑
标签平滑是一种对目标分布进行轻微“软化”的方法,常用于分类模型训练。
7.1.1 动机与效果
它不再把正确类别的目标概率设为 1,而是分配给其他类别少量概率。这样做能降低模型过度自信的倾向,并缓解标签噪声带来的影响。
7.1.2 对训练稳定性的影响
标签平滑通常能让训练过程更平稳,减少预测分布过尖锐的问题,同时有助于提升泛化能力。不过,平滑过强也可能削弱模型对细粒度类别边界的区分能力。
7.2 加权交叉熵
加权交叉熵是在普通交叉熵基础上引入权重系数,用于强调某些类别或样本。
7.2.1 类别不平衡问题
当数据集中某些类别数量远多于其他类别时,模型可能更倾向于预测多数类。通过对少数类赋予更高权重,可以提升其在训练中的影响力,减少偏置。
7.2.2 样本权重设计
权重可以依据类别频率、样本难度或业务优先级设定。合理的权重设计需要兼顾模型稳定性与任务目标,否则可能导致训练震荡或过拟合少数样本。
7.3 Focal Loss 相关形式
Focal Loss 是一种从交叉熵演化而来的损失形式,常用于处理难样本和类别不平衡问题。
7.3.1 难样本聚焦机制
Focal Loss 会降低易分类样本的损失权重,把训练重点转向难以识别的样本。这样可以避免大量简单样本主导梯度更新。
7.3.2 与交叉熵的联系
从形式上看,Focal Loss 可以视为交叉熵的调制版本。它保留了交叉熵对概率的基本刻画,同时通过额外因子改变不同样本的贡献比例。
8 历史与发展
交叉熵的演进与信息论、统计学和计算机科学的发展密切相关。
8.1 信息论中的早期研究
在信息论建立初期,研究者主要关注熵、信源编码和最优压缩问题。交叉熵作为“编码不匹配时的平均代价”逐渐被明确提出,并与 KL 散度等工具一起成为理论体系的一部分。
8.2 统计学习中的引入
随着概率模型和最大似然方法的发展,交叉熵被自然地引入统计学习框架。它在分类、密度估计和模型比较中表现出良好的理论一致性,因此逐渐成为常用目标函数。
8.3 深度学习时代的普及
深度学习兴起后,神经网络输出概率分布的场景大量增加,交叉熵因此被广泛应用于图像识别、语音识别、语言建模等任务。其实现简单、梯度稳定、效果可靠,促成了它在现代人工智能中的核心地位。
9 实际示例
通过具体例子可以更直观地理解交叉熵的数值含义。
9.1 二分类示例
假设某样本真实标签为正类,模型预测正类概率为 0.9,则损失约为 \(-\log 0.9\),数值较小,说明预测较好;若预测概率只有 0.1,则损失会明显增大,说明模型与真实标签偏差较大。
9.2 多分类示例
若一个三分类任务的真实类别是第 2 类,而模型给出的概率分别为 0.1、0.7、0.2,那么交叉熵主要由第 2 类概率决定,损失较低。若模型把第 2 类概率降到 0.05,则损失会显著提高。
9.3 语言模型示例
在语言模型中,若真实下一个词是“天气”,而模型给“天气”分配的概率是 0.25,那么该步损失为 \(-\log 0.25\)。如果模型只给 0.01,则说明它对真实词的判断很差,对应的交叉熵也会更高。
10 常见误区
交叉熵虽然常见,但在实际理解和使用时容易与其他概念混淆。
10.1 将交叉熵与熵混淆
熵只描述单个分布自身的不确定性,而交叉熵涉及两个分布。前者是“自身有多乱”,后者是“用错分布编码会多花多少代价”。两者相关,但含义并不相同。
10.2 将交叉熵与准确率混淆
准确率只统计分类是否正确,不考虑预测概率大小;交叉熵则会区分“勉强猜对”和“高置信度猜对”。因此,一个模型即使准确率相同,交叉熵也可能差别很大。
10.3 忽视概率校准问题
交叉熵优化得到的模型并不一定天然具有良好的概率校准。也就是说,输出“0.9”并不总意味着真实正确率就是 90%。在需要可靠概率解释的场景中,还需结合校准方法进一步处理。