如何理解熵、交叉熵、KL散度、JS散度
在机器学习、深度学习中,经常听见熵(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)log2(1p(x))=−∑p(x)log2(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)log2(1p(x))=−∑xq(x)log2(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)=21DKL(p∣∣m)+21DKL(q∣∣m), where m=21(p+q)
如何理解熵、交叉熵、KL散度、JS散度相关推荐
- 熵,交叉熵,散度理解较为清晰
20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...
- 信息量、熵、交叉熵、KL散度、JS散度杂谈
信息量.熵.交叉熵.KL散度.JS散度杂谈 信息量 任何事件都会承载着一定的信息量,包括已经发生的事件和未发生的事件,只是它们承载的信息量会有所不同.如昨天下雨这个已知事件,因为已经发生,既定事实,那 ...
- 信息量、熵、交叉熵、KL散度、JS散度、Wasserstein距离
信息量.熵.交叉熵.KL散度.JS散度 文章目录 信息量.熵.交叉熵.KL散度.JS散度 前言 一.信息量 二.熵 三.交叉熵 四.KL散度 五.JS散度 六. Wasserstein距离 1.解决的 ...
- 【Pytorch神经网络理论篇】 21 信息熵与互信息:联合熵+条件熵+交叉熵+相对熵/KL散度/信息散度+JS散度
1 信息熵 熵 (Entropy),信息熵:常被用来作为一个系统的信息含量的量化指标,从而可以进一步用来作为系统方程优化的目标或者参数选择的判据. 1.1 信息熵的性质 单调性,发生概率越高的事件,其 ...
- 熵、KL散度、交叉熵公式及通俗理解
熵 根据香农信息论中对于熵的定义,给定一个字符集,假设这个字符集是X,对x∈X,其出现概率为P(x),那么其最优编码(哈夫曼编码)平均需要的比特数等于这个字符集的熵. 如果字符集中字符概率越趋于平均, ...
- 相对熵与交叉熵_熵、KL散度、交叉熵
公众号关注 "ML_NLP"设为 "星标",重磅干货,第一时间送达! 机器学习算法与自然语言处理出品 @公众号原创专栏作者 思婕的便携席梦思 单位 | 哈工大S ...
- 机器学习经典损失函数复习:交叉熵(Cross Entropy)和KL散度
目录 1 交叉熵 2 KL散度 时间一长就忘记了,今天看见缩写CE,突然有点陌生,写个图文并茂的博客加深一下印象. 1 交叉熵 交叉熵,在机器学习中广泛用于衡量两个分布的相似度: 交叉熵一般跟在sof ...
- 信息量、信息熵、条件熵、KL散度、交叉熵
文章目录 1. 信息量 2. 信息熵 3. 条件熵 4. 交叉熵与KL散度 4.1 公式推导 1. 信息量 为了理解这个概念,我们先以两个具体的事件为例: 事件1:德国队获得世界杯冠军. 事件2: ...
- 【机器学习】信息论基础(联合熵、条件熵、交叉熵、KL散度等)+ Python代码实现
文章目录 一.基本概念 1.1 联合熵 1.2 条件熵 1.3 交叉熵 1.3.1 Python编程实现交叉熵计算 1.4相对熵(KL散度) 1.4.1 Python编程实现KL散度计算 二.自信息和 ...
- 熵、联合熵、相对熵、交叉熵、JS散度、互信息、条件熵
封面镇楼 目录 一.熵 二.联合熵 三.相对熵(KL散度) 四.交叉熵 五.JS散度 六.互信息 七.条件熵 八.总结 一.熵 对于离散型随机变量,当它服从均匀分布时,熵有极大值.取某一个值的概率为1 ...
最新文章
- javascript间接实现前端非获取匹配,保留带某前缀的子串不执行替换
- 2021年值得关注的5个RPA趋势
- 微服务网关从零搭建——(三)Ocelot网关 + identity4
- 中职专业课教师资格证计算机,中职专业课教师资格证报考科目是什么?
- ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇
- 为数据计算提供强力引擎,阿里云文件存储HDFS v1.0公测发布
- 移民火星住哪?盖房的事就交给AI机器人Justin吧
- Akka-Cluster(0)- 分布式应用开发的一些想法
- 在计算机中打开word2010三种方法,Word2019中打开文档的三种方式
- WIN10 ltsc 添加输入法
- 为心爱的人做一个超具创意的表白网页吧❤(告白气球)HTML+CSS+JavaScript
- 舵机工作原理及STM32驱动代码
- 真的羡慕玉自寒和烈如歌的爱情
- 风格迁移1-02:Liquid Warping GAN(Impersonator)-源码模型测试-报错解决
- LeetCode 1646. 获取生成数组中的最大值 Python
- 有关HTTP2.0详解
- kol营销推广 | 达人营销,如何精准且快速找达人?
- 微信小程序iconfont字体图标文件无法上传问题
- 使用飞桨PaddleHub实现将视频动作转化为皮影戏
- mongodb数据备份与恢复