变分推断

资料

http://blog.huajh7.com/2013/03/06/variational-bayes/

PRML Chapter 10

MLAPP Chapter 21

背景知识

相对熵, KL散度

问题

已知数据模型和数据集 $ X = \{ x_1, \dots, x_n \} $, 模型的参数 $Z = \{ z_1, \dots, z_m \} $ 未知, 我们希望使用后验分布$p(Z|X)$.

  • 一是$p(Z|X)$可能非常难求,而且不好做后续的处理.
  • 二是$p(Z,X)$可能会很好求.

解决方案

求解一个近似$p(Z|X)$的分布$q(Z)$, $q(Z)$取自一个方便处理的分布家族,比如指数家族.使用$q(Z)$代替$p(Z|X)$.

两点问题:

  • 如何比较两个分布是否相近. 相对熵.
  • 如何从分布家族中选取一个接近$p(Z|X)$. 取相对熵最小的分布,转化成最优解问题.

最优化问题

先对目标函数做一些转换,这个转换把最优化问题从$p(Z|X)$转换到$p(Z,X)$上.

让 $L(q) = \int q(Z) \ln \frac{p(Z,X)}{q(Z)} dZ$, 通过上面的式子我们可以得到

因为 $\ln p(X)$ 是常数, 所以$\min KL(q(Z)||p(Z|X))$,可以转化成$\max L(q)$.

分解q(Z)

这里做一个假定, 假定q分布是对于Z可分解的, 即

这里每个$q_i$都可以是不同形式的函数.

然后这里的做法是, 对每个$i$, 固定住其他变量, 对$q_i$求最优值. 然后循环到收敛.

先来看一下分解之后的$L(q)$, 这里用$q_j$表示$q_j(z_j)$

到了这里之后,我们开始只考虑单个$q_j$对$L(q)$的影响,即把非$q_j$项都先积分,最后留下$q_j$.

我们先定义一个新分布 $p_j(z_j)$, 满足

这里的const主要为了把$p_j(z_j)$的和凑成1,normalization,不需要显式考虑.

其次注意到 $\int q_i dz_i = 1$, 可以得到

代入原式得到

分解分布之后,$\sum_{i \neq j} \int q_i \ln q_i dz_i$这一项相对于$z_j$是const.

最大化$L(q)$

我们成功得到 $L(q) = -KL(q_j || p_j) + const$, 那么最大化$L(q)$就等于最小化$KL(q_j || p_j)$. 我们直接让$q_j = p_j$使得$KL(q_j || p_j)$取到最小值$0$.