信息熵

要了解交叉熵首先需要了解信息量与香农熵

信息量,即具有确定概率的事件的信息定量度量

设$X$为离散型随机变量,对事件$x_0$,令$p(x_0)=P(X=x_0)$,则$x_0$的信息量的数学定义为

显然$I$是一个定义域为$[0,1]$的单调递减函数
从直觉上理解,即概率越小的事件发生时,可获得的信息量就越大

信息熵:在有限的互斥和联合穷举事件的集合中,熵定义为事件信息量的期望

信息熵的概念最早由香农提出,故也称为香农熵

信息熵的数学表达为

KL散度

KL散度:两个概率分布间差异的非对称性度量

KL散度又称为相对熵或信息散度

设$P(X),Q(X)$为离散型随机变量$X$的两个概率分布,则它们的KL散度为

KL散度值越小,表明两个分布差异越小

KL散度是非对称性度量是因为交换P(X)、Q(X)会得到不同的结果

交叉熵

尝试将KL散度公式变形

由于前半部分$P(X)$的信息熵始终不变,故提取后半部分称为交叉熵

交叉熵一般用作神经网络分类任务的损失,这也是分类任务类别标签需要one-hot处理的原因
例如手写数字分类中,标签5转化为[0, 0, 0, 0, 0, 1, 0, 0, 0, 0],对应$P(X)$
而网络需要输出对每个标签预测出的概率,例如[0.02, 0.03, 0.03, 0.03, 0.04, 0.6, 0.05, 0.04, 0.06, 0.1],对应$Q(X)$

交叉熵与softmax、sigmoid

对于多分类任务,为了使分类网络输出符合要求的概率分布,网络最后一层就需要softmax激活

这个式子称为BCE(Binary Cross Entropy)损失或对数损失
它也可以从极大似然估计的角度推导得到

同样网络最后一层需要有合适的激活,大多数情况下会选择Sigmoid
当然也可以有其他合适的选择,pytorch的BCELoss也并没有像CrossEntropyLoss那样和softmax绑死