博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过示例总结条件熵、交叉熵、相对熵、互信息
阅读量:5760 次
发布时间:2019-06-18

本文共 1752 字,大约阅读时间需要 5 分钟。

条件熵:

H(Y|X)表示在已知随机变量X的条件下,随机变量Y的不确定性,H(Y|X)定义为:

 

举个例子:   有一堆西瓜,已知这堆西瓜的色泽,以及每种色泽对应好瓜和坏瓜的个数,如下所示,设X表示色泽,Y表示好瓜或者坏瓜。

 

则:

这个例子就是计算条件熵的一个过程,现在证明条件熵公式:

有很多书上的条件熵是这么定义的,如果继续化简就可以得到我们上面定义的条件熵,接着化简:

得证!

信息增益:

 ,表示X出现后随机变量Y的不确定性减少了多少。

 比如上述西瓜的例中,当不知道色泽的时候,好瓜与坏瓜的不确定度为:

 

  当知道色泽之后,好瓜与坏瓜的不确定度为:

 

  那么知道色泽之后,好瓜与坏瓜的不确定度减少了:

 

 

交叉熵(只谈论离散情况)

  假设有这样一个样本集,p为它的真实分布,q为它的估计分布。如果按照真实分布p来度量识别一个样本所需要的编码长度的期望为:(如果对编码长度不了解的,请看:http://blog.csdn.net/hearthougan/article/details/77774948

  如果使用估计的分布q来表示来自真实分布p的平均编码长度,则:

 

  因为我们编码的样本来自于真实的分布p,所以乘的是真实概率。在图像分类的时候,比如softmax分类器,在训练的时候,我们已经给定图像的标签,所以这个时候每幅图片的真实概率就是1,这个时候的损失函数就是:

 

  怎么理解呢?就是让预测的概率值越来越接近于1!(想多了解softmax,请参考http://blog.csdn.net/hearthougan/article/details/71629657)

举个知乎上的例子,有4个字母(A,B,C,D)的数据集中,真实分布p=(1/2, 1/2, 0, 0),即A和B出现的概率均为1/2,C和D出现的概率都为0,

 

  真实分布的编码长度(最优编码长度)

 

  也就是说,我们仅仅需要一位编码就可以确定所要发送的数据是什么。那么假如我们的估计分布如下:

 

  那么发送数据的平均编码长度为:

 

  即为了确定所发送的数据,平均需要长度2编码,才可以。交叉熵可以这么理解:用估计的分布对来自真实分布的样本进行编码,所需要的平均长度。

  根据Gibbs' inequality可知交叉熵要大于等于真实分布的信息熵(最优编码)。Gibbs' inequality如下:

对于样本服从分布,对于其他任何概率分布,都有:

 

当且仅当时,等号成立。

 

相对熵(KL散度)

  由交叉熵可知,用估计的概率分布所需的编码长度,比真实分布的编码长,但是长多少呢?这个就需要另一个度量,相对熵,也称KL散度。

 

  相对熵:用交叉熵减去真实分布的信息熵,表示用估计分布计算的平均编码长度比最短平均编码长度长多少。因此有:

  交叉熵=信息熵+相对熵

  由于对数函数时凸函数,则有:

 

 因此,相对熵始终是大于等于0的。从上面的描述中也可以看得出,相对熵其实可以理解成两种分布的距离。

互信息:

  两个随机变量X,Y的互信息,定义为:X,Y的联合分布P(X,Y)与乘积分布P(X)P(Y)的相对熵:

 

  怎么理解呢?也就是用乘积分布P(X)P(Y)的交叉熵,减去联合分布的信息熵,就是互信息,还不好理解,就可以看如下图示:

 

  相当于一种不严谨的说法就是:

  或许另一种等价的定义好理解:

  其实两种定义是等价的:

 

 

Reference:

https://baike.baidu.com/item/%E7%9B%B8%E5%AF%B9%E7%86%B5/4233536?fr=aladdin

https://baike.baidu.com/item/%E4%BA%92%E4%BF%A1%E6%81%AF/7423853?fr=aladdin

https://www.zhihu.com/question/41252833

--------------------- 作者:hearthougan 来源:CSDN 原文:https://blog.csdn.net/Hearthougan/article/details/77879784 版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/zzdbullet/p/10075491.html

你可能感兴趣的文章
Confluence 6 注册外部小工具
查看>>
excel进行矩阵计算
查看>>
基于Android平台的动态生成控件和动态改变控件位置的方法
查看>>
linux 死机分析
查看>>
BOM
查看>>
iOS: Block的循环引用
查看>>
mysql实战02 | 日志系统:一条SQL更新语句是如何执行的?
查看>>
ECC椭圆曲线详解(有具体实例)
查看>>
Linux常见命令(二)
查看>>
PyCharm切换解释器
查看>>
jmp far ptr s所对应的机器码
查看>>
css详解1
查看>>
【转载】Presentation at from Yoshua Bengio
查看>>
MySQL类型转换
查看>>
HashSet HashMap 源码阅读笔记
查看>>
变量声明提升1
查看>>
轻量级的Java 开发框架 Spring
查看>>
JS之路——浏览器window对象
查看>>
Chrome教程(二)使用ChromeDevTools命令菜单运行命令
查看>>
数据结构及算法基础--快速排序(Quick Sort)(二)优化问题
查看>>