Bootstrap

变分自编码器(Variational Autoencoder)里面ELBO(Evidence Lower Bound)推导


大家好,今天我们来聊一聊 VAE 里非常重要的一个概念 —— ELBO(Evidence Lower Bound)。如果你接触过变分自编码器(Variational Autoencoder),一定听过 ELBO 这个名词,但很多同学初学时都会疑惑:为什么会有这样一个损失函数?它究竟是怎么推导出来的?接下来,我们就从头开始,逐步看看这个推导过程。


1. 引入问题:为什么要定义 ELBO?

在 VAE 里,我们有一个数据集 ( { x } \{x\} {x}),我们假设它是由一个潜在变量 ( z z z) 通过某个概率模型 ( p θ ( x ∣ z ) p_\theta(x|z) pθ(xz))(即所谓的“解码器”)生成的。为了学习到这个模型,我们需要最大化观测数据的对数似然 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x))。但直接最大化它往往比较困难,因为通常 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 不好求。

为了克服这个困难,我们提出了一个“代理”分布 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx))(即所谓的“编码器”),用来近似真实的后验分布 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(zx))。这样我们就可以绕过直接计算复杂的后验分布,把优化过程拆解成能处理的形式。

ELBO 就是用来帮助我们最大化 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 的工具,它同时指导我们去优化编码器 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)) 和解码器 ( p θ ( x ∣ z ) p_\theta(x|z) pθ(xz))。接下来让我们一起看看它的推导过程。


2. 什么是 ELBO?

ELBO(Evidence Lower Bound)被定义为:

ELBO ( x )    =    E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) q ϕ ( z ∣ x ) ] . \text{ELBO}(x) \;=\; \mathbb{E}_{q_\phi(z|x)} \biggl[\log \frac{p_\theta(x, z)}{q_\phi(z|x)}\biggr]. ELBO(x)=Eqϕ(zx)[logqϕ(zx)pθ(x,z)].

这是一个我们想要最大化的目标函数。
但你也许会问:究竟是怎么想到要写出这个形式的?为什么它就能帮助我们最大化 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 呢?


3. 推导 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 的分解

为了解释为什么 ELBO 可以作为 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 的下界,我们先看下面这条著名的等式分解:

log ⁡ p θ ( x ) = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) q ϕ ( z ∣ x ) ] ⏟ ELBO ( x )    +    D KL ( q ϕ ( z ∣ x )   ∥   p θ ( z ∣ x ) ) ⏟ ≥ 0 . \log p_\theta(x) = \underbrace{\mathbb{E}_{q_\phi(z|x)} \Bigl[\log \frac{p_\theta(x, z)}{q_\phi(z|x)}\Bigr]}_{\text{ELBO}(x)} \;+\; \underbrace{D_{\text{KL}}\bigl(q_\phi(z|x)\,\|\,p_\theta(z|x)\bigr)}_{\geq 0}. logpθ(x)=ELBO(x) Eqϕ(zx)[logqϕ(zx)pθ(x,z)]+0 DKL(qϕ(zx)pθ(zx)).

因为 KL 散度(KL Divergence)是非负的,所以它推出了

log ⁡ p θ ( x )    ≥    E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) q ϕ ( z ∣ x ) ] = ELBO ( x ) . \log p_\theta(x) \;\ge\; \mathbb{E}_{q_\phi(z|x)}\Bigl[\log \frac{p_\theta(x, z)}{q_\phi(z|x)}\Bigr] = \text{ELBO}(x). logpθ(x)Eqϕ(zx)[logqϕ(zx)pθ(x,z)]=ELBO(x).

换句话说,ELBO 确实是 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 的一个下界。这也就说明了,如果我们能够最大化 ELBO,其实就等价于在尽可能地最大化 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x))。并且当 KL 散度为 0 时,也就是 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)) 和 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(zx)) 完全一致时,这个下界和 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 就会完全相等。


4. 详细推导步骤

我们一步一步看看这个推导是怎么来的。

  1. 往 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 里“塞进”我们的代理分布 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx))
    因为我们引入了 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)) 来近似真实的后验 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(zx)),那么先注意到:
    1    =    ∫ q ϕ ( z ∣ x )   d z . 1 \;=\; \int q_\phi(z|x)\,dz. 1=qϕ(zx)dz.
    用这个“1”去乘 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 没有改变任何东西:
    log ⁡ p θ ( x ) = log ⁡ p θ ( x ) × ∫ q ϕ ( z ∣ x )   d z . \log p_\theta(x) = \log p_\theta(x) \times \int q_\phi(z|x)\,dz. logpθ(x)=logpθ(x)×qϕ(zx)dz.

  2. 把 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 写进期望里
    因为 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 与 ( z z z) 无关,所以可以把它视为常数从积分里提出来,也就变成:
    log ⁡ p θ ( x ) = ∫ q ϕ ( z ∣ x )   log ⁡ p θ ( x )   d z = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ) ] . \log p_\theta(x) = \int q_\phi(z|x)\,\log p_\theta(x)\,dz = \mathbb{E}_{q_\phi(z|x)} \bigl[\log p_\theta(x)\bigr]. logpθ(x)=qϕ(zx)logpθ(x)dz=Eqϕ(zx)[logpθ(x)].

  3. 使用贝叶斯公式
    我们知道 ( p θ ( x , z ) = p θ ( z ∣ x )   p θ ( x ) p_\theta(x,z) = p_\theta(z|x)\,p_\theta(x) pθ(x,z)=pθ(zx)pθ(x)),所以:
    E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ) ] = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) p θ ( z ∣ x ) ] . \mathbb{E}_{q_\phi(z|x)} \bigl[\log p_\theta(x)\bigr] = \mathbb{E}_{q_\phi(z|x)} \Bigl[\log \frac{p_\theta(x,z)}{p_\theta(z|x)}\Bigr]. Eqϕ(zx)[logpθ(x)]=Eqϕ(zx)[logpθ(zx)pθ(x,z)].

  4. 分子分母同乘 ( q ϕ ( z ∣ x ) q ϕ ( z ∣ x ) \frac{q_\phi(z|x)}{q_\phi(z|x)} qϕ(zx)qϕ(zx))

接下来,为了把 ( log ⁡ p θ ( x , z ) p θ ( z ∣ x ) \log \frac{p_\theta(x,z)}{p_\theta(z|x)} logpθ(zx)pθ(x,z)) 转化成我们想要的形式,做一个技巧性的操作:
log ⁡ p θ ( x , z ) p θ ( z ∣ x )      =      log ⁡ ( p θ ( x , z ) p θ ( z ∣ x ) × q ϕ ( z ∣ x ) q ϕ ( z ∣ x ) )      =      log ⁡ p θ ( x , z ) q ϕ ( z ∣ x )    −    log ⁡ p θ ( z ∣ x ) q ϕ ( z ∣ x ) . \log \frac{p_\theta(x,z)}{p_\theta(z|x)} \;\;=\;\; \log \Bigl(\frac{p_\theta(x,z)}{p_\theta(z|x)} \times \frac{q_\phi(z|x)}{q_\phi(z|x)}\Bigr) \;\;=\;\; \log \frac{p_\theta(x,z)}{q_\phi(z|x)} \;-\; \log \frac{p_\theta(z|x)}{q_\phi(z|x)}. logpθ(zx)pθ(x,z)=log(pθ(zx)pθ(x,z)×qϕ(zx)qϕ(zx))=logqϕ(zx)pθ(x,z)logqϕ(zx)pθ(zx).
因此我们得到
E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) p θ ( z ∣ x ) ] = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) q ϕ ( z ∣ x ) ]    +    E q ϕ ( z ∣ x ) [ log ⁡ q ϕ ( z ∣ x ) p θ ( z ∣ x ) ] . \mathbb{E}_{q_\phi(z|x)} \Bigl[\log \frac{p_\theta(x,z)}{p_\theta(z|x)}\Bigr] = \mathbb{E}_{q_\phi(z|x)} \Bigl[\log \frac{p_\theta(x,z)}{q_\phi(z|x)}\Bigr] \;+\; \mathbb{E}_{q_\phi(z|x)} \Bigl[\log \frac{q_\phi(z|x)}{p_\theta(z|x)}\Bigr]. Eqϕ(zx)[logpθ(zx)pθ(x,z)]=Eqϕ(zx)[logqϕ(zx)pθ(x,z)]+Eqϕ(zx)[logpθ(zx)qϕ(zx)].

  1. 识别出 ELBO 和 KL 散度
    • 第一项
      E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) q ϕ ( z ∣ x ) ] \mathbb{E}_{q_\phi(z|x)} \Bigl[\log \frac{p_\theta(x,z)}{q_\phi(z|x)}\Bigr] Eqϕ(zx)[logqϕ(zx)pθ(x,z)]
      就是我们前面提到的 ELBO
    • 第二项
      E q ϕ ( z ∣ x ) [ log ⁡ q ϕ ( z ∣ x ) p θ ( z ∣ x ) ] = D KL ( q ϕ ( z ∣ x )   ∥   p θ ( z ∣ x ) ) . \mathbb{E}_{q_\phi(z|x)} \Bigl[\log \frac{q_\phi(z|x)}{p_\theta(z|x)}\Bigr] = D_{\text{KL}}\bigl(q_\phi(z|x)\,\|\,p_\theta(z|x)\bigr). Eqϕ(zx)[logpθ(zx)qϕ(zx)]=DKL(qϕ(zx)pθ(zx)).
      这正是 KL 散度 的定义。

最终,就得到著名的分解式:

log ⁡ p θ ( x ) ] = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) q ϕ ( z ∣ x ) ] ⏟ ELBO    +    D KL ( q ϕ ( z ∣ x )   ∥   p θ ( z ∣ x ) ) ⏟ ≥ 0 . \log p_\theta(x) ]= \underbrace{\mathbb{E}_{q_\phi(z|x)} \bigl[\log \tfrac{p_\theta(x,z)}{q_\phi(z|x)}\bigr]}_{\text{ELBO}} \;+\; \underbrace{D_{\text{KL}} \bigl(q_\phi(z|x)\,\|\,p_\theta(z|x)\bigr)}_{\geq 0}. logpθ(x)]=ELBO Eqϕ(zx)[logqϕ(zx)pθ(x,z)]+0 DKL(qϕ(zx)pθ(zx)).

由于 KL 散度总是 ( ≥ 0 \ge 0 0),于是有了

log ⁡ p θ ( x )    ≥    E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x , z ) q ϕ ( z ∣ x ) ] = ELBO ( x ) . \log p_\theta(x) \;\ge\; \mathbb{E}_{q_\phi(z|x)} \Bigl[\log \tfrac{p_\theta(x,z)}{q_\phi(z|x)}\Bigr]= \text{ELBO}(x). logpθ(x)Eqϕ(zx)[logqϕ(zx)pθ(x,z)]=ELBO(x).

这就证明了 ELBO 是 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 的一个下界。


5. 为什么要优化 ELBO?

从上面的推导可知,ELBO 和 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 的差值其实正是一个 KL 散度:

log ⁡ p θ ( x ) − ELBO ( x ) = D KL ( q ϕ ( z ∣ x )   ∥   p θ ( z ∣ x ) ) . \log p_\theta(x) - \text{ELBO}(x)= D_{\text{KL}}\bigl(q_\phi(z|x)\,\|\,p_\theta(z|x)\bigr). logpθ(x)ELBO(x)=DKL(qϕ(zx)pθ(zx)).

  • 如果 我们的“编码器” ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)) 能够准确地近似真实后验 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(zx)),这时 KL 散度就会非常小,甚至趋于 0,那么 ( ELBO ( x ) \text{ELBO}(x) ELBO(x)) 就会非常接近 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x))。
  • 当我们最大化 ELBO,其实我们同时在最小化这个 KL 散度,使得 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)) 尽量逼近 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(zx))。

也就是说,在训练变分自编码器时,通过最大化 ELBO,我们就能一并学到(1)好的解码器 ( p θ ( x ∣ z ) p_\theta(x|z) pθ(xz)) 来提升生成质量;(2)好的编码器 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)) 来近似后验分布。
这就是为什么 VAE 的训练目标可以统一地写成 最大化 ELBO


6. 小结

  1. 我们想要最大化的是 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)),但它一般难以直接求解。
  2. 引入可学习的“编码器” ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)) 作为近似后验分布,并利用它对 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 做分解,得到
    log ⁡ p θ ( x ) = ELBO ( x )    +    D KL ( q ϕ ( z ∣ x )   ∥   p θ ( z ∣ x ) ) . \log p_\theta(x) = \text{ELBO}(x) \;+\; D_{\text{KL}}\bigl(q_\phi(z|x)\,\|\,p_\theta(z|x)\bigr). logpθ(x)=ELBO(x)+DKL(qϕ(zx)pθ(zx)).
  3. 由于 KL 散度 ( ≥ 0 \ge 0 0),于是 ELBO 便是 ( log ⁡ p θ ( x ) \log p_\theta(x) logpθ(x)) 的下界。
  4. 如果最大化这个 ELBO,就等同于在最小化该 KL 散度,从而让 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(zx)) 和 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(zx)) 变得相近。

这就完成了我们对 ELBO 的推导与解释。在实际操作中,我们通过梯度下降或其他优化方法来最大化 ELBO,同时学得最优的参数 ( ϕ \phi ϕ)(编码器)和 ( θ \theta θ)(解码器)。当训练完成后,编码器可以将数据映射到潜在空间,解码器可以从潜在空间重构或生成新的数据,实现 变分自编码器 的功能!


后记

2025年3月3日17点04分于上海,在gpt o1大模型辅助下完成。

;