本文最后更新于:2024年5月7日 下午
变分推断(Variational Inference, VI)是贝叶斯近似推断方法中的一大类方法,将后验推断问题巧妙地转化为优化问题进行求解。
简介
- 在变分贝叶斯方法中, evidence lower bound (通常缩写为 ELBO,有时也称为 变分下界 或负变分自由能)是一些观测数据对数可能性的有用下界。
问题定义
- 给定观测随机变量 $X$, 我们的目标是寻找 $X$ 的真实分布 $p*$.
- 我们可以通过不断从 $X$ 中采样样本 $x$ 来统计其分布,但是这样效率不高而且难以获取 $p*$, 迫使我们必须寻找 $p*$ 的近似分布。
- 如果我们定义一组足够大的带参数的分布族 $ \left\{p_{\theta}\right\}_{\theta \in \Theta} $ ,这个分布族表示每一组 $\theta$ 对应一个分布,所有 $\theta$ 代表的所有分布的集合
- 定义两个分布之间的损失函数 $L$,那么我们通过优化 $\theta$ 最小化 $L$ 就可以了, $ \min _{\theta} L\left(p_{\theta}, p^{*}\right) $
生成模型
-
由于显式的分布难以描述复杂的 $X$ 分布,我们引入带有隐变量的概率分布:
-
首先定义隐变量 $Z$,其分布 $p(z)$ 我们可以任意给定(一般为标准高斯分布)
-
定义复杂函数 $f_\theta$,操作层面上可以理解为结构确定、参数为 $\theta$ 的神经网络
-
定义由 $p(z)$ 采样经过 $f_\theta$ 生成 $X$ 分布的方法
注意:定义的是从采样 $z$ 生成 $X$ 分布的方法
例如:
- 采样两个 $z$,由 $ f_{\theta}(z)=\left(f_{1}(z), f_{2}(z)\right) $ 得到两个输出变量
- 之后定义 $X$ 的分布为 $ \mathcal{N}\left(f_{1}(z), e^{f_{2}(z)}\right) $
-
-
通过这种方法我们定义了$(X,Z)$ 的联合分布,因为我们可以采样 $ z \sim p $,计算 $ f_{\theta}(z) $,采样 $ x \sim p_{\theta}(\cdot \mid z) $
-
也就是说我们得到了观测变量和隐变量的 生成模型
评估模型
- 现在我们将 $p_\theta$ 当做 $x$ 的近似评估模型 $ p_{\theta}(X) \approx p^{*}(X) $
- 由于等式右侧和 $Z$ 无关,等式左边也需要和 $Z$ 无关的 $X$ 的边缘分布
- 直接的想法是对 $z $ 积分,$ p_{\theta}(x)=\int p_{\theta}(x \mid z) p(z) d z $,可以蒙特卡洛积分计算,但是如果要求精度会很慢,因此我们转向贝叶斯的思路
- 根据贝叶斯公式,有:
$$
p_{\theta}(x)=\frac{p_{\theta}(x \mid z) p(z)}{p_{\theta}(z \mid x)}
$$
- 此时我们有 $p(z)$(我们自己定义的), $p_{\theta}(x \mid z)$ 我们自己定义的,这二者乘积为联合分布,但是这个联合分布带着 $z$,需要除以后验概率 $p_{\theta}(z \mid x)$ 才能消除 $z$
- 但是这个后验概率不好搞,寻找这个后验概率的问题称作 变分贝叶斯推理 ( variational Bayesian inference )
变分推断 (VI) 解决方案
MCMC
-
Markov Chain Monte Carlo (MCMC)
该方法可以得到准确的结果,不过很慢
优化近似分布
- 在参数 $z$ 上指定一系列分布 $Q$
- $Q$ 是这个空间里的一个概率分布 family,我们需要找到 $Q$ 中的一个最优的替代概率分布 $q^∗(z) $(此分布比后验分布好求解),其是整个 $Q$ 中离 $p(z|x)$ 最近的分布。假设 $L$ 是此空间上的距离函数,在 $Q$ 中寻找最佳近似 $p(z|x)$ 的分布 $q*$ ,则我们要找的这个概率分布就可以表示为
$$
q^{*}(\boldsymbol{z})=\underset{q(z) \in Q}{\arg \min } L(q(\boldsymbol{z}), p(\boldsymbol{z} \mid \boldsymbol{x})) \tag1
$$
- 如果我们能找到这样的分布 $ q^ {* }(z) $ ,那么我们就可以用 $ q^{*}(z) $ 去估计原来不好计算的 $ p(z \mid x) $ 。
ELBO
- 当我们取 $L$ 为 KL divergence(经常用于度量两个概率分布之间的距离)的时候,此问题变成Variational Bayes (VB) 问题。我们的目标变成了最小化以下KL散度
$$
L(q(\boldsymbol{z}), p(\boldsymbol{z} \mid \boldsymbol{x}))=\mathrm{KL}(q(\boldsymbol{z}) | p(\boldsymbol{z} \mid \boldsymbol{x})) \tag2
$$
-
我们寻找的最优近似分布为 $ q^{ * } (z) $ :
$$
q^{*}(\boldsymbol{z})=\underset{q(\boldsymbol{z}) \in Q}{\arg \min } \mathrm{KL}(q(\boldsymbol{z}) | p(\boldsymbol{z} \mid \boldsymbol{x})) \tag3 \label3
$$ -
展开 KL 项可将 $\ref{3}$ 式转为:
$$ \begin{aligned} q^{*}(\boldsymbol{z}) &=\underset{q(\boldsymbol{z}) \in Q}{\arg \min \mathrm{KL}}(q(\boldsymbol{z}) \| p(\boldsymbol{z} \mid \boldsymbol{x})) \\ &=\underset{q(\boldsymbol{z}) \in Q}{\arg \min }-\int_{\boldsymbol{z}} q(\boldsymbol{z}) \log \left[\frac{p(\boldsymbol{z} \mid \boldsymbol{x})}{q(\boldsymbol{z})}\right] d \boldsymbol{z} \end{aligned} \tag4 $$ -
继续展开 KL 项:
$$ \begin{aligned} \mathrm{KL}(q(\boldsymbol{z}) \| p(\boldsymbol{z} \mid \boldsymbol{x})) &=-\int_{\boldsymbol{z}} q(\boldsymbol{z}) \log \left[\frac{p(\boldsymbol{z} \mid \boldsymbol{x})}{q(\boldsymbol{z})}\right] d \boldsymbol{z} \\ &=\int_{\boldsymbol{z}} q(\boldsymbol{z}) \log q(\boldsymbol{z}) d \boldsymbol{z}-\int_{\boldsymbol{z}} q(\boldsymbol{z}) \log p(\boldsymbol{z}| x) d z \end{aligned} \tag5 $$ -
这里关于 $ q(z) $ 对z积分,其实就是关于 $ q(z) $ 的期望,即 $ \int_{z} q(z) f(z, \cdot) d z=\mathbb{E}_{q}[f(z, \cdot)] $,那么上式能表示成期望形式:
- 第二项可以用条件概率公式继续展开:
- 此时,变成了三项,观察各项,发现第三项里面 $logp(x)$ 与期望的对象 $q(z)$ 是无关的,所以期望符号可以直接去掉,于是得到:
- 此时,我们把前两项称之为 −ELBO (Evidence Lower Bound)。(注意这里是负的ELBO)
- 那么,关于 $q(z)$ 的 $ELBO(q)$ 为:
- 实际计算中,ELBO可以表示成以下形式进行计算:
- 回到公式 $\ref8$,我们再观察 $\log p(x)$ ,发现其为常数,因为其本身是关于数据集本身的统计信息,我们称之为 Evidence,带入 $ELBO$ 可得:
$$
\log p(\boldsymbol{x})=\operatorname{ELBO}(q)+\operatorname{KL}(q(\boldsymbol{z}) | p(\boldsymbol{z} \mid \boldsymbol{x})) \tag{11}
$$
- 因为等式左边是常数,我们的目标又是最小化 KL 项,那么我们要做的其实就是最大化 $ELBO(q)$,既:
- 到此,我们可以总结说:想要找到 $ q^{*}(z) $ 只要最大化 $ q(z) $ 的ELBO就可以了。
Q&A
为啥叫 Evidence Lower Bound?
- 因为KL散度always大于等于0,所以有以下不等式:
- ELBO其实就是数据 Evidence $ \log p(x) $ 的下界。
为什么 $p(z|x)$ 不好算,而 $p(x,z)=p(x)p(z|x)$ 又能算出来了呢?
-
我的抽象理解是,$x$ 是 obversation,是观测到的表象,比如各种复杂的症状;$z$ 是 latent variable,是表象的本质,比如得了什么病。
-
如果已知 $z$(你得了什么病),很容易查出 $x$ 的分布(你可能的症状)。但反过来则不容易,要知道$p(x|z)、p(x)、p(z)$ 之后,用贝叶斯公式才能知道(有先验知识的医生才能做到)
—— XIronMan
求解 ELBO 优化问题
- 有很多解法: 平均场变分族、蒙特卡洛、黑盒变分推断等
- 此处仅拿一个介绍:平均场变分族
平均场变分族
并没有很懂
- 平均场变分族是这样的函数:
$$
q(Z ; \lambda)=\prod_{k=1}^{K} q_{k}\left(Z_{k} ; \lambda_{k}\right)
$$
- 我们就用这个函数来逼近真实分布好了。根据贝叶斯公式, $x $ 和 $z$ 的联合分布概率 $p(z,x)$ 可以用已知 $x$ 分布的情况下,$z $ 的分布概率乘以 $x$ 分布的概率:
$$
p\left(z_{1: m}, x_{1: n}\right)=p\left(x_{1: n}\right) \prod_{j=1}^{m} p\left(z_{j} \mid z_{1:(j-1)}, x_{1: n}\right)
$$
- 对于我们选定用来逼近真实分布的“变分函数”,其期望可以写为:
$$
E\left[\log q\left(z_{1: m}\right)\right]=\sum_{j=1}^{m} E_{j}\left[\log q\left(z_{j}\right)\right]
$$
- 将其带入ELBO得:
$$
E L B O = \log p ( x _ { 1 :n } ) + \sum _ { j = 1 } ^ { m } E [ \log p ( z _ { j } | z _ { 1 : ( j - 1 )} , x _ { 1 : n } ) ] - E _ { j } [ \log q ( z _ { j } ) ]
$$
- 求ELBO的极值,就要求导令导数等于0:
$$
\frac{d E L B O}{d q\left(z_{k}\right)}=E_{-k}\left[\log p\left(z_{k} \mid z_{-k}, x\right)\right]-\log q\left(z_{k}\right)-1=0
$$
- 根据这个梯度,可以对 $q$ 进行梯度下降的迭代:
$$
q^{*}\left(z_{k}\right) \propto \exp E_{-k}\left[\log p\left(z_{k}, z_{-k}, x\right)\right]
$$
参考资料
- Auto-Encoding Variational Bayes
- https://en.wikipedia.org/wiki/Evidence_lower_bound
- https://zhuanlan.zhihu.com/p/385341342
- https://www.jianshu.com/p/98a9c48e9c7f
文章链接:
https://www.zywvvd.com/notes/study/probability/elbo/elbo/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付