交叉熵是信息论和机器学习中的一个基本概念,常作为分类问题的损失函数。它量化了两个概率分布之间的差异:真实分布(通常是真实标签)和预测分布(模型的输出)。在神经网络的背景下,交叉熵被广泛用于训练模型,以完成图像分类、自然语言处理和语音识别等任务。
定义
对于离散事件集合上的两个概率分布 \(p\)(真实)和 \(q\)(预测),交叉熵定义为:
\[ H(p, q) = -\sum_{x} p(x) \log q(x) \]
在分类中,\(p\) 通常是独热编码向量,其中真实类别的概率为1,其他为0,而 \(q\) 是模型的输出概率(例如,来自softmax层)。此时交叉熵简化为真实类别的负对数似然,通常写作:
\[ L = -\log q(y_{\text{true}}) \]
其中 \(y_{\text{true}}\) 是正确的类别索引。
在机器学习中的作用
交叉熵是多类分类的标准损失函数。它会对高置信度的错误预测进行惩罚,鼓励模型为正确类别分配高概率。与均方误差不同,交叉熵与softmax输出配合良好,因为它在预测错误时提供更强的梯度,从而加快收敛速度。它与Kullback-Leibler散度密切相关,后者衡量两个分布之间的相对熵;当真实分布固定时,最小化交叉熵等价于最小化KL散度。
应用
交叉熵被用于各种机器学习领域。在深度学习中,它是分类网络的默认损失函数,包括用于图像识别的卷积神经网络(CNN)和用于序列任务的循环网络。在自然语言处理中,它被用于语言建模,即模型预测序列中的下一个词元,以及用于大型语言模型中的基于Transformer的架构。此外,交叉熵还用于强化学习中的策略梯度方法和无监督学习中的变分自编码器。
变体与扩展
存在多种交叉熵的变体以应对特定挑战。分类交叉熵处理多类分类,而二元交叉熵用于二分类任务。加权交叉熵为不同类别分配不同权重,以处理不平衡数据集。焦点损失是交叉熵的一种修改,它降低简单样本的权重以聚焦于困难样本,从而改善目标检测性能。在知识蒸馏中,使用温度缩放后的软化交叉熵将知识从大型教师模型转移到较小的学生模型。
与其他概念的关系
交叉熵与信息论有深刻联系,它表示使用针对 \(q\) 优化的编码来编码来自分布 \(p\) 的事件所需的平均比特数。在机器学习中,它常与softmax激活函数配对使用,后者将原始logits转换为概率。softmax和交叉熵的组合在数值上稳定且高效,因为梯度简化为预测概率与真实标签之间的差异。这一特性使其成为大多数现代神经网络框架中的首选。
历史背景
交叉熵的概念源于克劳德·香农在20世纪40年代关于信息论的研究。后来被引入统计力学,再后来进入机器学习。随着20世纪80年代和90年代神经网络的兴起,交叉熵作为损失函数的使用变得突出,特别是通过反向传播算法。如今,它是监督学习的基石,已在TensorFlow和PyTorch等所有主要深度学习库中实现。