Math-05.信息论-06.相对熵与f散度

本页扩展 03 KL 散度:统一的 $f$ 散度($f$-divergence)框架,以及 JS 散度、GAN 训练中的散度视角。

段末注释$f$ 散度 $D_f(P | Q) = \mathbb{E}_Q\left[f\left(\frac{p(x)}{q(x)}\right)\right]$,$f$ 为凸函数且 $f(1)=0$;JS 散度(Jensen–Shannon divergence)为对称化的 KL 组合。

系列入口00.系列规划 | 前置:03 交叉熵与 KL


1. $f$ 散度族(D2–D3)

图 1 f 散度统一形式

$$
D_f(P | Q) = \int q(x) f\left(\frac{p(x)}{q(x)}\right) \mathrm{d}x = \mathbb{E}_{x \sim Q}\left[f\left(\frac{p(x)}{q(x)}\right)\right]
$$

常见成员:

$f(t)$ 名称 公式
$t \log t$ KL $D_{\mathrm{KL}}(P | Q)$ $\mathbb{E}_P[\log\frac{p}{q}]$
$-\log t$ 反向 KL $D_{\mathrm{KL}}(Q | P)$ $\mathbb{E}_Q[\log\frac{q}{p}]$
$(t-1)^2$ Pearson $\chi^2$ $\mathbb{E}_Q[(\frac{p}{q}-1)^2]$
$(\sqrt{t}-1)^2$ Hellinger 与 Bhattacharyya 相关
$\frac12(t\log t - (t+1)\log\frac{t+1}{2})$ 定义通过 $f$ 见 JS below

Jensen 不等式 → $D_f \ge 0$,$P=Q$ 时为 0。


2. JS 散度(D3)

图 2 JS:对称、有界

$$
M = \frac{P + Q}{2}
$$

$$
D_{\mathrm{JS}}(P | Q) = \frac12 D_{\mathrm{KL}}(P | M) + \frac12 D_{\mathrm{KL}}(Q | M)
$$

性质 KL JS
对称 ✓(常写 $D_{\mathrm{JS}}(P,Q)$)
有界 无上界 $0 \le D_{\mathrm{JS}} \le \log 2$(离散)
平滑 $q\to 0$ 时爆炸 更稳定

GAN 原始目标 与 JS 相关(有限样本下);实际 DCGAN 用非饱和 BCE 损失更稳。


3. 正向 vs 反向 KL(D6–D7)

图 3 散度方向与 mode

优化 典型行为 场景
$\min_Q D_{\mathrm{KL}}(P | Q)$ mode-covering:$Q$ 覆盖 $P$ 所有模态 MLE、前向 KL、变分推断 mean-field
$\min_Q D_{\mathrm{KL}}(Q | P)$ mode-seeking:$Q$ 盯住 $P$ 一个模态 EM、某些 GAN、反向 KL
VAE ELBO $\mathbb{E}[-\log p(x z)] + D_{\mathrm{KL}}(q(z
WGAN Wasserstein 距离(非 $f$ 散度) 改善训练稳定性

4. GAN 与散度(D7)

原始 minimax GAN:

$$
\min_G \max_D \mathbb{E}{x\sim P}[\log D(x)] + \mathbb{E}{z\sim p(z)}[\log(1-D(G(z)))]
$$

最优判别器 $D^*(x) = \frac{p(x)}{p(x)+q(x)}$ 时,目标与 JS$(P | Q)$ 相关。实践问题:饱和梯度 → 非饱和损失WGAN-GPLSGAN


5. 局限(D8)

图 4 局限

问题 说明
支撑不匹配 $P,Q$ 支撑不交 → KL 无穷
有限 batch GAN 散度估计高方差
选错方向 生成质量 mode collapse
$f$ 散度 vs Wasserstein 后者对支撑更敏感、几何更好

6. NumPy 示例(D12)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np

def kl(p, q, eps=1e-12):
p, q = np.asarray(p), np.asarray(q)
p, q = p + eps, q + eps
p, q = p / p.sum(), q / q.sum()
return np.sum(p * np.log(p / q))

def js(p, q, eps=1e-12):
p, q = np.asarray(p), np.asarray(q)
p, q = p + eps, q + eps
p, q = p / p.sum(), q / q.sum()
m = 0.5 * (p + q)
return 0.5 * kl(p, m) + 0.5 * kl(q, m)

p = np.array([0.5, 0.3, 0.15, 0.05])
q = np.array([0.4, 0.35, 0.2, 0.05])
print("KL(P||Q):", kl(p, q))
print("KL(Q||P):", kl(q, p))
print("JS(P,Q):", js(p, q), "(<= log2)")

7. 小结

$f$ 散度 统一 KL、$\chi^2$、Hellinger;JS 对称有界;方向决定 mode-covering vs seeking。人类偏好对齐见 20 RLHF

系列导航03 CE/KL | 04 互信息

-------------本文结束感谢您的阅读-------------