机器学习之KL散度推导
预备知识
熵、交叉熵、条件熵
熵 (Entropy) 这一词最初来源于热力学。1948年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy)、信息熵 (information entropy)。
对于具体熵的定义和用法推荐大家自己再去理解,本篇文章着重分析和推导KL散度
这里我先给出这个熵的定义如下:
熵: Entropy(x) = H ( X ) = − ∑ x p ( x ) l o g 2 ( x ) \text{Entropy(x)}= H(X) = -\sum_xp(x)log_2(x) Entropy(x)=H(X)=−∑xp(x)log2(x)
条件熵:
H ( Y ∣ X ) = ∑ x p ( x ) H ( Y ∣ X = x ) = − ∑ x p ( x ) ∑ y p ( y ∣ x ) log 2 p ( y ∣ x ) = − ∑ x ∑ y p ( x , y ) log 2 p ( y ∣ x ) = − ∑ x , y p ( x , y ) log 2 p ( y ∣ x ) \begin{align*} H(\mathbf{Y}| \mathbf{X}) &= \sum_{x} p(x) H(\mathbf{Y} | \mathbf{X} = x) \\ &= - \sum_{x} p(x) \sum_{y} p(y|x) \log_2 p(y|x) \\ &= - \sum_{x} \sum_{y} p(x, y) \log_2 p(y|x) \\ &= - \sum_{x,y} p(x, y) \log_2 p(y|x) \end{align*} H(Y∣X)=x∑p(x)H(Y∣X=x)=−x∑p(x)y∑p(y∣x)log2p(y∣x)=−x∑y∑p(x,y)log2p(y∣x)=−x,y∑p(x,y)log2p(y∣x)
交叉熵: Cross entropy = H ( P , Q ) = − ∑ i P ( x i ) l o g 2 Q ( x i ) \text{Cross entropy} = H(P,Q) = -\sum_iP(x_i)log_2Q(x_i) Cross entropy=H(P,Q)=−∑iP(xi)log2Q(xi)
他们的用处是不同的,对于条件熵来说,主要是用在决策数的信息增益中,用来判断某个信息对样本集合的划分效果的影响力(好坏),当然对于连续变量,条件熵的公式不变,但变量的取值会变,如下:
而交叉熵则更多的用在KL散度上(据我所知😆),本次就会用到。
KL散度推导
KL散度的理论意义在于度量两个概率分布之间的差异程度,当KL散度越大的时候,说明两者的差异程度越大;而当KL散度小的时候,则说明两者的差异程度小;如果两者相同的话,则该KL散度应该为0。
公式定义为:
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
证明KL散度大于等于0:
将KL散度写成离散的形式为: K L ( P ∣ ∣ Q ) = ∑ p ( x ) l o g p ( x ) q ( x ) = − ∑ p ( x ) l o g q ( x ) p ( x ) KL(P||Q) = \sum p(x)log\frac{p(x)}{q(x)} = -\sum p(x)log\frac{q(x)}{p(x)} KL(P∣∣Q)=∑p(x)logq(x)p(x)=−∑p(x)logp(x)q(x)
因为: l n ( x ) < x − 1 ln(x)<x-1 ln(x)<x−1
所以:令 q ( x ) p ( x ) = x \frac{q(x)}{p(x)} = x p(x)q(x)=x
∑ p ( x ) l o g q ( x ) p ( x ) < ∑ p ( x ) ( q ( x ) p ( x ) − 1 ) ∑ p ( x ) l o g q ( x ) p ( x ) < ∑ ( q ( x ) − p ( x ) ) ∑ p ( x ) l o g q ( x ) p ( x ) < ∑ ( q ( x ) − ∑ p ( x ) ∑ p ( x ) l o g q ( x ) p ( x ) < 0 ( 概率的和为1 ) \begin{align*} \sum p(x)log\frac{q(x)}{p(x)} &< \sum p(x) \left(\frac{q(x)}{p(x)} - 1\right)\\ \sum p(x)log\frac{q(x)}{p(x)} &<\sum \left(q(x) - p(x)\right)\\ \sum p(x)log\frac{q(x)}{p(x)} &<\sum (q(x) - \sum p(x)\\ \sum p(x)log\frac{q(x)}{p(x)} &<0(\text{概率的和为1})\\ \end{align*} ∑p(x)logp(x)q(x)∑p(x)logp(x)q(x)∑p(x)logp(x)q(x)∑p(x)logp(x)q(x)<∑p(x)(p(x)q(x)−1)<∑(q(x)−p(x))<∑(q(x)−∑p(x)<0(概率的和为1)
所以:
K L ( P ∣ ∣ Q ) = ∑ p ( x ) l o g p ( x ) q ( x ) = − ∑ p ( x ) l o g q ( x ) p ( x ) > 0 KL(P||Q) = \sum p(x)log\frac{p(x)}{q(x)} = -\sum p(x)log\frac{q(x)}{p(x)} > 0 KL(P∣∣Q)=∑p(x)logq(x)p(x)=−∑p(x)logp(x)q(x)>0
将 l o g p ( x ) q ( x ) log\frac{p(x)}{q(x)} logq(x)p(x)进行分解,可以转换为:
K L ( P ∣ ∣ Q ) = ∑ p ( x ) l o g p ( x ) q ( x ) = ∑ p ( x ) l o g p ( x ) − ∑ p ( x ) l o g q ( x ) = H ( P , Q ) − H ( P ) \begin{align*} KL(P||Q) &= \sum p(x)log\frac{p(x)}{q(x)}\\ &=\sum p(x)log p(x) - \sum p(x)log q(x)\\ &=H(P,Q) - H(P) \end{align*} KL(P∣∣Q)=∑p(x)logq(x)p(x)=∑p(x)logp(x)−∑p(x)logq(x)=H(P,Q)−H(P)
问题来了, K L ( P ∣ ∣ Q ) ≥ 0 KL(P||Q)\geq 0 KL(P∣∣Q)≥0,那 K L ( Q ∣ ∣ P ) KL(Q||P) KL(Q∣∣P)是否大于等于0?
答案是大于等于0,这是因为KL散度只是衡量数据之间的差异
例如:
-
K L ( P ∣ ∣ Q ) KL(P||Q) KL(P∣∣Q)衡量 Q 相对于 P 的差异
-
K L ( Q ∣ ∣ P ) KL(Q||P) KL(Q∣∣P)衡量 P 相对于 Q 的差异
设 $ P = {0.9, 0.1} , , , Q = {0.8, 0.2} $
计算可得:
KL ( P ∣ ∣ Q ) = 0.9 ln 0.9 0.8 + 0.1 ln 0.1 0.2 ≈ 0.011 + 0.069 = 0.08 \text{KL}(P||Q) = 0.9 \ln \frac{0.9}{0.8} + 0.1 \ln \frac{0.1}{0.2} \approx 0.011 + 0.069 = 0.08 KL(P∣∣Q)=0.9ln0.80.9+0.1ln0.20.1≈0.011+0.069=0.08
KL ( Q ∣ ∣ P ) = 0.8 ln 0.8 0.9 + 0.2 ln 0.2 0.1 ≈ − 0.094 + 0.139 = 0.045 \text{KL}(Q||P) = 0.8 \ln \frac{0.8}{0.9} + 0.2 \ln \frac{0.2}{0.1} \approx -0.094 + 0.139 = 0.045 KL(Q∣∣P)=0.8ln0.90.8+0.2ln0.10.2≈−0.094+0.139=0.045
可见二者结果不同,体现 KL 散度的不对称特性。
总结
KL散度是非负的,也是不对称的。
在机器学习中KL散度常用于:
- 生成模型(如 VAE)中衡量生成分布与真实分布的差异;
- 优化问题中引导分布逼近目标分布(如强化学习的策略更新)。