在学习深度学习的时候,经常使用交叉熵损失函数。一开始将其笼统的理解为计算两个分布之间的距离或者相似度,但是对于交叉熵其中的原理并不清楚。那么交叉熵到底是怎么来的呢?我们将从熵、信息熵、KL散度、交叉熵这几个概念分别进行介绍。
一、熵
在中学时代,我们在物理课的热力学知识中就学习过,熵(entropy)代表的是一个系统中的混乱程度。例如:熵增,就是指一个系统的混乱程度增加。熵减,就是一个系统趋于稳定。一碗开水逐渐变凉的过程就是熵减的过程。
![](https://img.haomeiwen.com/i12824314/8f24c1af7a5465fc.png)
这里呢我们从信息论的角度来讨论熵。那么什么是信息呢?信息怎么度量呢?
二、信息熵
【信息1】巴菲特昨天出门是左脚先迈出门槛的。(信息量少,与我无关)
【信息2】中国队进入世界杯决赛。(信息量爆炸!)
从上面两条信息中可以看出,信息量的大小与信息的长短无关,也与信息的正确性没有关系。信息量与其确定性有关系,即他能给你带来多少确定性。那么我们现在怎么去定义一个函数表述信息量呢?
![](https://img.haomeiwen.com/i12824314/5d2f2c82f4776c1c.png)
我们怎么描述阿根廷夺冠的信息量呢?阿根廷夺冠的信息量等于阿根廷进决赛的信息量+阿根廷赢了决赛的信息量。
与此同时,如果用数学中的概率学知识对此事件进行描述的话,阿根廷夺冠的概率等于阿根廷进决赛的概率*阿根廷赢得比赛的概率。
那么计算信息量的公式就变成了如下模样:
![](https://img.haomeiwen.com/i12824314/3a52ef33c1713df1.png)
根据红色方框的函数,我们不难想到,这和我们中学学习的log函数很像吗?
所以我们对于信息量的定义就可以变成如下形式:
于是现在出现了一个问题,系数是多少?底是多少?
根据log函数,它是一个单调递增的函数。当x越大,函数值越大。但是在描述信息量的时候,我们发现一件事情发生的概率越小,当他发生时所包含的信息量越大。所以我们需要给上述定义中的系数加上一个负号,也就是说当x越小的时候,信息量越大。至于底数的选择,我们可以比较随意。因为其不影响对信息量的定义。于是我们对信息量的定义就可以变成了下面的样子:
我们再去计算阿根廷夺冠的信息量就变成了:
现在我们已经对信息量进行了一个定义,其具体含义为:一个事件,从确定到不确定之间的难度有多大。信息量大,就是说难度大,信息量小,就说明难度小。其实熵也是类似的,熵越大,系统越混乱,系统从混乱到稳定的难度也越大。熵和信息量都是来形容难度的,那么其实他们两个的单位也可以一样,这个单位可以是比特。
这里的转变有些复杂,我们假设一个事件发生的信息量为3比特,其相当于是三个比特组成一个随机数,这个随机数刚好是0的难度一样。
到这里似乎这个关于信息量理论已经很完善了。但其实我们对有关于信息熵的定义还不够准确。信息熵的概念是指一个系统中的信息量,难道一个系统的信息是单个子事件信息量的简单的累加吗?答案是非也。
再举一个例子,有两场比赛。
【比赛1】阿根廷对战比利时,两者赢球的概率均为0.5.
【比赛2】中国对战法国,法国赢球的概率为0.99,中国赢球的概率为0.01.
![](https://img.haomeiwen.com/i12824314/ae3890a48098519f.png)
根据上面我们对信息量的描述,可以计算出每一个国家赢球的信息量。如果简单累加的话,左边系统的信息量是2,右边系统的信息量为6.65。
根据信息熵的理解,也就是说左边的系统更加稳定,右边的系统更加不稳定。然而在直观理解中并不是这样,左边系统中似乎更不稳定,谁是赢家,还真说不准。反观右边的系统,这个系统似乎挺稳定的。所以一个系统的信息熵等于单个子事件的信息量乘以它发生的概率的积的和。关于信息熵的定义变成了:
![](https://img.haomeiwen.com/i12824314/ecd3f7b31940d9e4.png)
观察这个式子,我们也可以理解为对一个系统求信息熵,那就是对这个系统求信息量的期望。
到这里我们就完成了对熵、信息熵的理解。
接下来,我国我们想比较两个神经网络模型(概率模型)之间的熵,该怎么比较呢?这里将引入另一个概念,叫做相对熵,又被称之为“KL散度”
三、KL散度
相对熵(即KL散度),是计算两个概率系统的相对混乱程度。需要涉及到两个概率系统。P系统和Q系统,下图为两个系统的概率分布图和信息量。
![](https://img.haomeiwen.com/i12824314/dfc7546381c69db7.png)
KL散度表示如下:
![](https://img.haomeiwen.com/i12824314/e151e1a3e9b23844.png)
括号中P在前,表示为以P系统作为基准,去计算P与Q之间的差值。如果则说明两者完全相等。
观察展开式中的最后一项,其为P系统的信息熵。如果我们将P系统作为基准的话,后面这个值是一个常数。那么主要就是看前面的那一部分了,前面的这一部分就被叫做是交叉熵 表示为:
这里还有一个关键的问题值得我们思考,是前面这项更大呢,还是后面这项更大?这将能够将KL散度变成两部分,如果前面一项恒小于后面一项,那么当前一项逐渐增大,最终等于后面那项的时候,KL散度等于零,两个系统越接近。
然而有一个大佬证明过了,叫做吉布斯不等式。其结论为:
如果说我们想要P系统和Q系统更相似,我们需要找到交叉熵的最小值。
四、交叉熵
在深度学习中,我们将交叉熵作为损失函数,我们希望交叉熵越小越好,其实实质是想要两个概率分布更相似,两个概率分布的相对熵更小。所以模型的最优解能够使得。
![](https://img.haomeiwen.com/i12824314/2d72a12bb0ed8613.png)
这里我们以猫狗识别的神经网络入手,神经网络的输出经过softmax激活函数,将结果转换为概率值。同时我们对标签进行onehot编码,将数据集作为我们的P系统,作为基准。神经网络为Q系统。我们使用交叉熵函数作为我们的损失函数。更新梯度,使得损失越小越好。
到这里,忽然间觉得数学大佬们真的是牛啊。终于理解了什么是交叉熵。
本文参考视频内容:“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵” 去给up主点个赞吧!
网友评论