变分推断
贝叶斯派最核心的问题就是求后验分布,由贝叶斯公式,实际上就是要求边缘概率,因为分子的似然和先验都是容易求的,而边缘概率是一个积分(就是分子的积分),如果隐变量维度太高,或者这个积分的形式复杂,都会导致积分难求。如果积分比较好求,那就是精确推断,如果积分不好求,那就只能用近似推断,变分推断就是一种近似推断。
变分推断(Variational Inference, VI)的核心目的是解决复杂概率模型中后验分布难以直接计算的问题,通过优化方法寻找一个近似分布来代替真实后验分布,从而实现对隐变量或模型参数的高效推断。
我们已经知道概率模型可以分为,频率派的优化问题和贝叶斯派的积分问题。从贝叶斯角度来看推断,对于 \(\hat{x}\) 这样的新样本,需要得到:
\[p(\hat{x}|X)=\int_\theta p(\hat{x},\theta|X)d\theta=\int_\theta p(\theta|X)p(\hat{x}|\theta,X)d\theta
\]
如果新样本和数据集独立,那么推断就是概率分布依参数后验分布的期望。
我们看到,推断问题的中心是参数后验分布的求解,推断分为:
- 精确推断
- 变量消除
- 信念传播
- 近似推断-参数空间无法精确求解
- 确定性近似-如变分推断
- 随机近似-如 MCMC(MH,Gibbs)
基于平均场假设的变分推断(Mean Field Variational Inference, MFVI)
平均场变分推断的核心思想是,用一个简单的分布 \(q(Z)\) 来逼近真实后验 \(p(Z|X)\),那实际上就可以转换为最小化 \(q(Z)\) 和 \(p(Z|X)\) 的KL散度,这又等价于最大化ELBO。
因此,我们可以强制隐变量之间相互独立来简化运算,最后的结果就是,我们可以用坐标上升法一个一个地改变每个\(q_i(Z_i)\),使得ELBO最大。
我们记 \(Z\) 为隐变量和参数的集合,\(Z_i\) 为第 \(i\) 维的参数,于是,回顾一下 EM 中的推导:
\[\log p(X)=\log p(X,Z)-\log p(Z|X)=\log\frac{p(X,Z)}{q(Z)}-\log\frac{p(Z|X)}{q(Z)}
\]
左右两边分别积分:
\[Left:\int_Zq(Z)\log p(X)dZ=\log p(X)
\]
\[Right:\int_Z[\log \frac{p(X,Z)}{q(Z)}-\log \frac{p(Z|X)}{q(Z)}]q(Z)dZ=ELBO+KL(q,p)
\]
第二个式子可以写为变分和 KL 散度的和:
\[L(q)+KL(q,p)
\]
由于这个式子是常数,于是寻找 \(q\simeq p\) 就相当于对 \(L(q)\) 最大值。
\[\hat{q}(Z)=\mathop{argmax}_{q(Z)}L(q)
\]
假设 \(q(Z)\) 可以划分为 \(M\) 个组(平均场近似):
\[q(Z)=\prod\limits_{i=1}^Mq_i(Z_i)
\]
因此,在 \(L(q)=\int_Zq(Z)\log p(X,Z)dZ-\int_Zq(Z)\log{q(Z)}\) 中,看 \(p(Z_j)\) ,第一项:
\[\begin{align}\int_Zq(Z)\log p(X,Z)dZ&=\int_Z\prod\limits_{i=1}^Mq_i(Z_i)\log p(X,Z)dZ\nonumber\\
&=\int_{Z_j}q_j(Z_j)\int_{Z-Z_{j}}\prod\limits_{i\ne j}q_i(Z_i)\log p(X,Z)dZ\nonumber\\
&=\int_{Z_j}q_j(Z_j)\mathbb{E}_{\prod\limits_{i\ne j}q_i(Z_i)}[\log p(X,Z)]dZ_j
\end{align}
\]
第二项:
\[\int_Zq(Z)\log q(Z)dZ=\int_Z\prod\limits_{i=1}^Mq_i(Z_i)\sum\limits_{i=1}^M\log q_i(Z_i)dZ
\]
展开求和项,其中第一项为:
\[\int_Z\prod\limits_{i=1}^Mq_i(Z_i)\log q_1(Z_1)dZ=\int_{Z_1}q_1(Z_1)\log q_1(Z_1)dZ_1
\]
所以:
\[\int_Zq(Z)\log q(Z)dZ=\sum\limits_{i=1}^M\int_{Z_i}q_i(Z_i)\log q_i(Z_i)dZ_i=\int_{Z_j}q_j(Z_j)\log q_j(Z_j)dZ_j+Const
\]
两项相减,令 \(\mathbb{E}_{\prod\limits_{i\ne j}q_i(Z_i)}[\log p(X,Z)]=\log \hat{p}(X,Z_j)\) 可以得到:
\[-\int_{Z_j}q_j(Z_j)\log\frac{q_j(Z_j)}{\hat{p}(X,Z_j)}dZ_j\le 0
\]
于是最大的 \(q_j(Z_j)=\hat{p}(X,Z_j)\) 才能得到最大值。我们看到,对每一个 \(q_j\),都是固定其余的 \(q_i\),求这个值,于是可以使用单变量优化与坐标上升法进行迭代求解,上面的推导针对单个样本,但是对数据集也是适用的。
基于平均场假设的变分推断存在一些问题:
- 独立性假设过强:忽略变量间相关性,近似偏差随依赖增强而增大(如玻尔兹曼机)
- 期望中的积分,可能无法计算,需近似采样(如蒙特卡洛)
- 局部最优性:坐标上升法无法保证全局最优解
MFVI 可视为 EM 算法的推广:
E步:若隐变量结构简单(如混合模型),MFVI 退化为精确后验,等价于 EM。
M步:优化模型参数 \(\theta\) 时,固定变分分布 \(q\),最大化 \(E_q[\log p(X,Z|\theta)]\)
SGVI
从 \(Z\) 到 \(X\) 的过程叫做生成过程或译码,反过来的过程叫推断过程或编码过程,基于平均场的变分推断可以导出坐标上升的算法,但是这个假设在一些情况下假设太强,同时积分也不一定能算。我们知道,优化方法除了坐标上升,还有梯度上升的方式,我们希望通过梯度上升来得到变分推断的另一种算法。
我们的目标函数:
\[\hat{q}(Z)=\mathop{argmax}_{q(Z)}L(q)
\]
假定 \(q(Z)=q_\phi(Z)\),是和 \(\phi\) 这个参数相连的概率分布。于是 \(\mathop{argmax}_{q(Z)}L(q)=\mathop{argmax}_{\phi}L(\phi)\),其中 \(L(\phi)=\mathbb{E}_{q_\phi}[\log p_\theta(x^i,z)-\log q_\phi(z)]\),这里 \(x^i\) 表示第 \(i\) 个样本。
\[\begin{align}\nabla_\phi L(\phi)&=\nabla_\phi\mathbb{E}_{q_\phi}[\log p_\theta(x^i,z)-\log q_\phi(z)]\nonumber\\
&=\nabla_\phi\int q_\phi(z)[\log p_\theta(x^i,z)-\log q_\phi(z)]dz\nonumber\\
&=\int\nabla_\phi q_\phi(z)[\log p_\theta(x^i,z)-\log q_\phi(z)]dz+\int q_\phi(z)\nabla_\phi [\log p_\theta(x^i,z)-\log q_\phi(z)]dz\nonumber\\
&=\int\nabla_\phi q_\phi(z)[\log p_\theta(x^i,z)-\log q_\phi(z)]dz-\int q_\phi(z)\nabla_\phi \log q_\phi(z)dz\nonumber\\
&=\int\nabla_\phi q_\phi(z)[\log p_\theta(x^i,z)-\log q_\phi(z)]dz-\int \nabla_\phi q_\phi(z)dz\nonumber\\
&=\int\nabla_\phi q_\phi(z)[\log p_\theta(x^i,z)-\log q_\phi(z)]dz\nonumber\\
&=\int q_\phi(\nabla_\phi\log q_\phi)(\log p_\theta(x^i,z)-\log q_\phi(z))dz\nonumber\\
&=\mathbb{E}_{q_\phi}[(\nabla_\phi\log q_\phi)(\log p_\theta(x^i,z)-\log q_\phi(z))]
\end{align}
\]
这个期望可以通过蒙特卡洛采样来近似,从而得到梯度,然后利用梯度上升的方法来得到参数:
\[z^l\sim q_\phi(z)\\
\mathbb{E}_{q_\phi}[(\nabla_\phi\log q_\phi)(\log p_\theta(x^i,z)-\log q_\phi(z))]\sim \frac{1}{L}\sum\limits_{l=1}^L(\nabla_\phi\log q_\phi)(\log p_\theta(x^i,z)-\log q_\phi(z))
\]
但是由于求和符号中存在一个对数项,于是直接采样的方差很大,需要采样的样本非常多。为了解决方差太大的问题,我们采用 Reparameterization 的技巧。
考虑:
\[\nabla_\phi L(\phi)=\nabla_\phi\mathbb{E}_{q_\phi}[\log p_\theta(x^i,z)-\log q_\phi(z)]
\]
我们取:\(z=g_\phi(\varepsilon,x^i),\varepsilon\sim p(\varepsilon)\),于是对后验:\(z\sim q_\phi(z|x^i)\),有 \(|q_\phi(z|x^i)dz|=|p(\varepsilon)d\varepsilon|\)。代入上面的梯度中:
\[\begin{align}
\nabla_\phi L(\phi)&=\nabla_\phi\mathbb{E}_{q_\phi}[\log p_\theta(x^i,z)-\log q_\phi(z)]\nonumber\\
&=\nabla_\phi L(\phi)=\nabla_\phi\int[\log p_\theta(x^i,z)-\log q_\phi(z)]q_\phi dz\nonumber\\
&=\nabla_\phi\int[\log p_\theta(x^i,z)-\log q_\phi(z)]p_\varepsilon d\varepsilon\nonumber\\
&=\mathbb{E}_{p(\varepsilon)}[\nabla_\phi[\log p_\theta(x^i,z)-\log q_\phi(z)]]\nonumber\\
&=\mathbb{E}_{p(\varepsilon)}[\nabla_z[\log p_\theta(x^i,z)-\log q_\phi(z)]\nabla_\phi z]\nonumber\\
&=\mathbb{E}_{p(\varepsilon)}[\nabla_z[\log p_\theta(x^i,z)-\log q_\phi(z)]\nabla_\phi g_\phi(\varepsilon,x^i)]
\end{align}
\]
对这个式子进行蒙特卡洛采样,然后计算期望,得到梯度。
转载自:https://www.yuque.com/bystander-wg876/yc5f72
对原文略作修正