为了解释KL散度,我们首先来讨论信息熵
信息熵
1948年,香农将统计物理中熵的概念,引申到信道通信的过程中,从而开创了“信息论”这门学科。香农定义的“熵”又被称为“香农熵”或“信息熵”即:
S
(
p
1
,
p
2
,
…
,
p
n
)
=
K
∑
i
=
1
n
p
i
l
o
g
i
p
i
S(p_1,p_2,\dots,p_n) = K\sum_{i=1}^{n}p_i{log}_ip_i
S(p1,p2,…,pn)=Ki=1∑npilogipi
其中,
i
i
i标记概率空间中所有可能的样本,
p
i
p_i
pi表示该样本的出现几率,K是和单位选取相关的任意常数。
-
信息熵具有以下良好的性质:
- 连续性:若样本的概率值有微小变化,由此引起的熵变化也是微小的。
- 对称性:样本重新排序后,信息熵不变。
- 极值性:在所有样本等几率出现的情况下,熵达到最大值,即
S ( p 1 , p 2 , … , p n ) ≤ S ( 1 n , … , 1 n ) = l o g 2 ( n ) S(p_1,p_2,\dots,p_n)\leq S(\frac{1}{n},\dots,\frac{1}{n})=log_2(n) S(p1,p2,…,pn)≤S(n1,…,n1)=log2(n)
-
可加性:如果一个系统被划分为一批子系统,如果子系统之间的相互作用是已知的,则可以通过子系统的熵来计算一个系统的熵。
整体熵为,每个子系统在整体中的熵+每个子系统各自内部的熵*子系统的权重(子系统中的样本在整体样本的总概率)
KL散度
KL散度(Kullback-Leibler divergence)也称为相对熵。
从相对熵这个词来理解,我们很容易的想到KL散度适合熵有关系的,x_1,x_2,x_3当然是香农熵,而不是物理学意义的熵。我们现在假设一个采样
X
=
{
x
1
,
x
2
,
x
3
}
X=\{x_1,x_2,x_3\}
X={x1,x2,x3}他的概率分布为
P
(
x
)
=
{
p
1
,
p
2
,
p
3
}
P(x)=\{p_1,p_2,p_3\}
P(x)={p1,p2,p3}现在我们可以很轻易的根据前面的公式,得到这个分布的信息熵为:
S
(
p
1
,
p
2
,
p
3
)
=
p
1
l
o
g
2
p
1
+
p
2
l
o
g
2
p
2
+
p
3
l
o
g
2
p
3
S(p_1,p_2,p_3)=p_1{log}_2p_1+p_2{log}_2p_2+p_3{log}_2p_3
S(p1,p2,p3)=p1log2p1+p2log2p2+p3log2p3
如果我们假设
Y
=
{
l
o
g
2
p
1
,
l
o
g
2
p
2
,
l
o
g
2
p
3
}
且
P
(
y
)
=
P
(
x
)
Y=\{{log}_2p_1,{log}_2p_2,{log}_2p_3\}且P(y)=P(x)
Y={log2p1,log2p2,log2p3}且P(y)=P(x)那么上面分布X的信息熵就可以表示为分布Y的期望:
S
(
p
1
,
p
2
,
p
3
)
=
E
Y
=
E
x
∼
P
(
x
)
l
o
g
P
(
x
)
S(p_1,p_2,p_3)=\mathbb{E}Y=\mathbb{E}_{x\sim P(x)}{log}P(x)
S(p1,p2,p3)=EY=Ex∼P(x)logP(x)
因此分布
P
(
x
)
P(x)
P(x)的信息熵,就可以理解为
l
o
g
P
(
x
)
logP(x)
logP(x)的期望。而KL散度,也就是相对熵,既然有“相对”这个词来形容,那么肯定就不只会是一个分布的信息熵,而会是两个分布在一起的比较。因此,我们假设现在对于同样的采样
X
=
{
x
1
,
x
2
,
x
3
}
X=\{x_1,x_2,x_3\}
X={x1,x2,x3}还有另外一个概率分布为
Q
(
x
)
=
{
q
1
,
q
2
,
q
3
}
Q(x)=\{q_1,q_2,q_3\}
Q(x)={q1,q2,q3}。我们应该怎么将这两个概率分布联系在一起呢?
这就用到了另一个概念,叫做交叉熵。对于
P
(
x
)
和
Q
(
x
)
P(x)和Q(x)
P(x)和Q(x),其交叉熵的定义为:
H
(
P
,
Q
)
=
−
∑
x
P
(
x
)
l
o
g
Q
(
x
)
=
−
E
x
∼
P
(
x
)
l
o
g
Q
(
x
)
H(P,Q)=-\sum_{x}P(x)logQ(x)=-\mathbb{E}_{x\sim P(x)}logQ(x)
H(P,Q)=−x∑P(x)logQ(x)=−Ex∼P(x)logQ(x)
可以把
P
(
x
)
和
Q
(
x
)
P(x)和Q(x)
P(x)和Q(x)的交叉熵理解为在
P
(
x
)
P(x)
P(x)的概率下,
l
o
g
Q
(
x
)
logQ(x)
logQ(x)的期望的相反数。
进一步的我们就可以得到 P ( x ) 和 Q ( x ) P(x)和Q(x) P(x)和Q(x)的KL散度,也就是相对熵。就是 P ( x ) P(x) P(x)自己的信息熵和其与 Q ( x ) Q(x) Q(x)的交叉熵的和。
这里注意 P ( x ) 和 Q ( x ) P(x)和Q(x) P(x)和Q(x)的顺序是不能颠倒的,就是 P ( x ) 相对 Q ( x ) 的相对熵为 D K L ( P ∣ ∣ Q ) P(x)相对Q(x)的相对熵为D_{KL}(P||Q) P(x)相对Q(x)的相对熵为DKL(P∣∣Q)
D K L ( P ∣ ∣ Q ) = E x ∼ P ( x ) l o g P ( x ) − E x ∼ P ( x ) l o g Q ( x ) = E x ∼ P ( x ) l o g P ( x ) Q ( x ) D_{KL}(P||Q)=\mathbb{E}_{x\sim P(x)}{log}P(x)-\mathbb{E}_{x\sim P(x)}logQ(x)\\ =\mathbb{E}_{x\sim P(x)}log\frac{P(x)}{Q(x)} DKL(P∣∣Q)=Ex∼P(x)logP(x)−Ex∼P(x)logQ(x)=Ex∼P(x)logQ(x)P(x)
通俗的可以将KL散度理解为,在
P
(
x
)
P(x)
P(x)的概率下,
l
o
g
P
(
x
)
logP(x)
logP(x)与
l
o
g
Q
(
x
)
logQ(x)
logQ(x)的差的期望。当然如果P,Q为连续变量的时候,KL散度定义为:
D
K
L
(
P
∣
∣
Q
)
=
∫
x
P
(
x
)
∗
l
o
g
P
(
x
)
Q
(
x
)
d
x
D_{KL}(P||Q)=\int_{x}P(x)*log\frac{P(x)}{Q(x)}dx
DKL(P∣∣Q)=∫xP(x)∗logQ(x)P(x)dx
补充
在进行机器学习训练的过程中,想要拟合的分布一般为 P ( x ) P(x) P(x)而我们网络进行训练得到的分布为 Q ( x ) Q(x) Q(x)。为了衡量拟合的效果,通常就会将KL散度来作为目标函数的一部分或原始形式。而我们可以很明显的注意到,因为 P ( x ) P(x) P(x)是固定的,因此, E x ∼ P ( x ) l o g P ( x ) \mathbb{E}_{x\sim P(x)}{log}P(x) Ex∼P(x)logP(x)就是固定的。因此想要计算KL散度的变化,只需要计算交叉熵的变化就可以。