定义
**KL 散度(Kullback–Leibler divergence)**衡量两个概率分布 p 与 q 之间的差异:
DKL(p∥q)=∑xp(x)logq(x)p(x)
直觉:如果真实分布是 p,你却用 q 来理解/编码它,会额外付出多少信息代价。DKL 越小,q 越接近 p;p=q 时 DKL=0。
直观理解
关键在不对称。看两个极端场景(设真实分布是 p):
- KL(p∥q) 惩罚「p 高但 q 低」的地方——真实会发生的事,你的模型却说几乎不可能,代价极大(log 爆炸)。这偏向不漏报。
- KL(q∥p) 惩罚「q 高但 p 低」的地方——模型瞎猜的事,真实几乎不会发生。这偏向不误报。
两种惩罚取向不同,所以 KL(p∥q)=KL(q∥p)——它是「差异」但不是「距离」(不满足对称性)。
公式推导
性质
- 非负:DKL(p∥q)≥0,当且仅当 p=q 时取 0(Gibbs 不等式);
- 不对称:DKL(p∥q)=DKL(q∥p);
- 与 熵、交叉熵 的关系:H(p,q)=H(p)+DKL(p∥q),p 固定时最小化交叉熵等价于最小化 KL 散度。
两个高斯的闭式解
当 p=N(μ1,σ12)、q=N(μ2,σ22) 时,KL 散度有解析式:
DKL(N(μ1,σ12)N(μ2,σ22))=logσ1σ2+2σ22σ12+(μ1−μ2)2−21
这个闭式解在 VAE 和扩散模型里都被直接使用。
与扩散模型的联系
扩散模型的损失推导 把 ELBO 拆成三项,其中两项就是 KL 散度:
- LT=DKL(q(xT∣x0)∥p(xT)):让前向终点逼近标准噪声;
- Lt−1=DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt)):逐时间步比较「真实后验」与「网络反向」。
因为两侧都是 高斯分布,这些 KL 才能套闭式解,最终化简成预测噪声的 MSE(Lsimple)。
相关
- 熵 — 分布自身的不确定性
- 交叉熵 — H(p,q)=H(p)+DKL(p∥q)
- 扩散模型的损失推导 — KL 项的来源
- VAE — KL 约束潜在分布接近 N(0,I)
- 高斯分布 — 两个高斯的闭式解