变分推断学习笔记(1)——概念介绍

变分推断学习笔记系列:

  1. 变分推断学习笔记(1)——概念介绍
  2. 变分推断学习笔记(2)——一维高斯模型的例子
  3. 变分推断学习笔记(3)——三硬币问题的变分推断解法

问题描述

变分推断是一类用于贝叶斯估计和机器学习领域中近似计算复杂(intractable)积分的技术,它广泛应用于各种复杂模型的推断。本文是学习PRML第10章的一篇笔记,错误或不足的地方敬请指出。

先给出问题描述。记得在上一篇EM的文章中,我们有一个观察变量\(\mathbf{X}=\{x^{\{1\}},\ldots,x^{\{m\}}\}\)和隐藏变量\(\mathbf{Z}=\{z^{\{1\}},\ldots,z^{\{m\}}\}\), 整个模型\(p(\mathbf{X},\mathbf{Z})\)是个关于变量\(\mathbf{X},\mathbf{Z}\)的联合分布,我们的目标是得到后验分布\(P(\mathbf{Z}|\mathbf{X})\)的一个近似分布。

在之前介绍过Gibbs Sampling这一类Monte Carlo算法,它们的做法就是通过抽取大量的样本估计真实的后验分布。而变分推断不同,与此不同的是,变分推断限制近似分布的类型,从而得到一种局部最优,但具有确定解的近似后验分布。

之前在EM算法的介绍中我们有似然的式子如下: \[\begin{equation}\ln p(\mathbf{X})=L(q)+KL(q||p)\end{equation}\] 其中
\[\begin{equation}L(q)=\int q(\mathbf{Z})\ln{\frac{p(\mathbf{X},\mathbf{Z})}{q(\mathbf{Z})}}d\mathbf{Z}\end{equation}\]
\[\begin{equation}KL(q||p)=-\int q(\mathbf{Z}) \ln{\frac{p(\mathbf{Z}|\mathbf{X})}{q(\mathbf{Z})}}d\mathbf{Z}\end{equation}\]

这里公式中不再出现参数\(\theta\),因为参数不再是固定的值,而变成了随机变量,所以也是隐藏变量,包括在\(\mathbf{Z}\)之内了。

这里的KL散度\(KL(q||p)\)描述了估计分布与真实分布的差别。当\(KL(q||p)=0\)时,俩分布就是相同的。因为我们不知道真实的后验分布是啥,所以直接最小化KL是做不到的,但是我们可以通过最大化\(L(q)\) 来达到这个目的。可以认为\(L(q)\)越大,则模型对数据拟合程度越好。由于\(\ln p(X) \geq L (q)\)始终成立,所以\(L (q)\)被称作证据下界(evidence lower bound),见图1。

为了极大化\(L(q)\),我们需要选择合适的函数\(q\),使其便于计算。要注意到\(L(q)\)并非普通的函数,而是以函数\(q\)为自变量的函数,这就是泛函。泛函可以看成是函数概念的推广,而变分方法是处理泛函的数学领域,和处理函数的普通微积分相对。变分法最终寻求的是极值函数:它们使得泛函取得极大或极小值。

条件独立假设

如果参数之间具有相互依赖关系(mutually dependent),求积分时会比较麻烦。所以我们为\(q(\mathbf{Z})\)的分布加一个限制条件,将\(\mathbf{Z}\)分为\(M\)组变量,组与组之间变量相互独立,这样\(q\)的分布就可以分解为
\[\begin{equation}q(\mathbf{Z})=\prod^M_{i=1}q_i(\mathbf{Z}_i)\end{equation}\]

要注意我们对每个\(q(\mathbf{Z}_i)\)的函数形式并没有做任何限制。这种将\(q\)分解的方法叫做平均场理论(mean field theory),主要基于基于系统中个体的局部相互作用可以产生宏观层面较为稳定的行为这个物理思想。

求解过程

根据以上假设,我们来最大化下界\(L(q)\),因为假设\(q_i(\mathbf{Z}_i)\)分布之间都是独立的,所以我们依次轮流来优化,以\(q_j(\mathbf{Z}_j)\)为例(为了简单起见,缩写为\(q_j\))。

\[\begin{equation} \begin{split} L(q_j) & =\int \prod_{i}q_j\{\ln p(\mathbf{X},\mathbf{Z})-\sum_i \ln q_i\} d\mathbf{Z} \\\ &= \int q_j\{\int \ln p(\mathbf{X},\mathbf{Z})\prod_{i\neq j}q_i d\mathbf{Z}_i\}d\mathbf{Z}_j-\int q_j\ln q_j d\mathbf{Z}_j+const \\\ &=\int q_j \ln \tilde{p}(\mathbf{X},\mathbf{Z}_j)d\mathbf{Z}_j-\int q_j\ln q_j d\mathbf{Z}_j +const \\ \end{split} \end{equation}\]
这里我们定义一个新分布\(\ln \tilde{p}(\mathbf{X},\mathbf{Z}_j)\)
\[\begin{equation}\ln \tilde{p}(\mathbf{X},\mathbf{Z}_j)=\int \ln p(\mathbf{X},\mathbf{Z})\prod_{i\neq j}q_i d\mathbf{Z}_i\end{equation}\]
我们发现它刚好是除去与\(q_j\)分布相关的\(z_j\)之后原似然的期望值,有
\[\begin{equation}\ln \tilde{p}(\mathbf{X},\mathbf{Z}_j)=\mathbb{E}_{i\neq j}[\ln p(\mathbf{X},\mathbf{Z})]+const\end{equation}\]
然后看式(5)的最后部分,就是\(q_j(\mathbf{Z}_j)\)\(\tilde{p}(\mathbf{X},\mathbf{Z}_j)\)的KL散度的负值,这里我们固定\(q_{i\neq j}\)不变,那么最大化\(L(q)\)就变成了最小化这个KL散度,而KL 散度的最小值在\(q_j(\mathbf{Z}_j)=\ln \tilde{p}(\mathbf{X},\mathbf{Z}_j)\)时取到。所以,最优解\(q^*_j(\mathbf{Z}_j)\)
\[\begin{equation}\ln q^*_j(\mathbf{Z}_j)=\mathbb{E}_{i\neq j}[\ln p(\mathbf{X},\mathbf{Z})]+C\end{equation}\]

另加的这个C是为了归一化整个分布,有\(C=\int exp(\mathbb{E}_{i\neq j}[\ln p(\mathbf{X},\mathbf{Z})])d\mathbf{Z}_j\) 。然后依次更新其他\(\mathbf{Z}_j\),最终相互迭代达到稳定。

变分下界

我们也可以直接衡量模型的下界。在实际应用中,变分下界可以直接判断算法是否收敛,也可以通过每次迭代都不会降低这一点来判断算法推导和实现的部分是否存在问题。 \[\begin{split}L(q)& =\int q(\mathbf{Z})\ln{\frac{p(\mathbf{X},\mathbf{Z})}{p(\mathbf{Z})}}d\mathbf{Z} \\& =\mathbf{E}_q[\ln p(\mathbf{X},\mathbf{Z})]-\mathbf{E}_q[\ln q(\mathbf{Z})] \\\end{split}\] 值得一提的是,如果我们能知道变分后验每个因子的函数形式的话,我们还有另一种估计参数的方法,这个详见例子

变分推断和Gibbs Sampling之间的联系

变分推断和Gibbs sampling其实挺相似的:

  • 在Gibbs Sampling中,我们从条件分布\(P(\mathbf{Z}_j|\mathbf{Z}_{\neg j})\)中抽样。
  • 在变分推断中,我们迭代\(\mathbf{Z}_j\)的分布\(Q(\mathbf{Z}_j)\propto\frac{1}{C}\exp\{\mathbb{E}_{i\neq j}[\ln p(\mathbf{X},\mathbf{Z})]\}\)

参考

  1. 《Pattern_Recognition_and_Machine_Learning》第10章
  2. http://en.wikipedia.org/wiki/Variational_Bayesian_methods