1. 定义

KL 散度(Kullback-Leibler Divergence)是用来衡量两个概率分布之间“相似度”的一个数学工具。它也被称为相对熵,表示两个分布之间的信息损失或差异。

公式

对于两个概率分布 P(x)P(x)Q(x)Q(x) ,KL 散度定义为:

离散情形:

DKL(P  Q)=ΣxP(x)logP(x)Q(x)D_{KL}(P\ ||\ Q) = \Sigma_xP(x)log\frac{P(x)}{Q(x)}

连续情形:

DKL(P  Q)=P(x)logP(x)Q(x)dxD_{KL}(P\ ||\ Q) = \int P(x)log\frac{P(x)}{Q(x)}dx

  • P(x)P(x):表示真实分布或目标分布(我们想要的分布)。

  • Q(x)Q(x):表示模型分布或近似分布(我们生成的分布)。

KL 散度的意义:KL 散度衡量的是用 Q(x)Q(x) 去近似 P(x)P(x) 时的“信息损失”。KL 散度越小,说明 Q(x)Q(x) 越接近 P(x)P(x)

推导过程

KL 散度的定义来源于相对熵的概念,以下是推导的直观过程:

  1. 假设 P(x)P(x) 是目标分布,而我们用 Q(x)Q(x) 去近似它。
  2. 如果 Q(x)Q(x)P(x)P(x) 在某些 xx 上差异较大,则在这些 xx 上,logP(x)Q(x)\log \frac{P(x)}{Q(x)} 的值也较大,导致 KL 散度更大。
  3. KL 散度表示的是,在 P(x)P(x) 的每个可能值上,模型 Q(x)Q(x)P(x)P(x) 的比值贡献了多少“额外信息”。

性质

(1)非负性

DKL(P  Q)0D_{\text{KL}}(P\ ||\ Q) \geq 0

KL 散度始终是非负的,只有在 P(x)=Q(x)P(x) = Q(x) 时等于零。

(2)与交叉熵的关系

KL 散度可以分解为目标分布 P(x)P(x)Q(x)Q(x) 的交叉熵与熵之间的差值:

DKL(P  Q)=H(P,Q)H(P)D_{\text{KL}}(P\ ||\ Q) = H(P, Q) - H(P)

其中:

  • H(P,Q)H(P, Q):交叉熵,表示 QQPP的编码成本。
  • H(P)H(P):熵,表示 PP 的固有编码成本。

2. 直观理解

(1)零值特性

DKL(P  Q)=0当且仅当 P(x)=Q(x)xD_{\text{KL}}(P\ ||\ Q) = 0 \quad \text{当且仅当\ } P(x) = Q(x) \quad \forall x

  • 如果 PPQQ 完全相同,那么 KL 散度为零。

(2)非对称性

  • DKL(P  Q)DKL(Q  P)D_{\text{KL}}(P\ ||\ Q) \neq D_{\text{KL}}(Q\ ||\ P)
  • KL 散度是非对称的,换句话说,DKL(P  Q)D_{\text{KL}}(P\ ||\ Q)DKL(Q  P)D_{\text{KL}}(Q\ ||\ P) 是两个不同的值。
  • 因此,KL 散度通常强调的是用 Q(x)Q(x) 去近似 P(x)P(x) 的方向,而不是反过来。

(3)信息量差异

  • KL 散度衡量的是分布 P(x)P(x)Q(x)Q(x) 在每个 xx 上的信息量差异。
  • 如果在某些 xx 上,P(x)P(x)Q(x)Q(x)的值相差很大,则 KL 散度也会很大。

3. KL 散度的意义

KL 散度有许多实际应用,尤其在概率模型和机器学习中:

(1)在生成模型中的应用

在生成模型(如扩散模型、VAE)中,KL 散度用来衡量模型生成的分布 Q(x)Q(x) 和目标真实分布 P(x)P(x) 之间的差距。目标是最小化 KL 散度,让模型生成的分布尽可能接近真实分布。

例如:

目标=minθDKL(q(xt1  xt)  pθ(xt1  xt))\text{目标} = \min_\theta D_{\text{KL}}(q(x_{t-1}\ |\ x_t)\ ||\ p_\theta(x_{t-1}\ |\ x_t))

  • q(xt1xt)q(x_{t-1} | x_t):真实的后向分布。
  • pθ(xt1xt)p_\theta(x_{t-1} | x_t):由模型生成的近似分布。

通过最小化 KL 散度,可以优化模型参数 θ\theta,让生成分布与真实分布更相似。如果 KL 散度小,表示 Q(x)Q(x) 能很好地近似 P(x)P(x);KL 散度大,表示 Q(x)Q(x)P(x)P(x) 有较大的差异。

(2)信息论中的应用

KL 散度被用来衡量编码方案的效率。例如,如果我们用 Q(x)Q(x) 来对数据进行编码,而真实分布是 P(x)P(x),那么 KL 散度表示因为编码分布不匹配而浪费的额外比特数。

(3)在贝叶斯学习中的应用

KL 散度用来衡量后验分布与先验分布之间的差异。在贝叶斯推断中,我们可以通过 KL 散度选择最优的后验分布。