对应 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
学完这一讲,你应该能够:
说清楚为什么要引入隐变量 z z z :数据里有大量看不见的变化因素;”z z z 选得好,p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 就比 p ( x ) p(x) p ( x ) 简单得多”;训练好以后可以用后验 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 得到特征。
写出高斯混合 的生成过程,用后验做软聚类 ;解释为什么”无监督学习是一个不适定的问题”;理解混合模型的表达力(“简单分布的混合 = 复杂分布”)和 VAE 作为”无穷多个高斯的混合”。
写出边际似然 p ( x ) = ∑ z p ( x , z ) p(x) = \sum_z p(x, z) p ( x ) = ∑ z p ( x , z ) ,说明它为什么难算(项数随隐变量个数指数增长、后验只集中在极少数 z z z 上),以及为什么梯度也难算。
说明朴素蒙特卡洛 为什么”理论上可行、实践中不行”;推导重要性采样 估计的无偏性和方差(χ 2 \chi^2 χ 2 散度);知道”提议分布宁宽勿窄”。
解释为什么 E [ log p ^ ] ≠ log E [ p ^ ] \mathbb{E}[\log \hat{p}] \neq \log \mathbb{E}[\hat{p}] E [ log p ^ ] = log E [ p ^ ] ;用 Jensen 不等式 推导证据下界(ELBO) ;证明 log p ( x ) = ELBO + D K L ( q ∥ p ( z ∣ x ) ) \log p(x) = \text{ELBO} + D_{\mathrm{KL}}(q \Vert p(z \mid x)) log p ( x ) = ELBO + D KL ( q ∥ p ( z ∣ x )) ,以及”q q q = 后验时下界是紧的”。
理解变分推断 :在一族好处理的 q ( z ; ϕ ) q(z; \phi) q ( z ; ϕ ) 里挑最接近后验的那个;它最小化的是反向 KL ,所以会”模式寻找”。
把 EM 算法 理解成在 ELBO 上做坐标上升;知道它的单调性、局部最优,以及它怎样精确地处理缺失数据;知道”∇ θ log p ( x ) \nabla_\theta \log p(x) ∇ θ 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
符号 含义 x x x ,z z z 观测变量(像素),隐变量(看不见的变化因素、缺失的像素、混合成分的编号) p ( x , z ; θ ) = p ( z ) p ( x ∣ z ; θ ) p(x, z; \theta) = p(z)\,p(x \mid z; \theta) p ( x , z ; θ ) = p ( z ) p ( x ∣ z ; θ ) 联合分布(模型);θ \theta θ 是模型参数 p ( x ; θ ) = ∑ z p ( x , z ; θ ) p(x; \theta) = \sum_z p(x, z; \theta) p ( x ; θ ) = ∑ z p ( x , z ; θ ) 或 ∫ p ( x , z ; θ ) d z \int p(x, z; \theta)\,dz ∫ p ( x , z ; θ ) d z 边际似然(evidence,“证据”) p ( z ∣ x ; θ ) p(z \mid x; \theta) p ( z ∣ x ; θ ) 后验 q ( z ) q(z) q ( z ) ,q ( z ; ϕ ) q(z; \phi) q ( z ; ϕ ) 任意一个隐变量上的分布;变分分布,ϕ \phi ϕ 是变分参数 L ( x ; θ , ϕ ) \mathcal{L}(x; \theta, \phi) L ( x ; θ , ϕ ) ,ELBO证据下界 E q [ log p ( x , z ; θ ) − log q ( z ; ϕ ) ] \mathbb{E}_q[\log p(x, z; \theta) - \log q(z; \phi)] E q [ log p ( x , z ; θ ) − log q ( z ; ϕ )] H ( q ) H(q) H ( q ) q q q 的熵 − ∑ z q ( z ) log q ( z ) -\sum_z q(z)\log q(z) − ∑ z q ( z ) log q ( z ) w = p ( x , z ) / q ( z ) w = p(x, z)/q(z) w = p ( x , z ) / q ( z ) ,p ^ k \hat{p}_k p ^ k 重要性权重;k k k 个样本的重要性采样估计 1 k ∑ j w j \frac{1}{k}\sum_j w_j k 1 ∑ j w j r n k r_{nk} r nk EM 里的”责任”:p ( z = k ∣ x ( n ) ) p(z = k \mid x^{(n)}) p ( z = k ∣ x ( n ) )
0.5 关于数字 · About the numbers
像素世界与前几讲相同(8×8 黑白图,177 个配置,翻转噪声 ε = 0.05 \varepsilon = 0.05 ε = 0.05 ,熵 H ( X ) ≈ 25.59 H(X) \approx 25.59 H ( X ) ≈ 25.59 bit/图)。本讲新增两个”知道真相”的世界:二维玩具分布 (toy2d.py :双月牙、8 个高斯的圆环、3 个高斯团、香蕉形,密度都能精确计算,第 6–10 讲还会用)和笔画世界 (lvm.py :16 个可以同时出现的二值隐特征,2 16 2^{16} 2 16 种隐状态)。所有数字来自作者机器的实际输出(单线程 CPU,重复运行逐字节相同,计时除外)。有几处结果和预想不同(例如 4 个簇按位置 而不是形状划分、“缺失当 0”和”扔掉不完整的图”的对比),讲义按实际结果写,并记录在 代码 README 的”关于实验结果”里。
1. 为什么要隐变量 · Why latent variables
1.1 回顾:自回归模型缺了什么
原课第 2 页回顾了第 3–4 讲:自回归模型用链式法则分解,完全通用;用条件独立或神经网络参数化得到紧凑的表示;似然容易算、容易训练 。但它有三个缺点:必须选一个顺序;生成是逐个进行的;没有办法无监督地学到特征 。
第三点是本讲的出发点。PixelCNN 能把一张图的概率算得很准,可你问它”这张图里是什么形状、在哪里”,它答不出来——它的内部状态是”已经看过的像素的某种摘要”,不是对整张图的高层描述。
1.2 看不见的变化因素
原课第 4–5 页:一张人脸照片的千变万化,来自性别、眼睛颜色、发色、姿态……这些变化因素 (factors of variation)。除非图片被标注过,否则它们不出现在数据里——它们是隐的 (latent)。想法很直接:把这些因素显式地建模成隐变量 z z z 。
画成贝叶斯网络(第 2 讲):z → x z \to x z → x ,只有 x x x (像素)是观测到的(slide 5 里涂了阴影的节点)。这样做有两个好处:
如果 z z z 选得好,p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 可以比 p ( x ) p(x) p ( x ) 简单得多。 知道”这是一张金发、蓝眼、侧脸的女性照片”以后,剩下的不确定性小得多,结构也简单得多。
训练好以后,可以用后验 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 识别特征 ,例如 p ( EyeColor = Blue ∣ x ) p(\text{EyeColor} = \text{Blue} \mid x) p ( EyeColor = Blue ∣ x ) 。这就是”表示学习”:z z z 是 x x x 的一个有意义的摘要。
困难在于:手工指定这些条件分布非常困难 (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), z ∼ N ( 0 , I ) , p ( x ∣ z ) = N ( μ θ ( z ) , Σ θ ( z ) ) ,
其中 μ θ \mu_\theta μ θ 、Σ θ \Sigma_\theta Σ θ 是神经网络。我们不再规定 z z z 的每一维代表什么,只给它一个最简单的先验(标准高斯),然后希望 训练之后 z z z 会自己对应到有意义的变化因素上——这叫无监督表示学习 。特征同样通过 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 得到。
这里有一个关键的”为什么”:为什么先验可以是这么简单的 N ( 0 , I ) \mathcal{N}(0, I) N ( 0 , I ) ?因为复杂性全部可以交给解码器 μ θ \mu_\theta μ θ 。第 2 讲代码 05 第 4 部分已经看到:一个一维的 z ∼ N ( 0 , 1 ) z \sim \mathcal{N}(0, 1) z ∼ N ( 0 , 1 ) 经过一个小网络,边缘分布就可以是多峰的、弯曲的。
1.4 像素世界本来就是一个隐变量模型
第 1 讲的像素世界,生成过程正是 z → x z \to x z → x :先选一个配置 z z z (形状 + 位置 + 大小,177 种),再画出模板、加独立的翻转噪声。所以我们可以精确地检验 slide 5 的那句话:”z z z 选得好,p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 就简单”。
衡量”像素之间还剩多少依赖”的一个好指标是总相关 (total correlation):
T C ( x ) = ∑ i H ( x i ) − H ( x ) , \mathrm{TC}(x) = \sum_i H(x_i) - H(x), TC ( x ) = i ∑ H ( x i ) − H ( x ) ,
即”把像素当成独立的、分别编码”比”整体编码”多付的比特。像素独立时它为 0。条件版本 T C ( x ∣ c ) = ∑ i H ( x i ∣ c ) − H ( x ∣ c ) \mathrm{TC}(x \mid c) = \sum_i H(x_i \mid c) - H(x \mid c) TC ( x ∣ c ) = ∑ i H ( x i ∣ c ) − H ( x ∣ c ) 衡量”知道 c c c 以后还剩多少依赖”。代码 01 第 1 部分:
条件 ∑ i H ( x i ∣ ⋅ ) \sum_i H(x_i \mid \cdot) ∑ i H ( x i ∣ ⋅ ) H ( x ∣ ⋅ ) H(x \mid \cdot) H ( x ∣ ⋅ ) 总相关 相邻像素的平均相关系数 什么都不知道:p ( x ) p(x) p ( x ) 35.58 25.58 10.00 0.258 知道形状 y y y (4 种):p ( x ∣ y ) p(x \mid y) p ( x ∣ y ) 34.91 23.69 11.22 0.235 知道配置 z z z (177 种):p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 18.33 18.33 0.00 0.000
(单位 bit/图;H ( x ) H(x) H ( x ) 是 10 万个样本的蒙特卡洛估计。)
三个观察:
知道完整的配置以后,像素之间的依赖完全消失 :p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 就是 64 个独立的伯努利。复杂性全被 z z z 吸收了。剩下的 18.33 bit 是纯噪声(64 × h ( 0.05 ) 64 \times h(0.05) 64 × h ( 0.05 ) );H ( x ) − H ( x ∣ z ) = 7.25 H(x) - H(x \mid z) = 7.25 H ( x ) − H ( x ∣ z ) = 7.25 bit 是 z z z 携带的关于 x x x 的信息。
只知道形状,总相关反而升高了 (10.00 → 11.22)。这一点乍看反直觉:知道更多,依赖怎么更多了?原因是形状是一个”整体”的信息——单个像素几乎不透露形状 (∑ i H ( x i ) \sum_i H(x_i) ∑ i H ( x i ) 只降了 0.68 bit),整张图却几乎决定了形状 (H ( x ) H(x) H ( x ) 降了 1.90 bit)。知道形状去掉的是整体的不确定性,像素之间的依赖一点没少:p ( x ∣ 形状 ) p(x \mid \text{形状}) p ( x ∣ 形状 ) 仍然是几十个位置的混合。
所以”z z z 选得好”是一个实实在在的要求:太粗的 z z z 不能让条件分布变简单 。真实的深度隐变量模型希望 z z z 能捕捉到”全部”重要的变化因素,让解码器只需要处理局部的、近似独立的细节。
2. 混合模型 · Mixture models
2.1 高斯混合:一个”浅层”隐变量模型
原课第 7 页:
z ∼ C a t e g o r i c a l ( 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). z ∼ Categorical ( 1 , … , K ) , p ( x ∣ z = k ) = N ( μ k , Σ k ) .
生成过程:先抽一个成分 k k k ,再从那个高斯里抽一个点。贝叶斯网络还是 z → x z \to x z → x 。
它为什么叫”浅层”?因为 p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 没有神经网络,只是查表:第 k k k 个成分对应一组固定的 ( μ k , Σ k ) (\mu_k, \Sigma_k) ( μ k , Σ k ) 。
聚类 (slide 8):后验 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 告诉我们一个点属于哪个成分。它是一个软 分配:两团之间的点可以”一半属于这团、一半属于那团”。代码 04 第 1 部分在三个高斯团上训练了 K = 3 K = 3 K = 3 的混合,点 ( 0 , 0.4 ) (0, 0.4) ( 0 , 0.4 ) 落在左右两团之间,后验是 0.512 : 0.488;点 ( − 0.3 , − 0.9 ) (-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 = 4 K = 4 K = 4 的伯努利混合(每个成分是一个”原型”,每个像素独立地按原型的概率取值)。四种形状、四个簇,它能自己找到形状吗?
簇 横线 竖线 方框 十字 簇 0(π = 0.25) 404 243 365 237 簇 1(π = 0.29) 387 287 473 285 簇 2(π = 0.22) 340 225 308 226 簇 3(π = 0.24) 405 237 344 234
完全没有。 每个簇里四种形状的比例都和总体差不多;“纯度”(每个簇按多数形状去猜的正确率)只有 0.324,和不看图、全猜”横线”的 0.30 几乎一样。打印出来的 4 个原型揭示了它按什么分:按位置 ——“东西在左下 / 右上 / 左上 / 右下”。
这不是优化的偶然:
分法 训练集平均 log 2 p ( x ) \log_2 p(x) log 2 p ( x ) 纯度 EM,三个不同的随机初始化 −33.061(三次相同) 0.324 按真实形状分组(作弊:用了标签) −35.199 1.000 EM,从”按形状分组”出发 −33.062 0.323
三个随机初始化收敛到同一个 解;按形状分组的似然低 2.14 bit/图;从”按形状分组”出发跑 EM,它会离开那里、走到按位置分组的解。最大似然真心偏爱按位置分 。
为什么?对 4 个模糊的原型来说,“东西大概在哪个角落”比”是什么形状”更能解释像素:一个”左下角原型”能给所有画在左下角的图(不论形状)合理的概率,而一个”横线原型”必须把概率摊在 8 行上,每一行都很淡。最大似然只奖励”把 p ( x ) p(x) p ( x ) 拟合好”;隐变量最后代表什么,取决于什么最能压缩数据,不一定是人关心的那个因素。 这是理解所有无监督表示学习(包括 VAE 的隐空间)的一个重要提醒。K = 16 K = 16 K = 16 时纯度升到 0.411,但那只是切得更碎。
2.3 另一种动机:简单分布的混合 = 复杂分布
原课第 12 页:
p ( x ) = ∑ z p ( x , z ) = ∑ z p ( z ) p ( x ∣ z ) = ∑ k = 1 K p ( 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{成分}}. p ( x ) = z ∑ p ( x , z ) = z ∑ p ( z ) p ( x ∣ z ) = k = 1 ∑ K p ( z = k ) 成分 N ( x ; μ k , Σ k ) .
即使不关心聚类,混合也是一个把简单模型组合成更有表达力的模型的通用办法。代码 01 第 3 部分 (a) 用 EM 拟合二维”双月牙”(2,000 个训练点;真实分布已知,可以算 KL):
K K K 参数个数 训练集上的 KL 估计 D K L ( p ∥ q ) D_{\mathrm{KL}}(p \Vert q) D KL ( p ∥ q ) (2 万个新样本,nat)1 5 0.922 0.907 ± 0.006 2 11 0.723 0.742 ± 0.006 4 23 0.279 0.322 ± 0.005 8 47 0.020 0.050 ± 0.002 16 95 −0.027 0.032 ± 0.00232 191 −0.072 0.078 ± 0.003
一个高斯只能画出一个椭圆;8 个椭圆拼起来就能描出两个弯曲的月牙。但成分不是越多越好 :K = 32 K = 32 K = 32 在训练集上的 KL 是负的(比真实分布还”好”),新样本上反而比 K = 16 K = 16 K = 16 差——2,000 个点不够估计 191 个参数,这是第 4 讲的过拟合。
像素世界里也一样((b),1 万张训练图,伯努利混合):
模型 参数个数 训练:比真实多 bit 测试:比真实多 bit 找到的真实配置 K = 1 K = 1 K = 1 (= 独立像素)64 9.96 9.88 0 K = 4 K = 4 K = 4 259 7.58 7.59 0 K = 16 K = 16 K = 16 1,039 5.79 5.91 5 K = 64 K = 64 K = 64 4,159 2.39 3.02 46 K = 177 K = 177 K = 177 ,随机初始化11,504 −0.37 0.99 130 K = 177 K = 177 K = 177 ,用真实的 177 个模板初始化11,504 −0.84 0.82 177
最后两行值得多看一眼。同样是 177 个原型——模型族里明明包含(几乎)正确的答案 ——随机初始化的 EM 只找到了 130 个真实配置(有的原型重复,有的是两个配置的”平均”),训练集似然也比从真实模板出发的解低 0.47 bit:它停在了一个更差的局部最优 。隐变量模型的似然是非凸的。而即使从真实模板出发,测试集上仍比真实分布差 0.82 bit(训练集上反而好 0.84 bit):每个原型平均只分到五六十张图,估计 64 个概率的方差很大。真正的”图形引擎”只有 ε \varepsilon ε 和形状概率两类参数——这是”正确的先验”的价值(第 1 讲 §2.2)。
2.4 VAE:无穷多个高斯的混合
原课第 13 页把混合推到极限:让 z z z 连续,
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), z ∼ N ( 0 , I ) , p ( x ∣ z ) = N ( μ θ ( z ) , Σ θ ( z ) ) ,
例如(slide 13 的具体写法,x x x 二维):
μ θ ( z ) = σ ( A z + c ) , Σ θ ( z ) = d i a g ( exp ( σ ( B z + 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). μ θ ( z ) = σ ( A z + c ) , Σ θ ( z ) = diag ( exp ( σ ( B z + d )) ) , θ = ( A , B , c , d ) .
每一个 z z z 对应一个高斯成分,z z z 有无穷多个取值,所以 p ( x ) = ∫ p ( z ) p ( x ∣ z ) d z p(x) = \int p(z)\,p(x \mid z)\,dz p ( x ) = ∫ p ( z ) p ( x ∣ z ) d z 是无穷多个高斯的混合 。即使 p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 很简单,边缘分布 p ( x ) p(x) p ( x ) 也可以非常复杂、灵活。 第 2 讲代码 05 第 4 部分已经画过一个例子:一维 z z z 经过一个小网络,边缘分布有三个峰,二维时样本落在一条弯曲的曲线附近;同一个 x x x 的后验 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 可以有好几个峰。
和有限混合相比,这里的”成分”不再是 K K K 个独立的参数组,而是由同一个网络 μ θ \mu_\theta μ θ 共享参数 地生成——相邻的 z z z 给出相似的成分。这正是”深度”隐变量模型比高斯混合强的地方:成分的个数不再受参数量限制,而且隐空间是连续的、可以插值的(第 6 讲)。
2.5 回顾(原课 slide 14)
隐变量模型:
让我们用简单的积木 p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 定义复杂的模型 p ( x ) p(x) p ( x ) ;
天然适合无监督任务(聚类、无监督表示学习);
没有免费的午餐:比完全观测的自回归模型难学得多。 §2.2–2.3 已经看到两个代价:隐变量学到什么不由我们决定;似然非凸、有局部最优。下一节是第三个、也是最根本的代价:似然本身难算。
3. 边际似然 · Marginal likelihood
3.1 部分观测的数据
原课第 15 页从一个更具体的场景切入:假设训练时有些像素缺失(例如上半张)。记 X X X 为观测到的变量,Z Z Z 为没观测到的(也叫隐藏的、隐的)。假设我们有一个联合分布的模型 p ( X , Z ; θ ) p(X, Z; \theta) p ( X , Z ; θ ) (例如 PixelCNN)。观测到一个训练样本 x ˉ \bar{x} x ˉ 的概率是多少?
p ( X = x ˉ ; θ ) = ∑ z p ( X = x ˉ , Z = z ; θ ) = ∑ z p ( x ˉ , z ; θ ) . p(X = \bar{x}; \theta) = \sum_z p(X = \bar{x}, Z = z; \theta) = \sum_z p(\bar{x}, z; \theta). p ( X = x ˉ ; θ ) = z ∑ p ( X = x ˉ , Z = z ; θ ) = z ∑ p ( x ˉ , z ; θ ) .
要考虑补全这张图的所有可能方式 。缺失的像素就是隐变量——“隐变量”不一定是抽象的”变化因素”,任何没观测到的东西都是。对于 32 个缺失像素,这是 2 32 ≈ 43 2^{32} \approx 43 2 32 ≈ 43 亿种补全;对 PixelCNN 来说,就是 43 亿次前向计算。
第 3 讲代码 05 已经遇到过这个问题:自回归模型算”顺着顺序”的条件很容易,算 p ( 下半张 ) p(\text{下半张}) p ( 下半张 ) (要对上半张求和)只能用重要性采样估计,而且偏低。
3.2 VAE 的边际似然
slide 16:VAE 的 z z z 是连续的,求和变成积分:
p ( X = x ˉ ; θ ) = ∫ p ( X = x ˉ , Z = z ; θ ) d z = ∫ p ( x ˉ , z ; θ ) d z . p(X = \bar{x}; \theta) = \int p(X = \bar{x}, Z = z; \theta)\,dz = \int p(\bar{x}, z; \theta)\,dz. p ( X = x ˉ ; θ ) = ∫ p ( X = x ˉ , Z = z ; θ ) d z = ∫ p ( x ˉ , z ; θ ) d z .
这个积分没有闭式解(μ θ \mu_\theta μ θ 是神经网络),只能近似。
3.3 最大似然 = 对每个数据点做一次求和
slide 17:数据集 D = { x ( 1 ) , … , x ( M ) } \mathcal{D} = \{x^{(1)}, \dots, x^{(M)}\} D = { x ( 1 ) , … , x ( M ) } ,每个数据点的 X X X 观测到、Z Z Z 从未观测到。最大似然:
log ∏ x ∈ D p ( x ; θ ) = ∑ x ∈ D log p ( x ; θ ) = ∑ x ∈ D log ∑ z p ( 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). log x ∈ D ∏ p ( x ; θ ) = x ∈ D ∑ log p ( x ; θ ) = x ∈ D ∑ log z ∑ p ( x , z ; θ ) .
和第 4 讲相比,多了一个藏在 log \log log 里面的求和。它有三个麻烦:
求和的项数随隐变量个数指数增长。 30 个二值隐特征就是 2 30 2^{30} 2 30 项;连续变量的积分一般根本没有闭式解。
梯度也难算 (§7.4 会看到:∇ θ log p ( x ) \nabla_\theta \log p(x) ∇ θ log p ( x ) 需要后验)。
每个训练样本都要做一次 ,每个梯度步都要做一次。所以近似必须便宜 。
代码 02 第 1 部分用”笔画世界”感受第 1 点:8×8 画布上有 m m m 条可能的笔画(整行或整列),每条以 0.15 的概率独立出现,叠在一起再加翻转噪声。隐状态有 2 m 2^m 2 m 种,精确计算 100 张图的 log p ( x ) \log p(x) log p ( x ) :
m m m 项数 2 m 2^m 2 m 用时 4 16 0.1 ms 8 256 0.3 ms 12 4,096 4.5 ms 16 65,536 56 ms 20 约 100 万 (外推)1 秒 30 约 10 亿 (外推)15 分钟 40 约 1 万亿 (外推)11 天
(计时依机器而定。)而这些项里几乎全是 0 :
世界 z z z 的总数平均后验熵 H ( z ∣ x ) H(z \mid x) H ( z ∣ x ) 后验的”有效个数” 2 H 2^{H} 2 H 像素世界 177 0.177 bit 1.18 笔画世界(m = 16 m = 16 m = 16 ) 65,536 0.033 bit 1.03
一张图的后验平均只落在一个多一点的 z z z 上。精确求和把几乎全部时间花在加 0 上——如果能直接找到那几个重要的 z z z ,就不用全加 。这是下面所有近似方法的出发点。
4. 用采样近似边际似然 · Monte Carlo for the marginal likelihood
4.1 第一种尝试:朴素蒙特卡洛
slide 18:把求和改写成一个期望,
p θ ( x ) = ∑ z ∈ Z p θ ( x , z ) = ∣ Z ∣ ∑ z ∈ Z 1 ∣ Z ∣ p θ ( x , z ) = ∣ Z ∣ E z ∼ U n i f o r m ( 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)], p θ ( x ) = z ∈ Z ∑ p θ ( x , z ) = ∣ Z ∣ z ∈ Z ∑ ∣ Z ∣ 1 p θ ( x , z ) = ∣ Z ∣ E z ∼ Uniform ( Z ) [ p θ ( x , z )] ,
然后用第 4 讲的蒙特卡洛:均匀地抽 z ( 1 ) , … , z ( k ) z^{(1)}, \dots, z^{(k)} z ( 1 ) , … , z ( k ) ,
∑ z p θ ( x , z ) ≈ ∣ Z ∣ 1 k ∑ j = 1 k p θ ( x , z ( j ) ) . \sum_z p_\theta(x, z) \approx |\mathcal{Z}| \frac{1}{k}\sum_{j=1}^k p_\theta(x, z^{(j)}). z ∑ p θ ( x , z ) ≈ ∣ Z ∣ k 1 j = 1 ∑ k p θ ( x , z ( j ) ) .
它是无偏的。slide 18 的评价:“**理论上可行,实践中不行。**对大多数 z z z ,p θ ( x , z ) p_\theta(x, z) p θ ( x , z ) 非常小(大多数补全没有意义);有些补全的 p θ ( x , z ) p_\theta(x, z) p θ ( x , z ) 很大,但均匀随机地抽,我们永远抽不中。”
代码 02 第 2 部分 (a):像素世界,500 张测试图,每个 k k k 重复估计多次;log 2 ( p ^ / p ) \log_2(\hat{p}/p) log 2 ( p ^ / p ) 是估计值比真实值大(正)或小(负)多少 bit,−6.6 bit 相当于”小了 100 倍”。
样本数 k k k E [ p ^ / p ] \mathbb{E}[\hat{p}/p] E [ p ^ / p ] (应为 1)中位数 log 2 ( p ^ / p ) \log_2(\hat{p}/p) log 2 ( p ^ / p ) 小了 100 倍以上的比例 平均 log 2 ( p ^ / p ) \log_2(\hat{p}/p) log 2 ( p ^ / p ) 1 0.993 −30.92 97.5% −33.33 10 0.986 −19.96 86.7% −18.42 100 0.991 −3.89 44.7% −6.61 1000 0.998 −0.07 0.3% −0.17
“无偏”这句话在这里几乎没用:k = 10 k = 10 k = 10 时,87% 的估计比真实值小 100 倍以上——绝大多数时候一个”对的”配置都没抽到,只看到”某个别的形状 + 二十个翻转”这类噪声解释的极小概率;偶尔抽中一次,估计又一下子大出 177 / k 177/k 177/ k 倍。平均是对的,单次估计几乎总是错的。k = 1000 k = 1000 k = 1000 时总算够了,可这已经比精确求和(177 项)还贵。
(b) 笔画世界里改用先验 做提议(p ( x ) = E z ∼ p ( z ) [ p ( x ∣ z ) ] p(x) = \mathbb{E}_{z \sim p(z)}[p(x \mid z)] p ( x ) = E z ∼ p ( z ) [ p ( x ∣ z )] ,这是更常见的”朴素”写法):先验知道笔画很少,比均匀分布聪明,k = 1000 k = 1000 k = 1000 时多数图的中位数误差已接近 0;但笔画多的图,先验抽中那个正确组合的概率极小——k = 10,000 k = 10{,}000 k = 10 , 000 时仍有 12.2% 的估计小了 100 倍以上。一张图抽一万次,只为估一个数,在训练循环里是负担不起的。
4.2 第二种尝试:重要性采样
slide 19:换一个”会挑”的分布 q ( z ) q(z) q ( z ) 来抽样,
p θ ( x ) = ∑ z p θ ( x , z ) = ∑ z q ( z ) p θ ( x , z ) q ( z ) = E z ∼ 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 θ ( x ) = z ∑ p θ ( x , z ) = z ∑ q ( z ) q ( z ) p θ ( x , z ) = E z ∼ q ( z ) [ q ( z ) p θ ( x , z ) ] ,
p ^ k ( x ) = 1 k ∑ j = 1 k p θ ( 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. p ^ k ( x ) = k 1 j = 1 ∑ k q ( z ( j ) ) p θ ( x , z ( j ) ) , z ( j ) ∼ q .
(只要 q ( z ) > 0 q(z) > 0 q ( z ) > 0 处覆盖了所有 p θ ( x , z ) > 0 p_\theta(x, z) > 0 p θ ( x , z ) > 0 的 z z z 。)w = p θ ( x , z ) / q ( z ) w = p_\theta(x, z)/q(z) w = p θ ( x , z ) / q ( z ) 叫重要性权重 :q q q 抽得太多的地方权重小、抽得太少的地方权重大,正好补偿。它是无偏 的:E q [ w ] = ∑ z q ( z ) ⋅ p ( x , z ) / q ( z ) = p ( x ) \mathbb{E}_q[w] = \sum_z q(z) \cdot p(x, z)/q(z) = p(x) E q [ w ] = ∑ z q ( z ) ⋅ p ( x , z ) / q ( z ) = p ( x ) 。
什么样的 q q q 好? slide 19 的直觉:“多抽那些在给定 x x x 时可能的 z z z (补全)。“可以说得更精确:估计的相对方差是
V a r q [ p ^ k p ] = 1 k ( ∑ z p ( z ∣ x ) 2 q ( 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}, Var q [ p p ^ k ] = k 1 ( z ∑ q ( z ) p ( z ∣ x ) 2 − 1 ) = k χ 2 ( p ( z ∣ x ) ∥ q ) ,
(练习 3)——一个叫 χ 2 \chi^2 χ 2 散度的量。q = p ( z ∣ x ) q = p(z \mid x) q = p ( z ∣ x ) 时它为 0:每一个权重都恰好等于 p ( x ) p(x) p ( x ) ,抽一个样本就够了。代码 02 第 3 部分比较了 6 种提议分布(像素世界,500 张图):
提议分布 q q q χ 2 \chi^2 χ 2 (精确)k = 1 k=1 k = 1 :小 100 倍以上k = 1 k=1 k = 1 :误差标准差(bit)k = 10 k=10 k = 10 :小 100 倍以上k = 10 k=10 k = 10 :标准差均匀(= 朴素蒙特卡洛) 162.41 97.5% 12.45 87.3% 8.42 形状对、位置均匀 42.38 95.2% 10.35 66.4% 11.59 回火后验 ∝ p ( z ∣ x ) 1 / 3 \propto p(z \mid x)^{1/3} ∝ p ( z ∣ x ) 1/3 0.43 16.4% 4.78 0.0% 0.30 ½ 后验 + ½ 均匀 0.98 48.7% 19.06 0.1% 0.68 锐化后验 ∝ p ( z ∣ x ) 2 \propto p(z \mid x)^{2} ∝ p ( z ∣ x ) 2 (偏窄) 162.41 0.0% 0.05 0.0% 0.05 后验 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 本身 0.00 0.0% 0.00 0.0% 0.00
所有提议的 E [ p ^ / p ] \mathbb{E}[\hat{p}/p] E [ p ^ / p ] 都在 1 附近(无偏),区别全在方差。三个要点:
q q q 越像后验越好。 “回火后验”比后验宽一些,χ 2 = 0.43 \chi^2 = 0.43 χ 2 = 0.43 ,k = 10 k = 10 k = 10 时几乎每次都准。“½ 后验 + ½ 均匀”保证 q ≥ 1 2 q \geq \frac{1}{2} q ≥ 2 1 后验,于是 χ 2 ≤ 1 \chi^2 \leq 1 χ 2 ≤ 1 ——只要 q q q 在后验有质量的地方不太小,估计就稳定(“防御性”重要性采样)。
“偏窄的 q q q “是一个陷阱。 “锐化后验”的 χ 2 \chi^2 χ 2 和均匀分布一模一样 (162.41,这不是巧合,练习 4),实测的标准差却是最小的。它的方差藏在哪里?代码给出了诊断:二阶矩的 98.6% 来自 q ( z ) < 10 − 6 q(z) < 10^{-6} q ( z ) < 1 0 − 6 的那些 z z z ,而它们加起来被抽中的概率只有 6.7 × 10 − 8 6.7 \times 10^{-8} 6.7 × 1 0 − 8 ——几千万次才抽到一次。估计看起来又稳又准,理论方差却极大。在像素世界里那些 z z z 的后验质量只有 3 × 10 − 4 3 \times 10^{-4} 3 × 1 0 − 4 ,看不出偏差;在真实模型里,后验的尾部可能有不可忽视的质量,偏窄的 q q q 会让估计系统性地偏低,而样本方差不会给你任何警告 。经验法则:q q q 宁宽勿窄 。
那我们为什么还要估计 p ( x ) p(x) p ( x ) ? 如果知道后验,p ( x ) p(x) p ( x ) 本来就能算。重要性采样的价值在于:一个近似的后验 就足以把估计变得又快又准。第 6 讲的 VAE 会训练一个推断网络 q ϕ ( z ∣ x ) q_\phi(z \mid x) q ϕ ( z ∣ x ) ,它既用来训练,也用来做这种重要性采样,估计测试集上的 log p ( x ) \log p(x) log p ( x ) 。
4.3 训练要的是 log p ( x ) \log p(x) log p ( x )
slide 20:训练需要的是对数似然 log p θ ( x ) \log p_\theta(x) log p θ ( x ) 。很自然地想用 log p ^ k \log \hat{p}_k log p ^ k 去估计它:
log p θ ( x ) ≈ log ( 1 k ∑ j = 1 k p θ ( x , z ( j ) ) q ( z ( j ) ) ) ≈ k = 1 log 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)})}. log p θ ( x ) ≈ log ( k 1 j = 1 ∑ k q ( z ( j ) ) p θ ( x , z ( j ) ) ) ≈ k = 1 log q ( z ( 1 ) ) p θ ( x , 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] E [ log q ( z ( 1 ) ) p θ ( x , z ( 1 ) ) ] = log E [ q ( z ( 1 ) ) p θ ( x , z ( 1 ) ) ] 。p ^ \hat{p} p ^ 对 p p p 无偏,log p ^ \log \hat{p} log p ^ 对 log p \log p log p 却有偏。偏向哪边?代码 02 第 4 部分(表中是 E [ log 2 p ^ k ] − log 2 p ( x ) \mathbb{E}[\log_2 \hat{p}_k] - \log_2 p(x) E [ log 2 p ^ k ] − log 2 p ( x ) ,500 张图平均):
k k k 形状对、位置均匀 回火后验 锐化后验(偏窄) 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 = 1000 k = 1000 k = 1000 的预测 − χ 2 / ( 2 k ln 2 ) -\chi^2/(2k\ln 2) − χ 2 / ( 2 k ln 2 ) −0.031 −0.000 −0.117
每一格都是负的 :log p ^ \log \hat{p} log p ^ 系统性地偏低 ——下一节的 Jensen 不等式会说明为什么。
k = 1 k = 1 k = 1 时,E [ log p ^ 1 ] = E q [ log p ( x , z ) − log q ( z ) ] \mathbb{E}[\log \hat{p}_1] = \mathbb{E}_q[\log p(x, z) - \log q(z)] E [ log p ^ 1 ] = E q [ log p ( x , z ) − log q ( z )] ——这就是下一节的 ELBO (第二行是精确计算的 ELBO,和第一行的蒙特卡洛一致)。“用一个样本做重要性采样、再取 log”的期望,就是证据下界。
k k k 越大偏差越小,单调地逼近 0:E [ log p ^ k ] \mathbb{E}[\log \hat{p}_k] E [ log p ^ k ] 是一族越来越紧的下界(Burda et al. 2016 的 IWAE 下界 ,第 6 讲)。k k k 很大时偏差 ≈ − χ 2 / ( 2 k ) \approx -\chi^2/(2k) ≈ − χ 2 / ( 2 k ) (用 log \log log 的二阶泰勒展开即得);“形状对”那一列的预测和实测接近,“锐化后验”那一列对不上——预测依赖方差,而它的方差藏在永远抽不到的尾部。
还有一个对比:ELBO 喜欢偏窄的 q q q (锐化后验的 ELBO 最紧),重要性采样怕偏窄的 q q q 。这两种”好”的标准不同,第 6 讲还会回到这一点。
5. 证据下界 · The evidence lower bound (ELBO)
5.1 Jensen 不等式
slide 21:log \log log 是凹函数,log ( p x + ( 1 − p ) x ′ ) ≥ p log x + ( 1 − p ) log x ′ \log(px + (1-p)x') \geq p\log x + (1 - p)\log x' log ( p x + ( 1 − p ) x ′ ) ≥ p log x + ( 1 − p ) log x ′ ——“弦在曲线下方”。推广到任意分布:
log ( E z ∼ q [ f ( z ) ] ) = log ( ∑ z q ( z ) f ( z ) ) ≥ ∑ z q ( z ) log f ( z ) = E z ∼ 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 ( E z ∼ q [ f ( z )] ) = log ( z ∑ q ( z ) f ( z ) ) ≥ z ∑ q ( z ) log f ( z ) = E z ∼ q [ log f ( z )] .
先平均再取 log ≥ 先取 log 再平均 ,等号当且仅当 f f f 在 q q q 下是常数。代码 03 第 1 部分:f ∈ { 1 , 100 } f \in \{1, 100\} f ∈ { 1 , 100 } 各一半时,左边 log 50.5 = 3.922 \log 50.5 = 3.922 log 50.5 = 3.922 ,右边 1 2 ( log 1 + log 100 ) = 2.303 \frac{1}{2}(\log 1 + \log 100) = 2.303 2 1 ( log 1 + log 100 ) = 2.303 ;f f f 是常数 5 时两边相等;f f f 的取值越分散,差距越大。
5.2 推导 ELBO
slide 22:取 f ( z ) = p θ ( x , z ) / q ( z ) f(z) = p_\theta(x, z)/q(z) f ( z ) = p θ ( x , z ) / q ( z ) ,
log p θ ( x ) = log E z ∼ q [ p θ ( x , z ) q ( z ) ] ≥ E z ∼ 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]. log p θ ( x ) = log E z ∼ q [ q ( z ) p θ ( x , z ) ] ≥ E z ∼ q [ log q ( z ) p θ ( x , z ) ] .
右边叫证据下界 (evidence lower bound,ELBO)。“证据”(evidence)就是 p ( x ) p(x) p ( x ) ——观测到的数据的概率。这一步正是 §4.3 观察到的现象:log \log log 的期望 ≤ 期望的 log \log log 。
5.3 ELBO 的结构
slide 23:对任意 q q q 成立,
log p ( x ; θ ) ≥ ∑ z q ( z ) log p θ ( x , z ) q ( z ) = ∑ z q ( z ) log p θ ( x , z ) ⏟ "就像 z 被观测到了"的对数似然 − ∑ z q ( 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)}. log p ( x ; θ ) ≥ z ∑ q ( z ) log q ( z ) p θ ( x , z ) = " 就像 z 被观测到了 " 的对数似然 z ∑ q ( z ) log p θ ( x , z ) 熵 H ( q ) − z ∑ q ( z ) log q ( z ) .
第一项是期望的完整数据对数似然 :如果 z z z 被观测到了,对数似然就是 log p ( x , z ) \log p(x, z) log p ( x , z ) ;我们不知道 z z z ,就按 q q q 对各种可能的 z z z 取平均。第二项是 q q q 的熵,它奖励”不要把赌注全压在一个 z z z 上”。(第 6 讲 slide 5 正是这样标注这两项的:“Log-likelihood as if fully observed” 和 “Entropy H(q) of q”。)
这个形式的好处:log \log log 现在作用在 p ( x , z ) 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) log p ( x , z ) = log p ( z ) + log p ( x ∣ z ) 很容易算——难算的求和被一个期望 代替了,而期望可以用采样估计。
5.4 为什么 q q q = 后验时下界是紧的
slide 24:令 q ( z ) = p ( z ∣ x ; θ ) q(z) = p(z \mid x; \theta) q ( z ) = p ( z ∣ x ; θ ) ,
∑ z p ( z ∣ x ) log p ( x , z ) p ( z ∣ x ) = ∑ z p ( z ∣ x ) log p ( z ∣ x ) p ( x ) p ( z ∣ x ) = ∑ z p ( z ∣ x ) log p ( x ) = log p ( x ) ∑ z p ( 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). z ∑ p ( z ∣ x ) log p ( z ∣ x ) p ( x , z ) = z ∑ p ( z ∣ x ) log p ( z ∣ x ) p ( z ∣ x ) p ( x ) = z ∑ p ( z ∣ x ) log p ( x ) = log p ( x ) = 1 z ∑ p ( z ∣ x ) = log p ( x ) .
直觉上:q = q = q = 后验时,比值 f ( z ) = p ( x , z ) / p ( z ∣ x ) = p ( x ) f(z) = p(x, z)/p(z \mid x) = p(x) f ( z ) = p ( x , z ) / p ( z ∣ x ) = p ( x ) 是常数,Jensen 不等式取等号。这也印证了 §4.2 的结论:应该挑可能的补全 。
5.5 差距就是 KL
slide 25:对任意 q q q ,“一点代数”给出
D K L ( q ( z ) ∥ p ( z ∣ x ; θ ) ) = ∑ z q ( z ) log q ( z ) p ( z ∣ x ) = ∑ z q ( z ) log q ( z ) p ( x ) p ( x , z ) = − ∑ z q ( 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. D KL ( q ( z ) ∥ p ( z ∣ x ; θ ) ) = z ∑ q ( z ) log p ( z ∣ x ) q ( z ) = z ∑ q ( z ) log p ( x , z ) q ( z ) p ( x ) = − z ∑ q ( z ) log p ( x , z ) + log p ( x ) − H ( q ) ≥ 0.
移项:
log p ( x ; θ ) = ∑ z q ( z ) log p ( x , z ; θ ) + H ( q ) ⏟ ELBO + D K L ( 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)\;} log p ( x ; θ ) = ELBO z ∑ q ( z ) log p ( x , z ; θ ) + H ( q ) + D KL ( q ( z ) ∥ p ( z ∣ x ; θ ) )
这一个等式同时说明了三件事:(1) ELBO 是下界(KL ≥ 0);(2) q = q = q = 后验时等号成立(KL = 0);(3) 差距恰好是 q q q 到后验的 KL ——q q q 越接近后验,ELBO 越接近真实的对数似然。
代码 03 第 2 部分在像素世界里对 7 种 q q q 逐张图验证(1,000 张测试图的平均,bit):
q ( z ) q(z) q ( z ) E q [ log p ( x , z ) ] \mathbb{E}_q[\log p(x,z)] E q [ log p ( x , z )] H ( q ) H(q) H ( q ) ELBO 差距 D K L ( q ∥ p ( z ∣ x ) ) D_{\mathrm{KL}}(q \Vert p(z \mid x)) D KL ( q ∥ p ( z ∣ x )) E q [ log p ( x ∣ z ) ] \mathbb{E}_q[\log p(x \mid z)] E q [ log p ( x ∣ z )] D K L ( q ∥ p ( z ) ) D_{\mathrm{KL}}(q \Vert p(z)) D KL ( q ∥ p ( z )) 后验 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) −25.71 0.18 −25.54 0.00 0.00 −18.28 7.26 锐化后验 −25.64 0.08 −25.56 0.02 0.02 −18.20 7.36 点质量:最可能的配置 −25.63 0.00 −25.63 0.09 0.09 −18.20 7.43 回火后验 −29.76 2.00 −27.76 2.22 2.22 −22.32 5.44 形状对、位置均匀 −63.98 5.55 −58.43 32.89 32.89 −56.54 1.89 先验 p ( z ) p(z) p ( z ) −65.28 7.45 −57.84 32.30 32.30 −57.84 0.00 均匀分布 −66.07 7.47 −58.60 33.06 33.06 −58.58 0.02
(平均 log 2 p ( x ) = − 25.54 \log_2 p(x) = -25.54 log 2 p ( x ) = − 25.54 ;恒等式在每张图、每个 q q q 上的最大误差 1.2 × 10 − 13 1.2 \times 10^{-13} 1.2 × 1 0 − 13 nat。)
“差距”和”KL”两列逐位相同。
点质量 (只猜一个最可能的配置)的熵是 0,ELBO 就是 log p ( x , z ^ ) \log p(x, \hat{z}) log p ( x , z ^ ) ,差距 = − log 2 p ( z ^ ∣ x ) = 0.09 = -\log_2 p(\hat{z} \mid x) = 0.09 = − log 2 p ( z ^ ∣ x ) = 0.09 bit。后验很集中时,“只猜一个解释”几乎不损失什么——这是”硬 EM”和 k-means 背后的近似。
先验当 q q q (不看 x x x 就猜 z z z )差距 32 bit:先验把质量摊在 177 个配置上,而对一张具体的图,绝大多数配置的后验概率小到 2 − 30 2^{-30} 2 − 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) log p ( x , z ) = log p ( x ∣ z ) + log p ( z ) 代进去):
ELBO = E q [ log p ( x ∣ z ) ] ⏟ 重构: z 能不能解释 x − D K L ( 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{ 离先验有多远}}. ELBO = 重构: z 能不能解释 x E q [ log p ( x ∣ z )] − q 离先验有多远 D KL ( q ( z ) ∥ p ( z ) ) .
(恒等式最大误差 5.7 × 10 − 14 5.7 \times 10^{-14} 5.7 × 1 0 − 14 。)两项在拔河:q q q = 先验让第二项为 0,但随便猜的配置解释不了这张图,第一项极差(−57.84);q q q = 后验时第一项最好(−18.28),代价是离先验有 7.26 bit 的距离(约 log 2 177 \log_2 177 log 2 177 ,“从 177 个里选出了一个”)。第 6 讲会把这个写法解读成自编码器 :第一项是”编码再解码能不能还原”,第二项是”编码不要离先验太远”。
6. 变分推断 · Variational inference
6.1 后验算不出来怎么办
像素世界的后验能精确算,是因为 z z z 只有 177 种。VAE 的后验需要”把神经网络 μ θ \mu_\theta μ θ 反过来”(第 6 讲 slide 7),算不出来。slide 26 的办法:
设 q ( z ; ϕ ) q(z; \phi) q ( z ; ϕ ) 是一个好处理的 分布族,由变分参数 ϕ \phi ϕ 参数化,例如均值和协方差由 ϕ \phi ϕ 给出的高斯 q ( z ; ϕ ) = N ( ϕ 1 , ϕ 2 ) q(z; \phi) = \mathcal{N}(\phi_1, \phi_2) q ( z ; ϕ ) = N ( ϕ 1 , ϕ 2 ) 。变分推断:挑 ϕ \phi ϕ ,让 q ( z ; ϕ ) q(z; \phi) q ( z ; ϕ ) 尽可能接近 p ( z ∣ x ; θ ) p(z \mid x; \theta) p ( z ∣ x ; θ ) 。
“好处理”指两件事:能从 q q q 采样,能算 log q \log q log q 。由 §5.5,“让 q q q 接近后验”和”让 ELBO 最大”是同一件事——log p ( x ) \log p(x) log p ( x ) 和 q q q 无关,ELBO 增加多少,KL 就减少多少。所以变分推断 = 关于 ϕ \phi ϕ 最大化 ELBO ,而 ELBO 是我们算得出来(至少能用采样估计)的。
注意它最小化的是 D K L ( q ∥ p ( z ∣ x ) ) D_{\mathrm{KL}}(q \Vert p(z \mid x)) D KL ( q ∥ p ( z ∣ x )) ——q q q 在前,是第 4 讲 §2.3 的反向 KL 。这决定了变分推断的性格。
代码 03 第 3 部分构造了一个一维的例子:z ∼ N ( 0.3 , 1.5 2 ) z \sim \mathcal{N}(0.3, 1.5^2) z ∼ N ( 0.3 , 1. 5 2 ) ,x ∣ z ∼ N ( z 2 / 2 , 0.5 2 ) x \mid z \sim \mathcal{N}(z^2/2, 0.5^2) x ∣ z ∼ N ( z 2 /2 , 0. 5 2 ) ,观测到 x = 2 x = 2 x = 2 。因为 z 2 / 2 = 2 z^2/2 = 2 z 2 /2 = 2 有两个解,后验有两个峰(z ≈ ± 2 z \approx \pm 2 z ≈ ± 2 ),先验偏向正数,右峰占 62%。在 z z z 的细网格上可以精确算出一切:
q ( z ) q(z) q ( z ) ELBO(nat) 差距 = KL N ( 2 , 2 ) \mathcal{N}(2, 2) N ( 2 , 2 ) (slide 26 的橙色)−22.85 20.73 N ( − 4 , 0.75 ) \mathcal{N}(-4, 0.75) N ( − 4 , 0.75 ) (slide 26 的绿色)−110.39 108.28 矩匹配:N ( 0.47 , 1.85 2 ) \mathcal{N}(0.47, 1.85^2) N ( 0.47 , 1.8 5 2 ) −13.44 11.33 ELBO 最大:N ( 1.90 , 0.26 2 ) \mathcal{N}(1.90, 0.26^2) N ( 1.90 , 0.2 6 2 ) −2.61 0.49
(log p ( x = 2 ) = − 2.116 \log p(x = 2) = -2.116 log p ( x = 2 ) = − 2.116 nat。)
N ( 2 , 2 ) \mathcal{N}(2, 2) N ( 2 , 2 ) 远好于 N ( − 4 , 0.75 ) \mathcal{N}(-4, 0.75) N ( − 4 , 0.75 ) :前者至少盖住了主峰,后者放在后验几乎为 0 的地方(slide 26)。
“矩匹配”的高斯 (均值、方差都和后验一样)横跨两个峰,把大量质量放在两峰之间后验几乎为 0 的地方——反向 KL 对此惩罚极重。
ELBO 最大的高斯只盖住右峰,完全忽略左峰。 漏掉一个峰的代价只是 ≈ − ln ( 右峰的质量 ) = − ln 0.623 = 0.47 \approx -\ln(\text{右峰的质量}) = -\ln 0.623 = 0.47 ≈ − ln ( 右峰的质量 ) = − ln 0.623 = 0.47 nat(实测差距 0.49)。这就是模式寻找 :变分推断”宁缺毋滥”——宁可只解释一种可能,也不把质量放在不可能的地方。
这个性格有利有弊:q q q 的样本总是”合理的”,但 q q q 会低估后验的不确定性 ,在多峰的后验上只看到一个峰。
6.2 缺失像素当隐变量(slide 27)
slide 27 的例子:假设 p ( x top , x bottom ; θ ) p(x^{\text{top}}, x^{\text{bottom}}; \theta) p ( x top , x bottom ; θ ) 给”像数字的图”高概率;上半张 z = x top z = x^{\text{top}} z = x top 缺失(隐变量)。用一个因子化的伯努利分布 近似后验:
q ( x top ; ϕ ) = ∏ 缺失的像素 i ϕ i x i top ( 1 − ϕ i ) 1 − x i top . q(x^{\text{top}}; \phi) = \prod_{\text{缺失的像素 } i} \phi_i^{x_i^{\text{top}}}(1 - \phi_i)^{1 - x_i^{\text{top}}}. q ( x top ; ϕ ) = 缺失的像素 i ∏ ϕ i x i top ( 1 − ϕ i ) 1 − x i top .
ϕ i = 0.5 \phi_i = 0.5 ϕ i = 0.5 (全部)是好的近似吗?不是。
ϕ i = 1 \phi_i = 1 ϕ i = 1 (全部)呢?不是。
只在”数字 9 上半部分”对应的像素上 ϕ i ≈ 1 \phi_i \approx 1 ϕ i ≈ 1 ?是。
这种”每个隐变量独立”的 q q q 叫平均场 (mean-field)近似。代码 03 第 4 部分在像素世界里原样重做:下半张只有第 4 行第 2–5 列的一条横线,上半张 32 个像素是隐变量。真实后验在两种解释之间:“就是一条横线” (上半张空白,0.575)和**“一个 4×4 方框的底边”**(上半张有方框的上边和两条竖边,0.377)。
q ( z ; ϕ ) q(z; \phi) q ( z ; ϕ ) ELBO(bit) 差距 = KL(bit) ϕ = 0.5 \phi = 0.5 ϕ = 0.5 (全部)−38.75 30.12 ϕ = 1 \phi = 1 ϕ = 1 (全部)−111.77 103.14 ϕ \phi ϕ = 后验边缘 p ( z i = 1 ∣ x bottom ) p(z_i = 1 \mid x^{\text{bottom}}) p ( z i = 1 ∣ x bottom ) −13.86 5.23 CAVI,从 ϕ = 0.5 \phi = 0.5 ϕ = 0.5 出发 −9.49 0.87 CAVI,从后验边缘出发 −9.50 0.87 CAVI,从”方框”出发 −10.17 1.54
(log 2 p ( x bottom ) = − 8.63 \log_2 p(x^{\text{bottom}}) = -8.63 log 2 p ( x bottom ) = − 8.63 bit,精确;ELBO 用 4,000 个样本估计。)
ϕ = 0.5 \phi = 0.5 ϕ = 0.5 让上半张变成随机噪声,ϕ = 1 \phi = 1 ϕ = 1 让上半张全黑:都很差,和 slide 27 一致。
ϕ \phi ϕ = 后验边缘看起来”最诚实” (方框的像素都是 0.39–0.41),ELBO 却很差 :因子化的 q q q 无法表达”这些像素要么一起出现、要么一起不出现”,从它采样得到的是半个、缺角的方框——在真实分布下几乎不可能。(后验边缘恰好是前向 KL D ( p ∥ q ) D(p \Vert q) D ( p ∥ q ) 在因子化族里的最优解,练习 5。)
用坐标上升 (下面)优化出来的 q q q 收敛到一种 解释:ϕ \phi ϕ 接近 0 或 1,差距只剩约 − log 2 ( 那种解释的后验概率 ) -\log_2(\text{那种解释的后验概率}) − log 2 ( 那种解释的后验概率 ) :选”横线”时 − log 2 0.575 = 0.80 -\log_2 0.575 = 0.80 − log 2 0.575 = 0.80 ,选”方框”时 − log 2 0.377 = 1.41 -\log_2 0.377 = 1.41 − log 2 0.377 = 1.41 (再加一点误差)。这就是 slide 27 的”是”——ϕ ≈ 1 \phi \approx 1 ϕ ≈ 1 只放在”该是笔画”的像素上。从不同起点出发停在不同的峰,ELBO 更高的对应后验概率更大的解释。
平均场坐标上升(CAVI) 。固定其他 ϕ − i \phi_{-i} ϕ − i ,ELBO 对 ϕ i \phi_i ϕ i 的最优解是(练习 6)
l o g i t ϕ i = E q − i [ log p ( z i = 1 , z − i , x ) − log p ( z i = 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], logit ϕ i = E q − i [ log p ( z i = 1 , z − i , x ) − log p ( z i = 0 , z − i , x ) ] ,
直觉:z i z_i z i 取 1 比取 0 “好多少”,在其他像素按 q q q 随机补全的情况下平均。代码里用 600 个样本估计这个期望,把 32 个坐标轮流更新 6 遍。
6.3 下一步:同时优化 θ \theta θ 和 ϕ \phi ϕ
slide 28:
log p ( x ; θ ) ≥ ∑ z q ( z ; ϕ ) log p ( z , x ; θ ) + H ( q ( z ; ϕ ) ) = L ( x ; θ , ϕ ) , log p ( x ; θ ) = L ( x ; θ , ϕ ) + D K L ( 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). log p ( x ; θ ) ≥ z ∑ q ( z ; ϕ ) log p ( z , x ; θ ) + H ( q ( z ; ϕ )) = L ( x ; θ , ϕ ) , log p ( x ; θ ) = L ( x ; θ , ϕ ) + D KL ( q ( z ; ϕ ) ∥ p ( z ∣ x ; θ ) ) .
q ( z ; ϕ ) q(z; \phi) q ( z ; ϕ ) 越能逼近后验,KL 越小,ELBO 越接近 log p ( x ; θ ) \log p(x; \theta) log p ( x ; θ ) 。到目前为止我们固定了模型 θ \theta θ ,只优化 ϕ \phi ϕ (推断)。学习要的是 θ \theta θ 。下一步:在整个数据集上,对 θ \theta θ 和 ϕ \phi ϕ 一起最大化 ELBO ——这是第 6 讲。在那之前,先看一个经典的特例:q q q 恰好能取到后验的时候。
7. EM 算法 · The EM algorithm
7.1 E 步、M 步 = ELBO 上的坐标上升
slide 23 的旁注:“这正是 EM 算法的 E 步要算的东西。“把 ELBO 看成 q q q 和 θ \theta θ 两组变量的函数 L ( q , θ ) \mathcal{L}(q, \theta) L ( q , θ ) ,交替地优化:
E 步 :固定 θ t \theta_t θ t ,关于 q q q 最大化。由 §5.5,最优的 q q q 就是后验:q t = p ( z ∣ x ; θ t ) q_t = p(z \mid x; \theta_t) q t = p ( z ∣ x ; θ t ) 。这时下界是紧的,L ( q t , θ t ) = log p ( x ; θ t ) \mathcal{L}(q_t, \theta_t) = \log p(x; \theta_t) L ( q t , θ t ) = log p ( x ; θ t ) 。
M 步 :固定 q t q_t q t ,关于 θ \theta θ 最大化。熵 H ( q t ) H(q_t) H ( q t ) 和 θ \theta θ 无关,只剩 ∑ z q t ( z ) log p ( x , z ; θ ) \sum_z q_t(z) \log p(x, z; \theta) ∑ z q t ( z ) log p ( x , z ; θ ) ——“按后验加权的完整数据对数似然”。它和第 4 讲的完全观测 MLE 几乎一样,常常有闭式解。
于是
log p ( x ; θ t ) = L ( q t , θ t ) ≤ L ( q t , θ 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}). log p ( x ; θ t ) = L ( q t , θ t ) ≤ L ( q t , θ t + 1 ) ≤ log p ( x ; θ t + 1 ) .
第一个不等号是 M 步的定义,第二个是 ELBO ≤ log p。对数似然每一轮都不下降 ,而且不需要学习率。
对高斯混合,M 步是:记 r n k = p ( z = k ∣ x ( n ) ; θ t ) r_{nk} = p(z = k \mid x^{(n)}; \theta_t) r nk = p ( z = k ∣ x ( n ) ; θ t ) (第 k k k 个成分对第 n n n 个点的”责任”),N k = ∑ n r n k N_k = \sum_n r_{nk} N k = ∑ n r nk ,
π k = N k N , μ k = 1 N k ∑ n r n k x ( n ) , Σ k = 1 N k ∑ n r n k ( 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. π k = N N k , μ k = N k 1 n ∑ r nk x ( n ) , Σ k = N k 1 n ∑ r nk ( x ( n ) − μ k ) ( x ( n ) − μ k ) ⊤ .
和”知道每个点属于哪个成分”时的 MLE 一模一样,只是把 0/1 的归属换成了软的责任(练习 2)。
代码 04 第 1 部分(三个高斯团,600 个点,K = 3 K = 3 K = 3 )逐轮打印了这条链:
轮 t t t log p ( x ; θ t ) \log p(x; \theta_t) log p ( x ; θ t ) M 步后的 L ( q t , θ t + 1 ) \mathcal{L}(q_t, \theta_{t+1}) L ( q t , θ t + 1 ) log p ( x ; θ t + 1 ) \log p(x; \theta_{t+1}) log p ( x ; θ 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 − 10 2.1 \times 10^{-10} 2.1 × 1 0 − 10 ——没有一步下降。学到的均值和权重和真实值吻合(例如真实 ( − 1.60 , 0.90 ) (-1.60, 0.90) ( − 1.60 , 0.90 ) 、权重 0.45,学到 ( − 1.61 , 0.87 ) (-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 = 8 K = 8 K = 8 ,10 个随机初始化——
4 次找到了全部 8 个团,D K L = 0.014 D_{\mathrm{KL}} = 0.014 D KL = 0.014 nat;
5 次只找到 6 个(两个成分挤在同一个团里,另一个成分只好横跨两个团),KL ≈ 0.13;
1 次只找到 4 个,KL = 0.256。
训练似然和 KL 的排序完全一致。所以标准做法是多跑几个初始化,留训练(或验证)似然最高的 ;更好的初始化(如 k-means++)也有帮助。第 6 讲用梯度训练 VAE 时同样只能找到局部最优。
7.3 训练数据有缺失
slide 15 的场景:训练图缺一部分像素。对”给定 z z z 像素独立”的伯努利混合,EM 能精确地 处理:E 步只用观测到的像素算责任,M 步只在”观测到第 i i i 个像素”的图里估计 μ k i \mu_{ki} μ k i ——缺失的像素被精确地边缘化了。代码 04 第 3 部分(K = 64 K = 64 K = 64 ,在完整的 测试图上评估):
训练数据与做法 用到的训练图 测试:比真实多 bit 完整的 1 万张图(参照) 10,000 3.20 A. 一半的图缺上半张:EM + 边缘化 全部 3.47 A. 缺失的像素当作 0(白色) 全部 4.53 A. 扔掉不完整的图 5,086 3.50 B. 每个像素 50% 随机缺失:EM + 边缘化 全部 3.70 B. 缺失的像素当作 0 全部 7.40 B. 扔掉不完整的图 0 —
“缺失当 0”是灾难 :模型学到”上半张常常是空白的”——这不是世界的规律,而是缺失机制留下的假象。
在 A 里,“扔掉不完整的图”只比边缘化差 0.03 bit:缺上半张的图对”上半张长什么样”没有贡献,而 64 个原型用 5 千张完整的图已经估得差不多了。
在 B 里差别是根本性的:没有一张完整的图,扔掉就什么都不剩;边缘化只比完整数据差 0.5 bit——每张图都贡献了它看到的那一半 。
这里能精确边缘化,全靠”给定 z z z 像素独立”。对 PixelCNN,缺上半张的图的似然要对 2 32 2^{32} 2 32 种补全求和——§3.1 的难题又回来了。
7.4 似然的梯度也需要后验
slide 17 说”梯度也难算”。为什么?对任何隐变量模型,
∇ θ log p ( x ; θ ) = ∇ θ ∑ z p ( x , z ; θ ) p ( x ; θ ) = ∑ z p ( x , z ; θ ) p ( x ; θ ) ∇ θ log p ( x , z ; θ ) = E p ( 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]. ∇ θ log p ( x ; θ ) = p ( x ; θ ) ∇ θ ∑ z p ( x , z ; θ ) = z ∑ p ( x ; θ ) p ( x , z ; θ ) ∇ θ log p ( x , z ; θ ) = E p ( z ∣ x ; θ ) [ ∇ θ log p ( x , z ; θ ) ] .
(第二步用了 ∇ p = p ∇ log p \nabla p = p\,\nabla \log p ∇ p = p ∇ log p 。)对数似然的梯度 = “如果 z z z 被观测到”时的梯度,按后验加权平均 ——这叫 Fisher 恒等式。代码 04 第 4 部分对高斯混合的均值验证:自动求导的 ∇ log p ( x ) \nabla \log p(x) ∇ log p ( x ) 和”后验加权的完整数据梯度”最大差 2.8 × 10 − 14 2.8 \times 10^{-14} 2.8 × 1 0 − 14 ;而用均匀分布加权,得到的是一个完全不同的方向(那是 E L B O ( q = 均匀 ) \mathrm{ELBO}(q = \text{均匀}) ELBO ( q = 均匀 ) 的梯度)。
所以:后验算不出来,梯度就算不出来。 EM 的 M 步在当前点的梯度恰好等于 log p \log p log p 的梯度,因为 E 步刚把 q q q 设成了后验。
7.5 EM 什么时候用不了
EM 需要两件事:(1) E 步能算出后验;(2) M 步能(至少近似地)最大化。高斯混合、伯努利混合、隐马尔可夫模型都满足。VAE 两条都不满足:后验要”反转神经网络”,M 步没有闭式解。这时只能退一步:
用一个近似 的 q ( z ; ϕ ) q(z; \phi) q ( z ; ϕ ) 代替后验(变分推断,§6);
不再交替地”精确最大化”,而是对 θ \theta θ 和 ϕ \phi ϕ 一起做梯度上升(ELBO 对两者都可导,至少能用采样估计梯度)。
这就是第 6 讲的变分 EM / 随机变分推断 / VAE。代价是:ELBO 和 log p \log p log p 之间永远隔着一个 KL,模型 θ \theta θ 是按”下界”训练的。
8. 回顾(原课 slide 29)· Summary of the original lecture
隐变量模型的优点 :
缺点 :
似然难算;
难以直接用最大似然训练;
根本的困难在于后验推断 p ( z ∣ x ) p(z \mid x) p ( z ∣ 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 的”z z z 吸收复杂性、p ( x ∣ z ) p(x \mid z) p ( x ∣ 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 ) = ∑ z p ( z ) p ( x ∣ z ) p(x) = \sum_z p(z)p(x \mid z) p ( x ) = ∑ z p ( z ) p ( x ∣ z ) 的生成模型。读论文时要分清”混合”的这两种用法。
ELBO 无处不在。 第 16 讲会看到,扩散模型(DDPM)的训练目标正是一个很深的隐变量模型的 ELBO;本讲的 log p = ELBO + KL \log p = \text{ELBO} + \text{KL} log p = ELBO + KL 是理解它的钥匙。
10. 小结 · Summary
隐变量 z z z 建模数据里看不见的变化因素。z z z 选得好,p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 就简单(像素世界:知道配置后总相关从 10 bit 降到 0);z z z 太粗则不然(只知道形状,总相关反而升到 11.2 bit)。后验 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 给出特征;深度隐变量模型用 z ∼ N ( 0 , I ) z \sim \mathcal{N}(0, I) z ∼ N ( 0 , I ) 加神经网络解码器。
混合模型 是浅层隐变量模型:后验 = 软聚类。无监督学习是不适定的:最大似然只奖励拟合 p ( x ) p(x) p ( x ) ,像素世界的 4 个簇按位置 而不是形状划分(按形状分组的似然低 2.1 bit/图)。混合有表达力(8 个高斯描出双月牙),但成分太多会过拟合;似然非凸,EM 会停在局部最优。VAE 是”无穷多个高斯的混合”。
边际似然 log ∑ z p ( x , z ) \log \sum_z p(x, z) log ∑ z p ( x , z ) 难算:项数随隐变量个数指数增长,而后验只集中在约 1 个 z z z 上;梯度同样需要后验(Fisher 恒等式)。
朴素蒙特卡洛 无偏但几乎总是错(k = 10 k = 10 k = 10 时 87% 的估计小了 100 倍)。重要性采样 无偏,相对方差 = χ 2 ( p ( z ∣ x ) ∥ q ) / k = \chi^2(p(z \mid x) \Vert q)/k = χ 2 ( p ( z ∣ x ) ∥ q ) / k :q q q 越像后验越好,q q q = 后验时方差为 0;q q q 宁宽勿窄 (偏窄的 q q q 方差藏在看不到的尾部)。
log p ^ \log \hat{p} log p ^ 系统性地偏低(Jensen);k = 1 k = 1 k = 1 时 E [ log p ^ 1 ] \mathbb{E}[\log \hat{p}_1] E [ log p ^ 1 ] 就是 ELBO ,k k k 越大下界越紧(IWAE)。
ELBO = E q [ log p ( x , z ) ] + H ( q ) = E q [ log p ( x ∣ z ) ] − D K L ( 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)) = E q [ log p ( x , z )] + H ( q ) = E q [ log p ( x ∣ z )] − D KL ( q ∥ p ( z )) ;log p ( x ) = ELBO + D K L ( q ∥ p ( z ∣ x ) ) \log p(x) = \text{ELBO} + D_{\mathrm{KL}}(q \Vert p(z \mid x)) log p ( x ) = ELBO + D KL ( q ∥ p ( z ∣ x )) ,q q q = 后验时是紧的。
变分推断 在一族好处理的 q ( z ; ϕ ) q(z; \phi) q ( z ; ϕ ) 里最大化 ELBO = 最小化反向 KL :模式寻找、低估不确定性(双峰后验只盖住一个峰;因子化的 q q q 只选一种解释,而不是”后验边缘”)。
EM = ELBO 上的坐标上升:E 步令 q q q = 后验,M 步最大化期望的完整数据对数似然;对数似然单调不降,但只到局部最优;能精确处理缺失数据(前提是能边缘化)。后验算不出来时 EM 用不了——第 6 讲。
11. 常见误区 · Common pitfalls
“隐变量越细越好 / 越粗越好。” 太粗的 z z z (只知道形状)不能让 p ( x ∣ z ) p(x \mid z) p ( x ∣ z ) 变简单(§1.4);太细的 z z z (每张图一个 z z z )就是背训练集。好的 z z z 刚好吸收”全局的”结构。
“无监督学习会自动找到人关心的类别。” 最大似然只关心 p ( x ) p(x) p ( x ) 拟合得好不好;像素世界的 4 个簇按位置分,而且这是似然真心偏爱的解(§2.2)。
“成分越多,混合模型越好。” 有限数据下会过拟合(双月牙 K = 32 K = 32 K = 32 比 K = 16 K = 16 K = 16 差);而且成分多了,EM 更容易停在局部最优。
“无偏估计就是好估计。” 朴素蒙特卡洛无偏,可 k = 10 k = 10 k = 10 时绝大多数估计差了 100 倍以上(§4.1)。要看方差,而且要看”方差藏在哪里”。
“样本方差小,重要性采样估计就可靠。” 偏窄的 q q q 可以有极大的理论方差、极小的样本方差(§4.2 的锐化后验)。q q q 宁宽勿窄。
”log p ^ \log \hat{p} log p ^ 是 log p \log p log p 的无偏估计。” 它系统性地偏低;k = 1 k = 1 k = 1 时的期望就是 ELBO(§4.3)。报告”重要性采样估计的测试 log p \log p log p “时,要说明 k k k ,它是一个下界。
“ELBO 高,说明 q q q 很好地描述了后验的不确定性。” 反向 KL 模式寻找:ELBO 最大的高斯完全忽略了后验的一个峰(§6.1);因子化的 q q q 只选一种解释(§6.2)。
“后验边缘就是最好的因子化近似。” 它是前向 KL 的最优解;按 ELBO(反向 KL)它很差,因为它的样本是”半个方框”(§6.2)。
“EM 会找到最大似然解。” 只保证单调不降,到局部最优为止(§7.2:10 次里 6 次没找全 8 个团)。
“缺失的数据当作 0(或均值)填上就行。” 会让模型学到缺失机制的假象(§7.3:7.4 bit vs 边缘化的 3.7 bit)。
12. 练习 · Exercises
练习 1(混合的边缘与后验,手算)
第 2 讲代码 05 的混合:Z ∼ B e r n o u l l i ( 0.3 ) Z \sim \mathrm{Bernoulli}(0.3) Z ∼ Bernoulli ( 0.3 ) ,X ∣ Z = 0 ∼ N ( − 2 , 0.5 2 ) X \mid Z = 0 \sim \mathcal{N}(-2, 0.5^2) X ∣ Z = 0 ∼ N ( − 2 , 0. 5 2 ) ,X ∣ Z = 1 ∼ N ( 1.5 , 1 2 ) X \mid Z = 1 \sim \mathcal{N}(1.5, 1^2) X ∣ Z = 1 ∼ N ( 1.5 , 1 2 ) 。算 p ( x = 0 ) p(x = 0) p ( x = 0 ) 和 p ( Z = 1 ∣ x = 0 ) p(Z = 1 \mid x = 0) p ( Z = 1 ∣ x = 0 ) 。再算 x = − 1 x = -1 x = − 1 时的后验。为什么 x = 0 x = 0 x = 0 离两个均值的距离差不多(2 和 1.5),后验却几乎完全偏向 Z = 1 Z = 1 Z = 1 ?
参考答案
N ( 0 ; − 2 , 0.5 2 ) = 1 0.5 2 π 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 ; − 2 , 0. 5 2 ) = 0.5 2 π 1 e − 8 ≈ 2.68 × 1 0 − 4 ,N ( 0 ; 1.5 , 1 ) = 1 2 π e − 1.125 ≈ 0.1295 \mathcal{N}(0; 1.5, 1) = \frac{1}{\sqrt{2\pi}}e^{-1.125} \approx 0.1295 N ( 0 ; 1.5 , 1 ) = 2 π 1 e − 1.125 ≈ 0.1295 。p ( x = 0 ) = 0.7 × 2.68 × 10 − 4 + 0.3 × 0.1295 ≈ 1.87 × 10 − 4 + 0.03886 = 0.03904 p(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 ( x = 0 ) = 0.7 × 2.68 × 1 0 − 4 + 0.3 × 0.1295 ≈ 1.87 × 1 0 − 4 + 0.03886 = 0.03904 ;p ( Z = 1 ∣ x = 0 ) = 0.03886 / 0.03904 ≈ 0.995 p(Z = 1 \mid x = 0) = 0.03886/0.03904 \approx 0.995 p ( Z = 1 ∣ x = 0 ) = 0.03886/0.03904 ≈ 0.995 。x = − 1 x = -1 x = − 1 时:0.7 × N ( − 1 ; − 2 , 0.25 ) = 0.0756 0.7 \times \mathcal{N}(-1; -2, 0.25) = 0.0756 0.7 × N ( − 1 ; − 2 , 0.25 ) = 0.0756 ,0.3 × N ( − 1 ; 1.5 , 1 ) = 0.00526 0.3 \times \mathcal{N}(-1; 1.5, 1) = 0.00526 0.3 × N ( − 1 ; 1.5 , 1 ) = 0.00526 ,p ( Z = 1 ∣ x = − 1 ) ≈ 0.065 p(Z = 1 \mid x = -1) \approx 0.065 p ( Z = 1 ∣ x = − 1 ) ≈ 0.065 。距离要按各自的标准差 衡量:0 离 − 2 -2 − 2 是 4 个标准差(σ = 0.5 \sigma = 0.5 σ = 0.5 ),离 1.5 只有 1.5 个标准差。窄的成分”管辖”的范围小。
练习 2(高斯混合的 M 步)
固定责任 r n k r_{nk} r nk ,对 μ k \mu_k μ k 最大化 ∑ n ∑ k r n k log N ( x ( n ) ; μ k , Σ k ) \sum_n \sum_k r_{nk} \log \mathcal{N}(x^{(n)}; \mu_k, \Sigma_k) ∑ n ∑ k r nk log N ( x ( n ) ; μ k , Σ k ) ,证明 μ k = ∑ n r n k x ( n ) / N k \mu_k = \sum_n r_{nk}x^{(n)}/N_k μ k = ∑ n r nk x ( n ) / N k 。如果 r n k r_{nk} r nk 只取 0 或 1,这个更新是什么?
参考答案
和 μ k \mu_k μ k 有关的项是 − 1 2 ∑ n r n k ( 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) − 2 1 ∑ n r nk ( x ( n ) − μ k ) ⊤ Σ k − 1 ( x ( n ) − μ k ) ,对 μ k \mu_k μ k 求导:Σ k − 1 ∑ n r n k ( x ( n ) − μ k ) = 0 \Sigma_k^{-1}\sum_n r_{nk}(x^{(n)} - \mu_k) = 0 Σ k − 1 ∑ n r nk ( x ( n ) − μ k ) = 0 ,得 μ k = ∑ n r n k x ( n ) / ∑ n r n k \mu_k = \sum_n r_{nk}x^{(n)}/\sum_n r_{nk} μ k = ∑ n r nk x ( n ) / ∑ n r nk 。r n k ∈ { 0 , 1 } r_{nk} \in \{0, 1\} r nk ∈ { 0 , 1 } 时就是”属于第 k k k 簇的点的平均”——k-means 的更新。k-means 可以看成”硬 EM”:E 步用点质量(最可能的成分)代替后验(§5.5 的点质量 q q q ),并且所有协方差固定为同一个 σ 2 I \sigma^2 I σ 2 I 、σ → 0 \sigma \to 0 σ → 0 。
练习 3(重要性采样的无偏性与方差)
设 w = p ( x , z ) / q ( z ) w = p(x, z)/q(z) w = p ( x , z ) / q ( z ) ,z ∼ q z \sim q z ∼ q 。证明 E q [ w ] = p ( x ) \mathbb{E}_q[w] = p(x) E q [ w ] = p ( x ) ,以及 V a r q [ w / p ( x ) ] = ∑ z p ( z ∣ x ) 2 / q ( z ) − 1 \mathrm{Var}_q[w/p(x)] = \sum_z p(z \mid x)^2/q(z) - 1 Var q [ w / p ( x )] = ∑ z p ( z ∣ x ) 2 / q ( z ) − 1 。k k k 个独立样本的平均的相对方差是多少?什么时候方差为 0?
参考答案
E q [ w ] = ∑ z q ( z ) p ( x , z ) q ( z ) = p ( x ) \mathbb{E}_q[w] = \sum_z q(z)\frac{p(x, z)}{q(z)} = p(x) E q [ w ] = ∑ z q ( z ) q ( z ) p ( x , z ) = p ( x ) 。E q [ ( w / p ( x ) ) 2 ] = ∑ z q ( z ) p ( x , z ) 2 q ( z ) 2 p ( x ) 2 = ∑ z p ( z ∣ x ) 2 q ( 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)} E q [( w / p ( x ) ) 2 ] = ∑ z q ( z ) q ( z ) 2 p ( x ) 2 p ( x , z ) 2 = ∑ z q ( z ) p ( z ∣ x ) 2 ,减去均值的平方 1 即得方差。k k k 个独立样本平均,方差除以 k k k 。方差为 0 当且仅当 w w w 是常数,即 q ( z ) ∝ p ( x , z ) q(z) \propto p(x, z) q ( z ) ∝ p ( x , z ) ,q = p ( z ∣ x ) q = p(z \mid x) q = p ( z ∣ x ) 。
练习 4(两个 χ 2 \chi^2 χ 2 为什么相同)
证明:均匀提议 q u ( z ) = 1 / ∣ Z ∣ q_u(z) = 1/|\mathcal{Z}| q u ( z ) = 1/∣ Z ∣ 和锐化提议 q s ( z ) ∝ p ( z ∣ x ) 2 q_s(z) \propto p(z \mid x)^2 q s ( z ) ∝ p ( z ∣ x ) 2 的 χ 2 ( p ( z ∣ x ) ∥ q ) \chi^2(p(z \mid x) \Vert q) χ 2 ( p ( z ∣ x ) ∥ q ) 相等,都等于 ∣ Z ∣ ∑ z p ( z ∣ x ) 2 − 1 |\mathcal{Z}|\sum_z p(z \mid x)^2 - 1 ∣ Z ∣ ∑ z p ( z ∣ x ) 2 − 1 。两者的方差分别来自哪些 z z z ?为什么一个的样本方差很大、另一个很小?
参考答案
记 π z = p ( z ∣ x ) \pi_z = p(z \mid x) π z = p ( z ∣ x ) ,S = ∑ z π z 2 S = \sum_z \pi_z^2 S = ∑ z π z 2 。均匀:∑ z π z 2 / ( 1 / ∣ Z ∣ ) = ∣ Z ∣ S \sum_z \pi_z^2 / (1/|\mathcal{Z}|) = |\mathcal{Z}| S ∑ z π z 2 / ( 1/∣ Z ∣ ) = ∣ Z ∣ S 。锐化:q s ( z ) = π z 2 / S q_s(z) = \pi_z^2/S q s ( z ) = π z 2 / S ,∑ z π z 2 / q s ( z ) = ∑ z S = ∣ Z ∣ S \sum_z \pi_z^2/q_s(z) = \sum_z S = |\mathcal{Z}|S ∑ z π z 2 / q s ( z ) = ∑ z S = ∣ Z ∣ S 。相等。但每个 z z z 的贡献 π z 2 / q ( z ) \pi_z^2/q(z) π z 2 / q ( z ) 分布完全不同:均匀提议下贡献是 ∣ Z ∣ π z 2 |\mathcal{Z}|\pi_z^2 ∣ Z ∣ π z 2 ,集中在后验的峰上 ——峰只有 1 / 177 1/177 1/177 的概率被抽到,所以经常”抽不到”,样本里就能看到巨大的波动;锐化提议下每个 z z z 的贡献都是 S S S (相等),177 个里有 175 个是 q s q_s q s 几乎从不抽到的尾部 ,它们贡献了几乎全部方差,却几千万次才出现一次,所以有限样本里看不见。
练习 5(后验边缘 = 前向 KL 的最优因子化近似)
设 q ( z ) = ∏ i q i ( z i ) q(z) = \prod_i q_i(z_i) q ( z ) = ∏ i q i ( z i ) 是因子化的。证明在所有因子化分布里,D K L ( p ∥ q ) D_{\mathrm{KL}}(p \Vert q) D KL ( p ∥ q ) 的最小值在 q i ( z i ) = p ( z i ) q_i(z_i) = p(z_i) q i ( z i ) = p ( z i ) (p p p 的边缘分布)处取到。由此解释 §6.2 里”后验边缘”那一行为什么 ELBO 不好。
参考答案
D ( p ∥ q ) = − H ( p ) − ∑ z p ( z ) ∑ i log q i ( z i ) = − H ( p ) − ∑ i ∑ z i p ( z i ) log q i ( z i ) 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) D ( p ∥ q ) = − H ( p ) − ∑ z p ( z ) ∑ i log q i ( z i ) = − H ( p ) − ∑ i ∑ z i p ( z i ) log q i ( z i ) 。每一项 − ∑ z i p ( z i ) log q i ( z i ) -\sum_{z_i}p(z_i)\log q_i(z_i) − ∑ z i p ( z i ) log q i ( z i ) 是 p i p_i p i 到 q i q_i q i 的交叉熵,在 q i = p i q_i = p_i q i = p i 时最小(第 4 讲:交叉熵 = 熵 + KL)。前向 KL 要求 q q q “覆盖” p p p 的所有可能,于是每个像素独立地取它的边缘概率;但 ELBO 对应的是反向 KL,它惩罚 q q q 把质量放在 p p p 为 0 的地方——因子化的边缘分布恰恰会生成大量”半个方框”这种 p ≈ 0 p \approx 0 p ≈ 0 的组合。
练习 6(CAVI 的更新公式)
设 q ( z ) = ∏ i ϕ i z i ( 1 − ϕ i ) 1 − z i q(z) = \prod_i \phi_i^{z_i}(1 - \phi_i)^{1 - z_i} q ( z ) = ∏ i ϕ i z i ( 1 − ϕ i ) 1 − z i 。固定 ϕ − i \phi_{-i} ϕ − i ,把 ELBO 写成 ϕ i \phi_i ϕ i 的函数,证明最优的 ϕ i \phi_i ϕ i 满足 l o g i t ϕ i = A 1 − A 0 \mathrm{logit}\,\phi_i = A_1 - A_0 logit ϕ i = A 1 − A 0 ,其中 A b = E q − i [ log p ( z i = b , z − i , x ) ] A_b = \mathbb{E}_{q_{-i}}[\log p(z_i = b, z_{-i}, x)] A b = E q − i [ log p ( z i = b , z − i , x )] 。
参考答案
E q [ log p ( z , x ) ] = ϕ i A 1 + ( 1 − ϕ i ) A 0 \mathbb{E}_q[\log p(z, x)] = \phi_i A_1 + (1 - \phi_i)A_0 E q [ log p ( z , x )] = ϕ i A 1 + ( 1 − ϕ i ) A 0 ;H ( q ) = h ( ϕ i ) + ( 和 ϕ i 无关的项 ) H(q) = h(\phi_i) + (\text{和 } \phi_i \text{ 无关的项}) H ( q ) = h ( ϕ i ) + ( 和 ϕ i 无关的项 ) ,h ( ϕ ) = − ϕ log ϕ − ( 1 − ϕ ) log ( 1 − ϕ ) h(\phi) = -\phi\log\phi - (1-\phi)\log(1-\phi) h ( ϕ ) = − ϕ log ϕ − ( 1 − ϕ ) log ( 1 − ϕ ) 。对 ϕ i \phi_i ϕ i 求导:A 1 − A 0 + log 1 − ϕ i ϕ i = 0 A_1 - A_0 + \log\frac{1 - \phi_i}{\phi_i} = 0 A 1 − A 0 + log ϕ i 1 − ϕ i = 0 ,即 log ϕ i 1 − ϕ i = A 1 − A 0 \log\frac{\phi_i}{1 - \phi_i} = A_1 - A_0 log 1 − ϕ i ϕ i = A 1 − A 0 。二阶导 − 1 ϕ i ( 1 − ϕ i ) < 0 -\frac{1}{\phi_i(1 - \phi_i)} < 0 − ϕ i ( 1 − ϕ i ) 1 < 0 ,所以这是最大值。每一步更新一个坐标、取它的精确最优,ELBO 不会下降(坐标上升);但 ELBO 对 ϕ \phi ϕ 整体不是凹的,可能有多个局部最优(§6.2 从”方框”出发停在了另一个峰)。
练习 7(Fisher 恒等式)
证明 ∇ θ log p ( x ; θ ) = E p ( 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)] ∇ θ log p ( x ; θ ) = E p ( z ∣ x ; θ ) [ ∇ θ log p ( x , z ; θ )] 。再证明:对任意 q q q (不依赖 θ \theta θ ),∇ θ L ( q , θ ) = E q [ ∇ θ log p ( x , z ; θ ) ] \nabla_\theta \mathcal{L}(q, \theta) = \mathbb{E}_q[\nabla_\theta \log p(x, z; \theta)] ∇ θ L ( q , θ ) = E q [ ∇ θ log p ( x , z ; θ )] 。两者什么时候相等?
参考答案
第一式见 §7.4。第二式:L ( q , θ ) = E q [ log p ( x , z ; θ ) ] + H ( q ) \mathcal{L}(q, \theta) = \mathbb{E}_q[\log p(x, z; \theta)] + H(q) L ( q , θ ) = E q [ log p ( x , z ; θ )] + H ( q ) ,H ( q ) H(q) H ( q ) 不依赖 θ \theta θ ,求导即得。两者在 q = p ( z ∣ x ; θ ) q = p(z \mid x; \theta) q = p ( z ∣ x ; θ ) 时相等——这说明在 E 步之后,ELBO 和对数似然在当前点不仅值相等,梯度也相等 (下界和真实函数在这一点”相切”)。
练习 8(IWAE 下界随 k k k 单调)
记 L k = E [ log 1 k ∑ j = 1 k w j ] \mathcal{L}_k = \mathbb{E}[\log \frac{1}{k}\sum_{j=1}^k w_j] L k = E [ log k 1 ∑ j = 1 k w j ] ,w j w_j w j 独立同分布。(a) 证明 L k ≤ log p ( x ) \mathcal{L}_k \leq \log p(x) L k ≤ log p ( x ) ,且 L 1 = ELBO \mathcal{L}_1 = \text{ELBO} L 1 = ELBO 。(b) 证明 L k ≤ L k + 1 \mathcal{L}_k \leq \mathcal{L}_{k+1} L k ≤ L k + 1 。提示:1 k + 1 ∑ j = 1 k + 1 w j \frac{1}{k+1}\sum_{j=1}^{k+1} w_j k + 1 1 ∑ j = 1 k + 1 w j 等于”随机去掉一个样本后剩下 k k k 个的平均”的平均。
参考答案
(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) E [ log w ˉ ] ≤ log E [ w ˉ ] = log p ( x ) ;k = 1 k = 1 k = 1 时 E q [ log w ] = E q [ log p ( x , z ) − log q ( z ) ] \mathbb{E}_q[\log w] = \mathbb{E}_q[\log p(x, z) - \log q(z)] E q [ log w ] = E q [ log p ( x , z ) − log q ( z )] 。(b) 设 I I I 是从 { 1 , … , k + 1 } \{1, \dots, k+1\} { 1 , … , k + 1 } 里均匀抽出的 k k k 元子集,则 1 k + 1 ∑ j = 1 k + 1 w j = E I [ 1 k ∑ j ∈ I w j ] \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] k + 1 1 ∑ j = 1 k + 1 w j = E I [ k 1 ∑ j ∈ I w j ] 。于是 log 1 k + 1 ∑ w j = log E I [ ⋅ ] ≥ E I [ log 1 k ∑ j ∈ I w j ] \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] log k + 1 1 ∑ w j = log E I [ ⋅ ] ≥ E I [ log k 1 ∑ j ∈ I w j ] (Jensen),两边再对 w w w 取期望,右边每个子集的期望都是 L k \mathcal{L}_k 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 次,原型 μ k i \mu_{ki} μ k i 还估得出来;但每张图的责任 r n k r_{nk} r nk 变得很模糊(6 个像素很难判断它属于哪个原型),原型之间会变得相似、模糊,测试误差明显上升,但应该仍远好于”缺失当 0”。“缺失当 0”会让模型以为世界几乎全白,误差进一步恶化。具体数字以你的运行为准。
练习 10(动手:数据多了,还过拟合吗?)
在 01_latent_variables.py 第 3 部分 (a),把训练点从 2,000 改成 20,000(dist.sample(2000, g))。K = 32 K = 32 K = 32 还会比 K = 16 K = 16 K = 16 差吗?训练集上的 KL 还会是负的吗?
参考答案(预测的思路)
数据多 10 倍,估计 191 个参数的方差大幅减小:训练集 KL 和测试 KL 会靠得更近,K = 32 K = 32 K = 32 很可能不再比 K = 16 K = 16 K = 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(L k \mathcal{L}_k L k 下界)
Owen, Monte Carlo theory, methods and examples (2013),第 9 章(重要性采样、χ 2 \chi^2 χ 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 用不了:
在整个数据集上 最大化 ∑ i L ( x ( i ) ; θ , ϕ ( i ) ) \sum_i \mathcal{L}(x^{(i)}; \theta, \phi^{(i)}) ∑ i L ( x ( i ) ; θ , ϕ ( i ) ) :每个数据点有自己的变分参数,随机变分推断 (SVI)用内外两层的随机梯度来优化;
对 ϕ \phi ϕ 求梯度 的困难:期望本身依赖 ϕ \phi ϕ 。REINFORCE 通用但方差大;重参数化技巧 z = μ + σ ϵ z = \mu + \sigma\epsilon z = μ + σ ϵ 把随机性”挪出去”,方差小得多;
摊销推断 :不再为每个数据点单独优化 ϕ ( i ) \phi^{(i)} ϕ ( i ) ,而是训练一个编码器 q ϕ ( z ∣ x ) q_\phi(z \mid x) q ϕ ( z ∣ x ) ,“学会怎样做推断”;
§5.6 的写法 E q [ log p ( x ∣ z ) ] − D K L ( q ∥ p ( z ) ) \mathbb{E}_q[\log p(x \mid z)] - D_{\mathrm{KL}}(q \Vert p(z)) E q [ log p ( x ∣ z )] − D KL ( q ∥ p ( z )) 变成自编码器 :编码、解码、重构,加上”编码要像先验”的正则——这就是变分自编码器(VAE) 。
我们会在像素世界上训练 VAE,并把它的 ELBO、IWAE 下界和像素世界真实的 log p ( x ) \log p(x) log p ( x ) 放在一起比较。