大家好,今天我们来聊一聊 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θ(x∣z))(即所谓的“解码器”)生成的。为了学习到这个模型,我们需要最大化观测数据的对数似然 ( 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ϕ(z∣x))(即所谓的“编码器”),用来近似真实的后验分布 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(z∣x))。这样我们就可以绕过直接计算复杂的后验分布,把优化过程拆解成能处理的形式。
而 ELBO 就是用来帮助我们最大化 ( log p θ ( x ) \log p_\theta(x) logpθ(x)) 的工具,它同时指导我们去优化编码器 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(z∣x)) 和解码器 ( p θ ( x ∣ z ) p_\theta(x|z) pθ(x∣z))。接下来让我们一起看看它的推导过程。
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ϕ(z∣x)[logqϕ(z∣x)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ϕ(z∣x)[logqϕ(z∣x)pθ(x,z)]+≥0 DKL(qϕ(z∣x)∥pθ(z∣x)).
因为 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ϕ(z∣x)[logqϕ(z∣x)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ϕ(z∣x)) 和 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(z∣x)) 完全一致时,这个下界和 ( log p θ ( x ) \log p_\theta(x) logpθ(x)) 就会完全相等。
4. 详细推导步骤
我们一步一步看看这个推导是怎么来的。
-
往 ( log p θ ( x ) \log p_\theta(x) logpθ(x)) 里“塞进”我们的代理分布 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(z∣x))
因为我们引入了 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(z∣x)) 来近似真实的后验 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(z∣x)),那么先注意到:
1 = ∫ q ϕ ( z ∣ x ) d z . 1 \;=\; \int q_\phi(z|x)\,dz. 1=∫qϕ(z∣x)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ϕ(z∣x)dz. -
把 ( 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ϕ(z∣x)logpθ(x)dz=Eqϕ(z∣x)[logpθ(x)]. -
使用贝叶斯公式
我们知道 ( p θ ( x , z ) = p θ ( z ∣ x ) p θ ( x ) p_\theta(x,z) = p_\theta(z|x)\,p_\theta(x) pθ(x,z)=pθ(z∣x)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ϕ(z∣x)[logpθ(x)]=Eqϕ(z∣x)[logpθ(z∣x)pθ(x,z)]. -
分子分母同乘 ( q ϕ ( z ∣ x ) q ϕ ( z ∣ x ) \frac{q_\phi(z|x)}{q_\phi(z|x)} qϕ(z∣x)qϕ(z∣x))
接下来,为了把 (
log
p
θ
(
x
,
z
)
p
θ
(
z
∣
x
)
\log \frac{p_\theta(x,z)}{p_\theta(z|x)}
logpθ(z∣x)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θ(z∣x)pθ(x,z)=log(pθ(z∣x)pθ(x,z)×qϕ(z∣x)qϕ(z∣x))=logqϕ(z∣x)pθ(x,z)−logqϕ(z∣x)pθ(z∣x).
因此我们得到
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ϕ(z∣x)[logpθ(z∣x)pθ(x,z)]=Eqϕ(z∣x)[logqϕ(z∣x)pθ(x,z)]+Eqϕ(z∣x)[logpθ(z∣x)qϕ(z∣x)].
- 识别出 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ϕ(z∣x)[logqϕ(z∣x)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ϕ(z∣x)[logpθ(z∣x)qϕ(z∣x)]=DKL(qϕ(z∣x)∥pθ(z∣x)).
这正是 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ϕ(z∣x)[logqϕ(z∣x)pθ(x,z)]+≥0 DKL(qϕ(z∣x)∥pθ(z∣x)).
由于 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ϕ(z∣x)[logqϕ(z∣x)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ϕ(z∣x)∥pθ(z∣x)).
- 如果 我们的“编码器” ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(z∣x)) 能够准确地近似真实后验 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(z∣x)),这时 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ϕ(z∣x)) 尽量逼近 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(z∣x))。
也就是说,在训练变分自编码器时,通过最大化 ELBO,我们就能一并学到(1)好的解码器 (
p
θ
(
x
∣
z
)
p_\theta(x|z)
pθ(x∣z)) 来提升生成质量;(2)好的编码器 (
q
ϕ
(
z
∣
x
)
q_\phi(z|x)
qϕ(z∣x)) 来近似后验分布。
这就是为什么 VAE 的训练目标可以统一地写成 最大化 ELBO。
6. 小结
- 我们想要最大化的是 ( log p θ ( x ) \log p_\theta(x) logpθ(x)),但它一般难以直接求解。
- 引入可学习的“编码器” (
q
ϕ
(
z
∣
x
)
q_\phi(z|x)
qϕ(z∣x)) 作为近似后验分布,并利用它对 (
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ϕ(z∣x)∥pθ(z∣x)). - 由于 KL 散度 ( ≥ 0 \ge 0 ≥0),于是 ELBO 便是 ( log p θ ( x ) \log p_\theta(x) logpθ(x)) 的下界。
- 如果最大化这个 ELBO,就等同于在最小化该 KL 散度,从而让 ( q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(z∣x)) 和 ( p θ ( z ∣ x ) p_\theta(z|x) pθ(z∣x)) 变得相近。
这就完成了我们对 ELBO 的推导与解释。在实际操作中,我们通过梯度下降或其他优化方法来最大化 ELBO,同时学得最优的参数 ( ϕ \phi ϕ)(编码器)和 ( θ \theta θ)(解码器)。当训练完成后,编码器可以将数据映射到潜在空间,解码器可以从潜在空间重构或生成新的数据,实现 变分自编码器 的功能!
后记
2025年3月3日17点04分于上海,在gpt o1大模型辅助下完成。