1. ELBO是什么?
ELBO 是机器学习中 变分推断(Variational Inference) 的一个核心概念,尤其在 变分自编码器(VAE) 中特别常见。简单来说,ELBO 是一个我们希望最大化的量,它是数据对数似然 (\log p(x)) 的一个“下限”(下界)。换句话说:
- log p ( x ) \log p(x) logp(x) 是啥? 它表示我们的模型生成数据 x x x 的可能性有多大。我们希望这个值越大越好,因为这意味着模型很擅长解释或生成数据。
- ELBO 的作用? 因为直接计算或优化 log p ( x ) \log p(x) logp(x) 很难,我们就用 ELBO 作为它的替代品。ELBO ≤ log p ( x ) \log p(x) logp(x),而且我们可以通过优化 ELBO 来间接让 log p ( x ) \log p(x) logp(x) 变大。
在 VAE 中,ELBO 具体由两部分组成:
- 重构损失:衡量模型重建数据的质量(比如输入一张图片,模型能不能生成一张差不多的图片)。
- KL 散度:衡量潜在变量分布 q ( z ∣ x ) q(z|x) q(z∣x) 和先验分布 p ( z ) p(z) p(z) 的差异(让潜在变量尽量符合我们设定的简单分布,比如正态分布)。
2. ELBO的推导过程
ELBO 的推导听起来有点学术,但其实可以用生活化的方式理解。它的核心思想是:我们想计算某个复杂的东西( log p ( x ) \log p(x) logp(x)),但它太难了,所以我们引入一个“帮手”分布 q ( z ∣ x ) q(z|x) q(z∣x) 来近似它。
背景:为什么需要 ELBO?
假设你有一个生成模型(比如 VAE),目标是让模型学会生成像真实数据 x x x 那样的东西。数学上,我们希望最大化 log p ( x ) \log p(x) logp(x),而:
p ( x ) = ∫ p ( x ∣ z ) p ( z ) d z p(x) = \int p(x|z) p(z) \, dz p(x)=∫p(x∣z)p(z)dz
- z z z 是潜在变量(可以想象成数据的“隐藏原因”)。
- p ( x ∣ z ) p(x|z) p(x∣z) 是给定 z z z 时生成 x x x 的概率。
- p ( z ) p(z) p(z) 是 z z z 的先验分布(比如标准正态分布)。
问题是,这个积分通常没法直接算,尤其当 z z z 是高维的时候。为了解决这个问题,我们用变分推断的方法,引入一个近似分布 q ( z ∣ x ) q(z|x) q(z∣x) 来帮忙。
推导步骤
下面我们一步步推导出 ELBO:
步骤 1:从对数似然开始
我们想计算:
log
p
(
x
)
=
log
∫
p
(
x
∣
z
)
p
(
z
)
d
z
\log p(x) = \log \int p(x|z) p(z) \, dz
logp(x)=log∫p(x∣z)p(z)dz
这个积分太复杂,直接算不下去,怎么办?
步骤 2:引入帮手分布 q ( z ∣ x ) q(z|x) q(z∣x)
我们可以“耍个小聪明”,在积分里乘以 1(因为乘以 1 不改变值),但写成
q
(
z
∣
x
)
q
(
z
∣
x
)
\frac{q(z|x)}{q(z|x)}
q(z∣x)q(z∣x) 的形式:
log
p
(
x
)
=
log
∫
q
(
z
∣
x
)
q
(
z
∣
x
)
p
(
x
∣
z
)
p
(
z
)
d
z
\log p(x) = \log \int \frac{q(z|x)}{q(z|x)} p(x|z) p(z) \, dz
logp(x)=log∫q(z∣x)q(z∣x)p(x∣z)p(z)dz
然后改写成期望的形式:
log
p
(
x
)
=
log
E
q
(
z
∣
x
)
[
p
(
x
∣
z
)
p
(
z
)
q
(
z
∣
x
)
]
\log p(x) = \log \mathbb{E}_{q(z|x)} \left[ \frac{p(x|z) p(z)}{q(z|x)} \right]
logp(x)=logEq(z∣x)[q(z∣x)p(x∣z)p(z)]
这里,$\mathbb{E}_{q(z|x)}$ 表示按照
q
(
z
∣
x
)
q(z|x)
q(z∣x) 分布取期望。意思是,我们用
q
(
z
∣
x
)
q(z|x)
q(z∣x) 来采样
z
z
z,然后计算里面的东西。
步骤 3:用 Jensen 不等式
对数函数是个“凹函数”,根据 Jensen 不等式:
log
E
[
f
(
z
)
]
≥
E
[
log
f
(
z
)
]
\log \mathbb{E}[f(z)] \geq \mathbb{E}[\log f(z)]
logE[f(z)]≥E[logf(z)]
我们把
f
(
z
)
=
p
(
x
∣
z
)
p
(
z
)
q
(
z
∣
x
)
f(z) = \frac{p(x|z) p(z)}{q(z|x)}
f(z)=q(z∣x)p(x∣z)p(z) 代进去:
log
p
(
x
)
≥
E
q
(
z
∣
x
)
[
log
p
(
x
∣
z
)
p
(
z
)
q
(
z
∣
x
)
]
\log p(x) \geq \mathbb{E}_{q(z|x)} \left[ \log \frac{p(x|z) p(z)}{q(z|x)} \right]
logp(x)≥Eq(z∣x)[logq(z∣x)p(x∣z)p(z)]
右边这个东西就是 ELBO!它是一个下界,总是小于等于 (\log p(x))。
步骤 4:拆解 ELBO
我们把 ELBO 再拆开看看:
ELBO
=
E
q
(
z
∣
x
)
[
log
p
(
x
∣
z
)
p
(
z
)
q
(
z
∣
x
)
]
\text{ELBO} = \mathbb{E}_{q(z|x)} \left[ \log \frac{p(x|z) p(z)}{q(z|x)} \right]
ELBO=Eq(z∣x)[logq(z∣x)p(x∣z)p(z)]
利用对数的性质 (
log
a
b
=
log
a
−
log
b
\log \frac{a}{b} = \log a - \log b
logba=loga−logb):
ELBO
=
E
q
(
z
∣
x
)
[
log
p
(
x
∣
z
)
+
log
p
(
z
)
q
(
z
∣
x
)
]
\text{ELBO} = \mathbb{E}_{q(z|x)} \left[ \log p(x|z) + \log \frac{p(z)}{q(z|x)} \right]
ELBO=Eq(z∣x)[logp(x∣z)+logq(z∣x)p(z)]
拆成两部分:
- 第一部分: E q ( z ∣ x ) [ log p ( x ∣ z ) ] \mathbb{E}_{q(z|x)} \left[ \log p(x|z) \right] Eq(z∣x)[logp(x∣z)],表示从 q ( z ∣ x ) q(z|x) q(z∣x) 采样的 z z z 生成 x x x 的可能性。这是“重构损失”的核心。
- 第二部分: E q ( z ∣ x ) [ log p ( z ) q ( z ∣ x ) ] \mathbb{E}_{q(z|x)} \left[ \log \frac{p(z)}{q(z|x)} \right] Eq(z∣x)[logq(z∣x)p(z)],其实就是 − D K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) - D_{KL}(q(z|x) || p(z)) −DKL(q(z∣x)∣∣p(z)),衡量 q ( z ∣ x ) q(z|x) q(z∣x) 和 p ( z ) p(z) p(z) 的差异。
所以,ELBO 可以写成:
ELBO
=
E
q
(
z
∣
x
)
[
log
p
(
x
∣
z
)
]
−
D
K
L
(
q
(
z
∣
x
)
∣
∣
p
(
z
)
)
\text{ELBO} = \mathbb{E}_{q(z|x)} \left[ \log p(x|z) \right] - D_{KL}(q(z|x) || p(z))
ELBO=Eq(z∣x)[logp(x∣z)]−DKL(q(z∣x)∣∣p(z))
步骤 5:ELBO 和 log p ( x ) \log p(x) logp(x) 的关系
为什么 ELBO 是下界?因为:
log
p
(
x
)
−
ELBO
=
D
K
L
(
q
(
z
∣
x
)
∣
∣
p
(
z
∣
x
)
)
\log p(x) - \text{ELBO} = D_{KL}(q(z|x) || p(z|x))
logp(x)−ELBO=DKL(q(z∣x)∣∣p(z∣x))
- D K L D_{KL} DKL 是 KL 散度,总是非负的 (≥ 0)。
- 当 (q(z|x) = p(z|x)) 时,KL 散度为 0,此时 ELBO = log p ( x ) \text{ELBO} = \log p(x) ELBO=logp(x)。
- 通过最大化 ELBO,我们让 (q(z|x)) 尽量接近真实的 p ( z ∣ x ) p(z|x) p(z∣x),同时也让 log p ( x ) \log p(x) logp(x) 变大。
3. 为什么可以把两个分布做除法(如 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x))以及这样做的意义
在 ELBO 推导中,我们看到 p ( x ∣ z ) p ( z ) q ( z ∣ x ) \frac{p(x|z) p(z)}{q(z|x)} q(z∣x)p(x∣z)p(z) 这样的比值。那为什么可以把两个分布相除?这样做有什么意义?
为什么可以做除法?
- 概率密度:如果是连续分布, p ( z ) p(z) p(z) 和 q ( z ∣ x ) q(z|x) q(z∣x) 是概率密度函数,它们的比值 p ( z ) q ( z ∣ x ) \frac{p(z)}{q(z|x)} q(z∣x)p(z) 只是一个普通的数值函数,没啥问题。
- 离散分布:如果是离散分布, p ( z ) p(z) p(z) 和 q ( z ∣ x ) q(z|x) q(z∣x) 是概率值(0 到 1 之间的数),只要 q ( z ∣ x ) ≠ 0 q(z|x) \neq 0 q(z∣x)=0,相除也没问题。
- 数学上合法:只要分母不为零,除法就是合法的。在实际中,我们会确保 q ( z ∣ x ) q(z|x) q(z∣x) 在 p ( z ) p(z) p(z) 有值的地方也有值,避免除以零。
这样做的意义是什么?
- 重要性采样的影子:在统计学中, p ( z ) q ( z ) \frac{p(z)}{q(z)} q(z)p(z) 这种形式很常见。比如在重要性采样中,我们用一个简单的分布 q ( z ) q(z) q(z) 来近似复杂的 p ( z ) p(z) p(z),然后用比值 p ( z ) q ( z ) \frac{p(z)}{q(z)} q(z)p(z) 作为权重调整结果。在 ELBO 中, p ( x ∣ z ) p ( z ) q ( z ∣ x ) \frac{p(x|z) p(z)}{q(z|x)} q(z∣x)p(x∣z)p(z) 有点类似这个思路。
- 变分推断的核心:我们用 q ( z ∣ x ) q(z|x) q(z∣x) 来近似真实的 p ( z ∣ x ) p(z|x) p(z∣x)。比值 p ( x ∣ z ) p ( z ) q ( z ∣ x ) \frac{p(x|z) p(z)}{q(z|x)} q(z∣x)p(x∣z)p(z) 出现在推导中,最终帮助我们构建了 ELBO 这个可优化的目标。
- KL 散度的来源: log p ( z ) q ( z ∣ x ) \log \frac{p(z)}{q(z|x)} logq(z∣x)p(z) 这一项最后变成了 KL 散度,它衡量了 q ( z ∣ x ) q(z|x) q(z∣x) 和 p ( z ) p(z) p(z) 的差距。通过优化 ELBO,我们让 q ( z ∣ x ) q(z|x) q(z∣x) 更接近我们想要的分布。
虽然你提到 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x),但在 ELBO 推导中具体是 p ( x ∣ z ) p ( z ) q ( z ∣ x ) \frac{p(x|z) p(z)}{q(z|x)} q(z∣x)p(x∣z)p(z)。不过原理类似:分布相除本质上是比较两个分布在某点的“相对强度”,在变分推断中帮助我们找到一个好用的近似。
4. 总结
- ELBO 是什么? 它是 log p ( x ) \log p(x) logp(x) 的一个下界,通过最大化 ELBO,我们可以优化模型,让它更好地生成或解释数据。
- 推导过程:从 log p ( x ) \log p(x) logp(x) 出发,引入近似分布 q ( z ∣ x ) q(z|x) q(z∣x),用 Jensen 不等式得到 ELBO = 重构损失 - KL 散度。
- 分布相除:像 p ( x ∣ z ) p ( z ) q ( z ∣ x ) \frac{p(x|z) p(z)}{q(z|x)} q(z∣x)p(x∣z)p(z) 这样的比值在数学上没问题,它帮助我们构建 ELBO,并在变分推断中起到关键作用,比如衡量分布差异或调整采样权重。