变分推断 ELBO

本文最后更新于:2022年9月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$ 分布,我们引入带有隐变量的概率分布:

    1. 首先定义隐变量 $Z$,其分布 $p(z)$ 我们可以任意给定(一般为标准高斯分布)

    2. 定义复杂函数 $f_\theta$,操作层面上可以理解为结构确定、参数为 $\theta$ 的神经网络

    3. 定义由 $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)] $,那么上式能表示成期望形式:
$$ \begin{aligned} \mathrm{KL}(q(\boldsymbol{z}) \| p(\boldsymbol{z} \mid \boldsymbol{x})) &=\int_{\boldsymbol{z}} q(\boldsymbol{z}) \log q(\boldsymbol{z}) d \boldsymbol{z}-\int_{\boldsymbol{z}} q(\boldsymbol{z}) \log p(\boldsymbol{z} \mid \boldsymbol{x}) d \boldsymbol{z} \\ &=\mathbb{E}_{q}[\log q(\boldsymbol{z})]-\mathbb{E}_{q}[\log p(\boldsymbol{z} \mid \boldsymbol{x})] \end{aligned} \tag 6 $$
  • 第二项可以用条件概率公式继续展开:
$$ \begin{aligned} \mathrm{KL}(q(\boldsymbol{z}) \| p(\boldsymbol{z} \mid \boldsymbol{x})) &=\mathbb{E}_{q}[\log q(\boldsymbol{z})]-\mathbb{E}_{q}[\log p(\boldsymbol{z} \mid \boldsymbol{x})] \\ &=\mathbb{E}_{q}[\log q(\boldsymbol{z})]-\mathbb{E}_{q}\left[\log \left[\frac{p(\boldsymbol{x}, \boldsymbol{z})}{p(\boldsymbol{x})}\right]\right] \\ &=\mathbb{E}_{q}[\log q(\boldsymbol{z})]-\mathbb{E}_{q}[\log p(\boldsymbol{x}, \boldsymbol{z})]+\mathbb{E}_{q}[\log p(x)] \end{aligned} \tag7 $$
  • 此时,变成了三项,观察各项,发现第三项里面 $log⁡p(x)$ 与期望的对象 $q(z)$ 是无关的,所以期望符号可以直接去掉,于是得到:
$$ \begin{aligned} \mathrm{KL}(q(\boldsymbol{z}) \| p(\boldsymbol{z} \mid \boldsymbol{x})) &=\mathbb{E}_{q}[\log q(\boldsymbol{z})]-\mathbb{E}_{q}[\log p(\boldsymbol{x}, \boldsymbol{z})]+\mathbb{E}_{q}[\log p(\boldsymbol{x})] \\ &=\underbrace{\mathbb{E}_{q}[\log q(\boldsymbol{z})]-\mathbb{E}_{q}[\log p(\boldsymbol{x}, \boldsymbol{z})]}_{\text {-ELBO }}+\log p(\boldsymbol{x}) \end{aligned} \tag8 \label8 $$
  • 此时,我们把前两项称之为 −ELBO (Evidence Lower Bound)。(注意这里是负的ELBO)
  • 那么,关于 $q(z)$ 的 $ELBO(q)$ 为:
$$ \operatorname{ELBO}(q)=\mathbb{E}_{q}[\log p(\boldsymbol{x}, \boldsymbol{z})]-\mathbb{E}_{q}[\log q(\boldsymbol{z})] \tag9 $$
  • 实际计算中,ELBO可以表示成以下形式进行计算:
$$ \begin{aligned} \operatorname{ELBO}(q) &=\mathbb{E}_{q}[\log p(x, z)]-\mathbb{E}_{q}[\log q(z)] \\ &=\mathbb{E}_{q}[\log p(x \mid z) p(z)]-\mathbb{E}_{q}[\log q(z)] \\ &=\mathbb{E}_{q}[\log p(x \mid z)]+\mathbb{E}_{q}[\log p(z)]-\mathbb{E}_{q}[\log q(z)] \\ &=\mathbb{E}_{q}[\log p(x \mid z)]+\mathbb{E}_{q}\left[\frac{\log p(z)}{\log q(z)}\right] \\ &=\mathbb{E}_{q}[\log p(x \mid z)]+\int_{z} q(z) \frac{\log p(z)}{\log q(z)} d z \\ &=\mathbb{E}_{q}[\log p(x \mid z)]-K L(q(z) \| p(z)) \end{aligned} \tag{10} $$
  • 回到公式 $\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)$,既:
$$ \begin{aligned} q^{*}(\boldsymbol{z}) &=\underset{q(\boldsymbol{z}) \in Q}{\operatorname{argmin}} \mathrm{KL}(q(\boldsymbol{z}) \| \overbrace{p(\boldsymbol{z} \mid \boldsymbol{x})}^{\text {unknown }}) \\ &=\underset{q(\boldsymbol{z}) \in Q}{\operatorname{argmax}} \operatorname{ELBO}(q) \end{aligned} \tag{12} $$
  • 到此,我们可以总结说:想要找到 $ q^{*}(z) $ 只要最大化 $ q(z) $ 的ELBO就可以了。

Q&A

为啥叫 Evidence Lower Bound?
  • 因为KL散度always大于等于0,所以有以下不等式:
$$ \begin{aligned} \log p(\boldsymbol{x}) &=\operatorname{ELBO}(q)+\mathrm{KL}(q(\boldsymbol{z}) \| p(\boldsymbol{z} \mid \boldsymbol{x})) \\ & \geq \operatorname{ELBO}(q) \end{aligned} $$
  • 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]
$$

参考资料


变分推断 ELBO
https://www.zywvvd.com/notes/study/probability/elbo/elbo/
作者
Yiwei Zhang
发布于
2022年8月27日
许可协议