转自:https://www.cnblogs.com/hxsyl/p/4910218.html
浅谈KL散度
一、第一种理解
相对熵(relative entropy)又称为KL散度(Kullback–Leiblerdivergence,简称KLD),信息散度(informationdivergence),信息增益(information gain)。
KL散度是两个概率分布P和Q差别的非对称性的度量。
KL散度是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的比特个数。 典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。
根据shannon的信息论,给定一个字符集的概率分布,我们可以设计一种编码,使得表示该字符集组成的字符串平均需要的比特数最少。假设这个字符集是X,对x∈X,其出现概率为P(x),那么其最优编码平均需要的比特数等于这个字符集的熵:
H(X)=∑x∈XP(x)log[1/P(x)]
在同样的字符集上,假设存在另一个概率分布Q(X)。如果用概率分布P(X)的最优编码(即字符x的编码长度等于log[1/P(x)]),来为符合分布Q(X)的字符编码,那么表示这些字符就会比理想情况多用一些比特数。KL-divergence就是用来衡量这种情况下平均每个字符多用的比特数,因此可以用来衡量两个分布的距离。即:
DKL(Q||P)=∑x∈XQ(x)[log(1/P(x))]- ∑x∈XQ(x)[log[1/Q(x)]]=∑x∈XQ(x)log[Q(x)/P(x)]
由于-log(u)是凸函数,因此有下面的不等式
DKL(Q||P) = -∑x∈XQ(x)log[P(x)/Q(x)]= E[-logP(x)/Q(x)] ≥ -logE[P(x)/Q(x)] = -log∑x∈XQ(x)P(x)/Q(x) = 0
即KL-divergence始终是大于等于0的。当且仅当两分布相同时,KL-divergence等于0。
===========================
举一个实际的例子吧:比如有四个类别,一个方法A得到四个类别的概率分别是0.1,0.2,0.3,0.4。另一种方法B(或者说是事实情况)是得到四个类别的概率分别是0.4,0.3,0.2,0.1,那么这两个分布的
KL-Distance(A,B)=0.1*log(0.1/0.4)+0.2*log(0.2/0.3)+0.3*log(0.3/0.2)+0.4*log(0.4/0.1)
这个里面有正的,有负的,可以证明:
KL-Distance()>=0.
从上面可以看出, KL散度是不对称的。即:
KL-Distance(A,B)!=KL-Distance(B,A)
KL散度是不对称的,当然,如果希望把它变对称,
二、第二种理解
今天开始来讲相对熵,我们知道信息熵反应了一个系统的有序化程度,一个系统越是有序,那么它的信息熵就越低,反之就越高。下面是熵的定义
如果一个随机变量的可能取值为,对应的概率为
,则随机变量的熵定义为:
有了信息熵的定义,接下来开始学习相对熵。
1. 相对熵的认识
相对熵又称互熵,交叉熵,鉴别信息,Kullback熵,Kullback-Leible散度(即KL散度)等。设和
是取值的两个概率概率分布,则对的相对熵为 :
在一定程度上,熵可以度量两个随机变量的距离。KL散度是两个概率分布P和Q差别的非对称性的度量。KL散度是
用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。 典型情况下,P表示数据的真实分布,Q
表示数据的理论分布,模型分布,或P的近似分布。
2. 相对熵的性质
相对熵(KL散度)有两个主要的性质。如下
(1)尽管KL散度从直观上是个度量或距离函数,但它并不是一个真正的度量或者距离,因为它不具有对称性,即
(2)相对熵的值为非负值,即
在证明之前,需要认识一个重要的不等式,叫做吉布斯不等式。内容如下
3. 相对熵的应用
相对熵可以衡量两个随机分布之间的距离,当两个随机分布相同时,它们的相对熵为零,当两个随机分布的差别增
大时,它们的相对熵也会增大。所以相对熵(KL散度)可以用于比较文本的相似度,先统计出词的频率,然后计算
KL散度就行了。另外,在多指标系统评估中,指标权重分配是一个重点和难点,通过相对熵可以处理。
三、用在CF中
第一,KLD需要概率(脸颊和1),但是用评分。
第二,后面两项的作用。
来源:网络
散度的理解即推导 最近在看GCN,对拉普拉斯算子有很大的疑问,里面有涉及到散度这一个定义,看了很多,就来总结一下。 首先来看散度的定义(百度上直接复制的):散度(divergence)可用于表征空间各点矢量场发散的强弱程度,物理上,散度的意义是场的有源性。当div F>0 ,表示该点有散发通量的正源(发散源);当div F<0 表示该点有吸收通量的负源(洞或汇);当div F=0,表示...
KL散度的公式是 K L [ p ( x ) ∣ ∣ q ( x ) ] = ∫ x p ( x ) l o g p ( x ) q ( x ) d x KL[p(x)||q(x)] = \int_{x}p(x)log{p(x) \over q(x)}dx KL[p(x)∣∣q(x)]=∫xp(x)logq(x)p(x)dx 假设真实分布为 p ( x ) p(x) p(x),...
目录 1.概念理解 1.1定义 遇到log 0 怎么办? 2.编程实现 1.概念理解 相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information divergence),信息增益(information gain)。 1.1定义 只需要稍加修改熵H的计算公式就能得到K-L散度的计算公式...
信息熵反应了一个系统的有序化程度,一个系统越是有序,那么它的信息熵就越低,反之就越高。 熵的定义: 如果一个随机变量的可能取值为,对应的概率为,则随机变量的熵定义为 相对熵的定义: 相对熵又称互熵,交叉熵,鉴别信息,Kullba...
https://zhuanlan.zhihu.com/p/37452654 https://blog.csdn.net/weixinhum/article/details/85064685 交叉熵和相对熵 相对熵(KL散度) KL 散度:衡量每个近似分布与真实分布之间匹配程度的方法: \[D_{K L}(p \| q)=\sum_{i=1}^{N} p\left(x_{i}\right) \log...
上一篇文章我们简单介绍了信息熵的概念,知道了信息熵可以表达数据的信息量大小,是信息处理一个非常重要的概念。 推导到这相信很多人会想,既然如此,那为什么现在还是很多人用相对熵衍生出来的交叉熵作为损失函数来训练神经网络而不直接用距离相关的均方差呢? 以下面的例子稍作解释: 假设神经网络的最后一层**函数为sigmoid,它长这样: 可以看到它的两头异常的平,也就是说在那些地方的导数接近于0...
KL散度 KL 散度是根据两个概率分布的表达式来算它们的相似度的。 WGAN相对于原始GAN 1.判别器最后一层去掉sigmoid 2.生成器和判别器的loss不取log 3.每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c 4.不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行 VAE VAE的Encoder尽量向正态分布看齐。 对抗的原理...
对于离散型随机变量,信息熵公式如下: 对于连续型随机变量,信息熵公式如下: 注意,我们前面在说明的时候log \loglog是以2为底的,但是一般情况下在神经网络中,默认以e ee为底,这样算出来的香农信息量虽然不是最小的可用于完整表示事件的比特数,但对于信息熵的含义来说是区别不大的。其实只要这个底数是大于1的,都能用来表达信息熵的大小。 本篇我们来看看机器学习中比较重要的一个概念&mdash...
Gan的优化目标是达到纳什均衡(为了使损失函数达到最优,生成器与判别器均不会单独改变而是互相对抗),从而尽可能准确的恢复P(data), variational autoEncoder方法通常能够获得很好的似然,但生成低质量的样本。GAN能生成更好的样本,但跟FVBNs,VAEs比起来,更难优化。 GAN能生成更真实的样本是因为GAN最小化Jensen-Shannon divergence, 而V...
函数都有prototype属性,它指向原型对象。 实例对象有__proto__属性,它指向对象原型 每一个原型对象都有constructor输赢,指向构造函数,每一个原型对象又具有__proto__属性,这个指向Object.prototype.在这里插入图片描述...
I'm currently trying out the google cloud messaging service with its sample application "Guestbook." https://developers.google.com/cloud/samples/mbs/ I'm attempting to send notifications tha...
Now I came across an article that distinguishes between an Asynchronous function and Synchronous functions. From my understanding of the different examples and explanations, synchronous functions are ...
Good day all I'm busy creating a small costing calculator for the signage department. I'm not getting the calculator to output the amount. Brief Description: You enter the height and width and then wh...
I have 3 models created with Flask-SQLalchemy: User, Role, UserRole role.py: user.py: user_role.py: If I try (in the console) to get all users via User.query.all() I get AttributeError: 'NoneType' obj...
I have many particles that follow an stochastic process in parallel. For each particle, there is a PRNG associated to it. The simulation must go through many repetitions to get average results. For ea...