Lecture 5 · 隐变量模型(一):混合模型、边际似然与 ELBO · Latent Variable Models I

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

课程源码 ZIP ↓

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

本篇目录

对应 Maps to:Stanford CS236 Deep Generative Models(Fall 2023,Stefano Ermon),Lecture 5 · 2023-10-11 · Latent Variable Models(课表上写作 VAEs;slides:cs236_lecture5.pdf,29 页)。 依据说明:本讲按原课 slides 的顺序展开:回顾自回归模型的优缺点 → 隐变量的动机 → 深度隐变量模型 → 高斯混合与无监督聚类 → 混合模型的表达力、“无穷多个高斯的混合” → 部分观测数据的边际似然 → 朴素蒙特卡洛 → 重要性采样 → log 带来的偏差 → Jensen 不等式与证据下界(ELBO)→ 下界何时是紧的、差距 = KL → 变分推断 → 小结。slide 23 只用一句旁注提到的 EM 算法,本讲义单独写成 §7(原课在 CS228 里讲过,这里把它和 ELBO 的关系讲透,因为第 6 讲的 VAE 就是”EM 用不了时怎么办”)。总相关、χ² 散度、“偏窄的提议分布”、平均场坐标上升(CAVI)、Fisher 恒等式都是本讲义补充的。全部实验在第 1 讲的像素世界(177 个离散的 z,一切都能精确计算)和本讲新增的二维玩具分布、“笔画世界”上进行。 配套代码 Code:code/lecture05/(PyTorch;2 个模块 + 4 个演示脚本,每个都在 10 秒以内) 预计阅读时间:3 小时(含运行代码)


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

0.1 学习目标 Learning goals

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

  1. 说清楚为什么要引入隐变量 zz:数据里有大量看不见的变化因素;”zz 选得好,p(x∣z)p(x \mid z) 就比 p(x)p(x) 简单得多”;训练好以后可以用后验 p(z∣x)p(z \mid x) 得到特征。
  2. 写出高斯混合的生成过程,用后验做软聚类;解释为什么”无监督学习是一个不适定的问题”;理解混合模型的表达力(“简单分布的混合 = 复杂分布”)和 VAE 作为”无穷多个高斯的混合”。
  3. 写出边际似然 p(x)=∑zp(x,z)p(x) = \sum_z p(x, z),说明它为什么难算(项数随隐变量个数指数增长、后验只集中在极少数 zz 上),以及为什么梯度也难算。
  4. 说明朴素蒙特卡洛为什么”理论上可行、实践中不行”;推导重要性采样估计的无偏性和方差(χ2\chi^2 散度);知道”提议分布宁宽勿窄”。
  5. 解释为什么 E[log⁡p^]≠log⁡E[p^]\mathbb{E}[\log \hat{p}] \neq \log \mathbb{E}[\hat{p}];用 Jensen 不等式推导证据下界(ELBO);证明 log⁡p(x)=ELBO+DKL(q∥p(z∣x))\log p(x) = \text{ELBO} + D_{\mathrm{KL}}(q \Vert p(z \mid x)),以及”qq = 后验时下界是紧的”。
  6. 理解变分推断:在一族好处理的 q(z;ϕ)q(z; \phi) 里挑最接近后验的那个;它最小化的是反向 KL,所以会”模式寻找”。
  7. 把 EM 算法理解成在 ELBO 上做坐标上升;知道它的单调性、局部最优,以及它怎样精确地处理缺失数据;知道”∇θlog⁡p(x)\nabla_\theta \log p(x) 也需要后验”。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲只给直觉,后面几讲再展开 Previewed only
第 1–2 讲:像素世界、贝叶斯网络、贝叶斯公式、连续变量的密度(第 2 讲 §6 的”VAE 雏形”)同时学习模型 θ\theta 和近似后验 ϕ\phi:随机变分推断、重参数化、摊销推断、VAE(第 6 讲)
第 3 讲:自回归模型的优缺点用可逆变换得到精确似然的隐变量模型:归一化流(第 7–8 讲)
第 4 讲:KL 散度、前向 / 反向 KL、蒙特卡洛估计、最大似然离散隐变量的梯度估计(REINFORCE,第 6、17 讲)

0.3 本讲地图 Map

§1  为什么要隐变量:看不见的变化因素;深度隐变量模型;像素世界本来就是隐变量模型        ← 代码 01
§2  混合模型:高斯混合与聚类;“不适定”;简单分布的混合 = 复杂分布;无穷多个高斯的混合   ← 代码 01
§3  边际似然:部分观测的数据;log Σ_z;项数的指数爆炸                                    ← 代码 02
§4  用采样近似 p(x):朴素蒙特卡洛;重要性采样;log 带来的偏差                            ← 代码 02
§5  证据下界 ELBO:Jensen;推导;q = 后验时是紧的;差距 = KL                             ← 代码 03
§6  变分推断:高斯 q 近似双峰后验;缺失像素与因子化的 q;坐标上升                        ← 代码 03
§7  EM 算法:ELBO 上的坐标上升;局部最优;缺失数据;似然的梯度也要后验                    ← 代码 04
§8  回顾(原课 slide 29)
§9  2023 年之后
§10–14  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 记号 Notation

符号含义
xx,zz观测变量(像素),隐变量(看不见的变化因素、缺失的像素、混合成分的编号)
p(x,z;θ)=p(z) p(x∣z;θ)p(x, z; \theta) = p(z)\,p(x \mid z; \theta)联合分布(模型);θ\theta 是模型参数
p(x;θ)=∑zp(x,z;θ)p(x; \theta) = \sum_z p(x, z; \theta) 或 ∫p(x,z;θ) dz\int p(x, z; \theta)\,dz边际似然(evidence,“证据”)
p(z∣x;θ)p(z \mid x; \theta)后验
q(z)q(z),q(z;ϕ)q(z; \phi)任意一个隐变量上的分布;变分分布,ϕ\phi 是变分参数
L(x;θ,ϕ)\mathcal{L}(x; \theta, \phi),ELBO证据下界 Eq[log⁡p(x,z;θ)−log⁡q(z;ϕ)]\mathbb{E}_q[\log p(x, z; \theta) - \log q(z; \phi)]
H(q)H(q)qq 的熵 −∑zq(z)log⁡q(z)-\sum_z q(z)\log q(z)
w=p(x,z)/q(z)w = p(x, z)/q(z),p^k\hat{p}_k重要性权重;kk 个样本的重要性采样估计 1k∑jwj\frac{1}{k}\sum_j w_j
rnkr_{nk}EM 里的”责任”:p(z=k∣x(n))p(z = k \mid x^{(n)})

0.5 关于数字 · About the numbers

像素世界与前几讲相同(8×8 黑白图,177 个配置,翻转噪声 ε=0.05\varepsilon = 0.05,熵 H(X)≈25.59H(X) \approx 25.59 bit/图)。本讲新增两个”知道真相”的世界:二维玩具分布(toy2d.py:双月牙、8 个高斯的圆环、3 个高斯团、香蕉形,密度都能精确计算,第 6–10 讲还会用)和笔画世界(lvm.py:16 个可以同时出现的二值隐特征,2162^{16} 种隐状态)。所有数字来自作者机器的实际输出(单线程 CPU,重复运行逐字节相同,计时除外)。有几处结果和预想不同(例如 4 个簇按位置而不是形状划分、“缺失当 0”和”扔掉不完整的图”的对比),讲义按实际结果写,并记录在 代码 README 的”关于实验结果”里。


1. 为什么要隐变量 · Why latent variables

1.1 回顾:自回归模型缺了什么

原课第 2 页回顾了第 3–4 讲:自回归模型用链式法则分解,完全通用;用条件独立或神经网络参数化得到紧凑的表示;似然容易算、容易训练。但它有三个缺点:必须选一个顺序;生成是逐个进行的;没有办法无监督地学到特征。

第三点是本讲的出发点。PixelCNN 能把一张图的概率算得很准,可你问它”这张图里是什么形状、在哪里”,它答不出来——它的内部状态是”已经看过的像素的某种摘要”,不是对整张图的高层描述。

1.2 看不见的变化因素

原课第 4–5 页:一张人脸照片的千变万化,来自性别、眼睛颜色、发色、姿态……这些变化因素(factors of variation)。除非图片被标注过,否则它们不出现在数据里——它们是隐的(latent)。想法很直接:把这些因素显式地建模成隐变量 zz。

画成贝叶斯网络(第 2 讲):z→xz \to x,只有 xx(像素)是观测到的(slide 5 里涂了阴影的节点)。这样做有两个好处:

  1. 如果 zz 选得好,p(x∣z)p(x \mid z) 可以比 p(x)p(x) 简单得多。 知道”这是一张金发、蓝眼、侧脸的女性照片”以后,剩下的不确定性小得多,结构也简单得多。
  2. 训练好以后,可以用后验 p(z∣x)p(z \mid x) 识别特征,例如 p(EyeColor=Blue∣x)p(\text{EyeColor} = \text{Blue} \mid x)。这就是”表示学习”:zz 是 xx 的一个有意义的摘要。

困难在于:手工指定这些条件分布非常困难(slide 5)。谁能写出”给定发色和姿态,每个像素的分布”?

1.3 深度隐变量模型

原课第 6 页的答案和前几讲一样:用神经网络去表示条件分布。

z∼N(0,I),p(x∣z)=N(μθ(z),Σθ(z)),z \sim \mathcal{N}(0, I), \qquad p(x \mid z) = \mathcal{N}\big(\mu_\theta(z), \Sigma_\theta(z)\big),

其中 μθ\mu_\theta、Σθ\Sigma_\theta 是神经网络。我们不再规定 zz 的每一维代表什么,只给它一个最简单的先验(标准高斯),然后希望训练之后 zz 会自己对应到有意义的变化因素上——这叫无监督表示学习。特征同样通过 p(z∣x)p(z \mid x) 得到。

这里有一个关键的”为什么”:为什么先验可以是这么简单的 N(0,I)\mathcal{N}(0, I)?因为复杂性全部可以交给解码器 μθ\mu_\theta。第 2 讲代码 05 第 4 部分已经看到:一个一维的 z∼N(0,1)z \sim \mathcal{N}(0, 1) 经过一个小网络,边缘分布就可以是多峰的、弯曲的。

1.4 像素世界本来就是一个隐变量模型

第 1 讲的像素世界,生成过程正是 z→xz \to x:先选一个配置 zz(形状 + 位置 + 大小,177 种),再画出模板、加独立的翻转噪声。所以我们可以精确地检验 slide 5 的那句话:”zz 选得好,p(x∣z)p(x \mid z) 就简单”。

衡量”像素之间还剩多少依赖”的一个好指标是总相关(total correlation):

TC(x)=∑iH(xi)−H(x),\mathrm{TC}(x) = \sum_i H(x_i) - H(x),

即”把像素当成独立的、分别编码”比”整体编码”多付的比特。像素独立时它为 0。条件版本 TC(x∣c)=∑iH(xi∣c)−H(x∣c)\mathrm{TC}(x \mid c) = \sum_i H(x_i \mid c) - H(x \mid c) 衡量”知道 cc 以后还剩多少依赖”。代码 01 第 1 部分:

条件∑iH(xi∣⋅)\sum_i H(x_i \mid \cdot)H(x∣⋅)H(x \mid \cdot)总相关相邻像素的平均相关系数
什么都不知道:p(x)p(x)35.5825.5810.000.258
知道形状 yy(4 种):p(x∣y)p(x \mid y)34.9123.6911.220.235
知道配置 zz(177 种):p(x∣z)p(x \mid z)18.3318.330.000.000

(单位 bit/图;H(x)H(x) 是 10 万个样本的蒙特卡洛估计。)

三个观察:

  1. 知道完整的配置以后,像素之间的依赖完全消失:p(x∣z)p(x \mid z) 就是 64 个独立的伯努利。复杂性全被 zz 吸收了。剩下的 18.33 bit 是纯噪声(64×h(0.05)64 \times h(0.05));H(x)−H(x∣z)=7.25H(x) - H(x \mid z) = 7.25 bit 是 zz 携带的关于 xx 的信息。
  2. 只知道形状,总相关反而升高了(10.00 → 11.22)。这一点乍看反直觉:知道更多,依赖怎么更多了?原因是形状是一个”整体”的信息——单个像素几乎不透露形状(∑iH(xi)\sum_i H(x_i) 只降了 0.68 bit),整张图却几乎决定了形状(H(x)H(x) 降了 1.90 bit)。知道形状去掉的是整体的不确定性,像素之间的依赖一点没少:p(x∣形状)p(x \mid \text{形状}) 仍然是几十个位置的混合。
  3. 所以”zz 选得好”是一个实实在在的要求:太粗的 zz 不能让条件分布变简单。真实的深度隐变量模型希望 zz 能捕捉到”全部”重要的变化因素,让解码器只需要处理局部的、近似独立的细节。

2. 混合模型 · Mixture models

2.1 高斯混合:一个”浅层”隐变量模型

原课第 7 页:

z∼Categorical(1,…,K),p(x∣z=k)=N(μk,Σk).z \sim \mathrm{Categorical}(1, \dots, K), \qquad p(x \mid z = k) = \mathcal{N}(\mu_k, \Sigma_k).

生成过程:先抽一个成分 kk,再从那个高斯里抽一个点。贝叶斯网络还是 z→xz \to x。

它为什么叫”浅层”?因为 p(x∣z)p(x \mid z) 没有神经网络,只是查表:第 kk 个成分对应一组固定的 (μk,Σk)(\mu_k, \Sigma_k)。

聚类(slide 8):后验 p(z∣x)p(z \mid x) 告诉我们一个点属于哪个成分。它是一个软分配:两团之间的点可以”一半属于这团、一半属于那团”。代码 04 第 1 部分在三个高斯团上训练了 K=3K = 3 的混合,点 (0,0.4)(0, 0.4) 落在左右两团之间,后验是 0.512 : 0.488;点 (−0.3,−0.9)(-0.3, -0.9) 是 0.011 : 0.788 : 0.201(slide 10 的图就是这样的”每个点属于每个成分的概率”)。

2.2 无监督学习是”不适定”的

slide 8 说:“我们希望从无标签的数据里学习——这是一个不适定的问题(ill-posed problem)。“slide 11 展示了在 MNIST 上无监督聚类的结果,簇大致对应数字。可数据并没有规定”该按什么分”。

代码 01 第 2 部分做了一个直接的实验:像素世界的 5,000 张图,不给形状标签,训练 K=4K = 4 的伯努利混合(每个成分是一个”原型”,每个像素独立地按原型的概率取值)。四种形状、四个簇,它能自己找到形状吗?

簇横线竖线方框十字
簇 0(π = 0.25)404243365237
簇 1(π = 0.29)387287473285
簇 2(π = 0.22)340225308226
簇 3(π = 0.24)405237344234

完全没有。 每个簇里四种形状的比例都和总体差不多;“纯度”(每个簇按多数形状去猜的正确率)只有 0.324,和不看图、全猜”横线”的 0.30 几乎一样。打印出来的 4 个原型揭示了它按什么分:按位置——“东西在左下 / 右上 / 左上 / 右下”。

这不是优化的偶然:

分法训练集平均 log⁡2p(x)\log_2 p(x)纯度
EM,三个不同的随机初始化−33.061(三次相同)0.324
按真实形状分组(作弊:用了标签)−35.1991.000
EM,从”按形状分组”出发−33.0620.323

三个随机初始化收敛到同一个解;按形状分组的似然低 2.14 bit/图;从”按形状分组”出发跑 EM,它会离开那里、走到按位置分组的解。最大似然真心偏爱按位置分。

为什么?对 4 个模糊的原型来说,“东西大概在哪个角落”比”是什么形状”更能解释像素:一个”左下角原型”能给所有画在左下角的图(不论形状)合理的概率,而一个”横线原型”必须把概率摊在 8 行上,每一行都很淡。最大似然只奖励”把 p(x)p(x) 拟合好”;隐变量最后代表什么,取决于什么最能压缩数据,不一定是人关心的那个因素。 这是理解所有无监督表示学习(包括 VAE 的隐空间)的一个重要提醒。K=16K = 16 时纯度升到 0.411,但那只是切得更碎。

2.3 另一种动机:简单分布的混合 = 复杂分布

原课第 12 页:

p(x)=∑zp(x,z)=∑zp(z) p(x∣z)=∑k=1Kp(z=k) N(x;μk,Σk)⏟成分.p(x) = \sum_z p(x, z) = \sum_z p(z)\,p(x \mid z) = \sum_{k=1}^K p(z = k)\,\underbrace{\mathcal{N}(x; \mu_k, \Sigma_k)}_{\text{成分}}.

即使不关心聚类,混合也是一个把简单模型组合成更有表达力的模型的通用办法。代码 01 第 3 部分 (a) 用 EM 拟合二维”双月牙”(2,000 个训练点;真实分布已知,可以算 KL):

KK参数个数训练集上的 KL 估计DKL(p∥q)D_{\mathrm{KL}}(p \Vert q)(2 万个新样本,nat)
150.9220.907 ± 0.006
2110.7230.742 ± 0.006
4230.2790.322 ± 0.005
8470.0200.050 ± 0.002
1695−0.0270.032 ± 0.002
32191−0.0720.078 ± 0.003

一个高斯只能画出一个椭圆;8 个椭圆拼起来就能描出两个弯曲的月牙。但成分不是越多越好:K=32K = 32 在训练集上的 KL 是负的(比真实分布还”好”),新样本上反而比 K=16K = 16 差——2,000 个点不够估计 191 个参数,这是第 4 讲的过拟合。

像素世界里也一样((b),1 万张训练图,伯努利混合):

模型参数个数训练:比真实多 bit测试:比真实多 bit找到的真实配置
K=1K = 1(= 独立像素)649.969.880
K=4K = 42597.587.590
K=16K = 161,0395.795.915
K=64K = 644,1592.393.0246
K=177K = 177,随机初始化11,504−0.370.99130
K=177K = 177,用真实的 177 个模板初始化11,504−0.840.82177

最后两行值得多看一眼。同样是 177 个原型——模型族里明明包含(几乎)正确的答案——随机初始化的 EM 只找到了 130 个真实配置(有的原型重复,有的是两个配置的”平均”),训练集似然也比从真实模板出发的解低 0.47 bit:它停在了一个更差的局部最优。隐变量模型的似然是非凸的。而即使从真实模板出发,测试集上仍比真实分布差 0.82 bit(训练集上反而好 0.84 bit):每个原型平均只分到五六十张图,估计 64 个概率的方差很大。真正的”图形引擎”只有 ε\varepsilon 和形状概率两类参数——这是”正确的先验”的价值(第 1 讲 §2.2)。

2.4 VAE:无穷多个高斯的混合

原课第 13 页把混合推到极限:让 zz 连续,

z∼N(0,I),p(x∣z)=N(μθ(z),Σθ(z)),z \sim \mathcal{N}(0, I), \qquad p(x \mid z) = \mathcal{N}\big(\mu_\theta(z), \Sigma_\theta(z)\big),

例如(slide 13 的具体写法,xx 二维):

μθ(z)=σ(Az+c),Σθ(z)=diag(exp⁡(σ(Bz+d))),θ=(A,B,c,d).\mu_\theta(z) = \sigma(Az + c), \qquad \Sigma_\theta(z) = \mathrm{diag}\big(\exp(\sigma(Bz + d))\big), \qquad \theta = (A, B, c, d).

每一个 zz 对应一个高斯成分,zz 有无穷多个取值,所以 p(x)=∫p(z) p(x∣z) dzp(x) = \int p(z)\,p(x \mid z)\,dz 是无穷多个高斯的混合。即使 p(x∣z)p(x \mid z) 很简单,边缘分布 p(x)p(x) 也可以非常复杂、灵活。 第 2 讲代码 05 第 4 部分已经画过一个例子:一维 zz 经过一个小网络,边缘分布有三个峰,二维时样本落在一条弯曲的曲线附近;同一个 xx 的后验 p(z∣x)p(z \mid x) 可以有好几个峰。

和有限混合相比,这里的”成分”不再是 KK 个独立的参数组,而是由同一个网络 μθ\mu_\theta 共享参数地生成——相邻的 zz 给出相似的成分。这正是”深度”隐变量模型比高斯混合强的地方:成分的个数不再受参数量限制,而且隐空间是连续的、可以插值的(第 6 讲)。

2.5 回顾(原课 slide 14)

隐变量模型:

  • 让我们用简单的积木 p(x∣z)p(x \mid z) 定义复杂的模型 p(x)p(x);
  • 天然适合无监督任务(聚类、无监督表示学习);
  • 没有免费的午餐:比完全观测的自回归模型难学得多。 §2.2–2.3 已经看到两个代价:隐变量学到什么不由我们决定;似然非凸、有局部最优。下一节是第三个、也是最根本的代价:似然本身难算。

3. 边际似然 · Marginal likelihood

3.1 部分观测的数据

原课第 15 页从一个更具体的场景切入:假设训练时有些像素缺失(例如上半张)。记 XX 为观测到的变量,ZZ 为没观测到的(也叫隐藏的、隐的)。假设我们有一个联合分布的模型 p(X,Z;θ)p(X, Z; \theta)(例如 PixelCNN)。观测到一个训练样本 xˉ\bar{x} 的概率是多少?

p(X=xˉ;θ)=∑zp(X=xˉ,Z=z;θ)=∑zp(xˉ,z;θ).p(X = \bar{x}; \theta) = \sum_z p(X = \bar{x}, Z = z; \theta) = \sum_z p(\bar{x}, z; \theta).

要考虑补全这张图的所有可能方式。缺失的像素就是隐变量——“隐变量”不一定是抽象的”变化因素”,任何没观测到的东西都是。对于 32 个缺失像素,这是 232≈432^{32} \approx 43 亿种补全;对 PixelCNN 来说,就是 43 亿次前向计算。

第 3 讲代码 05 已经遇到过这个问题:自回归模型算”顺着顺序”的条件很容易,算 p(下半张)p(\text{下半张})(要对上半张求和)只能用重要性采样估计,而且偏低。

3.2 VAE 的边际似然

slide 16:VAE 的 zz 是连续的,求和变成积分:

p(X=xˉ;θ)=∫p(X=xˉ,Z=z;θ) dz=∫p(xˉ,z;θ) dz.p(X = \bar{x}; \theta) = \int p(X = \bar{x}, Z = z; \theta)\,dz = \int p(\bar{x}, z; \theta)\,dz.

这个积分没有闭式解(μθ\mu_\theta 是神经网络),只能近似。

3.3 最大似然 = 对每个数据点做一次求和

slide 17:数据集 D={x(1),…,x(M)}\mathcal{D} = \{x^{(1)}, \dots, x^{(M)}\},每个数据点的 XX 观测到、ZZ 从未观测到。最大似然:

log⁡∏x∈Dp(x;θ)=∑x∈Dlog⁡p(x;θ)=∑x∈Dlog⁡∑zp(x,z;θ).\log \prod_{x \in \mathcal{D}} p(x; \theta) = \sum_{x \in \mathcal{D}} \log p(x; \theta) = \sum_{x \in \mathcal{D}} \log \sum_z p(x, z; \theta).

和第 4 讲相比,多了一个藏在 log⁡\log 里面的求和。它有三个麻烦:

  1. 求和的项数随隐变量个数指数增长。 30 个二值隐特征就是 2302^{30} 项;连续变量的积分一般根本没有闭式解。
  2. 梯度也难算(§7.4 会看到:∇θlog⁡p(x)\nabla_\theta \log p(x) 需要后验)。
  3. 每个训练样本都要做一次,每个梯度步都要做一次。所以近似必须便宜。

代码 02 第 1 部分用”笔画世界”感受第 1 点:8×8 画布上有 mm 条可能的笔画(整行或整列),每条以 0.15 的概率独立出现,叠在一起再加翻转噪声。隐状态有 2m2^m 种,精确计算 100 张图的 log⁡p(x)\log p(x):

mm项数 2m2^m用时
4160.1 ms
82560.3 ms
124,0964.5 ms
1665,53656 ms
20约 100 万(外推)1 秒
30约 10 亿(外推)15 分钟
40约 1 万亿(外推)11 天

(计时依机器而定。)而这些项里几乎全是 0:

世界zz 的总数平均后验熵 H(z∣x)H(z \mid x)后验的”有效个数” 2H2^{H}
像素世界1770.177 bit1.18
笔画世界(m=16m = 16)65,5360.033 bit1.03

一张图的后验平均只落在一个多一点的 zz 上。精确求和把几乎全部时间花在加 0 上——如果能直接找到那几个重要的 zz,就不用全加。这是下面所有近似方法的出发点。


4. 用采样近似边际似然 · Monte Carlo for the marginal likelihood

4.1 第一种尝试:朴素蒙特卡洛

slide 18:把求和改写成一个期望,

pθ(x)=∑z∈Zpθ(x,z)=∣Z∣∑z∈Z1∣Z∣pθ(x,z)=∣Z∣ Ez∼Uniform(Z)[pθ(x,z)],p_\theta(x) = \sum_{z \in \mathcal{Z}} p_\theta(x, z) = |\mathcal{Z}| \sum_{z \in \mathcal{Z}} \frac{1}{|\mathcal{Z}|} p_\theta(x, z) = |\mathcal{Z}|\,\mathbb{E}_{z \sim \mathrm{Uniform}(\mathcal{Z})}[p_\theta(x, z)],

然后用第 4 讲的蒙特卡洛:均匀地抽 z(1),…,z(k)z^{(1)}, \dots, z^{(k)},

∑zpθ(x,z)≈∣Z∣1k∑j=1kpθ(x,z(j)).\sum_z p_\theta(x, z) \approx |\mathcal{Z}| \frac{1}{k}\sum_{j=1}^k p_\theta(x, z^{(j)}).

它是无偏的。slide 18 的评价:“**理论上可行,实践中不行。**对大多数 zz,pθ(x,z)p_\theta(x, z) 非常小(大多数补全没有意义);有些补全的 pθ(x,z)p_\theta(x, z) 很大,但均匀随机地抽,我们永远抽不中。”

代码 02 第 2 部分 (a):像素世界,500 张测试图,每个 kk 重复估计多次;log⁡2(p^/p)\log_2(\hat{p}/p) 是估计值比真实值大(正)或小(负)多少 bit,−6.6 bit 相当于”小了 100 倍”。

样本数 kkE[p^/p]\mathbb{E}[\hat{p}/p](应为 1)中位数 log⁡2(p^/p)\log_2(\hat{p}/p)小了 100 倍以上的比例平均 log⁡2(p^/p)\log_2(\hat{p}/p)
10.993−30.9297.5%−33.33
100.986−19.9686.7%−18.42
1000.991−3.8944.7%−6.61
10000.998−0.070.3%−0.17

“无偏”这句话在这里几乎没用:k=10k = 10 时,87% 的估计比真实值小 100 倍以上——绝大多数时候一个”对的”配置都没抽到,只看到”某个别的形状 + 二十个翻转”这类噪声解释的极小概率;偶尔抽中一次,估计又一下子大出 177/k177/k 倍。平均是对的,单次估计几乎总是错的。k=1000k = 1000 时总算够了,可这已经比精确求和(177 项)还贵。

(b) 笔画世界里改用先验做提议(p(x)=Ez∼p(z)[p(x∣z)]p(x) = \mathbb{E}_{z \sim p(z)}[p(x \mid z)],这是更常见的”朴素”写法):先验知道笔画很少,比均匀分布聪明,k=1000k = 1000 时多数图的中位数误差已接近 0;但笔画多的图,先验抽中那个正确组合的概率极小——k=10,000k = 10{,}000 时仍有 12.2% 的估计小了 100 倍以上。一张图抽一万次,只为估一个数,在训练循环里是负担不起的。

4.2 第二种尝试:重要性采样

slide 19:换一个”会挑”的分布 q(z)q(z) 来抽样,

pθ(x)=∑zpθ(x,z)=∑zq(z)pθ(x,z)q(z)=Ez∼q(z)[pθ(x,z)q(z)],p_\theta(x) = \sum_z p_\theta(x, z) = \sum_z q(z) \frac{p_\theta(x, z)}{q(z)} = \mathbb{E}_{z \sim q(z)}\left[\frac{p_\theta(x, z)}{q(z)}\right], p^k(x)=1k∑j=1kpθ(x,z(j))q(z(j)),z(j)∼q.\hat{p}_k(x) = \frac{1}{k}\sum_{j=1}^k \frac{p_\theta(x, z^{(j)})}{q(z^{(j)})}, \qquad z^{(j)} \sim q.

(只要 q(z)>0q(z) > 0 处覆盖了所有 pθ(x,z)>0p_\theta(x, z) > 0 的 zz。)w=pθ(x,z)/q(z)w = p_\theta(x, z)/q(z) 叫重要性权重:qq 抽得太多的地方权重小、抽得太少的地方权重大,正好补偿。它是无偏的:Eq[w]=∑zq(z)⋅p(x,z)/q(z)=p(x)\mathbb{E}_q[w] = \sum_z q(z) \cdot p(x, z)/q(z) = p(x)。

什么样的 qq 好? slide 19 的直觉:“多抽那些在给定 xx 时可能的 zz(补全)。“可以说得更精确:估计的相对方差是

Varq[p^kp]=1k(∑zp(z∣x)2q(z)−1)=χ2(p(z∣x) ∥ q)k,\mathrm{Var}_q\left[\frac{\hat{p}_k}{p}\right] = \frac{1}{k}\left(\sum_z \frac{p(z \mid x)^2}{q(z)} - 1\right) = \frac{\chi^2\big(p(z \mid x) \,\Vert\, q\big)}{k},

(练习 3)——一个叫 χ2\chi^2 散度的量。q=p(z∣x)q = p(z \mid x) 时它为 0:每一个权重都恰好等于 p(x)p(x),抽一个样本就够了。代码 02 第 3 部分比较了 6 种提议分布(像素世界,500 张图):

提议分布 qqχ2\chi^2(精确)k=1k=1:小 100 倍以上k=1k=1:误差标准差(bit)k=10k=10:小 100 倍以上k=10k=10:标准差
均匀(= 朴素蒙特卡洛)162.4197.5%12.4587.3%8.42
形状对、位置均匀42.3895.2%10.3566.4%11.59
回火后验 ∝p(z∣x)1/3\propto p(z \mid x)^{1/3}0.4316.4%4.780.0%0.30
½ 后验 + ½ 均匀0.9848.7%19.060.1%0.68
锐化后验 ∝p(z∣x)2\propto p(z \mid x)^{2}(偏窄)162.410.0%0.050.0%0.05
后验 p(z∣x)p(z \mid x) 本身0.000.0%0.000.0%0.00

所有提议的 E[p^/p]\mathbb{E}[\hat{p}/p] 都在 1 附近(无偏),区别全在方差。三个要点:

  1. qq 越像后验越好。 “回火后验”比后验宽一些,χ2=0.43\chi^2 = 0.43,k=10k = 10 时几乎每次都准。“½ 后验 + ½ 均匀”保证 q≥12q \geq \frac{1}{2} 后验,于是 χ2≤1\chi^2 \leq 1——只要 qq 在后验有质量的地方不太小,估计就稳定(“防御性”重要性采样)。
  2. “偏窄的 qq“是一个陷阱。 “锐化后验”的 χ2\chi^2 和均匀分布一模一样(162.41,这不是巧合,练习 4),实测的标准差却是最小的。它的方差藏在哪里?代码给出了诊断:二阶矩的 98.6% 来自 q(z)<10−6q(z) < 10^{-6} 的那些 zz,而它们加起来被抽中的概率只有 6.7×10−86.7 \times 10^{-8}——几千万次才抽到一次。估计看起来又稳又准,理论方差却极大。在像素世界里那些 zz 的后验质量只有 3×10−43 \times 10^{-4},看不出偏差;在真实模型里,后验的尾部可能有不可忽视的质量,偏窄的 qq 会让估计系统性地偏低,而样本方差不会给你任何警告。经验法则:qq 宁宽勿窄。
  3. 那我们为什么还要估计 p(x)p(x)? 如果知道后验,p(x)p(x) 本来就能算。重要性采样的价值在于:一个近似的后验就足以把估计变得又快又准。第 6 讲的 VAE 会训练一个推断网络 qϕ(z∣x)q_\phi(z \mid x),它既用来训练,也用来做这种重要性采样,估计测试集上的 log⁡p(x)\log p(x)。

4.3 训练要的是 log⁡p(x)\log p(x)

slide 20:训练需要的是对数似然 log⁡pθ(x)\log p_\theta(x)。很自然地想用 log⁡p^k\log \hat{p}_k 去估计它:

log⁡pθ(x)≈log⁡(1k∑j=1kpθ(x,z(j))q(z(j)))≈k=1log⁡pθ(x,z(1))q(z(1)).\log p_\theta(x) \approx \log\left(\frac{1}{k}\sum_{j=1}^k \frac{p_\theta(x, z^{(j)})}{q(z^{(j)})}\right) \overset{k=1}{\approx} \log \frac{p_\theta(x, z^{(1)})}{q(z^{(1)})}.

但是 E[log⁡pθ(x,z(1))q(z(1))]≠log⁡E[pθ(x,z(1))q(z(1))]\mathbb{E}\left[\log \frac{p_\theta(x, z^{(1)})}{q(z^{(1)})}\right] \neq \log \mathbb{E}\left[\frac{p_\theta(x, z^{(1)})}{q(z^{(1)})}\right]。p^\hat{p} 对 pp 无偏,log⁡p^\log \hat{p} 对 log⁡p\log p 却有偏。偏向哪边?代码 02 第 4 部分(表中是 E[log⁡2p^k]−log⁡2p(x)\mathbb{E}[\log_2 \hat{p}_k] - \log_2 p(x),500 张图平均):

kk形状对、位置均匀回火后验锐化后验(偏窄)
1−33.796−2.148−0.017
ELBO − log p(精确)−33.784−2.149−0.017
2−29.456−0.601−0.016
10−17.700−0.035−0.010
100−2.239−0.004−0.003
1000−0.037−0.001−0.001
k=1000k = 1000 的预测 −χ2/(2kln⁡2)-\chi^2/(2k\ln 2)−0.031−0.000−0.117
  1. 每一格都是负的:log⁡p^\log \hat{p} 系统性地偏低——下一节的 Jensen 不等式会说明为什么。
  2. k=1k = 1 时,E[log⁡p^1]=Eq[log⁡p(x,z)−log⁡q(z)]\mathbb{E}[\log \hat{p}_1] = \mathbb{E}_q[\log p(x, z) - \log q(z)]——这就是下一节的 ELBO(第二行是精确计算的 ELBO,和第一行的蒙特卡洛一致)。“用一个样本做重要性采样、再取 log”的期望,就是证据下界。
  3. kk 越大偏差越小,单调地逼近 0:E[log⁡p^k]\mathbb{E}[\log \hat{p}_k] 是一族越来越紧的下界(Burda et al. 2016 的 IWAE 下界,第 6 讲)。kk 很大时偏差 ≈−χ2/(2k)\approx -\chi^2/(2k)(用 log⁡\log 的二阶泰勒展开即得);“形状对”那一列的预测和实测接近,“锐化后验”那一列对不上——预测依赖方差,而它的方差藏在永远抽不到的尾部。
  4. 还有一个对比:ELBO 喜欢偏窄的 qq(锐化后验的 ELBO 最紧),重要性采样怕偏窄的 qq。这两种”好”的标准不同,第 6 讲还会回到这一点。

5. 证据下界 · The evidence lower bound (ELBO)

5.1 Jensen 不等式

slide 21:log⁡\log 是凹函数,log⁡(px+(1−p)x′)≥plog⁡x+(1−p)log⁡x′\log(px + (1-p)x') \geq p\log x + (1 - p)\log x'——“弦在曲线下方”。推广到任意分布:

log⁡(Ez∼q[f(z)])=log⁡(∑zq(z)f(z))≥∑zq(z)log⁡f(z)=Ez∼q[log⁡f(z)].\log\big(\mathbb{E}_{z \sim q}[f(z)]\big) = \log\left(\sum_z q(z) f(z)\right) \geq \sum_z q(z) \log f(z) = \mathbb{E}_{z \sim q}[\log f(z)].

先平均再取 log ≥ 先取 log 再平均,等号当且仅当 ff 在 qq 下是常数。代码 03 第 1 部分:f∈{1,100}f \in \{1, 100\} 各一半时,左边 log⁡50.5=3.922\log 50.5 = 3.922,右边 12(log⁡1+log⁡100)=2.303\frac{1}{2}(\log 1 + \log 100) = 2.303;ff 是常数 5 时两边相等;ff 的取值越分散,差距越大。

5.2 推导 ELBO

slide 22:取 f(z)=pθ(x,z)/q(z)f(z) = p_\theta(x, z)/q(z),

log⁡pθ(x)=log⁡Ez∼q[pθ(x,z)q(z)]≥Ez∼q[log⁡pθ(x,z)q(z)].\log p_\theta(x) = \log \mathbb{E}_{z \sim q}\left[\frac{p_\theta(x, z)}{q(z)}\right] \geq \mathbb{E}_{z \sim q}\left[\log \frac{p_\theta(x, z)}{q(z)}\right].

右边叫证据下界(evidence lower bound,ELBO)。“证据”(evidence)就是 p(x)p(x)——观测到的数据的概率。这一步正是 §4.3 观察到的现象:log⁡\log 的期望 ≤ 期望的 log⁡\log。

5.3 ELBO 的结构

slide 23:对任意 qq 成立,

log⁡p(x;θ)≥∑zq(z)log⁡pθ(x,z)q(z)=∑zq(z)log⁡pθ(x,z)⏟"就像 z 被观测到了"的对数似然  −∑zq(z)log⁡q(z)⏟熵 H(q).\log p(x; \theta) \geq \sum_z q(z) \log \frac{p_\theta(x, z)}{q(z)} = \underbrace{\sum_z q(z) \log p_\theta(x, z)}_{\text{"就像 } z \text{ 被观测到了"的对数似然}} \;\underbrace{- \sum_z q(z) \log q(z)}_{\text{熵 } H(q)}.

第一项是期望的完整数据对数似然:如果 zz 被观测到了,对数似然就是 log⁡p(x,z)\log p(x, z);我们不知道 zz,就按 qq 对各种可能的 zz 取平均。第二项是 qq 的熵,它奖励”不要把赌注全压在一个 zz 上”。(第 6 讲 slide 5 正是这样标注这两项的:“Log-likelihood as if fully observed” 和 “Entropy H(q) of q”。)

这个形式的好处:log⁡\log 现在作用在 p(x,z)p(x, z) 上,不再作用在一个求和上。对大多数模型,log⁡p(x,z)=log⁡p(z)+log⁡p(x∣z)\log p(x, z) = \log p(z) + \log p(x \mid z) 很容易算——难算的求和被一个期望代替了,而期望可以用采样估计。

5.4 为什么 qq = 后验时下界是紧的

slide 24:令 q(z)=p(z∣x;θ)q(z) = p(z \mid x; \theta),

∑zp(z∣x)log⁡p(x,z)p(z∣x)=∑zp(z∣x)log⁡p(z∣x) p(x)p(z∣x)=∑zp(z∣x)log⁡p(x)=log⁡p(x)∑zp(z∣x)⏟=1=log⁡p(x).\sum_z p(z \mid x) \log \frac{p(x, z)}{p(z \mid x)} = \sum_z p(z \mid x) \log \frac{p(z \mid x)\,p(x)}{p(z \mid x)} = \sum_z p(z \mid x) \log p(x) = \log p(x) \underbrace{\sum_z p(z \mid x)}_{= 1} = \log p(x).

直觉上:q=q = 后验时,比值 f(z)=p(x,z)/p(z∣x)=p(x)f(z) = p(x, z)/p(z \mid x) = p(x) 是常数,Jensen 不等式取等号。这也印证了 §4.2 的结论:应该挑可能的补全。

5.5 差距就是 KL

slide 25:对任意 qq,“一点代数”给出

DKL(q(z) ∥ p(z∣x;θ))=∑zq(z)log⁡q(z)p(z∣x)=∑zq(z)log⁡q(z) p(x)p(x,z)=−∑zq(z)log⁡p(x,z)+log⁡p(x)−H(q)≥0.D_{\mathrm{KL}}\big(q(z) \,\Vert\, p(z \mid x; \theta)\big) = \sum_z q(z) \log \frac{q(z)}{p(z \mid x)} = \sum_z q(z) \log \frac{q(z)\,p(x)}{p(x, z)} = -\sum_z q(z)\log p(x, z) + \log p(x) - H(q) \geq 0.

移项:

  log⁡p(x;θ)=∑zq(z)log⁡p(x,z;θ)+H(q)⏟ELBO+DKL(q(z) ∥ p(z∣x;θ))  \boxed{\;\log p(x; \theta) = \underbrace{\sum_z q(z)\log p(x, z; \theta) + H(q)}_{\text{ELBO}} + D_{\mathrm{KL}}\big(q(z) \,\Vert\, p(z \mid x; \theta)\big)\;}

这一个等式同时说明了三件事:(1) ELBO 是下界(KL ≥ 0);(2) q=q = 后验时等号成立(KL = 0);(3) 差距恰好是 qq 到后验的 KL——qq 越接近后验,ELBO 越接近真实的对数似然。

代码 03 第 2 部分在像素世界里对 7 种 qq 逐张图验证(1,000 张测试图的平均,bit):

q(z)q(z)Eq[log⁡p(x,z)]\mathbb{E}_q[\log p(x,z)]H(q)H(q)ELBO差距DKL(q∥p(z∣x))D_{\mathrm{KL}}(q \Vert p(z \mid x))Eq[log⁡p(x∣z)]\mathbb{E}_q[\log p(x \mid z)]DKL(q∥p(z))D_{\mathrm{KL}}(q \Vert p(z))
后验 p(z∣x)p(z \mid x)−25.710.18−25.540.000.00−18.287.26
锐化后验−25.640.08−25.560.020.02−18.207.36
点质量:最可能的配置−25.630.00−25.630.090.09−18.207.43
回火后验−29.762.00−27.762.222.22−22.325.44
形状对、位置均匀−63.985.55−58.4332.8932.89−56.541.89
先验 p(z)p(z)−65.287.45−57.8432.3032.30−57.840.00
均匀分布−66.077.47−58.6033.0633.06−58.580.02

(平均 log⁡2p(x)=−25.54\log_2 p(x) = -25.54;恒等式在每张图、每个 qq 上的最大误差 1.2×10−131.2 \times 10^{-13} nat。)

  • “差距”和”KL”两列逐位相同。
  • 点质量(只猜一个最可能的配置)的熵是 0,ELBO 就是 log⁡p(x,z^)\log p(x, \hat{z}),差距 =−log⁡2p(z^∣x)=0.09= -\log_2 p(\hat{z} \mid x) = 0.09 bit。后验很集中时,“只猜一个解释”几乎不损失什么——这是”硬 EM”和 k-means 背后的近似。
  • 先验当 qq(不看 xx 就猜 zz)差距 32 bit:先验把质量摊在 177 个配置上,而对一张具体的图,绝大多数配置的后验概率小到 2−302^{-30} 量级。

5.6 ELBO 的另一种写法

表的最后两列来自另一种拆法(把 log⁡p(x,z)=log⁡p(x∣z)+log⁡p(z)\log p(x, z) = \log p(x \mid z) + \log p(z) 代进去):

ELBO=Eq[log⁡p(x∣z)]⏟重构:z 能不能解释 x−DKL(q(z) ∥ p(z))⏟q 离先验有多远.\text{ELBO} = \underbrace{\mathbb{E}_{q}[\log p(x \mid z)]}_{\text{重构:} z \text{ 能不能解释 } x} - \underbrace{D_{\mathrm{KL}}\big(q(z) \,\Vert\, p(z)\big)}_{q \text{ 离先验有多远}}.

(恒等式最大误差 5.7×10−145.7 \times 10^{-14}。)两项在拔河:qq = 先验让第二项为 0,但随便猜的配置解释不了这张图,第一项极差(−57.84);qq = 后验时第一项最好(−18.28),代价是离先验有 7.26 bit 的距离(约 log⁡2177\log_2 177,“从 177 个里选出了一个”)。第 6 讲会把这个写法解读成自编码器:第一项是”编码再解码能不能还原”,第二项是”编码不要离先验太远”。


6. 变分推断 · Variational inference

6.1 后验算不出来怎么办

像素世界的后验能精确算,是因为 zz 只有 177 种。VAE 的后验需要”把神经网络 μθ\mu_\theta 反过来”(第 6 讲 slide 7),算不出来。slide 26 的办法:

设 q(z;ϕ)q(z; \phi) 是一个好处理的分布族,由变分参数 ϕ\phi 参数化,例如均值和协方差由 ϕ\phi 给出的高斯 q(z;ϕ)=N(ϕ1,ϕ2)q(z; \phi) = \mathcal{N}(\phi_1, \phi_2)。变分推断:挑 ϕ\phi,让 q(z;ϕ)q(z; \phi) 尽可能接近 p(z∣x;θ)p(z \mid x; \theta)。

“好处理”指两件事:能从 qq 采样,能算 log⁡q\log q。由 §5.5,“让 qq 接近后验”和”让 ELBO 最大”是同一件事——log⁡p(x)\log p(x) 和 qq 无关,ELBO 增加多少,KL 就减少多少。所以变分推断 = 关于 ϕ\phi 最大化 ELBO,而 ELBO 是我们算得出来(至少能用采样估计)的。

注意它最小化的是 DKL(q∥p(z∣x))D_{\mathrm{KL}}(q \Vert p(z \mid x))——qq 在前,是第 4 讲 §2.3 的反向 KL。这决定了变分推断的性格。

代码 03 第 3 部分构造了一个一维的例子:z∼N(0.3,1.52)z \sim \mathcal{N}(0.3, 1.5^2),x∣z∼N(z2/2,0.52)x \mid z \sim \mathcal{N}(z^2/2, 0.5^2),观测到 x=2x = 2。因为 z2/2=2z^2/2 = 2 有两个解,后验有两个峰(z≈±2z \approx \pm 2),先验偏向正数,右峰占 62%。在 zz 的细网格上可以精确算出一切:

q(z)q(z)ELBO(nat)差距 = KL
N(2,2)\mathcal{N}(2, 2)(slide 26 的橙色)−22.8520.73
N(−4,0.75)\mathcal{N}(-4, 0.75)(slide 26 的绿色)−110.39108.28
矩匹配:N(0.47,1.852)\mathcal{N}(0.47, 1.85^2)−13.4411.33
ELBO 最大:N(1.90,0.262)\mathcal{N}(1.90, 0.26^2)−2.610.49

(log⁡p(x=2)=−2.116\log p(x = 2) = -2.116 nat。)

  • N(2,2)\mathcal{N}(2, 2) 远好于 N(−4,0.75)\mathcal{N}(-4, 0.75):前者至少盖住了主峰,后者放在后验几乎为 0 的地方(slide 26)。
  • “矩匹配”的高斯(均值、方差都和后验一样)横跨两个峰,把大量质量放在两峰之间后验几乎为 0 的地方——反向 KL 对此惩罚极重。
  • ELBO 最大的高斯只盖住右峰,完全忽略左峰。 漏掉一个峰的代价只是 ≈−ln⁡(右峰的质量)=−ln⁡0.623=0.47\approx -\ln(\text{右峰的质量}) = -\ln 0.623 = 0.47 nat(实测差距 0.49)。这就是模式寻找:变分推断”宁缺毋滥”——宁可只解释一种可能,也不把质量放在不可能的地方。

这个性格有利有弊:qq 的样本总是”合理的”,但 qq 会低估后验的不确定性,在多峰的后验上只看到一个峰。

6.2 缺失像素当隐变量(slide 27)

slide 27 的例子:假设 p(xtop,xbottom;θ)p(x^{\text{top}}, x^{\text{bottom}}; \theta) 给”像数字的图”高概率;上半张 z=xtopz = x^{\text{top}} 缺失(隐变量)。用一个因子化的伯努利分布近似后验:

q(xtop;ϕ)=∏缺失的像素 iϕixitop(1−ϕi)1−xitop.q(x^{\text{top}}; \phi) = \prod_{\text{缺失的像素 } i} \phi_i^{x_i^{\text{top}}}(1 - \phi_i)^{1 - x_i^{\text{top}}}.
  • ϕi=0.5\phi_i = 0.5(全部)是好的近似吗?不是。
  • ϕi=1\phi_i = 1(全部)呢?不是。
  • 只在”数字 9 上半部分”对应的像素上 ϕi≈1\phi_i \approx 1?是。

这种”每个隐变量独立”的 qq 叫平均场(mean-field)近似。代码 03 第 4 部分在像素世界里原样重做:下半张只有第 4 行第 2–5 列的一条横线,上半张 32 个像素是隐变量。真实后验在两种解释之间:“就是一条横线”(上半张空白,0.575)和**“一个 4×4 方框的底边”**(上半张有方框的上边和两条竖边,0.377)。

q(z;ϕ)q(z; \phi)ELBO(bit)差距 = KL(bit)
ϕ=0.5\phi = 0.5(全部)−38.7530.12
ϕ=1\phi = 1(全部)−111.77103.14
ϕ\phi = 后验边缘 p(zi=1∣xbottom)p(z_i = 1 \mid x^{\text{bottom}})−13.865.23
CAVI,从 ϕ=0.5\phi = 0.5 出发−9.490.87
CAVI,从后验边缘出发−9.500.87
CAVI,从”方框”出发−10.171.54

(log⁡2p(xbottom)=−8.63\log_2 p(x^{\text{bottom}}) = -8.63 bit,精确;ELBO 用 4,000 个样本估计。)

  • ϕ=0.5\phi = 0.5 让上半张变成随机噪声,ϕ=1\phi = 1 让上半张全黑:都很差,和 slide 27 一致。
  • ϕ\phi = 后验边缘看起来”最诚实”(方框的像素都是 0.39–0.41),ELBO 却很差:因子化的 qq 无法表达”这些像素要么一起出现、要么一起不出现”,从它采样得到的是半个、缺角的方框——在真实分布下几乎不可能。(后验边缘恰好是前向 KL D(p∥q)D(p \Vert q) 在因子化族里的最优解,练习 5。)
  • 用坐标上升(下面)优化出来的 qq 收敛到一种解释:ϕ\phi 接近 0 或 1,差距只剩约 −log⁡2(那种解释的后验概率)-\log_2(\text{那种解释的后验概率}):选”横线”时 −log⁡20.575=0.80-\log_2 0.575 = 0.80,选”方框”时 −log⁡20.377=1.41-\log_2 0.377 = 1.41(再加一点误差)。这就是 slide 27 的”是”——ϕ≈1\phi \approx 1 只放在”该是笔画”的像素上。从不同起点出发停在不同的峰,ELBO 更高的对应后验概率更大的解释。

平均场坐标上升(CAVI)。固定其他 ϕ−i\phi_{-i},ELBO 对 ϕi\phi_i 的最优解是(练习 6)

logit ϕi=Eq−i[log⁡p(zi=1,z−i,x)−log⁡p(zi=0,z−i,x)],\mathrm{logit}\,\phi_i = \mathbb{E}_{q_{-i}}\big[\log p(z_i = 1, z_{-i}, x) - \log p(z_i = 0, z_{-i}, x)\big],

直觉:ziz_i 取 1 比取 0 “好多少”,在其他像素按 qq 随机补全的情况下平均。代码里用 600 个样本估计这个期望,把 32 个坐标轮流更新 6 遍。

6.3 下一步:同时优化 θ\theta 和 ϕ\phi

slide 28:

log⁡p(x;θ)≥∑zq(z;ϕ)log⁡p(z,x;θ)+H(q(z;ϕ))=L(x;θ,ϕ),log⁡p(x;θ)=L(x;θ,ϕ)+DKL(q(z;ϕ) ∥ p(z∣x;θ)).\log p(x; \theta) \geq \sum_z q(z; \phi) \log p(z, x; \theta) + H(q(z; \phi)) = \mathcal{L}(x; \theta, \phi), \qquad \log p(x; \theta) = \mathcal{L}(x; \theta, \phi) + D_{\mathrm{KL}}\big(q(z; \phi) \,\Vert\, p(z \mid x; \theta)\big).

q(z;ϕ)q(z; \phi) 越能逼近后验,KL 越小,ELBO 越接近 log⁡p(x;θ)\log p(x; \theta)。到目前为止我们固定了模型 θ\theta,只优化 ϕ\phi(推断)。学习要的是 θ\theta。下一步:在整个数据集上,对 θ\theta 和 ϕ\phi 一起最大化 ELBO——这是第 6 讲。在那之前,先看一个经典的特例:qq 恰好能取到后验的时候。


7. EM 算法 · The EM algorithm

7.1 E 步、M 步 = ELBO 上的坐标上升

slide 23 的旁注:“这正是 EM 算法的 E 步要算的东西。“把 ELBO 看成 qq 和 θ\theta 两组变量的函数 L(q,θ)\mathcal{L}(q, \theta),交替地优化:

  • E 步:固定 θt\theta_t,关于 qq 最大化。由 §5.5,最优的 qq 就是后验:qt=p(z∣x;θt)q_t = p(z \mid x; \theta_t)。这时下界是紧的,L(qt,θt)=log⁡p(x;θt)\mathcal{L}(q_t, \theta_t) = \log p(x; \theta_t)。
  • M 步:固定 qtq_t,关于 θ\theta 最大化。熵 H(qt)H(q_t) 和 θ\theta 无关,只剩 ∑zqt(z)log⁡p(x,z;θ)\sum_z q_t(z) \log p(x, z; \theta)——“按后验加权的完整数据对数似然”。它和第 4 讲的完全观测 MLE 几乎一样,常常有闭式解。

于是

log⁡p(x;θt)=L(qt,θt)  ≤  L(qt,θt+1)  ≤  log⁡p(x;θt+1).\log p(x; \theta_t) = \mathcal{L}(q_t, \theta_t) \;\leq\; \mathcal{L}(q_t, \theta_{t+1}) \;\leq\; \log p(x; \theta_{t+1}).

第一个不等号是 M 步的定义,第二个是 ELBO ≤ log p。对数似然每一轮都不下降,而且不需要学习率。

对高斯混合,M 步是:记 rnk=p(z=k∣x(n);θt)r_{nk} = p(z = k \mid x^{(n)}; \theta_t)(第 kk 个成分对第 nn 个点的”责任”),Nk=∑nrnkN_k = \sum_n r_{nk},

πk=NkN,μk=1Nk∑nrnk x(n),Σk=1Nk∑nrnk (x(n)−μk)(x(n)−μk)⊤.\pi_k = \frac{N_k}{N}, \qquad \mu_k = \frac{1}{N_k}\sum_n r_{nk}\,x^{(n)}, \qquad \Sigma_k = \frac{1}{N_k}\sum_n r_{nk}\,(x^{(n)} - \mu_k)(x^{(n)} - \mu_k)^\top.

和”知道每个点属于哪个成分”时的 MLE 一模一样,只是把 0/1 的归属换成了软的责任(练习 2)。

代码 04 第 1 部分(三个高斯团,600 个点,K=3K = 3)逐轮打印了这条链:

轮 ttlog⁡p(x;θt)\log p(x; \theta_t)M 步后的 L(qt,θt+1)\mathcal{L}(q_t, \theta_{t+1})log⁡p(x;θt+1)\log p(x; \theta_{t+1})
0−3.40519−2.86807−2.73596
1−2.73596−2.60204−2.52300
2−2.52300−2.43963−2.40260
…………
18−2.24226−2.24226−2.24226

(每个点平均,nat。)整条链上最小的一步增量是 2.1×10−102.1 \times 10^{-10}——没有一步下降。学到的均值和权重和真实值吻合(例如真实 (−1.60,0.90)(-1.60, 0.90)、权重 0.45,学到 (−1.61,0.87)(-1.61, 0.87)、0.448)。

两个细节:提升并不是一路变小——第 4–6 轮每轮不到 0.01 nat,第 7–10 轮又加快,然后迅速收敛;最后几轮每轮提升缩小约 10 倍,EM 在最优点附近是线性收敛的。“单调不降”只保证不会变差,不保证走得快。

7.2 局部最优

EM 只会往上爬。代码 04 第 2 部分:8 个高斯排成一圈,2,000 个点,K=8K = 8,10 个随机初始化——

  • 4 次找到了全部 8 个团,DKL=0.014D_{\mathrm{KL}} = 0.014 nat;
  • 5 次只找到 6 个(两个成分挤在同一个团里,另一个成分只好横跨两个团),KL ≈ 0.13;
  • 1 次只找到 4 个,KL = 0.256。

训练似然和 KL 的排序完全一致。所以标准做法是多跑几个初始化,留训练(或验证)似然最高的;更好的初始化(如 k-means++)也有帮助。第 6 讲用梯度训练 VAE 时同样只能找到局部最优。

7.3 训练数据有缺失

slide 15 的场景:训练图缺一部分像素。对”给定 zz 像素独立”的伯努利混合,EM 能精确地处理:E 步只用观测到的像素算责任,M 步只在”观测到第 ii 个像素”的图里估计 μki\mu_{ki}——缺失的像素被精确地边缘化了。代码 04 第 3 部分(K=64K = 64,在完整的测试图上评估):

训练数据与做法用到的训练图测试:比真实多 bit
完整的 1 万张图(参照)10,0003.20
A. 一半的图缺上半张:EM + 边缘化全部3.47
A. 缺失的像素当作 0(白色)全部4.53
A. 扔掉不完整的图5,0863.50
B. 每个像素 50% 随机缺失:EM + 边缘化全部3.70
B. 缺失的像素当作 0全部7.40
B. 扔掉不完整的图0—
  • “缺失当 0”是灾难:模型学到”上半张常常是空白的”——这不是世界的规律,而是缺失机制留下的假象。
  • 在 A 里,“扔掉不完整的图”只比边缘化差 0.03 bit:缺上半张的图对”上半张长什么样”没有贡献,而 64 个原型用 5 千张完整的图已经估得差不多了。
  • 在 B 里差别是根本性的:没有一张完整的图,扔掉就什么都不剩;边缘化只比完整数据差 0.5 bit——每张图都贡献了它看到的那一半。
  • 这里能精确边缘化,全靠”给定 zz 像素独立”。对 PixelCNN,缺上半张的图的似然要对 2322^{32} 种补全求和——§3.1 的难题又回来了。

7.4 似然的梯度也需要后验

slide 17 说”梯度也难算”。为什么?对任何隐变量模型,

∇θlog⁡p(x;θ)=∇θ∑zp(x,z;θ)p(x;θ)=∑zp(x,z;θ)p(x;θ)∇θlog⁡p(x,z;θ)=Ep(z∣x;θ)[∇θlog⁡p(x,z;θ)].\nabla_\theta \log p(x; \theta) = \frac{\nabla_\theta \sum_z p(x, z; \theta)}{p(x; \theta)} = \sum_z \frac{p(x, z; \theta)}{p(x; \theta)}\nabla_\theta \log p(x, z; \theta) = \mathbb{E}_{p(z \mid x; \theta)}\big[\nabla_\theta \log p(x, z; \theta)\big].

(第二步用了 ∇p=p ∇log⁡p\nabla p = p\,\nabla \log p。)对数似然的梯度 = “如果 zz 被观测到”时的梯度,按后验加权平均——这叫 Fisher 恒等式。代码 04 第 4 部分对高斯混合的均值验证:自动求导的 ∇log⁡p(x)\nabla \log p(x) 和”后验加权的完整数据梯度”最大差 2.8×10−142.8 \times 10^{-14};而用均匀分布加权,得到的是一个完全不同的方向(那是 ELBO(q=均匀)\mathrm{ELBO}(q = \text{均匀}) 的梯度)。

所以:后验算不出来,梯度就算不出来。 EM 的 M 步在当前点的梯度恰好等于 log⁡p\log p 的梯度,因为 E 步刚把 qq 设成了后验。

7.5 EM 什么时候用不了

EM 需要两件事:(1) E 步能算出后验;(2) M 步能(至少近似地)最大化。高斯混合、伯努利混合、隐马尔可夫模型都满足。VAE 两条都不满足:后验要”反转神经网络”,M 步没有闭式解。这时只能退一步:

  • 用一个近似的 q(z;ϕ)q(z; \phi) 代替后验(变分推断,§6);
  • 不再交替地”精确最大化”,而是对 θ\theta 和 ϕ\phi 一起做梯度上升(ELBO 对两者都可导,至少能用采样估计梯度)。

这就是第 6 讲的变分 EM / 随机变分推断 / VAE。代价是:ELBO 和 log⁡p\log p 之间永远隔着一个 KL,模型 θ\theta 是按”下界”训练的。


8. 回顾(原课 slide 29)· Summary of the original lecture

隐变量模型的优点:

  • 容易构造灵活的模型;
  • 适合无监督学习。

缺点:

  • 似然难算;
  • 难以直接用最大似然训练;
  • 根本的困难在于后验推断 p(z∣x)p(z \mid x) 很难,通常需要变分近似。

另一条路:放弃 KL 散度和似然——生成对抗网络(GAN,第 9–10 讲)。


9. 2023 年之后 · Since 2023

  • 隐变量模型成了”压缩器”:潜空间生成。 今天主流的图像、视频生成模型几乎都不在像素空间里生成,而是先用一个带 KL 正则的自编码器(本质上是一个 VAE,第 6 讲)把图像压缩到一个小得多的潜空间,再在潜空间里训练扩散模型或流匹配模型(latent diffusion,Rombach et al. 2022;Stable Diffusion 3、FLUX.1 都沿用了这个结构,并把潜空间的通道数从 4 增加到 16)。之后的工作(如 Chen et al., ICLR 2025 的 Deep Compression Autoencoder)专门研究怎样把潜空间压得更小而不损失细节。§1.4 的”zz 吸收复杂性、p(x∣z)p(x \mid z) 只管细节”在这里变成了一个工程上的分工。
  • 离散隐变量与”视觉 token”。 把图像编码成离散的 token 序列,再交给自回归 Transformer,是多模态大模型生成图像的一条主要路线(例如 Meta 的 Chameleon,2024)。离散化的方法也在简化:Mentzer et al.(ICLR 2024)的有限标量量化(FSQ)用简单的取整代替了 VQ-VAE 的码本学习。离散隐变量模型是第 17 讲的主题。
  • 用无监督的隐变量解释神经网络:稀疏自编码器。 可解释性研究用稀疏自编码器在大语言模型的激活上学习”特征”(Bricken et al. 2023 Towards Monosemanticity;Templeton et al. 2024 Scaling Monosemanticity;Gao et al. 2024)。§2.2 的提醒在那里同样适用:学到什么样的特征,取决于目标函数(重构 + 稀疏)和结构,不一定对应人预设的概念;如何评估这些特征是一个活跃的问题。
  • 名字相似、但不是一回事:混合专家(MoE)。 Mixtral、DeepSeek-V3 等”混合专家”大模型里,路由器为每个 token 选几个”专家”子网络,形式上像 §2 的混合模型里选一个成分。但它的路由是确定性的 top-k 选择,用普通的反向传播训练,不对”选哪个专家”做边缘化,也不是一个 p(x)=∑zp(z)p(x∣z)p(x) = \sum_z p(z)p(x \mid z) 的生成模型。读论文时要分清”混合”的这两种用法。
  • ELBO 无处不在。 第 16 讲会看到,扩散模型(DDPM)的训练目标正是一个很深的隐变量模型的 ELBO;本讲的 log⁡p=ELBO+KL\log p = \text{ELBO} + \text{KL} 是理解它的钥匙。

10. 小结 · Summary

  1. 隐变量 zz 建模数据里看不见的变化因素。zz 选得好,p(x∣z)p(x \mid z) 就简单(像素世界:知道配置后总相关从 10 bit 降到 0);zz 太粗则不然(只知道形状,总相关反而升到 11.2 bit)。后验 p(z∣x)p(z \mid x) 给出特征;深度隐变量模型用 z∼N(0,I)z \sim \mathcal{N}(0, I) 加神经网络解码器。
  2. 混合模型是浅层隐变量模型:后验 = 软聚类。无监督学习是不适定的:最大似然只奖励拟合 p(x)p(x),像素世界的 4 个簇按位置而不是形状划分(按形状分组的似然低 2.1 bit/图)。混合有表达力(8 个高斯描出双月牙),但成分太多会过拟合;似然非凸,EM 会停在局部最优。VAE 是”无穷多个高斯的混合”。
  3. 边际似然 log⁡∑zp(x,z)\log \sum_z p(x, z) 难算:项数随隐变量个数指数增长,而后验只集中在约 1 个 zz 上;梯度同样需要后验(Fisher 恒等式)。
  4. 朴素蒙特卡洛无偏但几乎总是错(k=10k = 10 时 87% 的估计小了 100 倍)。重要性采样无偏,相对方差 =χ2(p(z∣x)∥q)/k= \chi^2(p(z \mid x) \Vert q)/k:qq 越像后验越好,qq = 后验时方差为 0;qq 宁宽勿窄(偏窄的 qq 方差藏在看不到的尾部)。
  5. log⁡p^\log \hat{p} 系统性地偏低(Jensen);k=1k = 1 时 E[log⁡p^1]\mathbb{E}[\log \hat{p}_1] 就是 ELBO,kk 越大下界越紧(IWAE)。
  6. ELBO =Eq[log⁡p(x,z)]+H(q)=Eq[log⁡p(x∣z)]−DKL(q∥p(z))= \mathbb{E}_q[\log p(x, z)] + H(q) = \mathbb{E}_q[\log p(x \mid z)] - D_{\mathrm{KL}}(q \Vert p(z));log⁡p(x)=ELBO+DKL(q∥p(z∣x))\log p(x) = \text{ELBO} + D_{\mathrm{KL}}(q \Vert p(z \mid x)),qq = 后验时是紧的。
  7. 变分推断在一族好处理的 q(z;ϕ)q(z; \phi) 里最大化 ELBO = 最小化反向 KL:模式寻找、低估不确定性(双峰后验只盖住一个峰;因子化的 qq 只选一种解释,而不是”后验边缘”)。
  8. EM = ELBO 上的坐标上升:E 步令 qq = 后验,M 步最大化期望的完整数据对数似然;对数似然单调不降,但只到局部最优;能精确处理缺失数据(前提是能边缘化)。后验算不出来时 EM 用不了——第 6 讲。

11. 常见误区 · Common pitfalls

  1. “隐变量越细越好 / 越粗越好。” 太粗的 zz(只知道形状)不能让 p(x∣z)p(x \mid z) 变简单(§1.4);太细的 zz(每张图一个 zz)就是背训练集。好的 zz 刚好吸收”全局的”结构。
  2. “无监督学习会自动找到人关心的类别。” 最大似然只关心 p(x)p(x) 拟合得好不好;像素世界的 4 个簇按位置分,而且这是似然真心偏爱的解(§2.2)。
  3. “成分越多,混合模型越好。” 有限数据下会过拟合(双月牙 K=32K = 32 比 K=16K = 16 差);而且成分多了,EM 更容易停在局部最优。
  4. “无偏估计就是好估计。” 朴素蒙特卡洛无偏,可 k=10k = 10 时绝大多数估计差了 100 倍以上(§4.1)。要看方差,而且要看”方差藏在哪里”。
  5. “样本方差小,重要性采样估计就可靠。” 偏窄的 qq 可以有极大的理论方差、极小的样本方差(§4.2 的锐化后验)。qq 宁宽勿窄。
  6. ”log⁡p^\log \hat{p} 是 log⁡p\log p 的无偏估计。” 它系统性地偏低;k=1k = 1 时的期望就是 ELBO(§4.3)。报告”重要性采样估计的测试 log⁡p\log p“时,要说明 kk,它是一个下界。
  7. “ELBO 高,说明 qq 很好地描述了后验的不确定性。” 反向 KL 模式寻找:ELBO 最大的高斯完全忽略了后验的一个峰(§6.1);因子化的 qq 只选一种解释(§6.2)。
  8. “后验边缘就是最好的因子化近似。” 它是前向 KL 的最优解;按 ELBO(反向 KL)它很差,因为它的样本是”半个方框”(§6.2)。
  9. “EM 会找到最大似然解。” 只保证单调不降,到局部最优为止(§7.2:10 次里 6 次没找全 8 个团)。
  10. “缺失的数据当作 0(或均值)填上就行。” 会让模型学到缺失机制的假象(§7.3:7.4 bit vs 边缘化的 3.7 bit)。

12. 练习 · Exercises

练习 1(混合的边缘与后验,手算) 第 2 讲代码 05 的混合:Z∼Bernoulli(0.3)Z \sim \mathrm{Bernoulli}(0.3),X∣Z=0∼N(−2,0.52)X \mid Z = 0 \sim \mathcal{N}(-2, 0.5^2),X∣Z=1∼N(1.5,12)X \mid Z = 1 \sim \mathcal{N}(1.5, 1^2)。算 p(x=0)p(x = 0) 和 p(Z=1∣x=0)p(Z = 1 \mid x = 0)。再算 x=−1x = -1 时的后验。为什么 x=0x = 0 离两个均值的距离差不多(2 和 1.5),后验却几乎完全偏向 Z=1Z = 1?

参考答案

N(0;−2,0.52)=10.52πe−8≈2.68×10−4\mathcal{N}(0; -2, 0.5^2) = \frac{1}{0.5\sqrt{2\pi}}e^{-8} \approx 2.68 \times 10^{-4},N(0;1.5,1)=12πe−1.125≈0.1295\mathcal{N}(0; 1.5, 1) = \frac{1}{\sqrt{2\pi}}e^{-1.125} \approx 0.1295。p(x=0)=0.7×2.68×10−4+0.3×0.1295≈1.87×10−4+0.03886=0.03904p(x = 0) = 0.7 \times 2.68 \times 10^{-4} + 0.3 \times 0.1295 \approx 1.87 \times 10^{-4} + 0.03886 = 0.03904;p(Z=1∣x=0)=0.03886/0.03904≈0.995p(Z = 1 \mid x = 0) = 0.03886/0.03904 \approx 0.995。x=−1x = -1 时:0.7×N(−1;−2,0.25)=0.07560.7 \times \mathcal{N}(-1; -2, 0.25) = 0.0756,0.3×N(−1;1.5,1)=0.005260.3 \times \mathcal{N}(-1; 1.5, 1) = 0.00526,p(Z=1∣x=−1)≈0.065p(Z = 1 \mid x = -1) \approx 0.065。距离要按各自的标准差衡量:0 离 −2-2 是 4 个标准差(σ=0.5\sigma = 0.5),离 1.5 只有 1.5 个标准差。窄的成分”管辖”的范围小。

练习 2(高斯混合的 M 步) 固定责任 rnkr_{nk},对 μk\mu_k 最大化 ∑n∑krnklog⁡N(x(n);μk,Σk)\sum_n \sum_k r_{nk} \log \mathcal{N}(x^{(n)}; \mu_k, \Sigma_k),证明 μk=∑nrnkx(n)/Nk\mu_k = \sum_n r_{nk}x^{(n)}/N_k。如果 rnkr_{nk} 只取 0 或 1,这个更新是什么?

参考答案

和 μk\mu_k 有关的项是 −12∑nrnk(x(n)−μk)⊤Σk−1(x(n)−μk)-\frac{1}{2}\sum_n r_{nk}(x^{(n)} - \mu_k)^\top \Sigma_k^{-1}(x^{(n)} - \mu_k),对 μk\mu_k 求导:Σk−1∑nrnk(x(n)−μk)=0\Sigma_k^{-1}\sum_n r_{nk}(x^{(n)} - \mu_k) = 0,得 μk=∑nrnkx(n)/∑nrnk\mu_k = \sum_n r_{nk}x^{(n)}/\sum_n r_{nk}。rnk∈{0,1}r_{nk} \in \{0, 1\} 时就是”属于第 kk 簇的点的平均”——k-means 的更新。k-means 可以看成”硬 EM”:E 步用点质量(最可能的成分)代替后验(§5.5 的点质量 qq),并且所有协方差固定为同一个 σ2I\sigma^2 I、σ→0\sigma \to 0。

练习 3(重要性采样的无偏性与方差) 设 w=p(x,z)/q(z)w = p(x, z)/q(z),z∼qz \sim q。证明 Eq[w]=p(x)\mathbb{E}_q[w] = p(x),以及 Varq[w/p(x)]=∑zp(z∣x)2/q(z)−1\mathrm{Var}_q[w/p(x)] = \sum_z p(z \mid x)^2/q(z) - 1。kk 个独立样本的平均的相对方差是多少?什么时候方差为 0?

参考答案

Eq[w]=∑zq(z)p(x,z)q(z)=p(x)\mathbb{E}_q[w] = \sum_z q(z)\frac{p(x, z)}{q(z)} = p(x)。Eq[(w/p(x))2]=∑zq(z)p(x,z)2q(z)2p(x)2=∑zp(z∣x)2q(z)\mathbb{E}_q[(w/p(x))^2] = \sum_z q(z)\frac{p(x, z)^2}{q(z)^2 p(x)^2} = \sum_z \frac{p(z \mid x)^2}{q(z)},减去均值的平方 1 即得方差。kk 个独立样本平均,方差除以 kk。方差为 0 当且仅当 ww 是常数,即 q(z)∝p(x,z)q(z) \propto p(x, z),q=p(z∣x)q = p(z \mid x)。

练习 4(两个 χ2\chi^2 为什么相同) 证明:均匀提议 qu(z)=1/∣Z∣q_u(z) = 1/|\mathcal{Z}| 和锐化提议 qs(z)∝p(z∣x)2q_s(z) \propto p(z \mid x)^2 的 χ2(p(z∣x)∥q)\chi^2(p(z \mid x) \Vert q) 相等,都等于 ∣Z∣∑zp(z∣x)2−1|\mathcal{Z}|\sum_z p(z \mid x)^2 - 1。两者的方差分别来自哪些 zz?为什么一个的样本方差很大、另一个很小?

参考答案

记 πz=p(z∣x)\pi_z = p(z \mid x),S=∑zπz2S = \sum_z \pi_z^2。均匀:∑zπz2/(1/∣Z∣)=∣Z∣S\sum_z \pi_z^2 / (1/|\mathcal{Z}|) = |\mathcal{Z}| S。锐化:qs(z)=πz2/Sq_s(z) = \pi_z^2/S,∑zπz2/qs(z)=∑zS=∣Z∣S\sum_z \pi_z^2/q_s(z) = \sum_z S = |\mathcal{Z}|S。相等。但每个 zz 的贡献 πz2/q(z)\pi_z^2/q(z) 分布完全不同:均匀提议下贡献是 ∣Z∣πz2|\mathcal{Z}|\pi_z^2,集中在后验的峰上——峰只有 1/1771/177 的概率被抽到,所以经常”抽不到”,样本里就能看到巨大的波动;锐化提议下每个 zz 的贡献都是 SS(相等),177 个里有 175 个是 qsq_s 几乎从不抽到的尾部,它们贡献了几乎全部方差,却几千万次才出现一次,所以有限样本里看不见。

练习 5(后验边缘 = 前向 KL 的最优因子化近似) 设 q(z)=∏iqi(zi)q(z) = \prod_i q_i(z_i) 是因子化的。证明在所有因子化分布里,DKL(p∥q)D_{\mathrm{KL}}(p \Vert q) 的最小值在 qi(zi)=p(zi)q_i(z_i) = p(z_i)(pp 的边缘分布)处取到。由此解释 §6.2 里”后验边缘”那一行为什么 ELBO 不好。

参考答案

D(p∥q)=−H(p)−∑zp(z)∑ilog⁡qi(zi)=−H(p)−∑i∑zip(zi)log⁡qi(zi)D(p \Vert q) = -H(p) - \sum_z p(z)\sum_i \log q_i(z_i) = -H(p) - \sum_i \sum_{z_i} p(z_i)\log q_i(z_i)。每一项 −∑zip(zi)log⁡qi(zi)-\sum_{z_i}p(z_i)\log q_i(z_i) 是 pip_i 到 qiq_i 的交叉熵,在 qi=piq_i = p_i 时最小(第 4 讲:交叉熵 = 熵 + KL)。前向 KL 要求 qq “覆盖” pp 的所有可能,于是每个像素独立地取它的边缘概率;但 ELBO 对应的是反向 KL,它惩罚 qq 把质量放在 pp 为 0 的地方——因子化的边缘分布恰恰会生成大量”半个方框”这种 p≈0p \approx 0 的组合。

练习 6(CAVI 的更新公式) 设 q(z)=∏iϕizi(1−ϕi)1−ziq(z) = \prod_i \phi_i^{z_i}(1 - \phi_i)^{1 - z_i}。固定 ϕ−i\phi_{-i},把 ELBO 写成 ϕi\phi_i 的函数,证明最优的 ϕi\phi_i 满足 logit ϕi=A1−A0\mathrm{logit}\,\phi_i = A_1 - A_0,其中 Ab=Eq−i[log⁡p(zi=b,z−i,x)]A_b = \mathbb{E}_{q_{-i}}[\log p(z_i = b, z_{-i}, x)]。

参考答案

Eq[log⁡p(z,x)]=ϕiA1+(1−ϕi)A0\mathbb{E}_q[\log p(z, x)] = \phi_i A_1 + (1 - \phi_i)A_0;H(q)=h(ϕi)+(和 ϕi 无关的项)H(q) = h(\phi_i) + (\text{和 } \phi_i \text{ 无关的项}),h(ϕ)=−ϕlog⁡ϕ−(1−ϕ)log⁡(1−ϕ)h(\phi) = -\phi\log\phi - (1-\phi)\log(1-\phi)。对 ϕi\phi_i 求导:A1−A0+log⁡1−ϕiϕi=0A_1 - A_0 + \log\frac{1 - \phi_i}{\phi_i} = 0,即 log⁡ϕi1−ϕi=A1−A0\log\frac{\phi_i}{1 - \phi_i} = A_1 - A_0。二阶导 −1ϕi(1−ϕi)<0-\frac{1}{\phi_i(1 - \phi_i)} < 0,所以这是最大值。每一步更新一个坐标、取它的精确最优,ELBO 不会下降(坐标上升);但 ELBO 对 ϕ\phi 整体不是凹的,可能有多个局部最优(§6.2 从”方框”出发停在了另一个峰)。

练习 7(Fisher 恒等式) 证明 ∇θlog⁡p(x;θ)=Ep(z∣x;θ)[∇θlog⁡p(x,z;θ)]\nabla_\theta \log p(x; \theta) = \mathbb{E}_{p(z \mid x; \theta)}[\nabla_\theta \log p(x, z; \theta)]。再证明:对任意 qq(不依赖 θ\theta),∇θL(q,θ)=Eq[∇θlog⁡p(x,z;θ)]\nabla_\theta \mathcal{L}(q, \theta) = \mathbb{E}_q[\nabla_\theta \log p(x, z; \theta)]。两者什么时候相等?

参考答案

第一式见 §7.4。第二式:L(q,θ)=Eq[log⁡p(x,z;θ)]+H(q)\mathcal{L}(q, \theta) = \mathbb{E}_q[\log p(x, z; \theta)] + H(q),H(q)H(q) 不依赖 θ\theta,求导即得。两者在 q=p(z∣x;θ)q = p(z \mid x; \theta) 时相等——这说明在 E 步之后,ELBO 和对数似然在当前点不仅值相等,梯度也相等(下界和真实函数在这一点”相切”)。

练习 8(IWAE 下界随 kk 单调) 记 Lk=E[log⁡1k∑j=1kwj]\mathcal{L}_k = \mathbb{E}[\log \frac{1}{k}\sum_{j=1}^k w_j],wjw_j 独立同分布。(a) 证明 Lk≤log⁡p(x)\mathcal{L}_k \leq \log p(x),且 L1=ELBO\mathcal{L}_1 = \text{ELBO}。(b) 证明 Lk≤Lk+1\mathcal{L}_k \leq \mathcal{L}_{k+1}。提示:1k+1∑j=1k+1wj\frac{1}{k+1}\sum_{j=1}^{k+1} w_j 等于”随机去掉一个样本后剩下 kk 个的平均”的平均。

参考答案

(a) Jensen:E[log⁡wˉ]≤log⁡E[wˉ]=log⁡p(x)\mathbb{E}[\log \bar{w}] \leq \log \mathbb{E}[\bar{w}] = \log p(x);k=1k = 1 时 Eq[log⁡w]=Eq[log⁡p(x,z)−log⁡q(z)]\mathbb{E}_q[\log w] = \mathbb{E}_q[\log p(x, z) - \log q(z)]。(b) 设 II 是从 {1,…,k+1}\{1, \dots, k+1\} 里均匀抽出的 kk 元子集,则 1k+1∑j=1k+1wj=EI[1k∑j∈Iwj]\frac{1}{k+1}\sum_{j=1}^{k+1}w_j = \mathbb{E}_I\left[\frac{1}{k}\sum_{j \in I}w_j\right]。于是 log⁡1k+1∑wj=log⁡EI[⋅]≥EI[log⁡1k∑j∈Iwj]\log \frac{1}{k+1}\sum w_j = \log \mathbb{E}_I[\cdot] \geq \mathbb{E}_I[\log \frac{1}{k}\sum_{j \in I}w_j](Jensen),两边再对 ww 取期望,右边每个子集的期望都是 Lk\mathcal{L}_k。代码 02 第 4 部分的每一列都单调上升。

练习 9(动手:更多的缺失) 在 04_em.py 第 3 部分,把情形 B 的缺失概率从 0.5 改成 0.9(> 0.5 改成 > 0.9)。运行前先预测:“EM + 边缘化”和”缺失当 0”会怎样变化?

参考答案(预测的思路)

每张图只观测到约 6 个像素。边缘化的 EM 仍然是”对的”:每个像素在 1 万张图里仍被观测约 1,000 次,原型 μki\mu_{ki} 还估得出来;但每张图的责任 rnkr_{nk} 变得很模糊(6 个像素很难判断它属于哪个原型),原型之间会变得相似、模糊,测试误差明显上升,但应该仍远好于”缺失当 0”。“缺失当 0”会让模型以为世界几乎全白,误差进一步恶化。具体数字以你的运行为准。

练习 10(动手:数据多了,还过拟合吗?) 在 01_latent_variables.py 第 3 部分 (a),把训练点从 2,000 改成 20,000(dist.sample(2000, g))。K=32K = 32 还会比 K=16K = 16 差吗?训练集上的 KL 还会是负的吗?

参考答案(预测的思路)

数据多 10 倍,估计 191 个参数的方差大幅减小:训练集 KL 和测试 KL 会靠得更近,K=32K = 32 很可能不再比 K=16K = 16 差(甚至更好,因为真实分布是 200 个小高斯的混合,更多成分能描得更细)。但 EM 的轮数上限(300)可能不够收敛,局部最优的问题仍在。具体数字以你的运行为准。


13. 延伸阅读 · Further reading

原课材料

经典文献

  • Dempster, Laird & Rubin, Maximum Likelihood from Incomplete Data via the EM Algorithm, JRSS-B 1977
  • Neal & Hinton, A View of the EM Algorithm that Justifies Incremental, Sparse, and Other Variants(1998)——把 EM 写成”自由能”(ELBO)上的坐标上升
  • Bishop, Pattern Recognition and Machine Learning(2006),第 9 章(混合模型与 EM)、第 10 章(变分推断)
  • Blei, Kucukelbir & McAuliffe, Variational Inference: A Review for Statisticians, JASA 2017(CAVI、平均场)
  • Burda, Grosse & Salakhutdinov, Importance Weighted Autoencoders, ICLR 2016(Lk\mathcal{L}_k 下界)
  • Owen, Monte Carlo theory, methods and examples(2013),第 9 章(重要性采样、χ2\chi^2 与方差、防御性重要性采样)

2023 年之后

  • Rombach et al., High-Resolution Image Synthesis with Latent Diffusion Models, CVPR 2022;Esser et al., Scaling Rectified Flow Transformers for High-Resolution Image Synthesis(Stable Diffusion 3), ICML 2024
  • Mentzer et al., Finite Scalar Quantization: VQ-VAE Made Simple, ICLR 2024
  • Templeton et al., Scaling Monosemanticity(Anthropic, 2024);Gao et al., Scaling and Evaluating Sparse Autoencoders(2024)

14. 下一讲预告 · Next lecture

本讲在”后验能精确算”的世界里把 ELBO 讲透了。第 6 讲(原课 Lecture 6,VAEs)面对真正的深度隐变量模型——后验算不出来,EM 用不了:

  • 在整个数据集上最大化 ∑iL(x(i);θ,ϕ(i))\sum_i \mathcal{L}(x^{(i)}; \theta, \phi^{(i)}):每个数据点有自己的变分参数,随机变分推断(SVI)用内外两层的随机梯度来优化;
  • 对 ϕ\phi 求梯度的困难:期望本身依赖 ϕ\phi。REINFORCE 通用但方差大;重参数化技巧 z=μ+σϵz = \mu + \sigma\epsilon 把随机性”挪出去”,方差小得多;
  • 摊销推断:不再为每个数据点单独优化 ϕ(i)\phi^{(i)},而是训练一个编码器 qϕ(z∣x)q_\phi(z \mid x),“学会怎样做推断”;
  • §5.6 的写法 Eq[log⁡p(x∣z)]−DKL(q∥p(z))\mathbb{E}_q[\log p(x \mid z)] - D_{\mathrm{KL}}(q \Vert p(z)) 变成自编码器:编码、解码、重构,加上”编码要像先验”的正则——这就是变分自编码器(VAE)。

我们会在像素世界上训练 VAE,并把它的 ELBO、IWAE 下界和像素世界真实的 log⁡p(x)\log p(x) 放在一起比较。

← 返回课程目录