14、KL散度
创始人
2024-06-01 00:19:34
0

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

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

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

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

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

I(xi)=log1P(xi)=−logP(xi)(1)\begin{aligned} I(x_i) = & log\frac{1}{P(x_i)} = -logP(x_i) \tag{1} \\ \end{aligned} I(xi​)=​logP(xi​)1​=−logP(xi​)​(1)

例:掷两枚骰子,求点数和为7的信息量 点数和为7的情况为:(1,6) ; (6,1) ; (2,5) ; (5,2) ; (3,4) ; (4,3) 这6种。总的情况为 6*6 = 36 种。
那么该信息出现的概率为 Px=7=636=16P_{x=7}=\frac{6}{36}=\frac{1}{6}Px=7​=366​=61​
包含的信息量为 I(7)=−log⁡P(7)=−log⁡16=log⁡6I(7)=-\log P(7)=-\log\frac{1}{6}=\log 6I(7)=−logP(7)=−log61​=log6

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

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

X1X_1X1​X2X_2X2​X3X_3X3​X4X_4X4​...............XnX_nXn​
P(x1)P(x_1)P(x1​)P(x2)P(x_2)P(x2​)P(x3)P(x_3)P(x3​)P(x4)P(x_4)P(x4​)P(xn)P(x_n)P(xn​)

同时满足:
∑i=1nP(xi)=1(2)\begin{aligned} \sum^n_{i=1} P(x_i) = 1 \tag{2} \\ \end{aligned} i=1∑n​P(xi​)=1​(2)

则 x1,x2,.....,xnx_1,x_2,.....,x_nx1​,x2​,.....,xn​ 所包含的信息量分别是 KaTeX parse error: Undefined control sequence: \logP at position 2: -\̲l̲o̲g̲P̲(x_1),-\logP(x_…平均信息量为
KaTeX parse error: Undefined control sequence: \logP at position 49: …^n_{i=1} P(x_i)\̲l̲o̲g̲P̲(x_i) \tag{3} \…

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

与热力学中的熵的定义类似,故这又被称为信息熵。
H(x)=−(18log⁡(18)+18log⁡(18)+14log⁡(14)+12log⁡(12))=1.75\begin{aligned}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 \end{aligned}H(x)=−(81​log(81​)+81​log(81​)+41​log(41​)+21​log(21​))=1.75​

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

H(x)=−∫f(x)log⁡f(x)dx(3)\begin{aligned} H(x) = -\int f(x)\log f(x)dx \tag{3} \end{aligned} H(x)=−∫f(x)logf(x)dx​(3)

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

上述我们提到了信息论中的信息熵
H(x)=−∑i=1nP(xi)log⁡P(xi)=∑i=1nP(xi)log⁡1P(xi)=H(P)(4)\begin{aligned} H(x) = -\sum^n_{i=1}P(x_i) \log P(x_i) = \sum^n_{i=1} P(x_i) \log \frac{1}{P(x_i)} = H(P) \tag{4} \end{aligned} H(x)=−i=1∑n​P(xi​)logP(xi​)=i=1∑n​P(xi​)logP(xi​)1​=H(P)​(4)

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

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

H(P,Q)=−∑i=1nP(xi)log⁡Q(xi)=∑i=1nP(xi)log⁡1Q(xi)(6)\begin{aligned} H(P,Q) = -\sum^n_{i=1}P(x_i) \log Q(x_i) = \sum^n_{i=1} P(x_i) \log \frac{1}{Q(x_i)} \tag{6} \end{aligned} H(P,Q)=−i=1∑n​P(xi​)logQ(xi​)=i=1∑n​P(xi​)logQ(xi​)1​​(6)

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

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

KL 散度

让我们从一个问题开始我们的探索。假设我们是太空科学家,正在访问一个遥远的新行星,我们发现了一种咬人的蠕虫,我们想研究它。我们发现这些蠕虫有10颗牙齿,但由于它们不停地咀嚼,很多最后都掉了牙。在收集了许多样本后,我们得出了每条蠕虫牙齿数量的经验概率分布:
在这里插入图片描述
虽然这些数据很好,但我们有一个小问题。我们离地球很远,把数据寄回家很贵。我们要做的是将这些数据简化为一个只有一两个参数的简单模型。一种选择是将蠕虫牙齿的分布表示为均匀分布。我们知道有11个可能的值,我们可以指定1/11的均匀概率
在这里插入图片描述
显然,我们的数据不是均匀分布的,但是看起来也不像我们所知道的任何常见分布。我们可以尝试的另一种选择是使用二项分布对数据进行建模。在这种情况下,我们要做的就是估计二项分布的概率参数。我们知道如果我们有n次试验,概率是p,那么期望就是E[x]= np。在本例中n = 10,期望值是我们数据的平均值,计算得到5.7,因此我们对p的最佳估计为0.57。这将使我们得到一个二项分布,如下所示:

在这里插入图片描述
将我们的两个模型与原始数据进行比较,我们可以看出,两个都没有完美匹配原始分布,但是哪个更好?
在这里插入图片描述
现如今有许多错误度量标准,但是我们主要关注的是必须使发送的信息量最少。这两个模型都将我们的问题所需的参数量减少。最好的方法是计算分布哪个保留了我们原始数据源中最多的信息。这就是Kullback-Leibler散度的作用。

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

DKL(P∣∣Q)=H(P,Q)−H(P)=∑iP(xi)log⁡1Q(xi)−∑iP(xi)log⁡1P(xi)=∑iP(xi)log⁡P(xi)Q(xi)(7)\begin{aligned} D_{KL}(P || 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)} \tag{7} \\ \end{aligned} DKL​(P∣∣Q)​=H(P,Q)−H(P)=i∑​P(xi​)logQ(xi​)1​−i∑​P(xi​)logP(xi​)1​=i∑​P(xi​)logQ(xi​)P(xi​)​​(7)

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

KL散度的性质:

  1. 非对称性:DKL(P∣∣Q)≠DKL(Q∣∣P)D_{KL}(P || Q) \neq D_{KL}(Q || P)DKL​(P∣∣Q)=DKL​(Q∣∣P)
  2. DKL(P∣∣Q)≥0D_{KL}(P || Q) \geq 0DKL​(P∣∣Q)≥0,仅在 P=Q时等于0

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

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

其中:对于两个单一变量的高斯分布 p 和 q而言,KL散度为KL(p,q)=log⁡σ2σ1+σ12+(μ1−μ2)22σ22−12KL(p,q) = \log \frac{\sigma_2}{\sigma_1} + \frac{\sigma_1^2 + (\mu_1 - \mu_2)^2}{2\sigma_2^2} - \frac{1}{2}KL(p,q)=logσ1​σ2​​+2σ22​σ12​+(μ1​−μ2​)2​−21​

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...