1. ELBO是什么?

ELBO 是机器学习中 变分推断(Variational Inference) 的一个核心概念,尤其在 变分自编码器(VAE) 中特别常见。简单来说,ELBO 是一个我们希望最大化的量,它是数据对数似然 (\log p(x)) 的一个“下限”(下界)。换句话说:

  • log⁡p(x)\log p(x)logp(x) 是啥? 它表示我们的模型生成数据 xxx 的可能性有多大。我们希望这个值越大越好,因为这意味着模型很擅长解释或生成数据。
  • 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(zx) 和先验分布 p(z)p(z)p(z) 的差异(让潜在变量尽量符合我们设定的简单分布,比如正态分布)。

2. ELBO的推导过程

ELBO 的推导听起来有点学术,但其实可以用生活化的方式理解。它的核心思想是:我们想计算某个复杂的东西(log⁡p(x)\log p(x)logp(x)),但它太难了,所以我们引入一个“帮手”分布 q(z∣x)q(z|x)q(zx) 来近似它。

背景:为什么需要 ELBO?

假设你有一个生成模型(比如 VAE),目标是让模型学会生成像真实数据 xxx 那样的东西。数学上,我们希望最大化 log⁡p(x)\log p(x)logp(x),而:

p(x)=∫p(x∣z)p(z) dz p(x) = \int p(x|z) p(z) \, dz p(x)=p(xz)p(z)dz

  • zzz 是潜在变量(可以想象成数据的“隐藏原因”)。
  • p(x∣z)p(x|z)p(xz) 是给定 zzz 时生成 xxx 的概率。
  • p(z)p(z)p(z)zzz 的先验分布(比如标准正态分布)。

问题是,这个积分通常没法直接算,尤其当 zzz 是高维的时候。为了解决这个问题,我们用变分推断的方法,引入一个近似分布 q(z∣x)q(z|x)q(zx) 来帮忙。

推导步骤

下面我们一步步推导出 ELBO:

步骤 1:从对数似然开始

我们想计算:
log⁡p(x)=log⁡∫p(x∣z)p(z) dz \log p(x) = \log \int p(x|z) p(z) \, dz logp(x)=logp(xz)p(z)dz
这个积分太复杂,直接算不下去,怎么办?

步骤 2:引入帮手分布 q(z∣x)q(z|x)q(zx)

我们可以“耍个小聪明”,在积分里乘以 1(因为乘以 1 不改变值),但写成 q(z∣x)q(z∣x)\frac{q(z|x)}{q(z|x)}q(zx)q(zx) 的形式:
log⁡p(x)=log⁡∫q(z∣x)q(z∣x)p(x∣z)p(z) dz \log p(x) = \log \int \frac{q(z|x)}{q(z|x)} p(x|z) p(z) \, dz logp(x)=logq(zx)q(zx)p(xz)p(z)dz
然后改写成期望的形式:
log⁡p(x)=log⁡Eq(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(zx)[q(zx)p(xz)p(z)]
这里,$\mathbb{E}_{q(z|x)}$ 表示按照 q(z∣x)q(z|x)q(zx) 分布取期望。意思是,我们用 q(z∣x)q(z|x)q(zx) 来采样 zzz,然后计算里面的东西。

步骤 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(zx)p(xz)p(z) 代进去:
log⁡p(x)≥Eq(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(zx)[logq(zx)p(xz)p(z)]
右边这个东西就是 ELBO!它是一个下界,总是小于等于 (\log p(x))。

步骤 4:拆解 ELBO

我们把 ELBO 再拆开看看:
ELBO=Eq(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(zx)[logq(zx)p(xz)p(z)]
利用对数的性质 (log⁡ab=log⁡a−log⁡b\log \frac{a}{b} = \log a - \log blogba=logalogb):
ELBO=Eq(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(zx)[logp(xz)+logq(zx)p(z)]
拆成两部分:

  • 第一部分Eq(z∣x)[log⁡p(x∣z)]\mathbb{E}_{q(z|x)} \left[ \log p(x|z) \right]Eq(zx)[logp(xz)],表示从 q(z∣x)q(z|x)q(zx) 采样的 zzz 生成 xxx 的可能性。这是“重构损失”的核心。
  • 第二部分Eq(z∣x)[log⁡p(z)q(z∣x)]\mathbb{E}_{q(z|x)} \left[ \log \frac{p(z)}{q(z|x)} \right]Eq(zx)[logq(zx)p(z)],其实就是 −DKL(q(z∣x)∣∣p(z))- D_{KL}(q(z|x) || p(z))DKL(q(zx)∣∣p(z)),衡量 q(z∣x)q(z|x)q(zx)p(z)p(z)p(z) 的差异。

所以,ELBO 可以写成:
ELBO=Eq(z∣x)[log⁡p(x∣z)]−DKL(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(zx)[logp(xz)]DKL(q(zx)∣∣p(z))

步骤 5:ELBO 和 log⁡p(x)\log p(x)logp(x) 的关系

为什么 ELBO 是下界?因为:
log⁡p(x)−ELBO=DKL(q(z∣x)∣∣p(z∣x)) \log p(x) - \text{ELBO} = D_{KL}(q(z|x) || p(z|x)) logp(x)ELBO=DKL(q(zx)∣∣p(zx))

  • DKLD_{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(zx),同时也让 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(zx)p(xz)p(z) 这样的比值。那为什么可以把两个分布相除?这样做有什么意义?

为什么可以做除法?

  • 概率密度:如果是连续分布,p(z)p(z)p(z)q(z∣x)q(z|x)q(zx) 是概率密度函数,它们的比值 p(z)q(z∣x)\frac{p(z)}{q(z|x)}q(zx)p(z) 只是一个普通的数值函数,没啥问题。
  • 离散分布:如果是离散分布,p(z)p(z)p(z)q(z∣x)q(z|x)q(zx) 是概率值(0 到 1 之间的数),只要 q(z∣x)≠0q(z|x) \neq 0q(zx)=0,相除也没问题。
  • 数学上合法:只要分母不为零,除法就是合法的。在实际中,我们会确保 q(z∣x)q(z|x)q(zx)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(zx)p(xz)p(z) 有点类似这个思路。
  • 变分推断的核心:我们用 q(z∣x)q(z|x)q(zx) 来近似真实的p(z∣x)p(z|x)p(zx)。比值 p(x∣z)p(z)q(z∣x)\frac{p(x|z) p(z)}{q(z|x)}q(zx)p(xz)p(z) 出现在推导中,最终帮助我们构建了 ELBO 这个可优化的目标。
  • KL 散度的来源log⁡p(z)q(z∣x)\log \frac{p(z)}{q(z|x)}logq(zx)p(z) 这一项最后变成了 KL 散度,它衡量了q(z∣x)q(z|x)q(zx)p(z)p(z)p(z) 的差距。通过优化 ELBO,我们让 q(z∣x)q(z|x)q(zx) 更接近我们想要的分布。

虽然你提到 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(zx)p(xz)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(zx),用 Jensen 不等式得到 ELBO = 重构损失 - KL 散度。
  • 分布相除:像 p(x∣z)p(z)q(z∣x)\frac{p(x|z) p(z)}{q(z|x)}q(zx)p(xz)p(z) 这样的比值在数学上没问题,它帮助我们构建 ELBO,并在变分推断中起到关键作用,比如衡量分布差异或调整采样权重。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐