在机器学习、深度学习中,经常听见熵(entropy)、交叉熵(cross-entropy)、KL散度( Kullback–Leibler divergence )、JS散度( Jensen-Shannon divergence )这些概念。初次听见这些概念肯定一头雾水,在很多地方都能见到对这些概念 high-level 的解释,但 high-level 的解释并不能对这些概念更深入的理解。比如熵是信息的度量,但是为什么熵可以用来作为信息的度量,则不知其缘由。接下来则由浅入深,深入理解这些概念。

编码(Codes)

在计算机中,任何信息都是用0、1来存储。所以为了将信息存储在计算机中,我们要将信息编码为 0、1串以便存储在计算机中。

假设 Bob 是一个动物爱好者,住在美国,他只谈论四种动物:dog、cat、fish、bird

为了和 Bob 进行交流,我们之间需要建立一个 code 把单词映射为 0、1 串。

这些0、1串在网络上传输需要消耗一定的带宽,所以我们希望0、1串越小越好,这样消耗的带宽就越小。如何对信息进行编码呢?

第一种方案:定长编码

发送信息时,只需要将相应的单词替换为对应的编码就行,例如:

第二种方案:变长编码

假设 Bob 非常喜欢狗,他谈论狗的频率比其它动物要高,假设谈论每个动物的概率如下所示。

为了减少带宽,一个直觉的编码方式为:对频率比较高的单词用较短的编码长度,频率比较低的单词使用较长的编码长度,这样最后得到的总长度是最小的。使用变长编码时,为了让解码唯一,可以使用哈夫曼编码来实现。一种变长编码方式为:

熵(Entropy)

以横轴表示每个单词的编码长度,纵轴表示谈论每种动物的频率。

使用定长编码时可以得到下图:

则发送一个单词所使用编码长度的期望(也可以看成图中的面积)为:
12∗2+14∗2+18∗2+18∗2=2bits\frac{1}{2}*2+\frac{1}{4}*2+\frac{1}{8}*2+\frac{1}{8}*2=2\ bits 21​∗2+41​∗2+81​∗2+81​∗2=2 bits

使用变长编码时可以得到下图:

则发送一个单词所使用编码长度的期望(也可以看成图中的面积)为:
12∗1+14∗2+18∗3+18∗3=1.75bits\frac{1}{2}*1+\frac{1}{4}*2+\frac{1}{8}*3+\frac{1}{8}*3=1.75\ bits 21​∗1+41​∗2+81​∗3+81​∗3=1.75 bits
使用哈夫曼编码定义的变长编码可以达到最优的期望,证明略。

所以熵可定义为:最优的平均编码长度(即期望),也即是图中的面积

如何计算熵?

长度为 1 的有 2 种编码:0、1

长度为 2 的有 4 种编码:00、01、10、11

长度为 3 的有 8 种编码:000、001、010、011、100、101、110、111

以此类推…

为了获得最优编码长度常使用变长编码,而使用变长编码时,会损失一部分编码空间。例如:使用 01 作为某一个编码时,以 01 开头的那些编码都不能用(例:010、011、0100、0110…)。在所有编码种,有 14\frac{1}{4}41​ 的编码以 01 开头,所以我们损失了 14\frac{1}{4}41​ 的编码空间。

以此类推,当我们想使用一个长度为 LLL 的编码长度时,损失了 12L\frac{1}{2^L}2L1​ 的编码空间。
cost(L)=12Lcost(L)=\frac{1}{2^L} cost(L)=2L1​

L=log2(1cost)=log2(12L)L=log_2(\frac{1}{cost})=log_2(\frac{1}{2^L}) L=log2​(cost1​)=log2​(2L1​)

同理,为了获得某个单词 xxx 的编码,花费了 p(x)p(x)p(x) (注:p(x)p(x)p(x) 为某一个单词的概率,这个概率可以看作 costcostcost )。单词 xxx 的编码长度为:

L(x)=log2(1p(x))L(x)=log_2(\frac{1}{p(x)}) L(x)=log2​(p(x)1​)

设 ppp 为单词词频的概率分布,ppp 的最优平均编码长度定义为 ppp 的 熵 H(p)H(p)H(p):
H(p)=∑xp(x)log⁡2(1p(x))=−∑p(x)log⁡2(p(x))H(p) = \sum_x p(x)\log_2\left(\frac{1}{p(x)}\right)=- \sum p(x)\log_2(p(x)) H(p)=x∑​p(x)log2​(p(x)1​)=−∑p(x)log2​(p(x))

交叉熵(Cross-Entropy)

假设我还有一个朋友 Alice,她喜欢猫,她的词频概率如下图 q(x)q(x)q(x) 所示:

当 Alice 使用 Bod 的编码和我进行通信时,她的平均编码长度为:
18∗1+12∗2+14∗3+18∗3=2.25bits\frac{1}{8}*1+\frac{1}{2}*2+\frac{1}{4}*3+\frac{1}{8}*3=2.25\ bits 81​∗1+21​∗2+41​∗3+81​∗3=2.25 bits
交叉熵可定义为:当某一个分布( 这里为 q(x)q(x)q(x) )使用另一个分布( 这里为 p(x)p(x)p(x))的最优编码长度进行编码时的平均编码长度。
Hp(q)=∑xq(x)log⁡2(1p(x))=−∑xq(x)log⁡2(p(x))H_p(q) = \sum_x q(x)\log_2\left(\frac{1}{p(x)}\right)=-\sum_x q(x)\log_2\left(p(x)\right) Hp​(q)=x∑​q(x)log2​(p(x)1​)=−x∑​q(x)log2​(p(x))

有四种情况:

  • Bob 使用他自己的编码 ( H(p)=1.75bitsH(p)=1.75\ bitsH(p)=1.75 bits )
  • Alice 使用 Bob 的编码 ( $Hp(q)=2.25\ bits $)
  • Alice 使用她自己的编码 ( H(q)=1.75bitsH(q)=1.75\ bitsH(q)=1.75 bits )
  • Bob 使用 Alice 的编码 ( Hq(p)=2.375bitsHq(p)=2.375\ bitsHq(p)=2.375 bits )

可以发现:Hp(q)≠Hq(p)H_p(q) \neq H_q(p)Hp​(q)​=Hq​(p) ,即:交叉熵并不对称

我们为什么要关注交叉熵?因为交叉熵给我们提供了一个方式来度量两个概率分布有多相同。

如果概率分布 ppp 和 qqq 越不相似,ppp 对 qqq 的交叉熵比 ppp 自己的熵更大,即:

同理,qqq 对 ppp 的交叉熵比 qqq 自己的熵更大

KL散度( Kullback–Leibler divergence )

ppp 对 qqq 的KL散度定义为:分布 ppp 使用 qqq 的最优编码进行编码时的平均编码长度( ppp 对 qqq 的交叉熵 )与 分布 ppp 的最优平均编码长度( ppp 的熵 )的差值。
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \begin{split} …
KL散度有点像一种距离,用来度量两个分布之间的差距。如果 ppp 和 qqq 相同,则KL散度为0。ppp 和 qqq 越不相同,KL散度越大。

KL散度也是不对称的。

JS散度( Jensen-Shannon divergence )

JS散度基于KL散度,是一个对称平滑版本的KL散度。

ppp 对 qqq 的JS散度定义为:
DJS(p∣∣q)=12DKL(p∣∣m)+12DKL(q∣∣m),wherem=12(p+q)D_{JS}(p||q)=\frac{1}{2}D_{KL}(p||m)+\frac{1}{2}D_{KL}(q||m),\ where\ m=\frac{1}{2}(p+q) DJS​(p∣∣q)=21​DKL​(p∣∣m)+21​DKL​(q∣∣m), where m=21​(p+q)

如何理解熵、交叉熵、KL散度、JS散度相关推荐

  1. 熵,交叉熵,散度理解较为清晰

    20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...

  2. 信息量、熵、交叉熵、KL散度、JS散度杂谈

    信息量.熵.交叉熵.KL散度.JS散度杂谈 信息量 任何事件都会承载着一定的信息量,包括已经发生的事件和未发生的事件,只是它们承载的信息量会有所不同.如昨天下雨这个已知事件,因为已经发生,既定事实,那 ...

  3. 信息量、熵、交叉熵、KL散度、JS散度、Wasserstein距离

    信息量.熵.交叉熵.KL散度.JS散度 文章目录 信息量.熵.交叉熵.KL散度.JS散度 前言 一.信息量 二.熵 三.交叉熵 四.KL散度 五.JS散度 六. Wasserstein距离 1.解决的 ...

  4. 【Pytorch神经网络理论篇】 21 信息熵与互信息:联合熵+条件熵+交叉熵+相对熵/KL散度/信息散度+JS散度

    1 信息熵 熵 (Entropy),信息熵:常被用来作为一个系统的信息含量的量化指标,从而可以进一步用来作为系统方程优化的目标或者参数选择的判据. 1.1 信息熵的性质 单调性,发生概率越高的事件,其 ...

  5. 熵、KL散度、交叉熵公式及通俗理解

    熵 根据香农信息论中对于熵的定义,给定一个字符集,假设这个字符集是X,对x∈X,其出现概率为P(x),那么其最优编码(哈夫曼编码)平均需要的比特数等于这个字符集的熵. 如果字符集中字符概率越趋于平均, ...

  6. 相对熵与交叉熵_熵、KL散度、交叉熵

    公众号关注 "ML_NLP"设为 "星标",重磅干货,第一时间送达! 机器学习算法与自然语言处理出品 @公众号原创专栏作者 思婕的便携席梦思 单位 | 哈工大S ...

  7. 机器学习经典损失函数复习:交叉熵(Cross Entropy)和KL散度

    目录 1 交叉熵 2 KL散度 时间一长就忘记了,今天看见缩写CE,突然有点陌生,写个图文并茂的博客加深一下印象. 1 交叉熵 交叉熵,在机器学习中广泛用于衡量两个分布的相似度: 交叉熵一般跟在sof ...

  8. 信息量、信息熵、条件熵、KL散度、交叉熵

    文章目录 1. 信息量 2. 信息熵 3. 条件熵 4. 交叉熵与KL散度 4.1 公式推导 1. 信息量   为了理解这个概念,我们先以两个具体的事件为例: 事件1:德国队获得世界杯冠军. 事件2: ...

  9. 【机器学习】信息论基础(联合熵、条件熵、交叉熵、KL散度等)+ Python代码实现

    文章目录 一.基本概念 1.1 联合熵 1.2 条件熵 1.3 交叉熵 1.3.1 Python编程实现交叉熵计算 1.4相对熵(KL散度) 1.4.1 Python编程实现KL散度计算 二.自信息和 ...

  10. 熵、联合熵、相对熵、交叉熵、JS散度、互信息、条件熵

    封面镇楼 目录 一.熵 二.联合熵 三.相对熵(KL散度) 四.交叉熵 五.JS散度 六.互信息 七.条件熵 八.总结 一.熵 对于离散型随机变量,当它服从均匀分布时,熵有极大值.取某一个值的概率为1 ...

最新文章

  1. javascript间接实现前端非获取匹配,保留带某前缀的子串不执行替换
  2. 2021年值得关注的5个RPA趋势
  3. 微服务网关从零搭建——(三)Ocelot网关 + identity4
  4. 中职专业课教师资格证计算机,中职专业课教师资格证报考科目是什么?
  5. ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇
  6. 为数据计算提供强力引擎,阿里云文件存储HDFS v1.0公测发布
  7. 移民火星住哪?盖房的事就交给AI机器人Justin吧
  8. Akka-Cluster(0)- 分布式应用开发的一些想法
  9. 在计算机中打开word2010三种方法,Word2019中打开文档的三种方式
  10. WIN10 ltsc 添加输入法
  11. 为心爱的人做一个超具创意的表白网页吧❤(告白气球)HTML+CSS+JavaScript
  12. 舵机工作原理及STM32驱动代码
  13. 真的羡慕玉自寒和烈如歌的爱情
  14. 风格迁移1-02:Liquid Warping GAN(Impersonator)-源码模型测试-报错解决
  15. LeetCode 1646. 获取生成数组中的最大值 Python
  16. 有关HTTP2.0详解
  17. kol营销推广 | 达人营销,如何精准且快速找达人?
  18. 微信小程序iconfont字体图标文件无法上传问题
  19. 使用飞桨PaddleHub实现将视频动作转化为皮影戏
  20. mongodb数据备份与恢复

热门文章

  1. nfc(近距离无线通讯技术)
  2. VS2015下安装Visual_Assist_x破解版
  3. OCP考试题库(精准无比)
  4. ubuntu添加windows字体
  5. R8500 MPv2 版本 刷梅林改版固件
  6. python pygame 的下载方法
  7. 全球光伏产业战加剧:美国考虑对进口太阳能电池施加紧急关税
  8. 关于appium下载安装及环境配置
  9. MyBatis下载和使用(保姆级)
  10. Spring:Spring源码下载、保存、编译