交叉熵是一种常用于测量两个概率分布之间差异的方法,特别是在分类任务中用于评估模型的输出与真实标签之间的匹配程度。在机器学习中,特别是在使用神经网络进行多类分类时,交叉熵损失函数被广泛使用。其基本计算公式如下:
公式
对于一个多类分类问题,如果有 ( C ) 个类别,模型对于一个样本的输出概率分布为 ( p ),而真实的标签概率分布为 ( q ),交叉熵损失可以表示为:
H ( q , p ) = − ∑ c = 1 C q c log ( p c ) H(q, p) = -\sum_{c=1}^C q_c \log(p_c) H(q,p)=−c=1∑Cqclog(pc)
其中:
- q c q_c qc 是真实标签的概率分布,对于真实类别 $c$,其值为 1,其余类别的值为 0。这是一个"one-hot"编码。
- p c p_c pc 是模型预测第 c c c 类的概率。
- log \log log 通常指自然对数。
理解
交叉熵损失的关键在于它惩罚那些预测概率与实际标签相差较大的情况。例如,如果真实标签的类别为 c c c,模型预测该类别的概率 p c p_c pc 越接近于 1,对数项 log ( p c ) \log(p_c) log(pc) 越接近于 0,因此损失越小;反之,如果 p c p_c pc 很小,对数项 log ( p c ) \log(p_c) log(pc) 的值将非常负,使得损失增大。
计算示例
假设有一个三类的分类问题,其中一个样本的真实类别为第二类,那么它的"one-hot"标签 q q q 将是 [ 0 , 1 , 0 ] [0, 1, 0] [0,1,0]。假设模型预测的概率分布 p p p 为 [ 0.2 , 0.7 , 0.1 ] [0.2, 0.7, 0.1] [0.2,0.7,0.1],交叉熵损失计算如下:
H ( q , p ) = − ( 0 × log ( 0.2 ) + 1 × log ( 0.7 ) + 0 × log ( 0.1 ) ) = − log ( 0.7 ) H(q, p) = -(0 \times \log(0.2) + 1 \times \log(0.7) + 0 \times \log(0.1)) = -\log(0.7) H(q,p)=−(0×log(0.2)+1×log(0.7)+0×log(0.1))=−log(0.7)
这个结果给出了模型预测的损失值,根据真实标签与预测概率之间的匹配程度进行评分。
应用
在实际的深度学习框架如 TensorFlow 或 PyTorch 中,通常直接使用内置的交叉熵损失函数,这些函数能够自动处理多类标签的"one-hot"编码,并有效地进行批量处理,同时还包括一些数值稳定性的改进。这使得交叉熵损失函数成为训练分类模型的标准选择之一。