KL散度
定义及说明
KL散度(KL divergence)是度量两个分布之间差异的函数。测量两个概率分布之间的距离。如果两个分布越接近,那么KL散度越小,如果越远,KL散度就会越大。
考虑一个未知的分布
p
(
x
)
p(x)
p(x),假定用一个 近似的分布
q
(
x
)
q(x)
q(x) 对其进行建模。
如果我们使用 q(x) 来建立一个编码体系,用来把 x 的值传给接收者,那么由于我们使用了q(x)而不是真实分布p(x),平均编码长度比用真实分布p(x)进行编码增加的信息量(单位是 nat )为:
K
L
(
p
∣
∣
q
)
=
−
∫
p
(
x
)
ln
(
q
(
x
)
)
d
x
−
(
−
∫
p
(
x
)
ln
(
p
(
x
)
)
d
x
)
=
−
∫
p
(
x
)
ln
(
q
(
x
)
p
(
x
)
)
d
x
KL(p\vert\vert q)\;=\;-\int p(x)\ln\left(q(x)\right)dx-\;(-\int p(x)\ln\left(p(x)\right)dx)\;\\=\;-\int p(x)\ln\left(\frac{q(x)}{p(x)}\right)dx
KL(p∣∣q)=−∫p(x)ln(q(x))dx−(−∫p(x)ln(p(x))dx)=−∫p(x)ln(p(x)q(x))dx
这就被称为 分布
p
(
x
)
p(x)
p(x)和分布q(x)之间的相对熵(relative entropy) 或者 KL散度(Kullback-Leibler divergence)。
也就是说,当我们知道真实的概率分布之后,可以给出最有效的编码。如果我们使用了不同于真实分布的概率分布,那么我们一定会损失编码效率,并且在传输时增加的平均额外信息量至少等于两个分布之间的KL散度。
公式
K L ( p ∥ q ) = ∑ p ( x ) ln ( p ( x ) q ( x ) ) 离 散 概 率 分 布 的 公 式 KL\left(p\parallel q\right) = \sum p\left(x\right)\ln\left(\frac{p\left(x\right)}{q\left(x\right)}\right) \;\;\;\;离散概率分布的公式 KL(p∥q)=∑p(x)ln(q(x)p(x))离散概率分布的公式
K L ( p ∥ q ) = ∫ p ( x ) ln ( p ( x ) q ( x ) ) d x 连 续 概 率 分 布 的 公 式 KL\left(p\parallel q\right)=\int p\left(x\right)\ln\left(\frac{p\left(x\right)}{q\left(x\right)}\right)dx\;\;\;\;连续概率分布的公式 KL(p∥q)=∫p(x)ln(q(x)p(x))dx连续概率分布的公式
性质
- 不对称性
尽管KL散度从直观上是个度量或距离函数,但它并不是一个真正的度量或者距离,因为它不具有对称性,即
K L ( p ∥ q ) ≠ K L ( q ∥ p ) KL\left(p\parallel q\right)\;\;\neq KL\left(q\parallel p\right) KL(p∥q)=KL(q∥p) - 非负性
证明:KL散度满足 K L ( p ∥ q ) ⩾ 0 KL\left(p\parallel q\right)\geqslant0 KL(p∥q)⩾0,当且仅当 p ( x ) = q ( x ) p\left(x\right) = q\left(x\right) p(x)=q(x)时等号成立
设实直线上的函数f(x) 是一个非负函数,且:
∫ − ∞ + ∞ f ( x ) d x = 1 \int_{-\infty}^{+\infty}f(x)dx\;=\;1 ∫−∞+∞f(x)dx=1
如果 g 是任意实可测函数且函数 [公式] 是凸的,那么有Jensen不等式如下:
φ ( ∫ − ∞ + ∞ g ( x ) f ( x ) d x ) ≤ ∫ − ∞ + ∞ φ ( g ( x ) ) f ( x ) d x \varphi(\int_{-\infty}^{+\infty}g(x)f(x)dx)\leq\int_{-\infty}^{+\infty}\varphi(g(x))f(x)dx φ(∫−∞+∞g(x)f(x)dx)≤∫−∞+∞φ(g(x))f(x)dx
注意到, − ln x -\ln x −lnx 是严格的凸函数 且 ∫ − ∞ + ∞ q ( x ) d x = 1 \int_{-\infty}^{+\infty}q(x)dx\;=\;1 ∫−∞+∞q(x)dx=1。
令 φ ( x ) = − ln x \varphi(x) =-\ln x φ(x)=−lnx, g ( x ) = q ( x ) p ( x ) g(x)=\frac{q(x)}{p(x)} g(x)=p(x)q(x), f ( x ) = q ( x ) f(x) = q(x) f(x)=q(x):
把 Jensen 不等式应用于 KL散度,直接可得
K L ( p ∥ q ) = ∫ p ( x ) − ln ( q ( x ) p ( x ) ) d x ≥ − ln ( ∫ q ( x ) d x ) = 0 KL\left(p\parallel q\right)=\int p\left(x\right)-\ln\left(\frac{q\left(x\right)}{p\left(x\right)}\right)dx\geq-\ln\left(\int q\left(x\right)dx\right)=0 KL(p∥q)=∫p(x)−ln(p(x)q(x))dx≥−ln(∫q(x)dx)=0
只有 q ( x ) = p ( x ) q(x) = p(x) q(x)=p(x) 对于所有 x x x 都成立时,等号才成立。
因此我们可以把 KL 散度看做两个分布 p(x) 和 q(x)之间不相似程度的度量。
最小化 Kullback-Leibler 散度等价于最大化似然函数
假设我们想要对未知分布 p ( x ) p(x) p(x) 建模,可以试着使用一些参数分布 q ( x ∣ θ ) q(x\vert\theta) q(x∣θ)来近似 p ( x ) p(x) p(x)。 q ( x ∣ θ ) q(x\vert\theta) q(x∣θ)由可调节的参数 θ \theta θ控制(例如一个多元高斯分布)。
通过最小化
p
(
x
)
p(x)
p(x) 和
q
(
x
∣
θ
)
q(x\vert\theta)
q(x∣θ) 之间关于
θ
\theta
θ 的 KL散度可以确定
θ
\theta
θ。
但是因为不知道 p(x),所以不能直接这么做。
如果已经观察到了服从分布
p
(
x
)
p(x)
p(x) 的有限数量的训练点集
{
x
n
}
\{x_n\}
{xn},其中
n
=
1
,
.
.
.
,
N
n=1,...,N
n=1,...,N ,那么关于
p
(
x
)
p(x)
p(x) 的期望就可以通过这些点的有限加和,使用公式
E
(
f
)
≃
1
N
∑
n
=
1
N
f
(
x
n
)
E(f)\simeq\frac1N\sum_{n=1}^Nf(x_n)
E(f)≃N1∑n=1Nf(xn)来近似,即:
K
L
(
p
∥
q
)
≃
1
N
∑
n
=
1
N
[
−
ln
(
q
(
x
n
∣
θ
)
)
+
ln
(
p
(
x
n
)
)
]
KL\left(p\parallel q\right)\simeq\frac1N\sum_{n=1}^N\lbrack-\ln\left(q(x_n\vert\theta)\right)\;+\;\ln\left(p(x_n)\right)\rbrack
KL(p∥q)≃N1n=1∑N[−ln(q(xn∣θ))+ln(p(xn))]
公式右侧的第二项与
θ
\theta
θ 无关,第一项是使用训练集估计的分布
q
(
x
∣
θ
)
q(x\vert\theta)
q(x∣θ)下的
θ
\theta
θ 的负对数似然函数。
因此最小化KL散度等价于最大化似然函数。
KL散度的测度论定义
如果 μ \mu μ 和 ν \nu ν 是 集合 X X X上的测度,且 μ ≪ ν \mu\ll\nu\; μ≪ν
由Radon–Nikodym theorem, μ \mu μ 和 ν \nu ν 的KL散度定义如下:
D K L ( μ ∣ ∣ ν ) = ∫ X ln ( d μ d ν ) d μ D_{KL}(\mu\vert\vert\nu)=\int_X\ln\left(\frac{d\mu}{d\nu}\right)d\mu DKL(μ∣∣ν)=∫Xln(dνdμ)dμ
KL散度、JS散度和交叉熵
KL散度在上面进行讨论了
JS散度(Jensen-Shannon divergence)
JS散度也称JS距离,是KL散度的一种变形。
J
S
(
P
∣
∣
Q
)
=
1
2
K
L
(
P
(
x
)
∣
∣
P
(
x
)
+
Q
(
x
)
2
)
+
1
2
K
L
(
Q
(
x
)
∣
∣
P
(
x
)
+
Q
(
x
)
2
)
JS(P\vert\vert Q)=\frac12KL(P(x)\vert\vert\frac{P(x)+Q(x)}2)+\frac12KL(Q(x)\vert\vert\frac{P(x)+Q(x)}2)
JS(P∣∣Q)=21KL(P(x)∣∣2P(x)+Q(x))+21KL(Q(x)∣∣2P(x)+Q(x))
一般地,JS散度是对称的,其取值是 0 到 1 之间。如果两个分配 P,Q 离得很远,完全没有重叠的时候,那么KL散度值是没有意义的,而JS散度值是一个常数。这在学习算法中是比较致命的,这就意味这这一点的梯度为 0。梯度消失了。
但是不同于KL主要又两方面:
(1)值域范围
JS散度的值域范围是[0,1],相同则是0,相反为1。相较于KL,对相似度的判别更确切了。
(2)对称性
即
J
S
(
P
∣
∣
Q
)
=
J
S
(
Q
∣
∣
P
)
JS(P||Q)=JS(Q||P)
JS(P∣∣Q)=JS(Q∣∣P),从数学表达式中就可以看出。
JS散度解决了KL不对称的问题,JS是对称的。
很明显,如果P1,P2完全相同,那么JS =0, 如果完全不相同,那么就是1.
交叉熵(Cross Entropy)
在神经网络中,交叉熵可以作为损失函数,因为它可以衡量
P
P
P和
Q
Q
Q的相似性。
H
(
P
,
Q
)
=
∑
P
(
x
)
ln
(
1
Q
(
x
)
)
H(P,Q)={\textstyle\sum_{}}P(x)\ln\left(\frac1{Q(x)}\right)
H(P,Q)=∑P(x)ln(Q(x)1)
交叉熵和相对熵的关系:
D
(
P
∣
∣
Q
)
=
H
(
P
,
Q
)
−
H
(
P
)
D(P\vert\vert Q)=H(P,Q)-H(P)
D(P∣∣Q)=H(P,Q)−H(P)
以上都是基于离散分布的概率,如果是连续的数据,则需要对数据进行Probability Density Estimate来确定数据的概率分布,就不是求和而是通过求积分的形式进行计算了。