AI机动队
首发于AI机动队
变分推断——深度学习第十九章

变分推断——深度学习第十九章

继续《深度学习》花书总结,本章介绍了各种近似推断的方法,有EM算法,变分推断等,重点是变分推断,这部分内容个人感觉Variational Inference: A Review for Statisticians 这篇论文对变分推断的解释思路更清晰,所以会主要根据这篇论文来进行总结。

基本思路

在概率模型中,我们常常需要近似难以计算的概率分布,在贝叶斯统计中,所有的对于未知量的推断(inference)问题可以看做是对后验概率(posterior)的计算,而这一概率通常难以计算,之前我们提到了利用MCMC马尔科夫链蒙特卡洛算法(可参考蒙特卡罗方法——深度学习第十七章)做近似,但是对于大量数据,MCMC算法计算较慢,变分推断(Variational Inference)就为我们提供了一种更快更简单的适用于大量数据的近似推断方法。

假定我们用 \vec{x}=x_{1:n} 代表我们输入的观察量, \vec{z}=z_{1:m} 代表模型中的隐藏变量,推断问题即为依据输入数据的后验条件概率分布 p(\vec{z}|\vec{x}) 。变分法的基本思想是将这一问题转化为优化(optimization) 问题。首先,我们提出一族关于隐藏变量的近似概率分布 Q ,我们希望从这一族分布中找到一个与真实的后验分布的KL Divergence(可回顾概率论——深度学习花书第三章)最小的分布,即 q^*(\vec{z}) = \underset{q(\vec{z})\in Q}{\mathrm{argmin}}KL(q(\vec{z})||p(\vec{z}|\vec{x})) 。之后,我们便可用 q^*(\vec{z}) 来近似代替真实的后验分布 p(\vec{z}|\vec{x}) 。因此变分推断将推断问题转化为了求极值的优化问题,而Q的选择决定了优化问题的难易度,变分法核心思想就是要选定这一族函数使得密度分布足够灵活可以近似p(\vec{z}|\vec{x})的分布,同时又足够简单使得我们可以进行高效的优化。

与MCMC算法比较

MCMC方法是利用马尔科夫链取样来近似后验概率,变分法是利用优化结果来近似后验概率,那么我们什么时候用MCMC,什么时候用变分法呢?

首先,MCMC相较于变分法计算上消耗更大,但是它可以保证取得与目标分布相同的样本,而变分法没有这个保证:它只能寻找到近似于目标分布一个密度分布,但同时变分法计算上更快,由于我们将其转化为了优化问题,所以可以利用诸如随机优化(stochastic optimization)或分布优化(distributed optimization)等方法快速的得到结果。所以当数据量较小时,我们可以用MCMC方法消耗更多的计算力但得到更精确的样本。当数据量较大时,我们用变分法处理比较合适。

另一方面,后验概率的分布形式也影响着我们的选择。比如对于有多个峰值的混合模型,MCMC可能只注重其中的一个峰而不能很好的描述其他峰值,而变分法对于此类问题即使样本量较小也可能优于MCMC方法。

变分推断详述

下面我们来详细的解释一下变分推断方法。

我们可以将隐藏变量 \vec{z} 相对于观察量 \vec{x} 的条件概率写为 p(\vec{z}|\vec{x})=\frac{p(\vec{z},\vec{x})}{p(\vec{x})} ,其中分母是观察量的边缘分布,可以通过从联合分布中边缘化隐藏变量得到 p(\vec{x})=\int {p(\vec{z},\vec{x})d\vec{z}} ,这个函数又被称作evidence,通常这个积分需要指数级别的时间去计算,这也是为什么推断问题常常难于处理。

在变分推断中,我们不是直接求 p(\vec{z}|\vec{x}) ,而是求与其KL divergence最小的优化问题

q^*(\vec{z}) = \underset{q(\vec{z})\in Q}{\mathrm{argmin}}KL(q(\vec{z})||p(\vec{z}|\vec{x}))

其中 KL(q(\vec{z})||p(\vec{z}|\vec{x})) = E[logq(\vec{z})] - E[logp(\vec{z}|\vec{x})] ,其中期望均是对于分布 q(\vec{z}) 上的期望。

我们可以将其进一步展开为 KL(q(\vec{z})||p(\vec{z}|\vec{x})) = E[logq(\vec{z})] - E[logp(\vec{z},\vec{x})] + logp(\vec{x})

注意这里最后一项为 logp(\vec{x}) ,我们又回到最初的边缘分布的问题难以求解。由于我们无法直接计算KL,所以我们改变优化目标为与KL前两项相关的量evidence lower bound(简称ELBO)ELBO(q)= E[logp(\vec{z},\vec{x})] -E[logq(\vec{z})]

可以看到,ELBO是负的KL再加上 logp(\vec{x}) ,由于 logp(\vec{x}) 相对于 q(\vec{z}) 的梯度为零,所以极小化KL divergence的问题与极大化ELBO的优化问题是等价的。因此,我们将难以求解的KL极值问题转化为易于求解的对ELBO的极值问题。

观察ELBO的形式,我们也可以将其分解为 ELBO(q)= E[logp(\vec{z})]+E[logp(\vec{x}|\vec{z})] -E[logq(\vec{z})]=E[logp(\vec{x}|\vec{z})]-KL(q(\vec{z})||p(\vec{z})) ,这一形式有助于我们理解ELBO的直观意义:第一项是个期望项,它促使模型将它的隐藏变量集中于可以解释观察量的配置上,第二项是隐藏变量变分分布与先验分布的KL divergence的相反数,它促使变分分布接近于先验分布,所以变分模型的目标函数是似然率与先验分布的一种平衡。

另外,我们可以将evidence  logp(\vec{x}) 写成这样的形式:  logp(\vec{x}) = KL(q(\vec{z})||p(\vec{z}|\vec{x}))+ ELBO(q)

由于 KL(q(\vec{z})||p(\vec{z}|\vec{x}))\geq 0 ,所以  logp(\vec{x}) \geq ELBO(q) ,这也是ELBO(evidence lower bound)得名的原因,它提供了  logp(\vec{x}) 的下限,当 q(\vec{z})=p(\vec{z}|\vec{x}) 时,  logp(\vec{x}) = ELBO(q) ,实际上EM算法(Expectation-Maximization)就是利用了这一特征,它分为交替进行的两步:E step假设模型参数不变,q(\vec{z})=p(\vec{z}|\vec{x}),计算对数似然率,在M step再做ELBO相对于模型参数的优化。与变分法比较,EM算法假设了当模型参数固定时, p(\vec{z}|\vec{x}) 是易计算的形式,而变分法并无这一限制,对于条件概率难于计算的情况,变分法仍然有效。

之前我们说我们选择一族合适的近似概率分布 Q,那么实际问题中,我们可以选择什么形式的 Q 呢?

一个简单而有效的变分族为平均场变分族(mean-field variational family)。它假设了隐藏变量间是相互独立的: q(\vec{z})=\prod_{j=1}^{m}q_j(z_j) 。这个假设看起来似乎比较强,但实际应用范围还是比较广泛,我们可以将其延展为将有实际相互关联的隐藏变量分组,而化为各组联合分布的乘积形式即可。

利用ELBO和平均场假设,我们就可以利用coordinate ascent variational inference(简称CAVI)方法来处理:

利用条件概率分布的链式法则有 p(z_{1:m},x_{1:n})=p(x_{1:n})\prod_{j=1}^{m}p(z_j|z_{1:(j-1)},x_{1:n})

变分分布的期望为 E[logq(z_{1:m})]=\sum_{j=1}^mE_j[logq(z_j)]

将其代入ELBO的定义得到 ELBO=logp(x_{1:n})+\sum_{j=1}^mE[logp(z_j|z_{1:(j-1)},x_{1:n})]-E_j[logq(z_j)]

将其对 z_k 求导并令导数为零有 \frac{dELBO}{dq(z_k)}=E_{-k}[logp(z_k|z_{-k},x)]-logq(z_k)-1=0 ,由此得到coordinate ascent 的更新法则为 q^*(z_k) \propto exp{E_{-k}[logp(z_k,z_{-k},x)]} 。我们可以利用这一法则不断的固定其他的 z 的坐标来更新当前的坐标对应的z值,这与Gibbs Sampling(参见蒙特卡罗方法——深度学习第十七章)过程类似,不过Gibbs Sampling是不断的从条件概率中采样,而CAVI算法中是不断的用如下形式更新: q^*(z_k) \propto exp{E[log(conditional)]} 。其完整算法如下所示


混合高斯模型变分法实例

我们用变分法在混合高斯分布中的实例来直观的理解其训练过程,如下图所示,可以看出,随着训练的进行,我们可以逐渐的将各个不同的峰值分开,对应的ELBO也在不断的增大。


总结

变分法在近似推断中是一个比较重要的思想,在下一章生成模型中我们会看到其在变分自解码器Variational Auto-encoder中的应用。其实,变分法起源于用数学方法解决一些物理问题,如拉格朗日力学,最小作用量在量子力学中的应用等,如何将一些基础学科的方法有效的应用到深度学习中,是一个很有意思且值得思考的问题。


注:截图均来自David M Blei的论文Variational Inference: A Review for Statisticians,推荐阅读原文。

发布于 2018-11-12

文章被以下专栏收录