本文分为两部分,第一部分总结了交叉熵的定义及推导思路,第二部分总结了Focal Loss(实质上是交叉熵的一种改进)的定义及基本性质。文中的CE指的是交叉熵CrossEntropy,FL指的是Focal Loss。
Reference:
1、https://adventuresinmachinelearning.com/cross-entropy-kl-divergence/
2、https://arxiv.org/abs/1708.02002
一、交叉熵
交叉熵是深度学习中很常见的一种Loss,下面分4步从最基础的信息量出发,直到给出交叉熵的定义,展示了交叉熵这个概念的渊源。
1、信息量
信息的内在含义是某个事件发生的"惊喜程度",比如该事件发生的概率为P,那么该事件包含的信息量为:
一般而言,这里的log是自然对数,文章开始的参考1中提到了某些情况下这里的log可以是以2为底。当事件发生概率为0的时候,信息量是无穷大,而当概率是1的时候,板上订钉的事情,自然没有什么惊喜的,信息量就是0。
2、信息熵
信息熵是信息量的期望值,计算公式如下:
从上面公式可以看出,熵就是事件所有可能发生的情况对应的信息量的加权求和(权重就是对应的概率)。以投硬币为例,只有两种可能性,正面和反面出现的概率都是0.5,那么投硬币的信息熵就是。
信息熵本质上度量了一个单独的概率分布的性质。
3、KL散度(Kullback–Leibler divergence)
上面的信息熵度量一个概率分布的性质,而KL散度度量两个概率分布的相似程度,定义如下:
两个概率分布越不相似,KL散度越大,两个概率分布越相似,KL越小,当概率分布P和Q完全相等的时候,KL散度等于0。KL散度是非负的,证明过程见 https://blog.csdn.net/root_clive/article/details/103941412。
4、交叉熵(CrossEntropy,简称CE)
交叉熵在机器学习中经常作为分类任务的Loss,交叉熵可以从KL散度定义中导出。设定P是真实的概率分布,Q是预测的概率分布,对KL散度的公式进行变形:
可以看到KL散度由两部分组成,第一部分是真实概率分布信息熵的相反数,第二部分就是交叉熵的定义,一般记为:
由于真实的概率分布是固定的,所以值是固定不变的,在目标优化过程中可以忽略,因此交叉熵实际上也是对两个概率分布相似程度的度量。
当标签是onehot的情况下,例如真实概率分布P=[0,0,1,0,0],而经过softmax之后的预测分布为Q=[0.3,0.4,0.7,0.5,0.2],计算交叉熵的时候实际上只用了一个概率值,即。这里虽然只用了一个概率值,但是由于预测的概率是通过softmax计算的,所以这一个概率值随着优化变大,其他的概率值相应的就会变小,所以整体上还是实现了对整个概率分布进行优化的目标。因此在onehot情况下就可以将CE的公式简化为:
其中下标对应onehot向量中等于1的位置。
二、Focal Loss
实际数据很有可能会存在类别不平衡的情况,这时候交叉熵的效果就会受到限制,下面介绍的Focal Loss是在CE基础上进行了改进,解决了样本不平衡的问题,Focal Loss来自于论文"Focal Loss for Dense Object Detection"。
1、-balanced CE
这是最直接改善类别不平衡时CE效果的方法,实际上-balanced CE就是加权的交叉熵,公式如下:
这里的就是类别t的预测概率值,上式就是给不同的类别计算Loss的时候增加了一个权重,样本稀少的类别权重高一些,这样在一定程度上可以改善模型效果。
2、Focal Loss(FL)
上面的加权CE只解决了不同类别的权重分配,例如某一个类别样本较少,那么就把该类别对应的权重设置高一些,但是对于easy和hard样本的区分就无能为力了,论文里说,Loss大部分来自简单的负样本并且梯度方向由这些样本主导,为了解决这个问题,文章提出了下面的Focal Loss:
上面式子中的是超参数,如果
,那么FL就和CE等价了。当某一个样本预测错误的时候,概率
很小,那么FL的加权部分就很接近1,该样本对Loss的贡献就不受惩罚。如果预测已经很成功,概率
很接近1,那么加权部分就很接近于0,该样本对Loss的贡献就很小,这就是一种困难样本挖掘的思路。
3、将-balanced CE和FL结合在一起
实际中使用的是将上面两种对抗样本不平衡的方法结合在一起,公式如下:
这个式子综合了上述的优点,不再赘述。