零、写在前面
随手记……
一、KL散度
KL散度(Kullback-Leibler Divergence),有时也叫做相对熵(Relative Entropy),是概率论、信息论和机器学习中极为重要的一个概念。
简单来说,KL散度是用来衡量两个概率分布之间“差异”或“距离”的指标。
当然,严格意义上不能用“距离”来形容,因为在KL散度本身不对称。
1.1 什么是KL散度
假设我们有一个真实的概率分布 $P$(比如某地明天的天气概率),而我们利用某个模型预测得到了一个近似的概率分布 $Q$。 KL散度 $D_{KL}(P || Q)$ 衡量的就是:如果我们用分布 $Q$ 来近似真实分布 $P$,在这个过程中我们损失了多少信息?
再次提醒:虽然我们常把它当“距离”来理解,但它并不是真正的数学距离(因为它不对称)。
1.2 数学定义
假设有两个概率分布 $P$ 和 $Q$,它们定义在同一个样本空间 $\mathcal{X}$ 上。
1. 离散型随机变量
如果 $\mathcal{X}$ 是离散的,KL散度的定义为:
$$D_{KL}(P || Q) = \sum_{x \in \mathcal{X}} P(x) \log \left( \frac{P(x)}{Q(x)} \right)$$2. 连续型随机变量
如果 $\mathcal{X}$ 是连续的,设 $p(x)$ 和 $q(x)$ 分别是 $P$ 和 $Q$ 的概率密度函数,KL散度定义为积分形式:
$$D_{KL}(P || Q) = \int p(x) \log \left( \frac{p(x)}{q(x)} \right) dx$$(注:这里的 $\log$ 通常以 2 为底(单位是 bit)或以自然数 $e$ 为底(单位是 nat)。在机器学习中通常以 $e$ 为底。)
1.3 KL散度的推导(基于信息论)
要真正理解KL散度,必须从**信息论(Information Theory)**出发。这需要三个前置概念:信息量、信息熵、交叉熵。
1. 信息量(Self-Information)
一个事件 $x$ 发生所带来的信息量被定义为:
$$I(x) = -\log P(x)$$直觉:越不可能发生的事情($P(x)$小)发生了,带来的信息量越大(比如“太阳从西边出来”)。
2. 信息熵(Entropy)
如果我们对分布 $P$ 中所有的事件求信息量的数学期望,就得到了信息熵 $H(P)$。它代表了分布 $P$ 本身的内在混乱程度或不确定性:
$$H(P) = \mathbb{E}_{x \sim P}[-\log P(x)] = -\sum P(x) \log P(x)$$在计算机科学中,它表示:对服从分布 $P$ 的数据进行最优编码,平均每个数据需要多少个比特。
3. 交叉熵(Cross-Entropy)
现在,假设数据的真实分布是 $P$,但我们错误地以为数据服从分布 $Q$,并根据 $Q$ 来设计编码方案。此时,平均编码长度就是交叉熵 $H(P, Q)$:
$$H(P, Q) = \mathbb{E}_{x \sim P}[-\log Q(x)] = -\sum P(x) \log Q(x)$$显然,用错误的分布 $Q$ 来编码真实分布 $P$ 的数据,一定会浪费额外的空间,所以 $H(P, Q) \ge H(P)$。
4. KL散度(相对熵)的诞生
我们想知道,因为使用了错误的分布 $Q$ 而多浪费了多少个比特? 这就是KL散度!它是交叉熵和信息熵的差值:
$$D_{KL}(P || Q) = H(P, Q) - H(P)$$我们把公式展开,就得到了KL散度的定义式:
$$D_{KL}(P || Q) = -\sum P(x) \log Q(x) - \left( -\sum P(x) \log P(x) \right)$$$$= \sum P(x) (\log P(x) - \log Q(x))$$
$$= \sum P(x) \log \left( \frac{P(x)}{Q(x)} \right)$$
结论:KL散度 = 交叉熵 - 真实熵。它代表了使用次优分布 $Q$ 近似真实分布 $P$ 时,产生的额外信息损耗。
1.4 KL散度的性质
1. 非负性(Non-negativity)
$D_{KL}(P || Q) \ge 0$。 并且,当且仅当 $P(x) = Q(x)$ 几乎处处成立时,$D_{KL}(P || Q) = 0$。 (数学上可以通过 Jensen不等式 证明:$-\log$ 是凹函数,$\mathbb{E}[-\log(X)] \ge -\log(\mathbb{E}[X])$)。
2. 不对称性(Asymmetry)
$D_{KL}(P || Q) \neq D_{KL}(Q || P)$。 这就是为什么它叫“散度(Divergence)”而不叫“距离(Distance)”。这种不对称性在机器学习中导致了两种截然不同的优化行为:
- Forward KL (前向KL):$D_{KL}(P || Q)$ (Mean-seeking 均值寻求)
- 公式中是以 $P$ 的期望为基准。当 $P(x) > 0$ 时,如果 $Q(x) \to 0$,惩罚会无穷大($\log \frac{P}{0} \to \infty$)。
- 结果:$Q$ 会试图覆盖 $P$ 所有概率不为 0 的地方。这叫做 Zero-avoiding(避免零)。如果 $P$ 是双峰分布,而 $Q$ 是单峰的高斯分布,$Q$ 会变得很宽,把两个峰都罩住。
- Reverse KL (反向KL):$D_{KL}(Q || P)$ (Mode-seeking 众数寻求)
- 公式是以 $Q$ 的期望为基准。当 $P(x) \to 0$ 时,如果 $Q(x) > 0$,惩罚会无穷大。
- 结果:$Q$ 不敢在 $P$ 为零的地方分配概率。这叫做 Zero-forcing(强迫零)。如果 $P$ 是双峰的,$Q$ 为了安全,通常会选择只拟合其中一个峰(坍缩),而完全忽略另一个峰。
1.5 KL散度的应用
1. 深度学习中的分类问题(交叉熵损失函数)
在图像分类(如识别猫狗)中,我们通常使用交叉熵损失(Cross-Entropy Loss)。为什么?
- 真实标签 $P$ 是独热编码(One-hot),如 $[1, 0, 0]$(确定是猫)。此时 $P$ 的信息熵 $H(P) = 0$(没有任何不确定性)。
- 模型输出的预测概率 $Q$ 是 Softmax 后的结果,如 $[0.8, 0.1, 0.1]$。
- 前面推导过:$D_{KL}(P || Q) = H(P, Q) - H(P)$。因为 $H(P) = 0$,所以: $$D_{KL}(P || Q) = H(P, Q)$$
- 结论:在真实分布 $P$ 固定的情况下,最小化交叉熵,在数学上等价于最小化真实分布和模型预测分布之间的KL散度。
2. 变分自编码器(VAE - Variational Autoencoder)
VAE 是经典的生成模型。在 VAE 的损失函数中,有一项专门的 KL散度正则化项:
$$\mathcal{L} = \text{Reconstruction\_Loss} + D_{KL}(q_\phi(z|x) || p(z))$$- $q_\phi(z|x)$ 是编码器推断出的隐变量的分布。
- $p(z)$ 是我们预设的隐变量先验分布(通常是标准正态分布 $\mathcal{N}(0, 1)$)。
- 作用: 强制编码器输出的隐空间分布不要乱跑,尽可能接近标准正态分布,从而使得解码器能够从标准正态分布中采样并生成清晰的图像。
3. 强化学习(RL)中的策略优化(TRPO / PPO)
在强化学习中,我们要不断更新智能体的策略网络(Policy)。但如果更新幅度过大,模型容易崩溃。
- TRPO (Trust Region Policy Optimization) 和 PPO (Proximal Policy Optimization) 的核心思想就是:新策略 $\pi_{\theta_{new}}$ 不能偏离老策略 $\pi_{\theta_{old}}$ 太远。
- 作用: 利用 KL散度 $D_{KL}(\pi_{\theta_{old}} || \pi_{\theta_{new}})$ 来衡量两个策略的差异,并将其作为惩罚项或硬性约束(Trust Region),保证训练的单调收敛和稳定性。
4. 模型蒸馏
模型蒸馏是比较火的迁移学习方法。
有时候我们想让size比较小的模型去学习size比较大的模型(可以是输出,也可以是中间特征、注意力层,或者是大模型的推理过程、代码能力之类的),不妨以学习图像分类的输出为例:
在蒸馏中:
- 分布 $P$ 是 Teacher 模型输出的软标签(比如
[狗:0.8, 猫:0.19, 汽车:0.01])。 - 分布 $Q$ 是 Student 模型当前的预测。
我们让优化器去最小化 $D_{KL}(Teacher || Student)$。 由于 KL 散度那严苛的不对称性惩罚,学生(Student)不仅会被迫把“狗”的概率提高到 0.8,还会极度畏惧把“猫”的概率预测为 0(因为老师说了猫有 0.19 的概率,如果学生敢给出 0,KL 散度就会爆炸)。
因此,KL 散度就像一个极其严厉的模具,强行把学生模型 $Q$ 的概率分布形状,一点点地捏成了和老师模型 $P$ 完全一样的形状,从而实现了“暗知识”的完美传承。
5. t-SNE 降维算法
t-SNE 是一种强大的高维数据可视化算法。
- 它首先在高维空间中计算数据点之间的相似度概率分布 $P$。
- 然后在低维(2D或3D)空间中初始化点,并计算低维空间中的相似度概率分布 $Q$。
- 作用: t-SNE 的目标函数就是最小化这两者之间的 KL散度 $D_{KL}(P || Q)$,通过梯度下降调整低维空间中点的位置,使得低维分布完美复刻高维分布。

说些什么吧!