KL 散度的蒙特卡洛近似
Refer to: Blog
KL 散度的定义如下:
K L [ q , p ] = ∑ x q ( x ) log q ( x ) p ( x ) = E x ∼ q [ log q ( x ) p ( x ) ] KL[q, p] = \sum_x q(x) \log \frac{q(x)}{p(x)} = E_{x \sim q} \left[ \log \frac{q(x)}{p(x)} \right] KL[q,p]=x∑q(x)logp(x)q(x)=Ex∼q[logp(x)q(x)]
本文介绍了一种近似计算 KL 散度的技巧,即使用 1 2 ( log p ( x ) − log q ( x ) ) 2 \frac{1}{2} (\log p(x) - \log q(x))^2 21(logp(x)−logq(x))2 的样本均值来替代 log q ( x ) p ( x ) \log \frac{q(x)}{p(x)} logp(x)q(x),其中 x x x 采样自 q q q。本文将解释为什么这个表达式是一个不错的(尽管有偏差的)KL 估计器,以及如何在保持低方差的同时使其无偏。
计算 KL 的不同方法
我们计算 KL 的方法取决于我们对 p p p 和 q q q 的访问方式。假设我们可以计算 p ( x ) p(x) p(x) 和 q ( x ) q(x) q(x),但无法解析求和。为什么无法解析计算?
- 计算精确 KL 需要过多的计算或存储资源。
- 没有封闭形式的表达式。
- 我们可以仅存储对数概率,而不是整个分布。如果 KL 只是作为一个诊断工具(例如在强化学习中),这是一个合理的选择。
蒙特卡洛估计是最常见的求和或积分的方法。给定样本 x 1 , x 2 , ⋯ ∼ q x_1, x_2, \cdots \sim q x1,x2,⋯∼q,我们如何构造一个良好的估计?
一个好的估计器应该是无偏的(均值正确)并且方差低。已知一个无偏估计器(在 q q q 的样本下)是:
k 1 = log q ( x ) p ( x ) = − log r k_1 = \log \frac{q(x)}{p(x)} = -\log r k1=logp(x)q(x)=−logr
其中, r = p ( x ) q ( x ) r = \frac{p(x)}{q(x)}