【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

1.信息量

    信息奠基人香农(Shannon)认为“信息是用来消除随机不确定性的东西”。也就是说衡量信息量大小就看这个信息消除不确定性的程度。“太阳从东方升起了”这条信息没有减少不确定性。因为太阳肯定从东面升起。这是句废话,信息量为0。

    “吐鲁番下中雨了”(吐鲁番年平均降水量日仅6天)这条信息比较有价值,为什么呢,因为按统计来看吐鲁番明天不下雨的概率为98%(1-6/300),对于吐鲁番下不下雨这件事,首先它是随机不去确定的,这条信息直接否定了发生概率为98%的事件------不下雨,把非常大概率的事情(不下雨)否定了,即消除不确定性的程度很大,所以这条信息的信息量比较大。这条信息的情形发生概率仅为2%但是它的信息量去很大,上面太阳从东方升起的发生概率很大为1,但信息量确很小。从上面两个例子可以看出:信息量的大小和事件发生的概率成反比。
    信息量用一个信息所需要的编码长度来定义,而一个信息的编码长度之所以跟其出现的概率呈负相关,是因为一个短编码的代价也是巨大的,因为会放弃所有以其为前缀的编码方式,比如字母”a”用单一个0作为编码的话,那么为了避免歧义,就不能有其他任何0开头的编码词了.所以一个词出现的越频繁,则其编码方式也就越短,同时付出的代价也大. 

信息量的表示如下:

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

2.信息熵

    理解1:信息熵是用来衡量任意随机变量或整个系统(事物)不确定性的。变量或系统的不确定性越大,熵也就越大,事物越具不确定性(事物越复杂)把它搞清楚所需要的信息量也就越大。

    理解2:信息熵是信息论中用于度量信息量的一个概念。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。所以,信息熵也可以说是系统有序化程度的一个度量。

    理解3:信息量度量的是一个具体事件发生所带来的信息,而信息熵则是在结果出来之前对可能产生的信息量的期望——考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。

    理解4:信息熵则代表一个分布的信息量,或者编码的平均长度(即信息量的均值)

信息熵的表示如下:

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

3.相对熵(K-L散度/信息散度)

    1951年,Kullback和Leibler提出了K-L散度(Kullback-Leibler divergence,也被称作相对熵,relative entropy)用来度量两个分布的偏离程度。

    相对熵,又称KL散度( Kullback–Leibler divergence),是描述两个概率分布P和Q差异的一种方法。它是非对称的,这意味着D(P||Q) ≠ D(Q||P)。特别的,在信息论中,D(P||Q)表示当用概率分布Q来拟合真实分布P时,产生的信息损耗,其中P表示真实分布,Q表示P的拟合分布。

有人将KL散度称为KL距离,但事实上,KL散度并不满足距离的概念,因为:(1)KL散度不是对称的;(2)KL散度不满足三角不等式。

定义

    相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information divergence)。

设P(x)和Q(x)是X取值的两个离散概率分布,则P对Q的相对熵为:

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

对于连续的随机变量,定义为:

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

相对熵是两个概率分布P和Q差别的非对称性的度量。

物理意义

    相对熵是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的比特个数。 典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。

    根据shannon的信息论,给定一个字符集的概率分布,我们可以设计一种编码,使得表示该字符集组成的字符串平均需要的比特数最少。假设这个字符集是X。对于【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵,其出现概率为【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵,那么其最优编码平均需要的比特数等于这个字符集的熵:

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

    在同样的字符集上,假设存在另一个概率分布【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵,如果用概率分布【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵的最优编码(即字符【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵的编码长度等于【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵 ),来为符合分布【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵的字符编码,那么表示这些字符就会比理想情况多用一些比特数。相对熵就是用来衡量这种情况下平均每个字符多用的比特数,因此可以用来衡量两个分布的距离,即:

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

性质:

相对熵(KL散度)有两个主要的性质,如下:

(1)不对称性

尽管KL散度从直观上是个度量或距离函数,但它并不是一个真正的度量或者距离,因为它不具有对称性,即

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

(2)非负性

相对熵的值为非负值,即

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵,证明可用吉布斯不等式。

证明如下:

由于对数函数是上凸函数,所以:

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

所以相对熵始终是大于等于0的,当且仅当两分布相同时,相对熵等于0。

相对熵=交叉熵-信息熵:

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵----(可将K-L散度表达式展开即可log(a/b)=log a - log b)

4.交叉熵

定义

      交叉熵是一个信息论中的概念,它原来是用来估算平均编码长度的。它描述了两个概率分布之间的距离,当交叉熵越小说明二者之间越接近。它是分类问题中使用比较广的一种损失函数。 给定两个概率分布p和q,通过q来表示p的交叉熵为:


【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

    交叉熵刻画的是两个概率分布之间的距离,或可以说它刻画的是通过概率分布q来表达概率分布p的困难程度,p代表正确答案,q代表的是预测值,交叉熵越小,两个概率的分布约接近。

    当事件总数是一定的时候, 概率函数满足:

 【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵   

也就是说 所有时间发生的概率都是0到1 之间 , 且总有一个时间会发生,概率的和就为1。

分类问题

 在神经网络中怎样把前向传播得到的结果也变成概率分布呢?Softmax回归就是一个非常有用的方法。(为什么交叉熵经常要个softmax一起使用?面试中会问到)

Softmax回归本身可以作为一个学习算法来优化分类结果,但在TensorFlow中,Softmax回归的参数被去掉了,它只是一层额外的处理层,将神经网络的输出变成一个概率分布。下图展示了加上Softmax回归的神经网络结构图。 

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

 

    假设原始神经网络输出为 y1, y2, y3, ... , yn

 softmax 处理后的输出为: 

   【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵

(原始神经网络的输出被用作置信度来生成新的输出,新的输出满足概率分布所有要求)

这样就把神经网络的输出也变成了一个概率分布,从而可以通过交叉熵来计算预测的概率分布和真实答案的概率分布之间的距离了。

举例

假设有一个3分类问题,某个样例的正确答案是(1,0,0)
某模型经过Softmax回归之后的预测答案是(0.5,0.4,0.1),那么这个预测和正确答案之间的交叉熵为: 
H((1,0,0),(0.5,0.4,0.1))=−(1×log0.5+0×log0.4+0×log0.1)≈0.3
H((1,0,0),(0.5,0.4,0.1))=−(1×log0.5+0×log0.4+0×log0.1)≈0.3

如果另一个模型的预测是(0.8,0.1,0.1),那么这个预测值和真实值之间的交叉熵是:
H((1,0,0),(0.8,0.1,0.1))=−(1×log0.8+0×log0.1+0×log0.1)≈0.1
H((1,0,0),(0.8,0.1,0.1))=−(1×log0.8+0×log0.1+0×log0.1)≈0.1

从直观上可以很容易地知道第二个预测答案要优于第一个。通过交叉熵计算得到的结果也是一致的(第二个交叉熵的值更小)。

区别与联系:

信息熵,是随机变量或整个系统的不确定性。熵越大,随机变量或系统的不确定性就越大。

相对熵,用来衡量两个取值为正的函数或概率分布之间的差异。

交叉熵,用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。

相对熵=交叉熵-信息熵:

【机器学习】信息量,信息熵,相对熵(KL散度),交叉熵