前言
在阅读相关文献时,看到了关于交叉熵和相对熵的概念,交叉熵比较熟悉了,一般用在多分类损失的衡量,但是相对熵见得比较少,故查阅了一些资料,以供自己日后复习查阅。
正文
在概率论或信息论中,KL散度( Kullback–Leibler divergence),又称相对熵(relative entropy),是描述两个概率分布P和Q差异的一种方法。
KL散度可以看作是分布之间的广义距离。先看一下什么是距离:
集合 X X X 上的度量(metric,或称为距离函数,或简记为距离)是一个函数 d : X × X → R + d: X\times X \rightarrow \mathbb{R}^{+} d:X×X→R+ 。对于集合 X X X 中的任意 x , y , z x, y, z x,y,z ,度量/距离函数 d ( ⋅ , ⋅ ) d(\cdot, \cdot) d(⋅,⋅) 需要满足以下性质:
- 非负性。 d ( x , y ) ≥ 0 d(x, y) \ge 0 d(x,y)≥0 (non-negative) ;
- 不可区分之同一性。 d ( x , y ) = 0 d(x, y)=0 d(x,y)=0 当且仅当 x = y x=y x=y (identity of indiscernibles);
- 对称性。 d ( x , y ) = d ( y , x ) d(x, y)=d(y,x) d(x,y)=d(y,x) (symmetry);
- 三角不等性。 d ( x , z ) ≤ d ( x , y ) + d ( y , z ) d(x, z) \le d(x, y) + d(y, z) d(x,z)≤d(x,y)+d(y,z) (triangle inequality)。
注意到,严格的度量均需要满足上面的四个条件。但是许多统计学上的距离并不是度量,一般不满足上面的所有条件,但又反映了“相似度”的概念,所以一般可以认为是广义的距离。一般将满足性质1和2的函数称为散度(divergence)。
另外,之所以KL散度与编码长度相关,是因为KL散度可以写作下面的这种形式:
D
K
L
(
p
∣
∣
q
)
=
H
(
p
,
q
)
−
H
(
q
)
D_{KL}(p||q) = H(p, q) - H(q)
DKL(p∣∣q)=H(p,q)−H(q)
其中,前一项
H
(
p
,
q
)
H(p, q)
H(p,q) 为交叉熵,表示使用概率分布
q
q
q 的最优编码方式,对概率分布为
p
p
p 的随机变量进行编码,需要的平均编码长度;后一项
H
(
q
)
H(q)
H(q) 为熵,表示对概率分布为
q
q
q 的随机变量进行最优编码需要的平均编码长度。
从上式可以看出:KL散度不具有交换性,所以不能理解为“距离”的概念,衡量的并不是两个分布在空间中的远近,更准确的理解还是衡量一个分布相比另一个分布的信息损失(infomation lost)。
离散概率分布的KL散度计算公式:
K
L
(
p
∣
∣
q
)
=
∑
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
KL(p||q) = \sum p(x) log \frac{p(x)}{q(x)}
KL(p∣∣q)=∑p(x)logq(x)p(x)
连续概率分布的KL散度计算公式:
K
L
(
p
∣
∣
q
)
=
∫
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
d
x
KL(p||q) = \int p(x) log \frac{p(x)}{q(x)} dx
KL(p∣∣q)=∫p(x)logq(x)p(x)dx
在香农信息论中,用基于
p
p
p 的编码方法去编码来自
p
p
p 的样本,其最优编码平均所需要的比特个数(即这个字符集的熵)为:
H
(
x
)
=
∑
x
∈
X
p
(
x
)
⏟
p中各字符出现的频率
⋅
l
o
g
1
p
(
x
)
⏟
p中该字符对应的编码长度
H(x) = \sum_{x \in X} \underbrace{p(x)}_{\text{p中各字符出现的频率}} \cdot \underbrace{log \frac{1}{p(x)}}_{\text{p中该字符对应的编码长度}}
H(x)=x∈X∑p中各字符出现的频率
p(x)⋅p中该字符对应的编码长度
logp(x)1
用基于
p
p
p 的编码方法去编码来自
q
q
q 的样本,则所需要的比特个数变为:
H
′
(
x
)
=
H
(
p
,
q
)
=
∑
x
∈
X
p
(
x
)
⏟
p中各字符出现的频率
⋅
l
o
g
1
q
(
x
)
⏟
此时各字符来自于q,各字符编码长度对应于q的分布,与p无关
H'(x) = H(p, q) = \sum_{x \in X} \underbrace{p(x)}_{\text{p中各字符出现的频率}} \cdot \underbrace{log \frac{1}{q(x)}}_{\text{此时各字符来自于q,各字符编码长度对应于q的分布,与p无关}}
H′(x)=H(p,q)=x∈X∑p中各字符出现的频率
p(x)⋅此时各字符来自于q,各字符编码长度对应于q的分布,与p无关
logq(x)1
于是,我们即可得出
p
p
p 与
q
q
q 的KL散度:
D
K
L
(
p
∣
∣
q
)
=
H
(
p
,
q
)
−
H
(
q
)
=
H
′
(
x
)
−
H
(
x
)
=
∑
x
∈
X
p
(
x
)
⋅
l
o
g
1
q
(
x
)
−
∑
x
∈
X
p
(
x
)
⋅
l
o
g
1
p
(
x
)
D_{KL}(p||q) = H(p, q) - H(q) = H'(x) - H(x) = \sum_{x \in X} p(x) \cdot log \frac{1}{q(x)} - \sum_{x \in X} p(x) \cdot log \frac{1}{p(x)}
DKL(p∣∣q)=H(p,q)−H(q)=H′(x)−H(x)=x∈X∑p(x)⋅logq(x)1−x∈X∑p(x)⋅logp(x)1
=
∑
x
∈
X
p
(
x
)
⋅
l
o
g
p
(
x
)
q
(
x
)
=\sum_{x \in X} p(x) \cdot log \frac{p(x)}{q(x)}
=x∈X∑p(x)⋅logq(x)p(x)
举例
举个例子,假如一个字符发射器,随机发出0和1两种字符,真实发出概率分布为A,但实际不知道A的具体分布。现在通过观察,得到概率分布B与C。各个分布的具体情况如下:
A
(
0
)
=
1
2
A
(
1
)
=
1
2
B
(
0
)
=
1
4
B
(
1
)
=
3
4
C
(
0
)
=
1
8
C
(
1
)
=
7
8
A(0) = \frac{1}{2} \quad A(1) = \frac{1}{2} \\ B(0) = \frac{1}{4} \quad B(1) = \frac{3}{4} \\ C(0) = \frac{1}{8} \quad C(1) = \frac{7}{8}
A(0)=21A(1)=21B(0)=41B(1)=43C(0)=81C(1)=87
那么,我们可以计算出得到如下:
D
(
A
∣
∣
B
)
=
1
2
l
o
g
(
1
/
2
1
/
4
)
+
1
2
l
o
g
(
1
/
2
3
/
4
)
=
1
2
l
o
g
(
4
3
)
D(A||B) = \frac{1}{2} log (\frac{1/2}{1/4}) + \frac{1}{2} log (\frac{1/2}{3/4}) = \frac{1}{2} log (\frac{4}{3})
D(A∣∣B)=21log(1/41/2)+21log(3/41/2)=21log(34)
D ( A ∣ ∣ C ) = 1 2 l o g ( 1 / 2 1 / 8 ) + 1 2 l o g ( 1 / 2 7 / 8 ) = 1 2 l o g ( 16 7 ) D(A||C) = \frac{1}{2} log (\frac{1/2}{1/8}) + \frac{1}{2} log (\frac{1/2}{7/8}) = \frac{1}{2} log (\frac{16}{7}) D(A∣∣C)=21log(1/81/2)+21log(7/81/2)=21log(716)
也即,使用这两种方式来进行编码,其结果都使得平均编码长度增加了。我们也可以看出,按照概率分布 B B B 进行编码,要比按照 C C C 进行编码,平均每个符号增加的比特数目少。从分布上也可以看出,实际上 B B B 要比 C C C 更接近实际分布(因为其与 A A A 分布的KL散度更近)。KL散度越小,说明两者分布更接近;当且仅当两者分布相同时,KL散度等于 0 0 0 .
应用场景
变分自动编码器和变分贝叶斯方法。
换一种思维方式:KL 散度最小化可被看作是似然比最大化。
机器学习领域中的生成模型往往涉及到生成尽可能反映真实情况的分布模型。比如,生成对抗网络(GAN)在图片上的应用往往执行的是类似基于黑白图片生成看起来尽量真实的彩色图片这样的任务。在这类似的应用中,输入往往是图像或像素。网络会学习这些像素之间的依赖关系(比如临近像素通常有相似的颜色),然后使用它来创建看起来尽量真实的图像。因此,生成器的目标就是最小化所学到的像素分布于真实图像像素分布之间的散度。