原文链接:https://www.cnblogs.com/jiashun/p/CrossEntropyLoss.html
1、说在前面
最近在学习object detection的论文,又遇到交叉熵、高斯混合模型等之类的知识,发现自己没有搞明白这些概念,也从来没有认真总结归纳过,所以觉得自己应该沉下心,对以前的知识做一个回顾与总结,特此先简单倒腾了一下博客,使之美观一些,再进行总结。本篇博客先是对交叉熵损失函数进行一个简单的总结。
2、 交叉熵的来源
2.1、信息量
交叉熵是信息论中的一个概念,要想了解交叉熵的本质,需要先从最基本的概念讲起。我们先来看看什么是信息量:
事件A:巴西队进入了2018世界杯决赛圈。
事件B:中国队进入了2018世界杯决赛圈。
当你看见这两个事件,你会觉得事件B的信息量比事件A的信息量要大。究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发
生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。
也就是说一条信息的信息量大小和它的不确定性有很大的关系。
一句话如果需要很多外部信息才能确定,我们就称这句话的信息量比较大。
那么我们就将一个事件X_0的信息量定义如下:(其中P(x_0)表示x_0发生的概率):
由于概率P(x_0)是一个)0至1的值,所以当事件发生的概率越大时,信息量越小。
2.2、熵
信息量是对于单个事件来说的,但是实际情况一件事有很多种发生的可能,比如掷骰子有可能出现6种情况,明天的天气可能晴、多云或者下雨等等。
熵是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。公式如下:
n表示事件可能发生的情况总数
对于二项分布(0-1分布),比如说掷硬币只有正反两面的情况,其熵值的计算可以简化如下:
2.3、相对熵
相对熵又称KL散度(Kullback-Leibler (KL) divergence),用于衡量对于同一个随机变量x的两个单独的概率分布P(x)和Q(x)之间的差异。
In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q. ——维基百科对熵的定义
即如果用P来描述目标问题,而不是用Q来描述目标问题,得到的信息增量。
在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1] 。直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样
本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q
等价于P。
设和
是取值的两个概率概率分布,则p对q的相对熵(或者KL散度)为:
KL散度的值越小表示两个分布越接近
在一定程度上面,相对熵可以度量两个随机分布的距离。也常常用相对熵来度量两个随机分布的距离。当两个随机分布相同的时候,他们的相对熵为0,当两个随机分布的差别增大的时候,他们之间的相对熵也
会增大。
但是事实上,它并不是一个真正的距离。因为相对熵是不具有对称性的,即一般来说:
相对熵还有一个性质,就是不为负:
2.4、交叉熵
我们将KL散度公式进行变形得到:
前半部分就是p(x)的熵,后半部分就是我们的交叉熵:
在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即
由于KL散度中的前一部分不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用交叉熵做误差函数,评估模型。
在机器学习中,我们希望在训练数据上模型学到的分布 P(model) 和真实数据的分布 P(real) 越接近越好,所以我们可以使其相对熵最小。但是我们没有真实数据的分布,所以只能希望模型学到的分布 P(model)
和训练数据的分布 P(train)尽量相同。假设训练数据是从总体中独立同分布采样的,那么我们可以通过最小化训练数据的经验误差来降低模型的泛化误差。即:
1、希望学到的模型的分布和真实分布一致,P(model)≃P(real)
2、但是真实分布不可知,假设训练数据是从真实数据中独立同分布采样的,P(train)≃P(real)
3、因此,我们希望学到的模型分布至少和训练数据的分布一致,P(train)≃P(model)
根据之前的描述,最小化训练数据上的分布 P(train)与最小化模型分布 P(model) 的差异等价于最小化相对熵,即 DKL(P(train)||P(model))。此时,P(train) 就是DKL(p||q)中的 p,即真实分布,P(model) 就是 q
又因为训练数据的分布 p 是给定的,所以求 DKL(p||q) 等价于求 H(p,q)。得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异。交叉熵广泛用于逻辑回归的Sigmoid和Softmax函数中作为损失函数使
用。
3、 交叉熵损失函数 Cross Entropy Error Function
3.1、表达式
在二分类的情况
模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为 P和1-P 。此时表达式为:
其中:
- y——表示样本的label,正类为1,负类为0
- p——表示样本预测为正的概率
交叉熵损失函数在多分类的问题中的表达式:
其中:
- ——类别的数量;
- ——指示变量(0或1),如果该类别和样本的类别相同就是1,否则是0;
- ——对于观测样本属于类别 的预测概率。
通常来说,交叉熵损失函数还有另外一种表达形式,对于N个样本:
3.2、交叉熵损失函数的直观理解
首先来看单个样本的交叉熵损失函数:
当真实模型y = 1 时,损失函数的图像:
看了 L 的图形,简单明了!横坐标是预测输出,纵坐标是交叉熵损失函数 L。显然,预测输出越接近真实样本标签 1,损失函数 L 越小;预测输出越接近 0,L 越大。因此,函数的变化趋势完全符合实际需要的情况。
当 y = 0 时
同样,预测输出越接近真实样本标签 0,损失函数 L 越小;预测函数越接近 1,L 越大。函数的变化趋势也完全符合实际需要的情况。
无论真实样本标签 y 是 0 还是 1,L 都表征了预测输出与 y 的差距。
另外,重点提一点的是,从图形中我们可以发现:预测输出与 y 差得越多,L 的值越大,也就是说对当前模型的 “ 惩罚 ” 越大,而且是非线性增大,是一种类似指数增长的级别。这是由 log 函数本身的特性所决定的。
这样的好处是模型会倾向于让预测输出更接近真实样本标签 y。