Lecture 6 · 隐变量模型(二):变分推断与变分自编码器 · Variational Inference and the VAE

Deep Generative Models · Lecture 06。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:Stanford CS236 Deep Generative Models(Fall 2023,Stefano Ermon),Lecture 6 · 2023-10-16 · VAEs(slides:cs236_lecture6.pdf,标题 Latent Variable Models,26 页);课程笔记 Variational Autoencoders。 依据说明:本讲按原课 slides 的顺序展开:回顾 VAE 与 ELBO → 后验算不出来 → 对 θ 和 φ 一起优化 → 整个数据集上的 ELBO 与每个数据点一组变分参数 → 随机变分推断(SVI)→ ELBO 的蒙特卡洛估计与梯度 → 对 φ 求梯度的困难、REINFORCE 与重参数化 → 摊销推断 → 摊销推断下的学习算法 → 自编码器视角(Alice 与 Bob)→ 隐变量模型小结 → 研究方向(编码器、解码器、目标函数)。REINFORCE 的推导和基线、近似差距与摊销差距的分解(Cremer et al. 2018)、IWAE 训练、β-VAE 与压缩率–失真、后验坍塌与 free bits 都是本讲义补充的。全部实验在像素世界上进行:d_z = 2 的 VAE 可以在隐空间的细网格上做数值积分,得到”精确的” log⁡pθ(x)\log p_\theta(x) 和后验 pθ(z∣x)p_\theta(z \mid x)——这让我们能把 ELBO 的每一份损失都算清楚。 配套代码 Code:code/lecture06/(PyTorch;1 个模块 + 4 个演示脚本;训练好的 12 个模型缓存在 checkpoints/,第一次运行最长的脚本约 110 秒) 预计阅读时间:3.5 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

学完这一讲,你应该能够:

  1. 写出整个数据集上的 ELBO,说明为什么每个数据点需要自己的变分参数 ϕ(i)\phi^{(i)},并写出随机变分推断(SVI)的内外两层算法。
  2. 说明对 θ\theta 求 ELBO 的梯度为什么容易、对 ϕ\phi 为什么难;推导 REINFORCE(得分函数估计)和重参数化两种梯度估计,解释基线的作用,以及为什么重参数化的方差通常小得多、但只适用于连续的 zz。
  3. 解释摊销推断:用一个编码器 qϕ(z∣x)q_\phi(z \mid x) 代替每个数据点的参数;把 ELBO 的差距分解成近似差距和摊销差距。
  4. 写出 VAE 的自编码器视角 L=Eqϕ(z∣x)[log⁡pθ(x∣z)]−DKL(qϕ(z∣x)∥p(z))\mathcal{L} = \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x \mid z)] - D_{\mathrm{KL}}(q_\phi(z \mid x) \Vert p(z)),讲清 Alice 与 Bob 的故事,并能从零写出一个 VAE 的训练循环。
  5. 知道怎样评估 VAE:ELBO、IWAE 估计的 log⁡p(x)\log p(x),以及它们各自偏低多少。
  6. 了解三个研究方向:更紧的界(IWAE)及其代价、β-VAE 与压缩率–失真、强大的解码器与后验坍塌。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲只给直觉,后面几讲再展开 Previewed only
第 5 讲:ELBO、log⁡p=ELBO+DKL(q∥p(z∣x))\log p = \text{ELBO} + D_{\mathrm{KL}}(q \Vert p(z \mid x))、变分推断、重要性采样与 IWAE 下界、EM用可逆变换让隐变量模型的似然精确可算(第 7–8 讲);用流做更灵活的 qq
第 3–4 讲:自回归模型、最大似然、SGD离散隐变量的梯度(Gumbel-softmax、VQ-VAE,第 17 讲)
PyTorch 的自动求导、nn.Module层次化 VAE 与扩散模型的关系(第 16 讲)

0.3 本讲地图 Map

§1  回顾:VAE、ELBO、后验算不出来
§2  在整个数据集上学习:每个数据点一组 φ;随机变分推断(SVI)                         ← 代码 03
§3  梯度:对 θ 容易,对 φ 难;REINFORCE;重参数化                                     ← 代码 01
§4  摊销推断:编码器 q_φ(z|x);近似差距与摊销差距;SVI 学习 vs 摊销学习               ← 代码 03
§5  自编码器视角:重构 + KL;Alice 与 Bob;在像素世界上训练 VAE;隐空间;ELBO vs 真实似然 ← 代码 02
§6  研究方向:更好的编码器 / 解码器 / 目标;IWAE;β-VAE;强大的解码器与后验坍塌        ← 代码 04
§7  VAE 的完整配方
§8  2023 年之后
§9–13  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 记号 Notation

符号含义
p(z)=N(0,I)p(z) = \mathcal{N}(0, I),z∈Rdzz \in \mathbb{R}^{d_z}先验
pθ(x∣z)p_\theta(x \mid z)解码器(本讲的代码里是 64 个独立的伯努利,logit 由 MLP 给出)
q(z;ϕ(i))q(z; \phi^{(i)})第 ii 个数据点的变分分布(每个数据点一组参数)
qϕ(z∣x)=N(μϕ(x),diag σϕ2(x))q_\phi(z \mid x) = \mathcal{N}(\mu_\phi(x), \mathrm{diag}\,\sigma^2_\phi(x))编码器(摊销的变分分布)
L(x;θ,ϕ)\mathcal{L}(x; \theta, \phi)ELBO
ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0, I),z=g(ϵ;ϕ)=μ+σ⊙ϵz = g(\epsilon; \phi) = \mu + \sigma \odot \epsilon重参数化
Lk\mathcal{L}_kIWAE 下界 E[log⁡1k∑j=1kwj]\mathbb{E}[\log \frac{1}{k}\sum_{j=1}^k w_j],wj=p(x,zj)/q(zj∣x)w_j = p(x, z_j)/q(z_j \mid x)
RR,DD压缩率(rate)=DKL(q∥p(z))= D_{\mathrm{KL}}(q \Vert p(z));失真(distortion)=−Eq[log⁡p(x∣z)]= -\mathbb{E}_q[\log p(x \mid z)]

0.5 关于数字 · About the numbers

数据与第 3–4 讲完全相同:像素世界的 10,000 张训练图、2,000 张验证图、5,000 张测试图;真实分布在测试集上平均 25.52 bit/图。“比真实多 bit”= 模型的 −log⁡2p-\log_2 p(或 −-ELBO)减去真实分布在同一批图上的平均,可以直接和第 3 讲的自回归模型排行榜(FVSBN 4.65、MADE 3.71、GRU 0.83……)比较。所有数字来自作者机器的实际输出;训练好的模型缓存在 checkpoints/,删掉后重新训练会得到逐位相同的模型。几处和预想不同的结果(d_z = 16 不如 d_z = 8、摊销差距比近似差距大得多、free bits 让 ELBO 变差但似然变好……)记录在 代码 README 的”关于实验结果”里。


1. 回顾:VAE、ELBO 与算不出来的后验 · Recap

原课第 3–8 页回顾了第 5 讲:

  • VAE 是无穷多个高斯的混合:z∼N(0,I)z \sim \mathcal{N}(0, I),p(x∣z)=N(μθ(z),Σθ(z))p(x \mid z) = \mathcal{N}(\mu_\theta(z), \Sigma_\theta(z))。p(x∣z)p(x \mid z) 很简单,边缘 p(x)p(x) 却可以非常复杂。(对黑白像素,把高斯换成伯努利:p(x∣z)=∏iBernoulli(xi;σ(fθ(z)i))p(x \mid z) = \prod_i \mathrm{Bernoulli}(x_i; \sigma(f_\theta(z)_i))。本讲的代码都用这个版本。)
  • 隐变量模型的代价:p(x)p(x) 难算,所以比完全观测的自回归模型难学。
  • ELBO 对任意 qq 成立:
log⁡p(x;θ)≥∑zq(z)log⁡pθ(x,z)⏟就像 z 被观测到了的对数似然+H(q)⏟q 的熵,log⁡p(x;θ)=L(x;θ,ϕ)+DKL(q(z;ϕ) ∥ p(z∣x;θ)).\log p(x; \theta) \geq \underbrace{\sum_z q(z) \log p_\theta(x, z)}_{\text{就像 } z \text{ 被观测到了的对数似然}} + \underbrace{H(q)}_{q \text{ 的熵}}, \qquad \log p(x; \theta) = \mathcal{L}(x; \theta, \phi) + D_{\mathrm{KL}}\big(q(z; \phi) \,\Vert\, p(z \mid x; \theta)\big).
  • 后验算不出来(slide 7):在 VAE 里,p(z∣x)p(z \mid x) 相当于”把神经网络 μθ,Σθ\mu_\theta, \Sigma_\theta 反过来”——给一张图,问哪些 zz 经过解码器能得到它。于是用一个好处理的 q(z;ϕ)q(z; \phi)(例如 N(ϕ1,ϕ2)\mathcal{N}(\phi_1, \phi_2))去近似它,qq 越接近后验,ELBO 越接近 log⁡p\log p。

第 5 讲在”后验能精确算”的像素世界里把这些都验证了,EM 算法也在那里工作得很好。本讲面对的情况是:后验算不出来,EM 的 E 步做不了,M 步也没有闭式解。 怎么办?


2. 在整个数据集上学习 · Variational learning

2.1 对 θ 和 φ 一起优化

slide 9 的图:L(x;θ,ϕ1)\mathcal{L}(x; \theta, \phi_1) 和 L(x;θ,ϕ2)\mathcal{L}(x; \theta, \phi_2) 都是 log⁡p(x;θ)\log p(x; \theta)(作为 θ\theta 的函数)的下界——不同的 ϕ\phi 给出不同松紧的下界。我们想同时优化 θ\theta 和 ϕ\phi:ϕ\phi 让下界贴近 log⁡p\log p,θ\theta 把下界往上推。这和 EM 的思路一样(E 步优化 qq、M 步优化 θ\theta),只是两步都换成了”近似地、用梯度”做。

2.2 整个数据集的 ELBO

slide 10:最大似然要最大化 ℓ(θ;D)=∑x(i)∈Dlog⁡p(x(i);θ)\ell(\theta; \mathcal{D}) = \sum_{x^{(i)} \in \mathcal{D}} \log p(x^{(i)}; \theta)。对每个数据点用 ELBO:

ℓ(θ;D)≥∑x(i)∈DL(x(i);θ,ϕ(i)),max⁡θℓ(θ;D)≥max⁡θ,ϕ(1),…,ϕ(M)∑x(i)∈DL(x(i);θ,ϕ(i)).\ell(\theta; \mathcal{D}) \geq \sum_{x^{(i)} \in \mathcal{D}} \mathcal{L}(x^{(i)}; \theta, \phi^{(i)}), \qquad \max_\theta \ell(\theta; \mathcal{D}) \geq \max_{\theta, \phi^{(1)}, \dots, \phi^{(M)}} \sum_{x^{(i)} \in \mathcal{D}} \mathcal{L}(x^{(i)}; \theta, \phi^{(i)}).

注意每个数据点有自己的变分参数 ϕ(i)\phi^{(i)},因为每张图的真实后验 p(z∣x(i);θ)p(z \mid x^{(i)}; \theta) 都不一样——一张”左上角的横线”和一张”右下角的方框”,可能的解释完全不同。

slide 11 用第 5 讲的例子说明:上半张缺失(zz = 上半张的像素),q(z;ϕ)=∏iϕizi(1−ϕi)1−ziq(z; \phi) = \prod_i \phi_i^{z_i}(1 - \phi_i)^{1 - z_i}。对一张”9”来说,ϕi≈1\phi_i \approx 1 只放在 9 的上半部分的像素上是好的近似;对一张”1”,好的 ϕ\phi 完全不同。slide 11 还加了一句重要的提醒:这只在 p(z,x;θ)p(z, x; \theta) 接近 pdatap_{\text{data}} 时成立,在学习刚开始时不成立——那时模型还很差,它的”后验”未必有意义。θ\theta 和 ϕ\phi 是互相追赶着一起变好的。

2.3 随机变分推断(SVI)

slide 12 的算法:

  1. 初始化 θ,ϕ(1),…,ϕ(M)\theta, \phi^{(1)}, \dots, \phi^{(M)};
  2. 随机抽一个数据点 x(i)x^{(i)};
  3. 把 L(x(i);θ,ϕ(i))\mathcal{L}(x^{(i)}; \theta, \phi^{(i)}) 作为 ϕ(i)\phi^{(i)} 的函数优化:重复 ϕ(i)←ϕ(i)+η∇ϕ(i)L\phi^{(i)} \leftarrow \phi^{(i)} + \eta \nabla_{\phi^{(i)}}\mathcal{L},直到收敛到 ϕ(i),∗≈arg⁡max⁡ϕL(x(i);θ,ϕ)\phi^{(i),*} \approx \arg\max_\phi \mathcal{L}(x^{(i)}; \theta, \phi);
  4. 计算 ∇θL(x(i);θ,ϕ(i),∗)\nabla_\theta \mathcal{L}(x^{(i)}; \theta, \phi^{(i),*});
  5. 沿梯度方向更新 θ\theta,回到第 2 步。

这就是”随机梯度版的变分 EM”:第 3 步是近似的 E 步(在 qq 的族里找最接近后验的),第 4–5 步是一步随机梯度的 M 步。

内层循环要多少步? 代码 03 第 1 部分固定一个训练好的解码器(d_z = 2 的 VAE),对 300 张测试图,每张图单独用 Adam 优化 (μi,log⁡σi2)(\mu_i, \log\sigma_i^2)(每步 16 个样本的重参数化梯度,§3.3):

优化步数从先验 N(0,I)\mathcal{N}(0, I) 出发:ELBO差距从编码器的输出出发:ELBO差距
0−50.4520.92−30.911.38
10−45.9516.42−30.030.50
30−39.9810.45−29.860.33
100−31.702.17−29.810.28
300−30.150.62−29.810.28
1000−30.150.62−29.810.28

(bit/图;“差距” = 精确的 log⁡2pθ(x)\log_2 p_\theta(x)(−29.53,网格积分)减 ELBO。“编码器”是 §4 的内容,这里先用作对照。)

从先验出发,每张图要优化约 300 步才能赶上编码器一次前向给出的答案。如果训练时每个外层步都要这样做,代价极高——这正是 §4 摊销推断要解决的问题。表里还藏着一个细节:从不同起点出发,终点不同(0.62 vs 0.28 bit)。ELBO 对 (μ,σ)(\mu, \sigma) 也是非凸的:后验有几个峰时(§4.3),不同的起点落到不同的峰。

“怎样计算梯度?期望可能没有闭式解,所以用蒙特卡洛采样。“——这是下一节。


3. 梯度 · Gradients of the ELBO

3.1 ELBO 的蒙特卡洛估计;对 θ 的梯度很容易

slide 13(为简洁去掉了上标 ii):

L(x;θ,ϕ)=Eq(z;ϕ)[log⁡p(z,x;θ)−log⁡q(z;ϕ)]≈1K∑k=1K(log⁡p(z(k),x;θ)−log⁡q(z(k);ϕ)),z(k)∼q(z;ϕ).\mathcal{L}(x; \theta, \phi) = \mathbb{E}_{q(z; \phi)}\big[\log p(z, x; \theta) - \log q(z; \phi)\big] \approx \frac{1}{K}\sum_{k=1}^K \Big(\log p(z^{(k)}, x; \theta) - \log q(z^{(k)}; \phi)\Big), \quad z^{(k)} \sim q(z; \phi).

关键假设:q(z;ϕ)q(z; \phi) 好处理——容易采样、容易计算 log⁡q\log q。

对 θ\theta 的梯度很容易,因为期望所依据的分布 qq 不依赖 θ\theta,梯度可以直接搬进期望里:

∇θEq(z;ϕ)[log⁡p(z,x;θ)−log⁡q(z;ϕ)]=Eq(z;ϕ)[∇θlog⁡p(z,x;θ)]≈1K∑k∇θlog⁡p(z(k),x;θ).\nabla_\theta \mathbb{E}_{q(z; \phi)}\big[\log p(z, x; \theta) - \log q(z; \phi)\big] = \mathbb{E}_{q(z; \phi)}\big[\nabla_\theta \log p(z, x; \theta)\big] \approx \frac{1}{K}\sum_k \nabla_\theta \log p(z^{(k)}, x; \theta).

3.2 对 φ 的梯度:为什么难;REINFORCE

slide 14:对 ϕ\phi 的梯度复杂,因为期望本身依赖 ϕ\phi——∇ϕ∫q(z;ϕ)f(z) dz\nabla_\phi \int q(z; \phi) f(z)\,dz 不能简单地写成”抽样再求导”,因为改变 ϕ\phi 改变的是”抽到哪些 zz“,而抽样这一步不可导。

REINFORCE(也叫得分函数估计、似然比估计;Williams 1992,来自强化学习)的推导只用一个恒等式 ∇ϕq=q ∇ϕlog⁡q\nabla_\phi q = q\,\nabla_\phi \log q:

∇ϕEq(z;ϕ)[r(z)]=∫r(z) ∇ϕq(z;ϕ) dz=∫q(z;ϕ) r(z) ∇ϕlog⁡q(z;ϕ) dz=Eq(z;ϕ)[r(z) ∇ϕlog⁡q(z;ϕ)].\nabla_\phi \mathbb{E}_{q(z;\phi)}[r(z)] = \int r(z)\,\nabla_\phi q(z; \phi)\,dz = \int q(z; \phi)\,r(z)\,\nabla_\phi \log q(z; \phi)\,dz = \mathbb{E}_{q(z; \phi)}\big[r(z)\,\nabla_\phi \log q(z; \phi)\big].

右边是一个普通的期望,可以抽样估计。它的直觉是”试探”:抽一个 zz,如果 r(z)r(z) 比较大,就沿 ∇ϕlog⁡q(z)\nabla_\phi \log q(z) 把 qq 往 zz 那边推(让这个 zz 更可能被抽到)。它只需要 rr 的值,不需要 rr 可导,zz 也可以是离散的——非常通用。

代价是方差大。一个关键的改进是基线(baseline):因为 Eq[∇ϕlog⁡q]=∇ϕ∫q=∇ϕ1=0\mathbb{E}_q[\nabla_\phi \log q] = \nabla_\phi \int q = \nabla_\phi 1 = 0,减去任何不依赖 zz 的常数 bb 都不改变期望:

∇ϕEq[r(z)]=Eq[(r(z)−b) ∇ϕlog⁡q(z;ϕ)].\nabla_\phi \mathbb{E}_q[r(z)] = \mathbb{E}_q\big[(r(z) - b)\,\nabla_\phi \log q(z; \phi)\big].

好的 bb(接近 Eq[r]\mathbb{E}_q[r])能大幅降低方差。对 ELBO,r(z)=log⁡p(x,z)−log⁡q(z;ϕ)r(z) = \log p(x, z) - \log q(z; \phi) 本身还依赖 ϕ\phi,多出来的一项 Eq[∇ϕ(−log⁡q)]=0\mathbb{E}_q[\nabla_\phi(-\log q)] = 0,所以 REINFORCE 形式不变。

3.3 重参数化

slide 15:一个”更好但不那么通用”的办法,只对连续的 zz(和某些分布)有效。设 q(z;ϕ)=N(μ,σ2I)q(z; \phi) = \mathcal{N}(\mu, \sigma^2 I),ϕ=(μ,σ)\phi = (\mu, \sigma)。下面两种采样方式等价:

  • 直接抽 z∼q(z;ϕ)z \sim q(z; \phi);
  • 先抽 ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0, I),再令 z=μ+σϵ=g(ϵ;ϕ)z = \mu + \sigma\epsilon = g(\epsilon; \phi)——gg 是确定性的!

于是期望可以用两种方式写:

Ez∼q(z;ϕ)[r(z)]=Eϵ∼N(0,I)[r(g(ϵ;ϕ))],∇ϕEq[r(z)]=Eϵ[∇ϕr(g(ϵ;ϕ))]≈1K∑k∇ϕr(g(ϵ(k);ϕ)).\mathbb{E}_{z \sim q(z;\phi)}[r(z)] = \mathbb{E}_{\epsilon \sim \mathcal{N}(0, I)}[r(g(\epsilon; \phi))], \qquad \nabla_\phi \mathbb{E}_{q}[r(z)] = \mathbb{E}_\epsilon\big[\nabla_\phi r(g(\epsilon; \phi))\big] \approx \frac{1}{K}\sum_k \nabla_\phi r(g(\epsilon^{(k)}; \phi)).

随机性被”挪到了外面”(ϵ\epsilon 的分布不依赖 ϕ\phi),梯度可以穿过 gg 直接用反向传播算出来。要求:rr 和 gg 对 ϕ\phi 可导,ϵ\epsilon 容易采样。slide 15 的结论:“通常方差比 REINFORCE 低得多。”

slide 16:ELBO 的情形稍复杂一点——被积函数 r(z,ϕ)=log⁡p(z,x;θ)−log⁡q(z;ϕ)r(z, \phi) = \log p(z, x; \theta) - \log q(z; \phi) 本身也依赖 ϕ\phi。照样重参数化:Eq[r(z,ϕ)]=Eϵ[r(g(ϵ;ϕ),ϕ)]≈1K∑kr(g(ϵ(k);ϕ),ϕ)\mathbb{E}_{q}[r(z, \phi)] = \mathbb{E}_\epsilon[r(g(\epsilon; \phi), \phi)] \approx \frac{1}{K}\sum_k r(g(\epsilon^{(k)}; \phi), \phi),再用链式法则求梯度(自动求导会处理好两条路径)。

为什么重参数化方差小? REINFORCE 只用 rr 的值,靠随机试探摸索方向;重参数化用 rr 的导数——r′(z)r'(z) 直接告诉我们往哪边走 rr 会变大。它利用了更多的信息。

3.4 实验:方差差多少

一维玩具(代码 01 第 1 部分):q=N(μ,σ2)q = \mathcal{N}(\mu, \sigma^2),μ=0\mu = 0、σ=1\sigma = 1,r(z)=(z−2)2r(z) = (z - 2)^2。真实梯度 ∇μ=2(μ−2)=−4\nabla_\mu = 2(\mu - 2) = -4。20 万个单样本估计:

r(z)r(z)估计量∇μ\nabla_\mu 均值∇μ\nabla_\mu 标准差相对误差降到 10% 要几个样本
(z−2)2(z-2)^2REINFORCE−3.9969.33545
(z−2)2(z-2)^2REINFORCE + 基线 b=Eq[r]b = \mathbb{E}_q[r]−3.9986.49263
(z−2)2(z-2)^2重参数化−3.9992.0025
(z−2)2+1000(z-2)^2 + 1000REINFORCE−3.7171006.65约 633 万
(z−2)2+1000(z-2)^2 + 1000REINFORCE + 基线−3.9986.49263
(z−2)2+1000(z-2)^2 + 1000重参数化−3.9992.0025

(标准差 9.33、6.49、2.00 都可以精确算出来,练习 4。)三者都无偏,差别全在方差。给 rr 加一个常数,梯度不变,REINFORCE 的标准差却涨了一百倍——每个样本都把 qq 往自己那边推 1000×(z−μ)1000 \times (z - \mu),正负抵消只在平均意义上成立。基线消掉了这个问题;重参数化根本不受影响(常数的导数是 0)。

真实的 VAE(第 2 部分):d_z = 8 的 VAE,64 张测试图,编码器的 86,544 个参数,ELBO 梯度的单样本估计:

估计量单样本相对误差与真实梯度的平均余弦相对误差降到 10% 要几个样本
REINFORCE33.070.002109,354
REINFORCE + 基线(每张图另抽 20 个样本估计 Eq[f]\mathbb{E}_q[f])3.050.324932
重参数化1.820.467331

不加基线的 REINFORCE 几乎是纯噪声:f=log⁡p(x,z)−log⁡q(z)f = \log p(x, z) - \log q(z) 本身在几十 nat 上下,就像”加了常数”的 rr。好的基线把所需样本降到只比重参数化多约 3 倍——但这个基线本身要额外抽 20 个样本、算 20 次解码器(实践中要么训练一个网络去预测基线,如 Mnih & Gregor 2014 的 NVIL,要么每张图抽几个样本互为基线)。重参数化不需要任何花样:每张图抽一个 zz、一次反向传播,方向就大体可靠,小批量 SGD 平均掉剩下的噪声。这就是 VAE 能像普通神经网络一样训练的原因。

离散的 zz(第 3 部分):像素世界,q(z;ϕ)=softmax(ϕ)q(z; \phi) = \mathrm{softmax}(\phi) 是 177 个配置上的分布。“把采样写成确定性函数”仍然可以做到——z=arg⁡max⁡(ϕ+Gumbel 噪声)z = \arg\max(\phi + \text{Gumbel 噪声}) 恰好服从 softmax(ϕ)\mathrm{softmax}(\phi)——但 zz 是整数,ϕ\phi 稍微变一点 zz 不变,∂z/∂ϕ=0\partial z / \partial \phi = 0,梯度被切断了。REINFORCE 照样适用:

估计量单次估计的相对误差2000 次平均后的相对误差
REINFORCE,每张图 2 个样本41.30.90
REINFORCE + 留一法基线,2 个样本11.70.27
REINFORCE,20 个样本13.10.29
REINFORCE + 留一法基线,20 个样本2.70.06

最后一列恰好 ≈ 单次误差 / 2000\sqrt{2000}:剩下的全是方差,没有偏差。留一法基线(用同一批的其他样本估计 Eq[f]\mathbb{E}_q[f])不需要额外计算,效果却很大:2 个样本加基线比 20 个样本不加基线还准。离散隐变量模型(第 17 讲)只能用这类估计量,或者用连续的”松弛”(Gumbel-softmax)。


4. 摊销推断 · Amortized inference

4.1 每个数据点一组参数,不适合大数据集

slide 17:到目前为止,每个数据点 x(i)x^{(i)} 有自己的变分参数 ϕ(i)\phi^{(i)}。MM 个数据点就有 MM 组参数,每组都要优化几百步(§2.3),不适合大数据集;遇到一张新图,还要从头优化。

摊销(amortization):学习一个参数化的函数 fλf_\lambda,把每个 xx 直接映射到一组好的变分参数——“就像在做回归 x(i)↦ϕ(i),∗x^{(i)} \mapsto \phi^{(i),*}“。例如 q(z∣x(i))q(z \mid x^{(i)}) 是均值为 μ(i)\mu^{(i)} 的高斯,我们学一个神经网络 fλf_\lambda 把 x(i)x^{(i)} 映射到 μ(i)\mu^{(i)}。slide 18 的说法:”fλf_\lambda 学会了替你解那个优化问题”。文献里 q(z;fλ(x))q(z; f_\lambda(x)) 通常写成 qϕ(z∣x)q_\phi(z \mid x)——ϕ\phi 现在是编码器网络的参数,不再是每张图一组。

“摊销”是一个会计用语:一次性的大投入(训练编码器)分摊到以后的每一次使用上(每张图的推断只要一次前向)。

4.2 摊销推断下的学习

slide 19 的算法:

  1. 初始化 θ(0),ϕ(0)\theta^{(0)}, \phi^{(0)};
  2. 随机抽一个数据点 x(i)x^{(i)};
  3. 计算 ∇θL(x(i);θ,ϕ)\nabla_\theta \mathcal{L}(x^{(i)}; \theta, \phi) 和 ∇ϕL(x(i);θ,ϕ)\nabla_\phi \mathcal{L}(x^{(i)}; \theta, \phi);
  4. 沿梯度方向更新 θ,ϕ\theta, \phi。

其中

L(x;θ,ϕ)=Eqϕ(z∣x)[log⁡p(z,x;θ)−log⁡qϕ(z∣x)].\mathcal{L}(x; \theta, \phi) = \mathbb{E}_{q_\phi(z \mid x)}\big[\log p(z, x; \theta) - \log q_\phi(z \mid x)\big].

梯度怎么算?用重参数化(§3.3)。内层循环消失了:θ\theta 和 ϕ\phi 一起走一步梯度。这就是变分自编码器(VAE,Kingma & Welling 2014;Rezende, Mohamed & Wierstra 2014)。

4.3 摊销的代价:近似差距与摊销差距

编码器给出的 qϕ(z∣x)q_\phi(z \mid x) 离真实后验有多远?它可以拆成两部分(Cremer, Li & Duvenaud 2018):

log⁡pθ(x)−L(x;θ,ϕ)⏟总差距=log⁡pθ(x)−L(x;θ,q∗)⏟近似差距:高斯族够不够用+L(x;θ,q∗)−L(x;θ,ϕ)⏟摊销差距:编码器好不好,\underbrace{\log p_\theta(x) - \mathcal{L}(x; \theta, \phi)}_{\text{总差距}} = \underbrace{\log p_\theta(x) - \mathcal{L}(x; \theta, q^*)}_{\text{近似差距:高斯族够不够用}} + \underbrace{\mathcal{L}(x; \theta, q^*) - \mathcal{L}(x; \theta, \phi)}_{\text{摊销差距:编码器好不好}},

其中 q∗q^* 是”这张图在高斯族里最好的 qq“(用 SVI 单独优化出来)。代码 03 第 2 部分(300 张测试图,bit):

模型log⁡2pθ(x)\log_2 p_\theta(x)ELBO(q∗q^*)ELBO(编码器)近似差距摊销差距总差距
d_z = 2(网格积分,精确)−29.53−29.83−30.910.311.081.38
d_z = 8(IWAE k = 5000 估计)−27.84−28.37−29.470.531.101.63

摊销差距是大头:编码器离”每张图最好的高斯”还很远,而高斯族本身的局限只占 0.3–0.5 bit。Cremer et al. 在 MNIST 等数据上也发现摊销差距常常是主要来源。这有实际意义:想缩小差距,与其先换更灵活的 qq 族(§6),不如先改进编码器,或者在测试时从编码器的输出出发做几步 SVI(“半摊销”,Kim et al. 2018;§2.3 的表里 10 步就超过了编码器)。两点说明:q∗q^* 是从编码器出发的局部最优,全局最好的高斯只会更好,所以近似差距是上界;d_z = 8 时 log⁡p\log p 是 IWAE 估计,本身略偏低。

真实后验长什么样?(第 3 部分)在 d_z = 2 的网格上可以把后验画出来。典型的图(近似差距是中位数 0.19 bit):后验是一个小而集中的”团”,高斯近似得不错。近似差距最大的图(一条带很多噪声像素的竖线,4.61 bit):后验分成相距很远的几块——隐空间里几个不同的位置都能”解释”这张图。一个高斯只能盖住其中一块(第 5 讲 §6.1 的模式寻找在真实的 VAE 里同样发生);而且从编码器出发的 SVI 落到了一个较弱的峰上,后验质量最大的那块谁也没盖住;编码器的高斯夹在几块之间,差距高达 11.7 bit。好在这样的图是少数(90% 的图近似差距不到 0.53 bit),但它们决定了 IWAE 估计收敛得多慢(§5.5)。

4.4 SVI 学习 vs 摊销学习

代码 03 第 4 部分把 slide 12 和 slide 19 的两种算法放在一起:2,000 张训练图、d_z = 2、外层 3,000 步,SVI 每个外层步先做 5 步内层优化。因为 d_z = 2,学到的解码器本身的 log⁡pθ(x)\log p_\theta(x) 可以精确算出来,和推断方式无关:

学习方式训练用时训练集 ELBO测试集 ELBO测试时推断 500 张图训练集 log⁡2pθ\log_2 p_\theta测试集 log⁡2pθ\log_2 p_\theta
SVI(每张图一组 ϕ(i)\phi^{(i)})5.7 秒−31.17−31.571.9 秒(300 步优化)−31.00−31.36
摊销(VAE 编码器)1.9 秒−30.09−32.400.2 毫秒(一次前向)−30.23−31.03
摊销 + 测试时 300 步 SVI 微调——−31.21编码器 + 优化——
  1. SVI 慢:训练慢 3 倍,每个 ϕ(i)\phi^{(i)} 平均只被访问 192 次、远没优化好;测试时每张新图都要重新优化,比编码器慢约一万倍。
  2. 同样的外层步数,VAE 学到的解码器更好(测试集 log⁡2pθ\log_2 p_\theta:−31.03 vs −31.36):SVI 的 ϕ(i)\phi^{(i)} 不准,θ\theta 的梯度也就不准。
  3. 但 VAE 的编码器过拟合了:训练集 ELBO −30.09、测试集 −32.40,差 2.3 bit,而解码器本身只差 0.8 bit——摊销差距在新数据上变大了。所以只看测试集 ELBO,测试时重新优化的 SVI 反而更好;编码器 + 测试时微调两者兼得。
  4. slide 24 提到摊销对解码器有正则化作用(Shu et al. 2018)。在这个小实验里看不到:SVI 解码器的训练–测试差距(0.36 bit)反而比 VAE 的(0.80)小——不过 SVI 的解码器也训练得更不充分,两者不能简单比较。

5. 自编码器视角 · The autoencoder perspective

5.1 重构 + KL

slide 20:把 log⁡p(z,x)=log⁡p(x∣z)+log⁡p(z)\log p(z, x) = \log p(x \mid z) + \log p(z) 代进 ELBO,

L(x;θ,ϕ)=Eqϕ(z∣x)[log⁡p(z,x;θ)−log⁡p(z)+log⁡p(z)−log⁡qϕ(z∣x)]=Eqϕ(z∣x)[log⁡p(x∣z;θ)]⏟重构−DKL(qϕ(z∣x) ∥ p(z))⏟离先验多远.\mathcal{L}(x; \theta, \phi) = \mathbb{E}_{q_\phi(z|x)}\big[\log p(z, x; \theta) - \log p(z) + \log p(z) - \log q_\phi(z \mid x)\big] = \underbrace{\mathbb{E}_{q_\phi(z|x)}[\log p(x \mid z; \theta)]}_{\text{重构}} - \underbrace{D_{\mathrm{KL}}\big(q_\phi(z \mid x) \,\Vert\, p(z)\big)}_{\text{离先验多远}}.

(第 5 讲 §5.6 已经在像素世界里验证过这个恒等式。)读成一个自编码器:

  1. 取一个数据点 x(i)x^{(i)},从 qϕ(z∣x(i))q_\phi(z \mid x^{(i)}) 采样得到 z^\hat{z}——编码器:用 (μ,σ)=encoderϕ(x(i))(\mu, \sigma) = \text{encoder}_\phi(x^{(i)}) 给出的高斯采样;
  2. 从 p(x∣z^;θ)p(x \mid \hat{z}; \theta) 采样得到重构 x^\hat{x}——解码器。

训练目标做什么?第一项鼓励 x^≈x(i)\hat{x} \approx x^{(i)}(x(i)x^{(i)} 在 p(x∣z^)p(x \mid \hat{z}) 下概率高)——这就是自编码损失;第二项鼓励 z^\hat{z} 的分布接近先验 p(z)p(z)。

和普通自编码器相比,VAE 多了两样东西:编码是随机的(加了噪声 σϵ\sigma\epsilon),以及 KL 项。正是它们让 VAE 成为一个生成模型:没有 KL 项,编码器可以把不同的图放在隐空间里任意遥远、任意分散的地方,从 N(0,I)\mathcal{N}(0, I) 采样会落进”空洞”里;KL 项把所有图的编码挤进先验的形状里,让”从先验采样再解码”变得有意义。

5.2 Alice 与 Bob

slide 21 的故事:

  1. Alice 执行太空任务,要把图像发给 Bob。给定一张图 x(i)x^{(i)},她(随机地)压缩它:z^∼qϕ(z∣x(i))\hat{z} \sim q_\phi(z \mid x^{(i)}),把消息 z^\hat{z} 发给 Bob;
  2. Bob 收到 z^\hat{z},用 p(x∣z^;θ)p(x \mid \hat{z}; \theta) 重构图像。
  3. 如果 Eqϕ(z∣x)[log⁡p(x∣z;θ)]\mathbb{E}_{q_\phi(z|x)}[\log p(x \mid z; \theta)] 大,这个方案就好用。
  4. KL 项迫使”消息的分布”具有特定的形状 p(z)p(z)。如果 Bob 知道 p(z)p(z),他就能自己造出逼真的消息 z^∼p(z)\hat{z} \sim p(z) 和对应的图像,就好像收到了 Alice 的消息一样!

这个故事还有一层信息论的含义(第 4 讲的压缩):KL 项是 Alice 发消息的平均”码长”(压缩率,rate),重构项是 Bob 重构的”失真”(distortion)。§6.4 的 β-VAE 就是在这两者之间调节。

5.3 在像素世界上训练 VAE

代码 02:编码器、解码器都是两层 256 宽的 MLP,解码器输出 64 个伯努利 logit,15,000 步 Adam(每个约 10 秒)。

dzd_z−-ELBO:比真实多重构项(bit)KL(bit)IWAE k=1000k = 1000:比真实多活跃维度样本的真实 −log⁡2p-\log_2 p
17.3029.403.426.591 / 136.86
25.1725.045.653.972 / 233.55
44.2322.337.412.473 / 431.67
83.7121.317.922.194 / 831.77
164.3023.036.792.843 / 1632.11
真实世界018.33 = H(x∣z)H(x \mid z)7.19 = I(x;z)I(x; z)0—25.52

(对照:第 3 讲的 FVSBN 4.65、NADE 3.89、MADE 3.71、Transformer 1.56、RNN 0.91、PixelCNN 0.84、GRU 0.83。)

几个值得细看的地方:

  1. KL 自动找到了”配置的信息量”。 dz≥4d_z \geq 4 时 KL 在 6.8–7.9 bit,和真实世界的 I(x;z)=7.19I(x; z) = 7.19 bit 很接近——这是像素世界”配置”携带的信息。没有人告诉 VAE 世界里有 177 个配置,它自己发现了”大约需要 7 bit 来描述一张图的结构”。
  2. 重构项最好也比真实噪声多约 3 bit(21.3 vs 18.3):从 qq 抽出的 zz 有时解码成稍有不同的配置,解码器也画不准模板。
  3. 活跃维度只有 3–4 个。 dz=16d_z = 16 时 13 个维度没被使用:编码器对所有 xx 都输出 μ≈0\mu \approx 0、σ≈1\sigma \approx 1(就是先验),这一维不携带任何信息。多用一维要付 KL 的代价,信息不需要时 VAE 就把它”关掉”。而且 dz=16d_z = 16 反而比 dz=8d_z = 8 差——维度多了,优化更难,并不自动变好。
  4. 最好的 VAE(2.19 bit)介于 MADE(3.71)和 GRU(0.83)之间。 一个像素独立的解码器加上隐变量,比许多自回归模型强,但比最好的自回归模型差得多。−-ELBO 比 IWAE 高 1–1.5 bit:ELBO 本身比 log⁡pθ\log p_\theta 松了这么多(§5.5)。
  5. 样本质量的”真相”指标(最后一列):样本若像真实数据,它们在真实分布下的平均 −log⁡2p-\log_2 p 应接近 25.5。dz≥4d_z \geq 4 仍高约 6 bit——样本里有不少模糊的、两种形状叠在一起的图。似然最好的(dz=8d_z = 8)和样本最”典型”的(dz=4d_z = 4)不是同一个(差别很小):似然和样本质量相关,但不是一回事(slide 26;第 15 讲)。

重构与采样(第 2 部分,dz=8d_z = 8):重构的概率图清晰地画出了原图的形状和位置,但不包括噪声——原图里随机翻转的像素在重构里消失了。编码器只传”配置”,不传”哪几个像素碰巧翻转了”,噪声留给解码器的伯努利分布去解释。这正是第 5 讲 §1.4 希望隐变量做的事:zz 吸收结构,p(x∣z)p(x \mid z) 只管独立的细节。Bob 从先验造的消息解码出来,一部分是清晰的形状,也有不少是模糊的”折中”。编码器给出的 σϕ\sigma_\phi 在活跃维度上平均 0.27,在不活跃维度上恰好 1.000。

5.4 隐空间

第 3 部分把 4,000 张图的编码均值 μϕ(x)\mu_\phi(x)(dz=2d_z = 2)画在平面上,每个格子标出最多的形状。隐空间按形状组织,但不是整齐的四块:横线占据左右两侧,竖线占据上下两端,方框多在中间一圈,十字挤在中心;每块里面再按位置排列。每种形状都分成对称的两块,所以各形状编码的平均值都在原点附近——平均值看不出结构,画出来才看得到。和第 5 讲 K = 4 的聚类(按位置分、完全看不出形状)不同,连续的二维 zz 有足够的”地方”同时编码形状和位置。

编码均值落在半径 2 以内的比例是 85.9%,先验 N(0,I)\mathcal{N}(0, I) 下是 86.5%:KL 项真的把”消息的分布”压成了先验的样子。

沿直线插值(从一条横线的编码走到一个方框的编码),中间帧是模糊的、经过别的配置的图。隐空间是连续的,但这个世界的数据(177 个离散配置)不是;在 MNIST、人脸这样变化更连续的数据上,插值看起来平滑得多。

5.5 ELBO、IWAE 与精确的 log⁡pθ(x)\log p_\theta(x)

第 4 部分(dz=2d_z = 2,1,000 张测试图):

估计平均 −log⁡2p-\log_2 p比真实多比精确值低
精确(400×400 网格积分)29.2293.8440
ELBO30.5865.2021.358
IWAE,k=1k = 130.6095.2241.380
IWAE,k=10k = 1029.7804.3950.551
IWAE,k=100k = 10029.5264.1420.297
IWAE,k=1000k = 100029.4284.0440.199
IWAE,k=5000k = 500029.3833.9990.154
  • ELBO 比精确值平均低 1.36 bit,但分布极不均匀:中位数 0.55 bit,90% 分位 3.31,最大 30.9 bit——少数图的后验和高斯差得很远(§4.3)。
  • IWAE 随 kk 单调逼近精确值(第 5 讲 §4.3),k=1k = 1 时就是 ELBO。但收敛很慢:k=5000k = 5000 仍低 0.15 bit。那些”后验分成几块”的图,重要性权重的 χ2\chi^2 极大(第 5 讲 §4.2)。

论文里报告的”测试集 log-likelihood”通常就是 kk = 几千的 IWAE 估计——它是一个下界的估计,会低估模型。在这里可以直接看到低估了多少。比较 VAE 和自回归模型时(后者的似然是精确的),要记住这一点。


6. 研究方向 · Research directions

6.1 隐变量模型小结(原课 slide 22)

  1. 把简单模型组合成更灵活的模型(例如混合高斯);
  2. 有向模型允许祖先采样(高效生成):z∼p(z)z \sim p(z),x∼p(x∣z;θ)x \sim p(x \mid z; \theta);
  3. 但对数似然一般算不出来,所以学习困难;
  4. 联合学习一个模型(θ\theta)和一个摊销的推断部件(ϕ\phi),通过优化 ELBO 获得可处理性;
  5. 任何 xx 的隐表示都可以通过 qϕ(z∣x)q_\phi(z \mid x) 推断出来。

slide 23:改进变分学习的三个方向——更好的优化技术、更有表达力的近似族、不同的损失函数。

slide 24(编码器):摊销(Gershman & Goodman、Kingma、Rezende……)带来可扩展性,也可能隐式地正则化模型(Shu et al. 2018);增强变分后验:蒙特卡洛方法(重要性采样即 IWAE、MCMC、序贯蒙特卡洛、拒绝采样),以及归一化流(Rezende & Mohamed 2015、Kingma et al. 2016,第 7–8 讲)。

slide 25(解码器):强大的解码器(DRAW、PixelCNN 作为解码器,§6.5);参数化的、学习的先验;层次化模型——多个 VAE 叠在一起(slide 括号里写着:扩散模型,第 16 讲)。

slide 26(目标函数):更紧的 ELBO 并不意味着更好的样本(样本质量和似然不相关,Theis et al. 2016),也不意味着有信息量的隐变量(强大的解码器会忽略隐变量);KL 散度的替代:Rényi α-散度、MMD、Wasserstein 距离等积分概率度量。

下面三个实验分别对应”更紧的界""不同的目标""强大的解码器”。

6.2 更紧的界:IWAE 训练

第 5 讲证明了 Lk=E[log⁡1k∑jwj]\mathcal{L}_k = \mathbb{E}[\log \frac{1}{k}\sum_j w_j] 随 kk 单调变紧。直接最大化 Lk\mathcal{L}_k 训练(Burda et al. 2016)会怎样?代码 04 第 1 部分(dz=2d_z = 2,可以精确算):

训练目标训练用时精确 log⁡pθ\log p_\theta:比真实多−-ELBO:比真实多DKL(qϕ∥pθ(z∣x))D_{\mathrm{KL}}(q_\phi \Vert p_\theta(z \mid x))编码器的平均 σ\sigma
ELBO(=L1= \mathcal{L}_1)9 秒3.845.211.360.147
IWAE(L10\mathcal{L}_{10})22 秒2.487.304.820.174

模型变好了(精确的 log⁡pθ\log p_\theta 好了 1.4 bit):L10\mathcal{L}_{10} 更接近 log⁡p\log p,最大化它更接近最大似然,解码器不再被迫迁就一个高斯后验近似。编码器作为后验近似却变差了(KL 从 1.36 升到 4.82):IWAE 只要求”10 个样本里有一两个落在后验上”,编码器就可以变宽、去覆盖后验。这正是第 5 讲 §4.2 的结论:重要性采样喜欢偏宽的 qq,ELBO(反向 KL)喜欢偏窄的 qq。 Rainforth et al. 2018 的论文标题概括了这一点:更紧的变分下界不一定更好(对推断网络而言)。代价还有 kk 倍的解码器计算。

6.3 不同的目标:β-VAE 与压缩率–失真

在 KL 前面乘一个系数 β\beta(Higgins et al. 2017):

Lβ=Eqϕ[log⁡pθ(x∣z)]−β DKL(qϕ(z∣x)∥p(z))=−(D+βR).\mathcal{L}_\beta = \mathbb{E}_{q_\phi}[\log p_\theta(x \mid z)] - \beta\,D_{\mathrm{KL}}(q_\phi(z \mid x) \Vert p(z)) = -(D + \beta R).

这正是压缩率–失真(rate–distortion)问题的拉格朗日形式(Alemi et al. 2018):RR 是 Alice 的平均码长,DD 是 Bob 的失真,β\beta 是两者的汇率。只有 β=1\beta = 1 时 −(D+R)-(D + R) 才是 log⁡p(x)\log p(x) 的下界。代码 04 第 2 部分(dz=8d_z = 8):

β\beta压缩率 RR(bit)失真 DD(bit)−-ELBO(β=1\beta = 1):比真实多IWAE:比真实多活跃维度样本的真实 −log⁡2p-\log_2 p
0.2520.2718.7513.508.03735.18
0.513.0018.686.163.10632.72
17.9221.323.722.20431.98
22.0730.146.696.13238.33
40.0035.509.989.98042.50
真实世界7.1918.3300—25.52
  • β\beta 越大,RR 越小、DD 越大。β=4\beta = 4 时 R=0R = 0:后验完全坍塌,模型退化成”像素独立”(9.98 bit,第 5 讲 K=1K = 1 的伯努利混合是 9.88)。
  • 似然、ELBO、样本质量都在 β=1\beta = 1 最好。
  • β<1\beta < 1 时 RR 远超真实的 I(x;z)I(x; z),失真接近真实噪声 18.33 但没有低于它:编码器没有去记噪声翻转,而是用比必要多得多的 bit 描述配置(qq 很窄、不同图的 qq 离得很远)。这些 bit 对 log⁡p\log p 没有好处,“消息的分布”和先验对不上,从先验采样常常落进空洞,样本变差。
  • β-VAE 的原始动机是”β>1\beta > 1 让隐变量更解耦”(每一维对应一个独立的变化因素)。这个说法后来受到很多质疑:Locatello et al. 2019 证明了没有归纳偏置的无监督解耦在理论上不可能,实验上也很依赖随机种子和超参数——和第 5 讲 §2.2 “无监督学习是不适定的”一脉相承。

6.4 强大的解码器与后验坍塌

如果解码器本身就很强——比如一个以 zz 为条件的自回归模型 pθ(x∣z)=∏ip(xi∣x<i,z)p_\theta(x \mid z) = \prod_i p(x_i \mid x_{<i}, z)——会发生什么?代码 04 第 3 部分把解码器换成 GRU(第 3 讲的 GRU 不用任何隐变量就能做到只比真实多 0.83 bit),zz 在每一步都直接喂给 GRU:

模型KL(bit)−-ELBO:比真实多IWAE k=100k = 100:比真实多
普通 VAE(像素独立的解码器)7.9203.762.39
GRU 解码器0.0031.121.13
GRU 解码器 + free bits(每维 0.25 nat)2.8872.001.02
对照:第 3 讲的 GRU(没有隐变量)—0.830.83

KL 只有 0.003 bit:编码器对所有图都输出(几乎)同一个先验,zz 不携带任何信息。这叫后验坍塌(posterior collapse;Bowman et al. 2015 在用 LSTM 解码器做句子 VAE 时发现)。模型的似然却很好——GRU 自己就能把 p(x)p(x) 建模好。给定一张图的编码 z=μϕ(x)z = \mu_\phi(x) 让解码器采样,得到的是各种随机的形状,和原图毫无关系。

为什么”不用 zz“是最优的?如果解码器不依赖 zz,那么后验 = 先验,qq = 先验就让 ELBO 精确等于 log⁡pθ(x)\log p_\theta(x),差距为 0;而一旦用了 zz,就要付”高斯后验近似不完美”的差距(§4.3、练习 6)。当解码器不靠 zz 也能做得很好时,ELBO 的最优解就是彻底放弃 zz。

free bits(Kingma et al. 2016)把 KL 换成 ∑dmax⁡(λ,KL‾d)\sum_d \max(\lambda, \overline{\mathrm{KL}}_d):每一维的前 λ\lambda nat 信息”免费”。KL 升到 2.89 bit,采样结果开始和原图有关——大多出现在原图所在的区域,但形状不一定对(2.9 bit 不够从 177 个配置里挑出一个)。有意思的是:ELBO 变差了(2.00 vs 1.12),IWAE 估计的似然却略好(1.02 vs 1.13)——ELBO 变差主要是因为下界变松了,模型本身并没有变差。只看 ELBO 会错怪 free bits。

这就是 slide 26 的要点:更紧的 ELBO / 更高的似然并不保证隐变量有信息量。 想要有用的表示,就要在目标或结构上做文章:free bits、KL 退火(训练初期把 KL 的系数从 0 慢慢加到 1)、弱化解码器(只让它看到局部的上下文,如 PixelVAE / VLAE 的设计),或者换一条路——第 9–10 讲的 GAN 和 BiGAN。


7. VAE 的完整配方 · The full recipe

把本讲的内容合起来,一个 VAE 的训练循环只有几行(vae.py 的 VAE.elbo 和 train_vae):

mu, logvar = encoder(x)                                  # q_φ(z|x) = N(μ, diag(e^logvar))
eps = torch.randn_like(mu)                               # 重参数化:随机性在 ε 里
z = mu + torch.exp(0.5 * logvar) * eps
logits = decoder(z)                                      # p_θ(x|z) 的 64 个伯努利 logit
rec = -F.binary_cross_entropy_with_logits(logits, x, reduction="none").sum(-1)
kl = 0.5 * (mu**2 + logvar.exp() - 1 - logvar).sum(-1)   # KL(N(μ,σ²) ‖ N(0,1)) 的闭式解
loss = -(rec - kl).mean()                                # 负 ELBO
loss.backward(); optimizer.step()                        # θ 和 φ 一起更新

几个实践要点:

  • 编码器输出 log⁡σ2\log \sigma^2 而不是 σ\sigma:网络的输出可以是任意实数,exp⁡\exp 之后自动为正。
  • KL 用闭式解(练习 3):没有采样噪声;重构项通常每张图只抽 1 个 zz。
  • 评估用 IWAE(大 kk),不要只报告 ELBO;报告时说明 kk。
  • 生成:z∼N(0,I)z \sim \mathcal{N}(0, I),解码;伯努利解码器可以展示像素概率(“均值图”)或采样。
  • 连续数据用高斯解码器时要小心:如果允许 σθ(z)\sigma_\theta(z) 任意小,似然可以在训练点上趋于无穷(练习 10)。

8. 2023 年之后 · Since 2023

  • VAE 成了潜空间生成的”压缩器”。 主流的图像和视频生成模型先用一个带 KL 正则的自编码器把数据压到潜空间,再在潜空间里训练扩散或流匹配模型(第 5 讲 §9)。视频模型(如 2024–2025 年开源的 HunyuanVideo、Wan 2.1)用的是三维因果 VAE,把时间和空间一起压缩。这些自编码器的 KL 系数通常很小——用 §6.3 的语言,它们是 β≪1\beta \ll 1 的 β-VAE:重构几乎完美、RR 很大;生成不靠”从先验采样再解码”,而是交给潜空间里的扩散模型。KL 项只是让潜空间保持规整。
  • 扩散模型就是很深的层次化 VAE。 slide 25 括号里的”Diffusion models”不是随口一提:DDPM 的训练目标是一个固定编码器(逐步加噪)、可学习解码器(逐步去噪)的层次化隐变量模型的 ELBO。Kingma & Gao(NeurIPS 2023)进一步证明,扩散模型常用的各种加权损失都可以理解成”在数据增强下的 ELBO”。第 16 讲会推导。
  • 摊销推断走出了 VAE。 “训练一个网络,一次前向给出后验的近似”在科学计算里叫基于模拟的推断(simulation-based inference)或神经后验估计:用模拟器生成大量 (参数, 观测) 对,训练网络直接输出 q(参数∣观测)q(\text{参数} \mid \text{观测}),在天体物理、粒子物理、流行病学等领域被广泛使用。§4.3 的摊销差距、§4.4 的”编码器在新数据上变差”在那里同样是核心问题。
  • 离散的瓶颈。 很多现代 tokenizer 用离散的隐变量(VQ、FSQ),用直通估计(straight-through)而不是 KL 训练,也就绕开了 §6.4 的后验坍塌;代价是”概率模型”的解释变弱。第 17 讲讨论。

9. 小结 · Summary

  1. 整个数据集的 ELBO ∑iL(x(i);θ,ϕ(i))\sum_i \mathcal{L}(x^{(i)}; \theta, \phi^{(i)}) 给每个数据点一组变分参数;SVI 交替地内层优化 ϕ(i)\phi^{(i)}、外层更新 θ\theta。内层要几百步(从先验出发 300 步才赶上编码器),而且 ELBO 对 ϕ\phi 非凸、终点依赖起点。
  2. 对 θ\theta 的梯度容易;对 ϕ\phi 的梯度难,因为期望依赖 ϕ\phi。REINFORCE Eq[(r−b)∇log⁡q]\mathbb{E}_q[(r - b)\nabla\log q] 通用、无偏、方差大,基线很关键;重参数化 z=μ+σϵz = \mu + \sigma\epsilon 用 rr 的导数,方差小得多(VAE 编码器:要达到同样精度,REINFORCE 需要 330 倍的样本),但只适用于连续的 zz。
  3. 摊销推断用一个编码器 qϕ(z∣x)q_\phi(z \mid x) 代替所有 ϕ(i)\phi^{(i)},一次前向完成推断。总差距 = 近似差距 + 摊销差距;在像素世界里摊销差距(约 1.1 bit)是大头。编码器会过拟合;测试时从编码器出发做几步 SVI 能两者兼得。
  4. 自编码器视角:L=Eq[log⁡p(x∣z)]−DKL(q∥p(z))\mathcal{L} = \mathbb{E}_q[\log p(x \mid z)] - D_{\mathrm{KL}}(q \Vert p(z))——重构 + “编码要像先验”。KL 是压缩率,重构是失真;KL 让”从先验采样再解码”有意义。
  5. 像素世界上的 VAE:KL 自动接近真实的 I(x;z)I(x; z)(约 7–8 bit vs 7.19);只用 3–4 个活跃维度;重构去掉了噪声;最好的 VAE 比真实多 2.19 bit,介于 MADE 和 GRU 之间;隐空间按形状组织。
  6. 评估:ELBO 比精确的 log⁡pθ\log p_\theta 低 1.36 bit,IWAE 随 kk 逼近但很慢(k=5000k = 5000 仍低 0.15 bit)。报告的 “log-likelihood” 通常是 IWAE 下界的估计。
  7. IWAE 训练让模型更好、编码器更差;β-VAE 在压缩率与失真之间取舍,β=1\beta = 1 才是似然的下界;强大的解码器导致后验坍塌(KL ≈ 0),free bits 等方法可以逼模型使用 zz。更紧的界不等于更好的样本或更有用的表示。

10. 常见误区 · Common pitfalls

  1. “编码器给出的就是后验。” 它是后验的近似,而且有两层误差:高斯族的局限(近似差距)和编码器本身不完美(摊销差距)。在像素世界里后者更大(§4.3)。
  2. “重参数化总是比 REINFORCE 好。” 对连续的、可导的情形通常如此;离散的 zz 根本用不了重参数化(argmax 切断梯度,§3.4)。而带好基线的 REINFORCE 差距没有想象的那么大(3 倍 vs 330 倍)。
  3. “REINFORCE 的方差大,是因为样本不够多。” 很大一部分来自 rr 的”常数部分”(§3.4:加 1000,方差涨一百倍)。基线不需要额外样本就能消掉它。
  4. “VAE 的 ELBO 就是它的测试似然。” ELBO 是下界,这里低了 1.36 bit;IWAE(大 kk)才是常用的似然估计,而它也偏低(§5.5)。和自回归模型比较时要注意。
  5. “隐变量维数越大越好。” 多余的维度会被关掉(KL 的作用),而且 dz=16d_z = 16 比 dz=8d_z = 8 还差(§5.3)。
  6. “KL 项只是一个正则化项,可以随便调小。” 调小(β<1\beta < 1)会让”消息的分布”偏离先验,从先验采样落进空洞,样本变差;β=1\beta = 1 之外的目标也不再是似然的下界(§6.3)。(潜空间扩散用小 β 是因为生成不靠先验采样,§8。)
  7. “更紧的下界一定更好。” IWAE 训练让解码器更好、编码器更差(§6.2)。
  8. “VAE 的似然很好,所以它学到了有用的隐变量。” 强大的解码器可以完全不用 zz,似然照样很好(后验坍塌,§6.4)。
  9. “只看 ELBO 就能比较两个模型。” free bits 的模型 ELBO 更差、似然却更好(§6.4);ELBO 混合了”模型好不好”和”推断好不好”两件事。
  10. “测试时用编码器就够了。” 编码器会在新数据上变差(§4.4:训练集与测试集 ELBO 差 2.3 bit,而解码器本身只差 0.8)。测试时做几步 SVI 微调常常有效。

11. 练习 · Exercises

练习 1(哪些分布能重参数化?) (a) 指数分布 q(z;λ)=λe−λzq(z; \lambda) = \lambda e^{-\lambda z}(z≥0z \geq 0):写出一个重参数化 z=g(ϵ;λ)z = g(\epsilon; \lambda)。(提示:逆 CDF。)(b) 伯努利分布 q(z;p)q(z; p):能写成可导的 z=g(ϵ;p)z = g(\epsilon; p) 吗?为什么?(c) 一般地,一维连续分布总能用逆 CDF 重参数化,为什么实践中仍然偏爱”位置–尺度”族(高斯、拉普拉斯……)?

参考答案

(a) F(z)=1−e−λzF(z) = 1 - e^{-\lambda z},令 u∼U(0,1)u \sim U(0, 1),z=F−1(u)=−log⁡(1−u)/λz = F^{-1}(u) = -\log(1 - u)/\lambda(或等价地 −log⁡u/λ-\log u/\lambda),对 λ\lambda 可导。(b) 可以写成 z=1[u<p]z = \mathbb{1}[u < p],但它对 pp 是阶跃函数,导数几乎处处为 0——和 §3.4 的 argmax 一样,梯度被切断。(c) 逆 CDF 要求 F−1F^{-1} 有闭式解且对参数可导,很多分布(如 Gamma、Beta)没有;多维时还要处理相关性。位置–尺度族 z=μ+σϵz = \mu + \sigma\epsilon 简单、多维直接推广(z=μ+Lϵz = \mu + L\epsilon),而且梯度的形式最干净。

练习 2(基线不改变期望) 证明 Eq(z;ϕ)[∇ϕlog⁡q(z;ϕ)]=0\mathbb{E}_{q(z;\phi)}[\nabla_\phi \log q(z; \phi)] = 0,并由此证明对任何不依赖 zz 的 bb(可以依赖 xx),Eq[(r(z)−b)∇ϕlog⁡q]=∇ϕEq[r]\mathbb{E}_q[(r(z) - b)\nabla_\phi \log q] = \nabla_\phi \mathbb{E}_q[r]。如果 bb 依赖于这次抽到的 zz 本身,还成立吗?留一法基线为什么没问题?

参考答案

Eq[∇ϕlog⁡q]=∫q∇ϕqq=∇ϕ∫q=∇ϕ1=0\mathbb{E}_q[\nabla_\phi \log q] = \int q \frac{\nabla_\phi q}{q} = \nabla_\phi \int q = \nabla_\phi 1 = 0。所以 Eq[b ∇ϕlog⁡q]=b⋅0=0\mathbb{E}_q[b\,\nabla_\phi\log q] = b \cdot 0 = 0。若 bb 依赖 zz,Eq[b(z)∇ϕlog⁡q(z)]\mathbb{E}_q[b(z)\nabla_\phi \log q(z)] 一般不为 0,估计会有偏。留一法里,第 jj 个样本的基线是其他样本的平均,和 zjz_j 独立,所以对每个 jj 都满足”bb 不依赖 zjz_j“,仍然无偏(代码 01 第 3 部分的”2000 次平均后的相对误差”≈ 单次误差 / 2000\sqrt{2000},没有偏差)。

练习 3(两个高斯之间的 KL) 证明 DKL(N(μ,σ2)∥N(0,1))=12(μ2+σ2−1−log⁡σ2)D_{\mathrm{KL}}(\mathcal{N}(\mu, \sigma^2) \Vert \mathcal{N}(0, 1)) = \frac{1}{2}(\mu^2 + \sigma^2 - 1 - \log\sigma^2)。对角高斯的 KL 为什么是各维之和?KL 什么时候为 0?

参考答案

DKL=Eq[log⁡q−log⁡p]=Eq[−12log⁡(2πσ2)−(z−μ)22σ2+12log⁡2π+z22]=−12log⁡σ2−12+μ2+σ22D_{\mathrm{KL}} = \mathbb{E}_q[\log q - \log p] = \mathbb{E}_q\left[-\frac{1}{2}\log(2\pi\sigma^2) - \frac{(z-\mu)^2}{2\sigma^2} + \frac{1}{2}\log 2\pi + \frac{z^2}{2}\right] = -\frac{1}{2}\log\sigma^2 - \frac{1}{2} + \frac{\mu^2 + \sigma^2}{2}(用了 Eq[(z−μ)2]=σ2\mathbb{E}_q[(z - \mu)^2] = \sigma^2、Eq[z2]=μ2+σ2\mathbb{E}_q[z^2] = \mu^2 + \sigma^2)。对角高斯和标准正态都是各维独立的乘积,log⁡\log 变成求和,KL 就是各维 KL 之和。μ=0\mu = 0、σ=1\sigma = 1 时为 0——这就是代码里”不活跃的维度”(§5.3:σϕ=1.000\sigma_\phi = 1.000)。

练习 4(一维玩具的方差,精确计算) z∼N(0,1)z \sim \mathcal{N}(0, 1),r(z)=(z−2)2r(z) = (z - 2)^2。(a) 重参数化估计 g^=2(z−2)\hat{g} = 2(z - 2) 的方差。(b) REINFORCE 估计 g^=r(z) z\hat{g} = r(z)\,z 的方差(提示:E[z4]=3\mathbb{E}[z^4] = 3,E[z6]=15\mathbb{E}[z^6] = 15)。(c) 加基线 b=5b = 5 后呢?和代码 01 的 2.00、9.33、6.49 核对。

参考答案

(a) Var[2(z−2)]=4\mathrm{Var}[2(z-2)] = 4,标准差 2。(b) E[(z−2)4z2]=E[z6−8z5+24z4−32z3+16z2]=15+72+16=103\mathbb{E}[(z-2)^4 z^2] = \mathbb{E}[z^6 - 8z^5 + 24z^4 - 32z^3 + 16z^2] = 15 + 72 + 16 = 103,均值 −4-4,方差 103−16=87103 - 16 = 87,标准差 87=9.33\sqrt{87} = 9.33。(c) r−5=z2−4z−1r - 5 = z^2 - 4z - 1,E[(z2−4z−1)2z2]=E[z6−8z5+14z4+8z3+z2]=15+42+1=58\mathbb{E}[(z^2 - 4z - 1)^2 z^2] = \mathbb{E}[z^6 - 8z^5 + 14z^4 + 8z^3 + z^2] = 15 + 42 + 1 = 58,方差 58−16=4258 - 16 = 42,标准差 6.486.48。基线 b=E[r]b = \mathbb{E}[r] 并不是方差最小的基线(最优基线是 E[r s2]/E[s2]\mathbb{E}[r\,s^2]/\mathbb{E}[s^2],ss 是得分函数),但已经有明显改善。

练习 5(摊销差距为什么在测试集上更大) §4.4 里 VAE 的编码器在训练集和测试集上的 ELBO 差 2.3 bit,而解码器本身只差 0.8 bit。用”编码器在做回归 x↦ϕ∗(x)x \mapsto \phi^*(x)“的观点解释。给出两种缓解办法。

参考答案

编码器是一个从 2,000 个训练样本学出来的回归器,它在训练集上把 x(i)x^{(i)} 映射到接近 ϕ(i),∗\phi^{(i),*} 的地方,在没见过的 xx 上则会有泛化误差——和任何监督学习一样会过拟合。解码器的过拟合只影响 log⁡pθ\log p_\theta;编码器的过拟合额外加大了测试集上的摊销差距。缓解:(1) 测试时从编码器的输出出发做几步 SVI(§4.4 的最后一行);(2) 更多数据、对编码器加正则化或早停;也有人用更大的编码器配合更多数据。

练习 6(为什么后验坍塌是 ELBO 的最优解) 设解码器族里存在一个不依赖 zz 的 pθ(x∣z)=pθ(x)p_\theta(x \mid z) = p_\theta(x)。证明:此时取 qϕ(z∣x)=p(z)q_\phi(z \mid x) = p(z),ELBO 恰好等于 log⁡pθ(x)\log p_\theta(x)。再说明:一个依赖 zz 的解码器要在 ELBO 上胜过它,需要满足什么条件?

参考答案

pθ(x,z)=p(z)pθ(x)p_\theta(x, z) = p(z)p_\theta(x),后验 pθ(z∣x)=p(z)p_\theta(z \mid x) = p(z)。取 q=p(z)q = p(z),DKL(q∥pθ(z∣x))=0D_{\mathrm{KL}}(q \Vert p_\theta(z \mid x)) = 0,所以 ELBO =log⁡pθ(x)−0= \log p_\theta(x) - 0。一个依赖 zz 的模型 θ′\theta' 的 ELBO 是 log⁡pθ′(x)−DKL(qϕ∥pθ′(z∣x))\log p_{\theta'}(x) - D_{\mathrm{KL}}(q_\phi \Vert p_{\theta'}(z \mid x))。要胜过前者,需要 log⁡pθ′(x)−log⁡pθ(x)>DKL(qϕ∥pθ′(z∣x))\log p_{\theta'}(x) - \log p_\theta(x) > D_{\mathrm{KL}}(q_\phi \Vert p_{\theta'}(z \mid x)):用 zz 带来的似然提升,必须超过近似后验的误差。GRU 解码器不用 zz 已经很好(0.83 bit),用 zz 的提升很小,而高斯近似的误差(§4.3:总差距 1 bit 以上)更大,于是坍塌。

练习 7(β-VAE 与下界) 证明 −Lβ=D+βR-\mathcal{L}_\beta = D + \beta R,且当 β≠1\beta \neq 1 时 Lβ\mathcal{L}_\beta 不是 log⁡p(x)\log p(x) 的下界(举一个方向)。β<1\beta < 1 时 Lβ\mathcal{L}_\beta 和 log⁡p\log p 谁大?

参考答案

由定义 Lβ=−D−βR\mathcal{L}_\beta = -D - \beta R。β<1\beta < 1 时 Lβ=L1+(1−β)R≥L1\mathcal{L}_\beta = \mathcal{L}_1 + (1 - \beta)R \geq \mathcal{L}_1,它可以超过 log⁡p(x)\log p(x)(只要 (1−β)R(1 - \beta)R 大于 ELBO 的差距),所以不是下界;例如 β = 0.25 的模型 R=20.27R = 20.27 bit,(1−β)R=15.2(1 - \beta)R = 15.2 bit,远大于它的差距。β>1\beta > 1 时 Lβ≤L1≤log⁡p\mathcal{L}_\beta \leq \mathcal{L}_1 \leq \log p,仍是下界,但更松,最大化它并不等价于最大化似然。

练习 8(动手:更多的 free bits) 在 04_objectives.py 里把 free bits 从 0.25 改成 0.5(get_gru_vae(0.25, …) 两处,以及 part3_collapse 里的列表),删掉 checkpoints/gruvae_fb0.5.pt(如果有),重新运行(多约 20 秒)。预测 KL、ELBO、IWAE 怎样变化,给定 zz 的采样会不会更像原图。

参考答案(预测的思路)

每维至少 0.5 nat,8 维共 4 nat ≈ 5.8 bit:KL 大约会升到 5–6 bit 附近,接近”配置的信息量”(7 bit)。给定 zz 的采样应该更像原图(位置更准,形状也开始对)。ELBO 可能进一步变差(下界更松),IWAE 似然可能持平或略好——取决于解码器能否真正利用这些信息。具体数字以你的运行为准。

练习 9(动手:SVI 的学习率) 在 03_amortization.py 第 1 部分把 svi 的学习率从 0.05 改成 0.2。预测”从先验出发”那一列:收敛更快还是更慢?终点会不会不同?

参考答案(预测的思路)

更大的步长让前几十步上升更快,但 log⁡σ2\log\sigma^2 可能震荡;ELBO 对 (μ,σ)(\mu, \sigma) 非凸,步子大了可能跳到不同的峰,终点可能更好也可能更差(从先验出发本来就停在了一个比编码器出发更差的局部最优)。Adam 的步长大致就是每步参数的变化量,0.2 对一个标准差约 0.15 的后验来说已经很大。具体结果以你的运行为准。

练习 10(高斯解码器的退化) 连续数据用高斯解码器 pθ(x∣z)=N(μθ(z),σθ2(z)I)p_\theta(x \mid z) = \mathcal{N}(\mu_\theta(z), \sigma_\theta^2(z) I)。假设 σθ\sigma_\theta 可以任意小。说明对一个固定的训练集,ELBO(乃至 log⁡pθ\log p_\theta)可以趋于 +∞+\infty。实践中怎么避免?

参考答案

让某个 z0z_0 附近的解码器输出 μθ(z0)=x(1)\mu_\theta(z_0) = x^{(1)}(一个训练点)、σθ(z0)→0\sigma_\theta(z_0) \to 0,则 log⁡N(x(1);μ,σ2I)=−Dlog⁡σ+⋯→+∞\log \mathcal{N}(x^{(1)}; \mu, \sigma^2 I) = -D\log\sigma + \dots \to +\infty,而只要编码器把 x(1)x^{(1)} 编到 z0z_0 附近,ELBO 也趋于无穷(Mattei & Frellsen 2018 讨论了这种退化)。实践中:给 σθ\sigma_\theta 设下限,或者固定一个全局的 σ\sigma;图像数据常把像素当作离散值(伯努利、离散化的 logistic 混合,PixelCNN++),似然天然有上界(概率 ≤ 1)。第 8 讲的”去量化”讨论的也是这个问题。


12. 延伸阅读 · Further reading

原课材料

VAE 与梯度估计

  • Kingma & Welling, Auto-Encoding Variational Bayes, ICLR 2014;Rezende, Mohamed & Wierstra, Stochastic Backpropagation and Approximate Inference in Deep Generative Models, ICML 2014
  • Kingma & Welling, An Introduction to Variational Autoencoders, Foundations and Trends in ML 2019(最好的综述)
  • Williams, Simple Statistical Gradient-Following Algorithms for Connectionist Reinforcement Learning, 1992(REINFORCE);Mnih & Gregor, Neural Variational Inference and Learning in Belief Networks, ICML 2014(NVIL,学习的基线)
  • Mohamed, Rosca, Figurnov & Mnih, Monte Carlo Gradient Estimation in Machine Learning, JMLR 2020
  • Hoffman, Blei, Wang & Paisley, Stochastic Variational Inference, JMLR 2013

摊销与差距

  • Cremer, Li & Duvenaud, Inference Suboptimality in Variational Autoencoders, ICML 2018
  • Kim, Wiseman, Miller, Sontag & Rush, Semi-Amortized Variational Autoencoders, ICML 2018
  • Shu, Bui, Zhao, Kochenderfer & Ermon, Amortized Inference Regularization, NeurIPS 2018

目标函数与后验坍塌

  • Burda, Grosse & Salakhutdinov, Importance Weighted Autoencoders, ICLR 2016;Rainforth et al., Tighter Variational Bounds are Not Necessarily Better, ICML 2018
  • Higgins et al., β-VAE, ICLR 2017;Alemi et al., Fixing a Broken ELBO, ICML 2018;Locatello et al., Challenging Common Assumptions in the Unsupervised Learning of Disentangled Representations, ICML 2019
  • Bowman et al., Generating Sentences from a Continuous Space, CoNLL 2016;Kingma et al., Improved Variational Inference with Inverse Autoregressive Flow, NeurIPS 2016(free bits、IAF);Chen et al., Variational Lossy Autoencoder, ICLR 2017
  • Theis, van den Oord & Bethge, A Note on the Evaluation of Generative Models, ICLR 2016

2023 年之后

  • Kingma & Gao, Understanding Diffusion Objectives as the ELBO with Simple Data Augmentation, NeurIPS 2023
  • Cranmer, Brehmer & Louppe, The Frontier of Simulation-Based Inference, PNAS 2020(摊销推断在科学中的应用)

13. 下一讲预告 · Next lecture

VAE 能学到隐变量,但似然算不出来——只能用 ELBO 训练、用 IWAE 估计,而且像 §5.5 看到的那样,两者都有误差;后验坍塌也来自”近似后验不完美”这件事。第 7 讲(原课 Lecture 7,Normalizing Flows)问一个直接的问题:

能不能设计一个隐变量模型,让似然精确可算?

答案是:让 x=fθ(z)x = f_\theta(z) 成为 zz 的确定性、可逆的函数。这样对每个 xx 恰好有一个 zz,后验不需要推断,p(x)p(x) 由变量替换公式给出:

pX(x)=pZ(fθ−1(x))∣det⁡∂fθ−1(x)∂x∣.p_X(x) = p_Z\big(f_\theta^{-1}(x)\big)\left|\det \frac{\partial f_\theta^{-1}(x)}{\partial x}\right|.

我们会从一维的例子出发(为什么 X=4ZX = 4Z 时 pX(4)≠pZ(1)p_X(4) \neq p_Z(1)),讲清行列式为什么是”体积的缩放”,再看怎样设计既可逆、雅可比行列式又好算的变换。

← 返回课程目录