机器学习:KL散度详解

KL 散度,是一个用来衡量两个概率分布的相似性的一个度量指标。

我们知道,现实世界里的任何观察都可以看成表示成信息和数据,一般来说,我们无法获取数据的总体,我们只能拿到数据的部分样本,根据数据的部分样本,我们会对数据的整体做一个近似的估计,而数据整体本身有一个真实的分布(我们可能永远无法知道)。

那么近似估计的概率分布和数据整体真实的概率分布的相似度,或者说差异程度,可以用 KL 散度来表示。

KL 散度,最早是从信息论里演化而来的。所以在介绍 KL 散度之前,我们要先介绍一下信息论里有关熵的概念。


信息论中,某个信息 \large x_{i} 出现的不确定性的大小定义为 \large x_{i} 所携带的信息量,用 I(x_{i}) 表示。I(x_{i})与信息 \large x_{i} 出现的概率 P(x_{i}) 之间的关系为

I(x_{i}) = \log \frac{1}{P(x_{i})} = -\log P(x_{i})

例:掷两枚骰子,求点数和为7的信息量

点数和为7的情况为:(1,6) ; (6,1) ; (2,5) ; (5,2) ; (3,4) ; (4,3) 这6种。总的情况为 6*6 = 36 种。

那么该信息出现的概率为 P_{x=7}=\frac{6}{36}=\frac{1}{6}

包含的信息量为 I(7)=-\log P(7)=-\log \frac{1}{6}=\log 6

以上是求单一信息的信息量。但实际情况中,会要求我们求多个信息的信息量,也就是平均信息量。

扫描二维码关注公众号,回复: 14628844 查看本文章

假设一共有 n 种信息,每种信息出现的概率情况由以下列出:

x_{1} x_{2} x_{3} x_{4} …… x_{n}
P(x_{1}) P(x_{2}) P(x_{3}) P(x_{4}) …… P(x_{n})

并且有

\sum_{i=1}^{n}P(x_{i})=1

则 x_{1} , x_{2} , …… , x_{n} 所包含的信息量分别为 -\log P(x_{1}) , -\log P(x_{2}) , …… , -\log P(x_{n})。于是,平均信息量为

H(x)=-\sum_{i=1}^{n}P(x_{i})\log P(x_{i})

H与热力学中的熵的定义类似,故这又被称为信息熵

例:设有4个信息 A,B,C,D 分别以概率 1/8,1/8,1/4,1/2 传送,每一个信息的出现是相互独立的。则其平均信息量为:

H(x)=-(\frac{1}{8}\log( \frac{1}{8}) +\frac{1}{8}\log( \frac{1}{8})+\frac{1}{4}\log( \frac{1}{4}) +\frac{1}{2}\log( \frac{1}{2}))=1.75

连续信息的平均信息量可定义为

H(x)=-\int_{}^{}f(x)\log f(x)dx

这里的 f(x) 是信息的概率密度。

上述我们提到了信息论中的信息熵

H(x)=-\sum_{i=1}^{n}P(x_{i})\log P(x_{i})=\sum_{i=1}^{n}P(x_{i})\log \frac{1}{P(x_{i})}=H(P)

这是一个平均信息量,又可以解释为:用基于P的编码去编码来自P的样本,其最优编码平均所需要的比特个数。

接下来我们再提一个概念:交叉熵

H(P,Q)=-\sum_{i=1}^{n}P(x_{i})\log Q(x_{i})=\sum_{i=1}^{n}P(x_{i})\log \frac{1}{Q(x_{i})}

这就解释为:用基于P的编码去编码来自Q的样本,所需要的比特个数。

【注】P(x) 为各字符出现的频率,\log \frac{1}{P(x)} 为该字符相应的编码长度,\log \frac{1}{Q(x)} 为对应于Q的分布各字符编码长度。


KL散度

有了以上信息论中的相关知识后,我们再回过头来,看一下KL散度。

KL散度又可称为相对熵描述两个概率分布 P 和 Q 的差异或相似性,用 D_{KL}(P\left | \right |Q) 表示

D_{KL}(P\left | \right |Q)=H(P,Q)-H(P)

                      =\sum_{i}^{}P(x_{i})\log \frac{1}{Q(x_{i})}-\sum_{i}^{}P(x_{i})\log \frac{1}{P(x_{i})}

                      =\sum_{i}^{}P(x_{i})\log \frac{P(x_{i})}{Q(x_{i})}

很显然,散度越小,说明概率 Q 与概率 P 之间越接近,那么估计的概率分布与真实的概率分布也就越接近。

KL散度的性质:

  1. 非对称性:D_{KL}(P\left | \right |Q)\neq D_{KL}(Q\left | \right |P)
  2. D_{KL}(P\left | \right |Q)\geqslant 0,仅在 P=Q 时等于0

对于性质1的证明,请阅读参考资料第3个。

性质2是很重要的,可以用 Jensen 不等式证明。

 Jensen 不等式与凸函数是密切相关的。可以说 Jensen 不等式是凸函数的推广,而凸函数是 Jensen 不等式的特例。

凸函数

那么什么是凸函数?我们有如下定义:

设函数 f(x) 在区间 I 上连续,如果对 I 上任意两点 x_{1},x_{2} 恒有

tf(x_{1})+(1-t)f(x_{2})\geq f(tx_{1}+(1-t)x_{2})

则称函数 f(x) 在 I 上是(向下)凸的。这里的 t 是个参数,0\leqslant t\leqslant 1

令  t=\frac{1}{2} 有:

\frac{f(x_{1})+f(x_{2})}{2}\geq f(\frac{x_{1}+x_{2}}{2})

这便是同济大学的高等数学中的定义。

我想你现在肯定有一个非常大疑问,这是凸函数的定义?你在开玩笑吧?这明明是凹函数好的吧。别急,这就是凸函数的定义。这是国外对于凸函数的定义,外国人认为,只要函数任意两点的割线都位于从这两点截取下来的函数图像的上方,那么这个函数就是凸函数。如果你在学习同济大学的高等数学关于凹凸性这一节时足够细心,你会看到,对于上式的定义,课本里注明了(向上)凹的;没错,课本里说的是向上凹,而国外的则是向下凹的(即向上凸)。所以凹和凸不是绝对的。感兴趣的读者可以查阅相关知识。现在我们用国外的习惯来。

Jensen 不等式

用数学归纳法,将凸函数的概念泛化,就可得到 Jensen 不等式

对于任意点集 \left \{ x_{i} \right \},凸函数 f(x) 满足

\sum_{i}^{}\lambda _{i}f(x_{i})\geqslant f(\sum_{i}^{}\lambda _{i}x_{i})

这就是 Jensen 不等式。

不等式的证明,请阅读参考资料第4个。

将其应用到概率论中:离散变量 x_{i} 对应的概率分布为 \lambda _{i},则有

E[f(x)]\geqslant f(E[x])

E 为期望)

对于连续变量 x ,其对应的概率密度为 \lambda (x),则有

\int_{}^{}f(x)\lambda (x)dx\geq f(\int_{}^{}x\lambda (x)dx)

证明性质2

D_{KL}(P\left | \right |Q)=\sum_{i}^{}P(x_{i})\log \frac{P(x_{i})}{Q(x_{i})}=-\sum_{i}^{}P(x_{i})\log \frac{Q(x_{i})}{P(x_{i})}

由于 \log 函数是凹,需要改变 Jensen 不等式的符号方向

\sum_{i}^{}\lambda _{i}f(x_{i})\leqslant f(\sum_{i}^{}\lambda _{i}x_{i})

那么

\sum_{i}^{}P(x_{i})\log \frac{Q(x_{i})}{P(x_{i})}{\color{Red} \leqslant} \log(\sum_{i}^{}P(x_{i})\frac{Q(x_{i})}{P(x_{i})})=\log (\sum_{i}^{}Q(x_{i}))=\log 1={\color{Red} 0}

因此

D_{KL}(P\left | \right |Q)=-\sum_{i}^{}P(x_{i})\log \frac{Q(x_{i})}{P(x_{i})}\geqslant 0

————————————————

参考资料

KL散度超详细讲解_程旭员的博客-CSDN博客_kl散度计算KL散度定义KL(Kullback-Leibler divergence)散度多应用于概率论或信息论中,又可称相对熵(relative entropy)。它是用来描述两个概率分布P和Q的差异的一种方法。【记】KL具有非对称性,即D(P||Q) ≠ D(Q||P)。在信息论中,D(P||Q) 表示用概率分布Q来拟合真实分布P时,产生的信息损耗,其中P表示真实分布,Q表示P的拟合分布KL散度公...https://blog.csdn.net/weixin_37763870/article/details/103026505?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&utm_relevant_index=1机器学习:Kullback-Leibler Divergence (KL 散度)_Matrix_11的博客-CSDN博客_kld散度今天,我们介绍机器学习里非常常用的一个概念,KL 散度,这是一个用来衡量两个概率分布的相似性的一个度量指标。我们知道,现实世界里的任何观察都可以看成表示成信息和数据,一般来说,我们无法获取数据的总体,我们只能拿到数据的部分样本,根据数据的部分样本,我们会对数据的整体做一个近似的估计,而数据整体本身有一个真实的分布(我们可能永远无法知道),那么近似估计的概率分布和数据整体真实的概率分布的相似度,或者...https://blog.csdn.net/matrix_space/article/details/80550561机器学习中的散度 - 知乎广义的散度指的是一类运算,它将矢量空间上的一个矢量场对应到一个标量场上,通俗的讲,就是输入一组矢量,返回一个标量。 在机器学习中,很多时候我们需要衡量两个概率分布的差异,比如EM算法、GAN,VAE等,那我…https://zhuanlan.zhihu.com/p/45131536Jensen不等式初步理解及证明 - 知乎Jensen不等式(Jensen's inequality)是以丹麦数学家Johan Jensen命名的,它在概率论、机器学习、测度论、统计物理等领域都有相关应用。 在机器学习领域,我目前接触到的是用Jensen不等式用来证明KL散度大于等…https://zhuanlan.zhihu.com/p/39315786

更多阅读

变分推断(Variational Inference) - 彼岸花杀是条狗 - 博客园变分对于普通的函数f(x),我们可以认为f是一个关于x的一个实数算子,其作用是将实数x映射到实数f(x)。那么类比这种模式,假设存在函数算子F,它是关于f(x)的函数算子,可以将f(x)映射成实数F(https://www.cnblogs.com/yifdu25/p/8181185.html

猜你喜欢

转载自blog.csdn.net/Poyunji/article/details/123771660
今日推荐