Lecture 15 · 生成模型的评估 · Evaluation of Generative Models

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

课程源码 ZIP ↓

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

本篇目录

对应 Maps to:Stanford CS236 Deep Generative Models(Fall 2023,Stefano Ermon),Lecture 15 · 2023-11-15 · Evaluation of Generative Models(slides:lecture15.pdf)。 依据说明:本讲按原课 slides 的顺序展开:期中小结(模型家族与训练目标)→ 评价为什么难、取决于用途 → 密度估计与压缩:测试集似然、bits/dim、香农编码 → 似然算不出来时:核密度估计及其在高维的失败、隐变量模型的重要性采样与退火重要性采样 → 样本质量:人工评价(HYPE)、Inception Score、FID、KID、文生图的评价(HEIM)→ 表示的评价:聚类(同质性 / 完整性 / V-measure)、有损压缩与重构、解耦(β-VAE 指标、MIG),以及 Locatello et al. 的不可能性结果 → 用提示来评价(HELM)→ 小结。一个真正能编码 / 解码的算术编码器、Parzen 估计在似然精确已知的模型上的排名、d_z = 2 的 VAE 上各种似然估计量与精确值的对照(以及编码器提议漏掉后验的诊断)、12 种”有毛病的样本来源”在各个样本指标上的表现、FID 的样本数偏差、在 VAE 隐空间里旋转 45° 的实验是本讲义补充的。像素世界的真实分布精确已知,所以这里可以做在真实数据上做不到的事:拿每一把”尺子”去量一个答案已知的东西。 配套代码 Code:code/lecture15/(PyTorch;5 个演示脚本,不训练新的生成模型——评价的都是第 1、3、6 讲缓存的模型;最长的约 75 秒) 预计阅读时间:3 小时(含运行代码)


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

0.1 学习目标 Learning goals

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

  1. 把前 14 讲的模型家族放在一张表里:各自怎样表示 pθp_\theta、用什么目标训练、能不能算似然、采样快不快。
  2. 解释测试集似然 = 压缩:交叉熵 = 熵 + KL;bits/dim 的含义;为什么必须用测试集。
  3. 说出核密度估计的做法和它在高维失败的原因;知道 Parzen 估计为什么不能可靠地评价、甚至给模型排序。
  4. 用重要性采样和退火重要性采样估计隐变量模型的似然;知道它们为什么是随机下界,提议分布必须满足什么条件。
  5. 定义 Inception Score、FID、KID、precision / recall,说出每一个能发现什么问题、会被什么骗过。
  6. 说出评价表示的三类方法(聚类、重构、解耦),以及”解耦”为什么在没有归纳偏置时不可识别。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲只点到为止 Previewed only
第 4 讲:KL 散度、最大似然、过拟合大语言模型的评测基准(HELM 等),本讲只介绍思路
第 5–6 讲:ELBO、IWAE、β-VAE文生图模型的人工评价细节
第 9 讲:似然与样本质量可以背离(噪声混合、背诵)第 16 讲:扩散模型的似然(概率流 ODE,第 14 讲 §5.4)
第 3 讲:自回归模型的条件概率

0.3 本讲地图 Map

§1  期中小结:模型家族与训练目标
§2  密度估计与压缩:测试集似然 = 码长                                ← 代码 01
§3  似然算不出来时:核密度估计;隐变量模型的重要性采样与 AIS             ← 代码 02、03
§4  样本质量:人工评价、IS、FID、KID、precision / recall;文生图          ← 代码 04
§5  表示的质量:聚类、重构、解耦;用提示来评价                          ← 代码 05
§6  小结:哪把尺子能发现哪种毛病
§7  2023 年之后
§8–12  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 记号 Notation

符号含义
bits/图、bits/dim平均的 −log⁡2pθ(x)-\log_2 p_\theta(x),按整张图或每个维度(像素)计;像素世界 d=64d = 64
H(pdata)H(p_{\text{data}})真实分布的熵:任何模型的测试 bits 的下限(像素世界约 25.5 bits/图)
KhK_h带宽为 hh 的核(高斯核,或 0/1 数据上的乘积伯努利核)
c(y∣x)c(y \mid x)评价用的分类器(Inception 网络)给出的类别概率;c(y)=Exc(y∣x)c(y) = \mathbb{E}_x c(y \mid x)
ϕ(x)\phi(x)评价用的特征(Inception 网络的倒数第二层)
μr,Σr\mu_r, \Sigma_r / μg,Σg\mu_g, \Sigma_g真实 / 生成样本特征的均值与协方差
MIG互信息差(mutual information gap),一种解耦指标

0.5 关于数字 · About the numbers

像素世界(第 1 讲):8×8 的 0/1 小图,形状 + 位置 + 5% 翻转噪声,log⁡pdata(x)\log p_{\text{data}}(x)、后验、熵都能精确计算。测试集是第 3 讲 pixel_data() 的 5,000 张图。评价的模型全部来自前几讲的缓存(第 3 讲的自回归模型、第 6 讲的 VAE、第 1 讲的基线)。样本指标用的”Inception 网络”是代码 04 自己训练的形状分类器。所有数字来自固定种子的单次运行;和预想不同的结果记录在 代码 README 的”关于实验结果”里。


1. 期中小结 · Mid-quarter summary

slides 开头把到目前为止的模型放在一起:

家族怎样表示 pθp_\theta训练目标精确似然?采样
自回归(第 3 讲)链式法则,每个条件一个网络最大似然是慢(逐个维度)
VAE(第 5–6 讲)隐变量 + 解码器ELBO(似然的下界)否(可估计,§3.3)快
归一化流(第 7–8 讲)可逆变换 + 变量替换最大似然是快
GAN(第 9–10 讲)生成器(隐式)两样本检验 / ff-散度 / Wasserstein否(没有密度)快
能量模型(第 11–12 讲)efθ/Ze^{f_\theta}/Z对比散度 / 得分匹配 / NCE否(ZZ 未知)慢(MCMC)
得分模型(第 13–14 讲)得分 sθ(x,t)s_\theta(x, t)加权去噪得分匹配是(概率流 ODE)较慢(多步)

训练目标对应不同的”距离”:KL(最大似然)、JS 与 ff-散度、Wasserstein、Fisher 散度……每个家族在”表示—学习—推断”上各有取舍。于是一个自然的问题:不同家族的模型怎样比较?同一个家族里,哪个模型更好?

评价为什么难。 slides 的回答:取决于你想拿模型做什么——

  • 密度估计 / 压缩:要的是 pθ(x)p_\theta(x) 准(§2–§3);
  • 生成:要的是样本好看、多样(§4);
  • 表示学习:要的是隐变量有用(§5);
  • 下游任务(分类、补全、编辑……):直接在任务上评价。

没有一把尺子能同时衡量所有这些——第 9 讲已经看到,似然和样本质量可以完全背离(噪声混合模型似然几乎最优、样本全是噪声;背诵训练集的模型样本完美、似然 −∞)。


2. 密度估计与压缩 · Density estimation or compression

2.1 测试集似然

slides:如果用途是密度估计,似然本身就是一个很好的指标。做法和监督学习一样:数据分成训练 / 验证 / 测试集;在训练集上训练,在验证集上调超参数,最后报告测试集上的平均对数似然 1∣Dtest∣∑x∈Dtestlog⁡pθ(x)\frac{1}{|\mathcal{D}_{\text{test}}|}\sum_{x \in \mathcal{D}_{\text{test}}}\log p_\theta(x)。图像模型常报告 bits/dim:−log⁡2pθ(x)-\log_2 p_\theta(x) 除以维数(像素数 × 通道数)。

为什么必须是测试集。 第 4 讲的过拟合:训练集似然会奖励背诵。代码 01 的查表模型(第 1 讲:见过的图按频率给概率,剩下 1% 的概率均匀分给所有 2642^{64} 张图)在训练集上只要 13.2 bits/图——远低于真实分布的熵 25.6,因为它把训练集背了下来;在测试集上却要 68 bits/图,比不压缩(64 bit)还多。

2.2 为什么似然 = 压缩

香农的信源编码定理:给每个 xx 分配 ⌈−log⁡2p(x)⌉\lceil -\log_2 p(x)\rceil 个比特的码字,平均码长接近熵 H(p)H(p),而任何无损编码的平均码长都不低于 H(p)H(p)。用模型 pθp_\theta 当编码器、给真实数据编码,平均码长是交叉熵:

Epdata[−log⁡2pθ(x)]=H(pdata)+DKL(pdata∥pθ).\mathbb{E}_{p_{\text{data}}}\left[-\log_2 p_\theta(x)\right] = H(p_{\text{data}}) + D_{\mathrm{KL}}(p_{\text{data}} \Vert p_\theta).

所以”测试 bits 越低” ⇔ “压缩得越好” ⇔ “KL 越小、离真实分布越近”。像素世界知道 H(pdata)H(p_{\text{data}}),于是可以直接读出每个模型的 KL(代码 01 第 1 部分):

模型怎么算的测试 bits/图bits/dim比真实分布多(= KL)
真实分布精确25.520.39870
GRU / PixelCNN / RNN自回归:精确26.35 / 26.36 / 26.430.4116 / 0.4118 / 0.4130+0.83 / +0.84 / +0.91
Transformer自回归:精确27.080.4231+1.56
VAE(dz=8d_z = 8)重要性采样,k = 100027.710.4329+2.19
MADE / NADE自回归:精确29.23 / 29.410.4568 / 0.4595+3.71 / +3.89
VAE(dz=2d_z = 2)网格积分:精确29.340.4584+3.82
FVSBN自回归:精确30.170.4714+4.65
独立伯努利精确35.500.5548+9.98
查表(背诵训练集)精确67.791.0592+42.27

没有任何模型低于真实熵——香农的下限。最好的几个模型每个像素只多约 0.01 bit。注意”怎么算的”一列:VAE 的似然只能估计(§3.3),用重要性采样得到的是 log⁡p\log p 的一个下界的估计(bits 的上界),报告时要写明估计量和样本数。

2.3 实验:一个真正的算术编码器(代码 01 第 2 部分)

“似然 = 压缩”不只是一个比喻。算术编码(arithmetic coding)把这件事变成了可以运行的程序:维护一个区间 [low,high)[low, high),每编码一个符号,就按它的条件概率 pθ(xi∣x<i)p_\theta(x_i \mid x_{<i}) 把区间切开、保留对应的那一段;概率为 pp 的符号让区间缩小 pp 倍,编完后区间长度 ≈ ∏ipi\prod_ip_i,指明区间里的一个点需要 ∑i−log⁡2pi\sum_i -\log_2p_i 个比特。自回归模型恰好给出每个像素的条件概率。

代码 01 实现了一个 32 位整数的二元算术编码器(Witten, Neal & Cleary 1987),用模型把 200 张测试图压成一个比特流,再解码回来:

编码方法模型的 −log⁡2pθ-\log_2 p_\theta(平均)实际码长 bits/图比特流总长 − ∑−log⁡2pθ\sum -\log_2p_\theta解码一致?
不压缩—64.00——
zlib(level 9)—39.00——
bz2 / lzma—44.12 / 43.36——
FVSBN + 算术编码30.2730.27+1.3是
MADE + 算术编码29.3629.36+0.9是
PixelCNN + 算术编码26.6726.67+0.5是

(这 200 张图在真实分布下的平均 −log⁡2p-\log_2 p 是 25.67 bits。)12,800 个像素的整个比特流只比理想码长多 0.5–1.3 个比特。模型越好,压缩得越好;通用压缩器不知道”图里有线条和方框”,远不如一个学到了数据分布的生成模型。一个实现细节:编码和解码必须算出逐位相同的概率,否则解码会出错——代码按”像素优先”的顺序编码,让解码时每一步对整批图的前向计算和编码时完全相同。

这也是”压缩 = 智能”(Hutter 奖)这个说法的出发点:能把数据压得越短,说明越理解它的规律。

2.4 似然的局限

slides 也提醒:似然好不等于样本好(第 9 讲 §1 的噪声混合:似然只差 log⁡2100≈6.6\log_2 100 \approx 6.6 bits,样本 99% 是噪声),样本好也不等于似然好(背诵)。Theis, van den Oord & Bethge(2016)还指出:在高维图像上,似然主要由”难以察觉的细节”(噪声、纹理的精确值)决定,不是所有比特都同样重要——人眼在意的语义内容只占码长的一小部分。所以似然最适合的用途是压缩和密度估计本身。


3. 似然算不出来时 · When the likelihood is not available

3.1 核密度估计(Parzen 窗口)

GAN 只给样本,能量模型的 ZZ 未知。slides 的第一个办法:用模型的样本 S={x(1),…,x(n)}\mathcal{S} = \{x^{(1)}, \dots, x^{(n)}\} 拼出一个密度

p^(x)=1n∑i=1nKh(x−x(i)),Kh(u)=1(2πh2)d/2e−∥u∥2/2h2.\hat p(x) = \frac1n\sum_{i=1}^nK_h(x - x^{(i)}), \qquad K_h(u) = \frac{1}{(2\pi h^2)^{d/2}}e^{-\Vert u\Vert^2/2h^2}.

直觉。 直方图把每个样本”堆”在它所在的格子里,结果依赖格子的位置、而且不光滑;核密度估计在每个样本上放一个光滑的小”土堆”(核),再把所有土堆加起来。带宽 hh 是唯一的超参数:太小,p^\hat p 是一堆尖峰,没见过的点概率接近 0;太大,所有细节被抹平。slides:用交叉验证选 hh(在验证集上最大化似然)。

二维里它工作得很好(代码 02 第 1 部分,两个高斯,1,000 个样本):

带宽 hh0.010.030.10.20.30.51.0
验证集平均 log⁡p^\log\hat p−16.96−2.80−1.59−1.56−1.61−1.85−2.63
测试集平均 log⁡p^\log\hat p−17.88−2.89−1.59−1.54−1.60−1.84−2.63

验证集选出 h=0.2h = 0.2,测试集 −1.544,真实值 −1.513。

3.2 高维里靠不住

slides:“KDE is unreliable in high dimensions”。代码 02 第 2 部分:数据是标准正态 N(0,Id)\mathcal{N}(0, I_d)(真实的每维熵 12log⁡(2πe)=1.4189\frac12\log(2\pi e) = 1.4189 nat),同样 1 万个样本,带宽用验证集选:

维数 dd125102050
选出的带宽0.1580.2510.3980.6310.7941.000
每维比真值多(nat)−0.006−0.001+0.017+0.022+0.070+0.124

维数越高,离真值越远,带宽也被迫越来越大——高维空间太空了,测试点附近几乎没有样本,只能用一个很宽的核去够最近的那几个(第 11 讲的维数灾难)。d=50d = 50 时每维多 0.12 nat,整个样本多 6 nat。增加样本也只能缓慢地改善:d=10d = 10 时 nn = 100、1,000、1 万、10 万,误差 0.113 → 0.065 → 0.039 → 0.022,每涨 10 倍误差约减半,和理论速度 n−4/(d+4)n^{-4/(d+4)} 一致;维数越高越慢。

用 Parzen 估计评价模型(Theis et al. 2016 的复现)。 早期 GAN 论文用”Parzen 对数似然”报告结果。代码 02 第 3 部分在像素世界上做同样的事:每个模型取 1 万个样本当核中心(0/1 数据用”翻转概率 λ\lambda“的乘积伯努利核,λ\lambda 用验证集选),估计测试 bits,和精确的测试 bits 比较:

模型真实的测试 bits真实排名Parzen 估计Parzen 排名
真实分布25.56128.341
背诵训练集(训练集的经验分布)∞828.352
形状比例错误的像素世界26.05229.163
PixelCNN26.41329.234
翻转概率 12% 的像素世界28.21435.757
VAE dz=2d_z = 229.36532.935
FVSBN30.25634.036
独立伯努利35.54738.598
  • 即使对真实分布本身,估计也高了约 3 bit。
  • 背诵训练集的真实测试似然是 −∞(测试图几乎都没在训练集里出现过),Parzen 却把它排第 2:它只看样本像不像数据,看不出背诵。
  • 带噪的模型被严重低估(第 4 → 第 7):每个核离测试图都远一点,在 64 维里被指数放大;而 PixelCNN 和”形状比例错误”的世界真实差 0.36 bit,Parzen 只差 0.07 bit。

结论和 Theis et al. 一致:Parzen 估计既不是似然的好近似,也不能可靠地给模型排序。

3.3 隐变量模型:重要性采样与 AIS

VAE 的 pθ(x)=∫p(z)pθ(x∣z)dzp_\theta(x) = \int p(z)p_\theta(x \mid z)dz 算不出来,但可以估计。slides:

  • 重要性采样:p^(x)=1k∑jp(zj)pθ(x∣zj)q(zj)\hat p(x) = \frac1k\sum_j\frac{p(z_j)p_\theta(x \mid z_j)}{q(z_j)},zj∼qz_j \sim q。p^\hat p 是 pθ(x)p_\theta(x) 的无偏估计,但 log⁡p^\log\hat p 的期望 ≤ log⁡pθ(x)\log p_\theta(x)(Jensen)——一个随机下界,kk 越大越紧(第 5 讲的 IWAE 下界)。提议 qq 可以是先验 p(z)p(z) 或编码器 qϕ(z∣x)q_\phi(z \mid x)。
  • 退火重要性采样(AIS,Neal 2001):定义一串中间分布 πβ(z)∝p(z)pθ(x∣z)β\pi_\beta(z) \propto p(z)p_\theta(x \mid z)^\beta,β\beta 从 0(先验)走到 1(未归一化的后验)。每条链从先验出发,每一步先累加权重 (βk−βk−1)log⁡pθ(x∣z)(\beta_k - \beta_{k-1})\log p_\theta(x \mid z),再用一步 MCMC 让 zz 适应新的 πβk\pi_{\beta_k}。它不要求一个提议一步就盖住后验,而是让样本一点点走过去。Wu et al.(2017)用它评价 GAN 和 VAE 的似然。

实验(代码 03)。 第 6 讲 dz=2d_z = 2 的 VAE 可以在隐空间网格上精确积分,所以每个估计量的误差都能精确量出来(300 张测试图,精确的平均 log⁡pθ=−20.468\log p_\theta = -20.468 nat):

样本数 kk先验提议:平均误差最大 ∣\lvert误差∣\rvert编码器提议:平均误差最大 ∣\lvert误差∣\rvert
1−13.50549.4−1.04321.2
10−4.37923.8−0.35117.6
100−0.89916.5−0.19516.6
1,000−0.0282.5−0.1158.6
10,000+0.0000.67−0.0835.8
AIS 退火步数 KK(16 条链)101001,000
平均误差 / 最大 ∣\lvert误差∣\rvert−1.770 / 18.2−0.178 / 4.7−0.009 / 0.57
  • 误差都是负的:随机下界。
  • kk 小时编码器提议好得多(k=10k = 10:−0.35 vs −4.38):后验只占先验的一小块。
  • 但 k=1k = 1 万时先验提议反而精确,编码器提议还差 0.08、个别图差 5.8 nat。 原因:对误差最大的 5 张图,精确后验有 91%–99.9% 的质量落在编码器高斯的 3σ 椭圆以外(全部图的中位数只有 5%)——编码器把高斯放错了地方(第 6 讲的摊销误差),提议漏掉了后验的主要部分,kk 再大也补不回来;先验虽然低效,但它盖住了一切,二维隐空间里 1 万个样本足够暴力覆盖。重要性采样的铁律:提议必须盖住目标,否则估计有偏而且不自知。
  • AIS 只用先验和解码器,K=1,000K = 1{,}000(每张图约 1.6 万次解码)时平均误差 −0.009、最大 0.57,比同样计算量的编码器提议可靠。

dz=8d_z = 8 的 VAE 没有精确值,几种估计量的平均 log⁡p^\log\hat p:先验提议(k=104k = 10^4)−19.269、编码器提议(k=104k = 10^4)−19.326、AIS(K=1000K = 1000)−19.319、ELBO −20.430。都是下界,最大的最接近真值。原以为维数一高先验提议会失败,但这个 VAE 只有 4 维活跃(其余后验坍塌),有效隐空间只有 4 维。ELBO 比最好的估计低 1.1 nat。报告”测试似然”时要写清楚估计量和样本数——它们可以差好几个 nat。


4. 样本质量 · Sample quality

4.1 人工评价

最终的裁判是人。slides 介绍了 HYPE(Human eYe Perceptual Evaluation,Zhou et al. 2019):让众包标注者在限定时间内判断一张图是真是假。HYPEtime_{\text{time}} 测”人需要看多久才分得出”,HYPE∞_\infty 测”时间不限时被骗的比例”。人工评价贵、慢、难以复现,而且标注者看不出多样性(每次只看一张)和背诵(他们没见过训练集)。所以需要自动的指标。

4.2 Inception Score

Salimans et al.(2016)。用一个在 ImageNet 上训练的分类器(Inception 网络)给每个样本一个类别分布 c(y∣x)c(y \mid x)。好的样本应该:

  • 清晰(sharpness):每个样本”明确像某一类”,c(y∣x)c(y \mid x) 的熵低;
  • 多样(diversity):所有类别都出现,c(y)=Exc(y∣x)c(y) = \mathbb{E}_x c(y \mid x) 的熵高。

slides 的写法:S=exp⁡(Ex[∑yc(y∣x)log⁡c(y∣x)])S = \exp(\mathbb{E}_x[\sum_yc(y \mid x)\log c(y \mid x)]),D=exp⁡(−Ex[∑yc(y∣x)log⁡c(y)])D = \exp(-\mathbb{E}_x[\sum_yc(y \mid x)\log c(y)]),IS=D×S=exp⁡(ExDKL(c(y∣x)∥c(y)))\mathrm{IS} = D \times S = \exp\left(\mathbb{E}_x D_{\mathrm{KL}}(c(y \mid x) \Vert c(y))\right)。越高越好,上限是类别数。缺点:不和真实数据比较;只看”像哪一类”,看不见类内的多样性;依赖一个特定的分类器。

4.3 FID

Heusel et al.(2017)。取 Inception 网络倒数第二层的特征 ϕ(x)\phi(x),对真实样本和生成样本的特征各拟合一个高斯,算两个高斯之间的 Fréchet 距离(2-Wasserstein 距离的平方):

FID=∥μr−μg∥2+tr(Σr+Σg−2(Σr1/2ΣgΣr1/2)1/2).\mathrm{FID} = \Vert\mu_r - \mu_g\Vert^2 + \mathrm{tr}\left(\Sigma_r + \Sigma_g - 2(\Sigma_r^{1/2}\Sigma_g\Sigma_r^{1/2})^{1/2}\right).

越低越好。它和真实数据比较、对多样性敏感,成了图像生成的标准指标。缺点:只比较前两阶矩;样本有限时有正的偏差(§4.6);依赖特征网络。

4.4 KID

Bińkowski et al.(2018)。在特征空间里算 MMD²(第 9 讲的两样本检验统计量),用多项式核 k(a,b)=(a⊤b/d+1)3k(a, b) = (a^\top b/d + 1)^3。它有一个无偏估计(同组的两项去掉对角线),而 FID 没有。slides:“unbiased, but more expensive”(O(n2)O(n^2))。

4.5 Precision 与 recall

FID 把”保真度”和”多样性”混在一个数里。Sajjadi et al.(2018)、Kynkäänniemi et al.(2019)把它们拆开:在特征空间里,用每个真实样本到第 kk 个近邻的距离画一个球,所有球的并就是”真实数据的流形”;precision = 生成样本落在真实流形里的比例(每个样本像不像数据),recall = 真实样本落在生成流形里的比例(数据被覆盖了多少)。

4.6 实验:哪把尺子发现了哪种毛病(代码 04)

像素世界没有 Inception 网络,代码 04 自己训练了一个形状分类器(64 → 256 → 64 → 4),用它的 softmax 算 IS、用它的 64 维倒数第二层算 FID、KID、precision / recall。12 种样本来源,每种 5,000 个:

样本来源IS ↑FID ↓KID×10³ ↓precisionrecall平均 log⁡2pdata\log_2 p_{\text{data}}和训练图相同
真实分布(新样本)3.4700.009−1.080.9240.919−25.564.5%
背诵训练集3.4750.0090.860.9260.923−25.53100%
丢掉两种形状2.1446.146534.60.9300.697−25.615.1%
类内坍塌(每种形状一个位置)3.6232.296202.90.9070.223−25.714.7%
干净的模板(无噪声)3.8841.16178.11.0000.040−12.1890.5%
翻转概率 15%2.5373.015434.70.7710.906−51.200%
PixelCNN3.1500.2298.60.9040.928−28.723.4%
VAE dz=8d_z = 82.8290.47225.10.9010.919−31.741.2%
FVSBN2.6001.03034.60.8580.928−34.910.3%
VAE dz=2d_z = 22.5071.20058.80.8970.889−33.450.7%
独立伯努利1.9599.087814.00.9040.771−42.130%

(IS 的上限:真实的形状比例下约 3.92。“和训练图相同”对真实分布也不为零:像素世界里干净的图出现概率很高。)

  • 背诵训练集骗过了所有基于样本的指标——IS、FID、KID、precision、recall 都和真实分布一样。只有”和训练图完全相同”的比例,或测试集似然(§2.1),能揭穿它。
  • 丢掉两种形状(模式丢失):IS、FID、KID、recall 都发现了;precision 仍然很高——每个样本本身都没问题。
  • 类内坍塌:IS 比真实分布还高(3.62 vs 3.47)——IS 看不见类内多样性;FID、KID、recall(0.22)发现了。
  • 干净的模板:IS 最高、平均 log⁡pdata\log p_{\text{data}} 比真实样本高一倍多、precision 满分;但 recall 只有 0.04。“每个样本都很像数据”不等于”样本分布像数据分布”——这和第 9 讲 §1 的”最可能的图”是同一个现象。
  • 噪声太多:precision 掉到 0.77,recall 仍高。precision 管保真,recall 管覆盖。
  • 前几讲的模型按 FID 排是 PixelCNN < VAE(8) < FVSBN < VAE(2) < 独立伯努利,按测试似然(§2.2)是 PixelCNN < VAE(8) < VAE(2) < FVSBN < 独立伯努利——FVSBN 和 VAE(2) 的顺序反了。两种尺子量的东西不一样。

FID 的样本数偏差(代码 04 第 2 部分,两批独立的真实样本,理想值都是 0):

每组样本数2005001,0002,0005,00020,000
FID0.4550.1550.0420.0410.0080.002
KID×10³−5.17−2.51−5.58−0.29−4.26+0.06

同一个分布的两批样本,FID 仍是正的,并且大约 ∝1/n\propto 1/n——估计协方差和矩阵平方根带来系统性的正偏差(练习 6)。FID 只能在相同样本数下比较(论文里通常用 5 万个)。KID 无偏,在 0 附近波动(可以为负),但单次估计有 10−310^{-3} 量级的噪声。

4.7 文生图模型的评价

slides 最后讲了文生图(text-to-image)的评价:除了图像本身的质量,还要看”图和文字对不对得上”。常用的自动指标是 CLIPScore(用 CLIP 模型算文字与图像嵌入的余弦相似度)。Stanford CRFM 的 HEIM(Holistic Evaluation of Text-to-Image Models,Lee et al. 2023)从 12 个方面评价:文图对齐、图像质量、美学、原创性、推理、知识、偏见、毒性、公平、鲁棒性、多语言、效率——结合人工和自动指标。它的发现之一:没有一个模型在所有方面都最好,不同指标给出不同的排名。


5. 表示的质量 · Evaluating latent representations

5.1 三类方法

如果生成模型是为了学表示(第 1 讲的”推断”),就要看隐变量 zz 好不好用。slides 列了三类:

  • 聚类:在隐空间里做 k-means,和真实类别比较。指标:同质性(每个簇里是不是只有一类,h=1−H(类别∣簇)/H(类别)h = 1 - H(\text{类别} \mid \text{簇})/H(\text{类别}))、完整性(每一类是不是都在一个簇里,c=1−H(簇∣类别)/H(簇)c = 1 - H(\text{簇} \mid \text{类别})/H(\text{簇}))、V-measure =2hc/(h+c)= 2hc/(h + c)。
  • 有损压缩 / 重构:隐变量能不能把 xx 重构出来——均方误差、PSNR、SSIM;这里是重构的像素错误率。常配合”用多少比特的隐变量”来画率–失真曲线(第 6 讲的 β-VAE)。
  • 解耦(disentanglement):每个隐变量维度是否只对应一个生成因素(形状、位置、颜色……)。指标有 β-VAE 指标(Higgins et al. 2017:固定一个因素,看能否从隐变量的差异里线性地猜出是哪个因素)、Factor-VAE 指标、MIG(Chen et al. 2018:对每个因素,看和它互信息最大的两个维度差多少,再除以因素的熵)。

另一个常用方法是线性探针:在冻结的表示上训练一个线性分类器,看它能多好地预测某个因素——“下游任务”评价的最简单形式。

5.2 实验:β-VAE 的表示(代码 05 第 1 部分)

第 6 讲缓存的 5 个 VAE(dz=8d_z = 8,β\beta = 0.25 … 4),在 5,000 张带标签(形状、笔画中心的行与列)的新图上:

模型−ELBO(bits/图)重构错误率活跃维数k-means V-measure线性探针:形状MIG:形状MIG:中心行MIG:中心列
β=0.25\beta = 0.2538.995.53%70.00741.7%0.0080.1460.278
β=0.5\beta = 0.531.815.36%60.03038.9%0.0190.2650.288
β=1\beta = 129.365.74%40.01742.9%0.0010.2640.257
β=2\beta = 232.3412.38%20.00156.6%0.0080.5550.512
β=4\beta = 435.6513.31%00.12446.2%0.0000.0000.000
  • β\beta 越大,KL 惩罚越重:活跃维数从 7 降到 0、重构变差;ELBO 在 β=1\beta = 1 时最好(训练目标就是它)。
  • 如实地说:这些 VAE 的隐变量主要编码了位置,几乎没有把形状放在单独的维度上(MIG ≈ 0),形状的线性探针只有 39%–57%(全猜”横线”是 30%)。在 8×8 的小图上,“笔画在哪里”解释了大部分像素,“是什么形状”只是位置上的细节——ELBO 不关心哪个因素”有意义”。
  • β=2\beta = 2 只剩 2 个活跃维度,行、列的 MIG 最高:更强的压缩迫使两个维度各管一个因素,”β\beta 大更解耦”在这里成立;但 β=4\beta = 4 完全坍塌,解码器忽略 zz,重构只是”平均图”。(β=4\beta = 4 的编码器均值仍随 xx 有极小的变化,k-means 不在乎尺度,从中分出了一点簇——但解码器根本不用它。)
  • 几个指标并不同步,β\beta 的最佳值取决于用哪把尺子。

5.3 解耦不可识别(代码 05 第 2 部分)

Locatello et al.(ICML 2019 最佳论文)证明:没有归纳偏置时,无监督地学到解耦的表示在理论上是不可能的。核心论证很简单:如果 zz 是一个解耦的表示,那么对 zz 做任何保持先验不变的变换(比如旋转,因为 N(0,I)\mathcal{N}(0, I) 各向同性)得到的 z′=Rzz' = Rz,配上解码器 x=g(R⊤z′)x = g(R^\top z'),给出完全相同的 p(x)p(x)——任何只看数据的训练目标都分不出这两个模型,而 z′z' 的每一维都是几个因素的混合。

代码 05 把 β=2\beta = 2 的 VAE 在它的两个活跃维度张成的平面里转 45°:同一批噪声下,重构项的差是 0、KL 项的差 3.6×10−73.6\times10^{-7}——同一个模型。

隐空间坐标k-means V-measure线性探针:形状MIG:中心行MIG:中心列
原始坐标0.00156.6%0.5550.512
转 45° 以后0.00156.6%0.0250.011

k-means(欧氏距离)和线性探针在旋转下不变;MIG 这类”按坐标轴”的解耦指标从 0.56 掉到 0.03。原始坐标之所以解耦,是因为 VAE 的对角高斯后验偏好和坐标轴对齐的方向(Rolinek et al. 2019 称之为”VAE 偶然地追随 PCA 方向”)——这是模型结构带来的归纳偏置,不是数据决定的。

5.4 用提示来评价

slides 最后提到:对大语言模型这类”通用”生成模型,最直接的评价是拿它去做任务——给提示、看回答。Stanford CRFM 的 HELM(Holistic Evaluation of Language Models,Liang et al. 2022)在几十个场景(问答、摘要、信息检索、推理……)上,按多个维度(准确率、校准、鲁棒性、公平性、偏见、毒性、效率)评价模型。这把”评价生成模型”变成了”评价它在下游任务上的表现”——本仓库的 CS324 讲义有更多讨论。


6. 小结:哪把尺子能发现哪种毛病 · Summary table

把本讲的实验汇总成一张表(✓ 能发现,✗ 发现不了,— 不适用):

毛病测试似然ParzenISFID / KIDprecisionrecall和训练集比对
背诵训练集✓(68 bit / −∞)✗(排第 2)✗✗✗✗✓
丢掉模式✓—✓✓✗✓✗
类内坍塌✓—✗(反而更高)✓✗✓✗
样本”太完美”✓—✗(最高)✓✗(满分)✓—
样本带噪✓✓(过头)✓✓✓✗—

“测试似然”一列是按定义推断的(丢掉模式、类内坍塌的分布在真实测试图上概率为 0 或很低;这些”样本来源”大多没有现成的密度可算),其余各列来自代码 02、04 的实际结果。测试似然对没有似然的模型(GAN)不可用;“和训练集比对”只针对背诵。没有万能的尺子:评价方式由用途决定,报告时要说清楚用的是什么、在什么条件下(样本数、估计量、特征网络)。


7. 2023 年之后 · Since 2023

  • FID 的特征网络被质疑。 Stein et al.(NeurIPS 2023,Exposing flaws of generative model evaluation metrics)的大规模人工实验发现,基于 Inception 特征的 FID 和人类判断的一致性不如预期,用自监督的 DINOv2 特征算 Fréchet 距离(FDDINOv2_{\text{DINOv2}})更好;Jayasumana et al.(CVPR 2024,Rethinking FID)提出用 CLIP 特征 + MMD 的 CMMD。共同的主题:特征网络决定了尺子量什么——代码 04 自己训练的形状分类器只关心形状,看不见位置的细节,也是同样的道理。
  • 背诵与隐私。 Carlini et al.(USENIX Security 2023,Extracting Training Data from Diffusion Models)从 Stable Diffusion 里提取出了几乎逐像素相同的训练图——§4.6 的”背诵训练集骗过所有样本指标”在真实模型上真的发生了。现在评价图像 / 文本生成模型时,通常会单独检查与训练集的近重复。
  • 人类偏好成了主要指标。 文生图有 ImageReward、PickScore、HPSv2 等用人类偏好数据训练的打分模型;语言模型和图像模型都有”竞技场”式的成对人工比较(Chatbot Arena 等,用 Elo / Bradley–Terry 排名)。这回到了 §4.1:人是最终的裁判,只是规模更大、方式更系统。
  • 似然 = 压缩重新受到重视。 Delétang et al.(ICLR 2024,Language Modeling Is Compression)用大语言模型 + 算术编码压缩文本、图像、音频,压缩率超过 PNG、FLAC 这类专用压缩器——§2.3 的实验放大一万倍。扩散模型的似然也在稳步改进(Variational Diffusion Models,Kingma et al. 2021,第 16 讲)。
  • 困惑度和下游能力的关系。 大语言模型的预训练困惑度(测试集似然)和下游任务表现大体相关,但并不完全一致,所以模型发布时总是同时报告困惑度和大量基准——“没有万能的尺子”在语言模型上同样成立。

8. 小结 · Summary

  1. 评价取决于用途:密度估计、生成、表示学习各有各的尺子;第 9 讲已经看到似然和样本质量可以完全背离。
  2. 测试集似然 = 压缩:平均码长 = 熵 + KL;测试 bits 越低越好,下限是真实熵。必须用测试集(查表模型训练 13 bit、测试 68 bit)。算术编码把它变成真正的压缩器(比特流只比 ∑−log⁡2pθ\sum -\log_2p_\theta 多不到 2 bit)。
  3. 核密度估计在低维可用,高维里误差随维数增长、随样本数收敛极慢;Parzen 估计不能可靠地评价或排序模型(把背诵排第 2)。
  4. 隐变量模型用重要性采样或 AIS 估计似然:都是随机下界;提议必须盖住后验(编码器提议在少数图上漏掉 90% 以上的后验质量,kk 再大也有偏)。
  5. 样本指标:IS(清晰 + 多样,看不见类内多样性)、FID(特征的高斯 Fréchet 距离,有样本数偏差)、KID(无偏的 MMD)、precision / recall(保真 vs 覆盖)。没有一个样本指标能发现背诵。
  6. 表示:聚类、重构、线性探针、解耦(MIG)。解耦在没有归纳偏置时不可识别:旋转隐空间,模型不变,MIG 从 0.56 掉到 0.03。

9. 常见误区 · Common pitfalls

  1. “训练集似然高说明模型好。” 查表模型训练集 13.2 bits,比真实熵 25.6 还低——它在背诵。只看测试集。
  2. “bits/dim 的差别很小,所以模型差不多。” 每像素 0.01 bit 的差别乘以 64 个像素就是 0.6 bit/图;对高分辨率图像(几十万维),0.01 bits/dim 就是几千比特。
  3. “VAE 的测试似然就是 IWAE 的那个数。” 它是下界的估计,依赖提议和样本数;编码器提议在某些图上可能严重有偏(§3.3)。报告时写清楚估计量。
  4. “Parzen 对数似然可以用来比较 GAN。” 它既不准、也不能可靠排序(§3.2)。
  5. “IS 高说明样本又好又多样。” IS 看不见类内坍塌(3.62 > 真实的 3.47),也不和真实数据比较。
  6. “FID 降了 0.1 就是进步。” FID 有样本数偏差、依赖特征网络、单次估计有噪声;要在相同样本数、相同特征网络下比较,并报告方差。
  7. “FID、precision、recall 都很好,模型就没问题。” 背诵训练集在所有样本指标上都完美。需要单独检查与训练集的近重复。
  8. “β 越大越解耦。” 到一定程度后后验整体坍塌(β = 4:0 个活跃维度),而且解耦指标本身依赖坐标系——旋转一下就变了(§5.3)。

10. 练习 · Exercises

练习 1(交叉熵分解) 证明 Ep[−log⁡q(x)]=H(p)+DKL(p∥q)\mathbb{E}_{p}[-\log q(x)] = H(p) + D_{\mathrm{KL}}(p \Vert q)。代码 01 里 PixelCNN 的测试 bits 是 26.36,真实熵 25.52:PixelCNN 的 KL 是多少?用它压缩 1 万张图,比理想的编码器多用多少字节?

参考答案

Ep[−log⁡q]=Ep[−log⁡p]+Ep[log⁡pq]=H(p)+DKL(p∥q)\mathbb{E}_p[-\log q] = \mathbb{E}_p[-\log p] + \mathbb{E}_p[\log\frac pq] = H(p) + D_{\mathrm{KL}}(p\Vert q)。KL ≈ 0.84 bits/图(严格说是估计,因为测试集有限)。1 万张图多 8,400 bit ≈ 1,050 字节。

练习 2(算术编码的码长) (a) 解释为什么编完一串符号后区间长度约为 ∏ipi\prod_ip_i。(b) 要从区间里指明一个点,大约需要多少比特?(c) 代码把概率量化到 1/65536 并截断在 [1,65535]/65536[1, 65535]/65536:一个真实概率 p=10−6p = 10^{-6} 的符号出现时,码长比 −log⁡2p-\log_2p 多还是少?一个 p=1−10−6p = 1 - 10^{-6} 的符号呢?

参考答案

(a) 每编码一个概率为 pip_i 的符号,区间按比例缩小为原来的 pip_i 倍。(b) 长度为 LL 的区间里总有一个形如 k/2mk/2^m 的点,m=⌈−log⁡2L⌉+1m = \lceil -\log_2L\rceil + 1,所以约 ∑i−log⁡2pi+2\sum_i -\log_2p_i + 2 比特。(c) p=10−6p = 10^{-6} 被截断成 1/65536≈1.5×10−51/65536 \approx 1.5\times10^{-5},码长 16 bit < 真实的 19.9 bit——这个罕见符号反而便宜了;代价是其他符号的概率被压低一点。p=1−10−6p = 1 - 10^{-6} 被量化成 65535/6553665535/65536,码长 2.2×10−52.2\times10^{-5} bit,比真实的 1.4×10−61.4\times10^{-6} bit 多——量化让”几乎确定”的符号也要付一点钱。代码里比特流多出的 0.5–1.3 bit 主要来自这两类效应和结尾。

练习 3(KDE 的偏差—方差) 一维、高斯核。(a) 说明 E[p^(x)]=(p∗Kh)(x)\mathbb{E}[\hat p(x)] = (p * K_h)(x),带宽越大偏差越大。(b) 说明 Var[p^(x)]≈p(x)nh∫K2\mathrm{Var}[\hat p(x)] \approx \frac{p(x)}{nh}\int K^2,带宽越小方差越大。(c) 推广到 dd 维:方差 ∝1nhd\propto \frac{1}{nh^d},偏差 ∝h2\propto h^2。平衡两者,最优 h∝n−1/(d+4)h \propto n^{-1/(d+4)},均方误差 ∝n−4/(d+4)\propto n^{-4/(d+4)}。和代码 02 第 2 部分的数字对照。

参考答案

(a) Ep^(x)=EKh(x−X)=∫Kh(x−y)p(y)dy\mathbb{E}\hat p(x) = \mathbb{E}K_h(x - X) = \int K_h(x - y)p(y)dy;泰勒展开 =p(x)+h22p′′(x)∫u2K+O(h4)= p(x) + \frac{h^2}{2}p''(x)\int u^2K + O(h^4)。(b) Varp^=1nVarKh(x−X)≈1n∫Kh2p=p(x)nh∫K2\mathrm{Var}\hat p = \frac1n\mathrm{Var}K_h(x - X) \approx \frac1n\int K_h^2p = \frac{p(x)}{nh}\int K^2。(c) 偏差² ∝h4\propto h^4、方差 ∝1/(nhd)\propto 1/(nh^d),令导数为零得 h∝n−1/(d+4)h \propto n^{-1/(d+4)},误差 ∝n−4/(d+4)\propto n^{-4/(d+4)}。d=10d = 10:n−0.29n^{-0.29},nn 涨 10 倍误差乘 0.52——代码里 0.113 → 0.065 → 0.039 → 0.022(每次约 0.57–0.60 倍),一致。dd 越大,指数越接近 0。

练习 4(重要性采样为什么是下界) (a) 证明 E[p^(x)]=p(x)\mathbb{E}[\hat p(x)] = p(x),但 E[log⁡p^(x)]≤log⁡p(x)\mathbb{E}[\log\hat p(x)] \leq \log p(x)。(b) 用 delta 方法说明偏差 ≈−Var[w]2kp(x)2\approx -\frac{\mathrm{Var}[w]}{2kp(x)^2},ww 是单个重要性权重。(c) 如果提议 qq 在后验质量的 90% 所在的区域里几乎为零,为什么 kk 很大时偏差仍然很大?

参考答案

(a) Eq[p(z)p(x∣z)q(z)]=∫p(z)p(x∣z)dz=p(x)\mathbb{E}_q[\frac{p(z)p(x\mid z)}{q(z)}] = \int p(z)p(x \mid z)dz = p(x);log⁡\log 是凹函数,由 Jensen 得到不等式。(b) log⁡p^≈log⁡p+p^−pp−(p^−p)22p2\log\hat p \approx \log p + \frac{\hat p - p}{p} - \frac{(\hat p - p)^2}{2p^2},取期望:第二项为 0,第三项 =−Varp^2p2=−Varw2kp2= -\frac{\mathrm{Var}\hat p}{2p^2} = -\frac{\mathrm{Var}w}{2kp^2}。(c) qq 几乎不在那个区域采样,但那里的权重 w=p(z)p(x∣z)/q(z)w = p(z)p(x\mid z)/q(z) 极大:Var[w]\mathrm{Var}[w] 巨大甚至无穷,delta 方法的近似失效。实际看到的是:kk 个样本几乎都落在 qq 的区域,只”看到”后验的 10%,估计约为 log⁡(0.1p(x))\log(0.1p(x)),偏差约 −2.3-2.3 nat,只有当 kk 大到能偶尔抽到那 90% 的区域时才会突然跳上去——代码 03 里误差最大的图在 k=1k = 1 万时仍差 5.8 nat。

练习 5(Inception Score 的上限与”作弊”) (a) 证明 IS≤\mathrm{IS} \leq 类别数 CC,并且 IS≤exp⁡(H(c(y)))\mathrm{IS} \leq \exp(H(c(y)))。(b) 构造一个只生成 CC 张图(每类一张最典型的)的”模型”,它的 IS 是多少?(c) 这和代码 04 的哪一行对应?

参考答案

(a) ExDKL(c(y∣x)∥c(y))=I(x;y)=H(c(y))−H(y∣x)≤H(c(y))≤log⁡C\mathbb{E}_xD_{\mathrm{KL}}(c(y\mid x)\Vert c(y)) = I(x; y) = H(c(y)) - H(y \mid x) \leq H(c(y)) \leq \log C。(b) 若每张图被分类器确信地分到一类、各类等概率,H(y∣x)=0H(y \mid x) = 0、H(c(y))=log⁡CH(c(y)) = \log C,IS =C= C——满分,尽管模型只会生成 CC 张图。(c) “干净的模板”(IS 3.88,接近真实形状比例下的上限 3.92)和”类内坍塌”(3.62,超过真实分布)。

练习 6(FID 的偏差) 设真实分布和生成分布相同,都是 N(0,Id)\mathcal{N}(0, I_d),各取 nn 个样本。(a) 说明 E∥μ^r−μ^g∥2=2d/n\mathbb{E}\Vert\hat\mu_r - \hat\mu_g\Vert^2 = 2d/n。(b) 直观解释为什么协方差那一项的期望也是正的。(c) 由此说明 FID 的偏差大约 ∝d/n\propto d/n,和代码 04 第 2 部分对照(d=64d = 64)。

参考答案

(a) μ^r−μ^g∼N(0,2nI)\hat\mu_r - \hat\mu_g \sim \mathcal{N}(0, \frac2nI),期望平方范数 2d/n2d/n。(b) 两个样本协方差 Σ^r\hat\Sigma_r、Σ^g\hat\Sigma_g 都是 II 加上独立的随机扰动;tr(Σ^r+Σ^g−2(Σ^r1/2Σ^gΣ^r1/2)1/2)\mathrm{tr}(\hat\Sigma_r + \hat\Sigma_g - 2(\hat\Sigma_r^{1/2}\hat\Sigma_g\hat\Sigma_r^{1/2})^{1/2}) 是两个不同矩阵之间的”距离”,只有两者完全相同时才为 0,扰动让它系统地为正(大约是扰动的平方范数,O(d2/n)O(d^2/n) 量级的常数乘以小因子)。(c) 两项都 ∝1/n\propto 1/n。代码里 nn = 200 → 2,000 时 FID 0.455 → 0.041,约 11 倍,接近 1/n1/n。(这里的特征不是标准正态,数值不能直接代入 2d/n2d/n,但标度一致。)

练习 7(precision、recall 与 k) (a) 用 kk 近邻球定义的”真实流形”,kk 增大时 precision 和 recall 怎样变化?(b) 对”干净的模板”,为什么 precision = 1、recall = 0.04?(c) 如果把真实样本也换成干净的模板,precision 和 recall 会怎样?

参考答案

(a) kk 越大球越大、流形越”胖”,precision 和 recall 都单调不减——它们只有在相同的 kk 下才可比。(b) 每个干净模板都离某个真实样本很近(真实样本只是模板加几个翻转),落在它的近邻球里,precision = 1;但 177 个模板(5,000 个样本里大量重复)的近邻球都很小(重复点的 k 近邻距离为 0),真实样本几乎都带噪声,落不进这些球里,recall 很低。(c) 两组都是同样的 177 个点(按先验重复),precision、recall 都接近 1——指标只比较两组样本的支撑,不在乎它们离”真正的数据”多远。

练习 8(V-measure) (a) 若 k-means 把所有点分进同一个簇,同质性、完整性、V-measure 各是多少?(b) 若每个点自成一簇呢?(c) 为什么 V-measure 要用调和平均?

参考答案

(a) H(类别∣簇)=H(类别)H(\text{类别} \mid \text{簇}) = H(\text{类别}),同质性 0;H(簇)=0H(\text{簇}) = 0,完整性按约定为 1;V-measure 0。(b) 同质性 1(每簇只有一个点、一个类别);H(簇∣类别)H(\text{簇} \mid \text{类别}) 很大,完整性接近 0;V-measure 接近 0。(c) 调和平均在任一项接近 0 时就接近 0,防止用极端的聚类(一个簇、每点一簇)骗过单个指标——和 F1 用调和平均的理由相同。

练习 9(旋转不变性) (a) 证明 DKL(N(Rμ,RΣR⊤)∥N(0,I))=DKL(N(μ,Σ)∥N(0,I))D_{\mathrm{KL}}(\mathcal{N}(R\mu, R\Sigma R^\top) \Vert \mathcal{N}(0, I)) = D_{\mathrm{KL}}(\mathcal{N}(\mu, \Sigma) \Vert \mathcal{N}(0, I)) 对正交矩阵 RR 成立。(b) 说明旋转后的模型 p′(x)=p(x)p'(x) = p(x)。(c) 旋转后的编码器协方差 RΣR⊤R\Sigma R^\top 不再是对角的。如果我们要求编码器必须输出对角协方差,旋转后的模型还在模型族里吗?这和”对角后验提供了归纳偏置”有什么关系?

参考答案

(a) KL =12(trΣ+∥μ∥2−d−log⁡det⁡Σ)= \frac12(\mathrm{tr}\Sigma + \Vert\mu\Vert^2 - d - \log\det\Sigma),这四项在 μ→Rμ\mu \to R\mu、Σ→RΣR⊤\Sigma \to R\Sigma R^\top 下都不变(迹、范数、行列式对正交变换不变)。(b) p′(x)=∫p(z′)p(x∣R⊤z′)dz′=∫p(Rz)p(x∣z)dz=p(x)p'(x) = \int p(z')p(x \mid R^\top z')dz' = \int p(Rz)p(x \mid z)dz = p(x)(p(Rz)=p(z)p(Rz) = p(z),雅可比行列式为 1)。(c) 不在:VAE 的编码器族只包含对角高斯,旋转后的真实后验(近似)不是对角的,ELBO 会变差(近似误差变大)。所以 ELBO 在”后验恰好近似对角”的坐标系里最好——这就是 Rolinek et al.(2019)说的对角后验偏好某些坐标轴。代码 05 里旋转后的 ELBO 完全不变,是因为我们把旋转后的协方差(非对角)原样保留了,而没有把它限制回对角。

练习 10(动手:给自己的模型挑尺子) 假设你训练了一个模型来补全被遮住一半的像素世界图片(第 1 讲 inpaint)。设计一个评价方案:哪些指标适合?用真实分布可以算出什么”标准答案”?(提示:PixelWorld.inpaint 和 log_prob(X, mask)。)

参考答案(思路)

补全的目标是从 p(x缺失∣x观测)p(x_{\text{缺失}} \mid x_{\text{观测}}) 采样。(1) 条件似然:测试集上的 log⁡pθ(x缺失∣x观测)\log p_\theta(x_{\text{缺失}} \mid x_{\text{观测}}),下限是真实的条件熵(可由 log_prob(X) − log_prob(X, mask) 精确算出)。(2) 样本质量:补全结果在真实分布下的 log⁡pdata\log p_{\text{data}},以及条件 precision / recall(对同一个观测补全多次,和 inpaint 给出的真实条件样本比较)。(3) 多样性:同一个观测的多次补全是否覆盖了所有可能的形状(真实后验 posterior(X, mask) 给出每种配置的概率)。(4) 下游:补全后的图被形状分类器分对的比例。具体用哪个,取决于你在乎”最可能的答案”还是”所有可能的答案”。


11. 延伸阅读 · Further reading

原课材料

似然与压缩

  • Theis, van den Oord & Bethge, A Note on the Evaluation of Generative Models, ICLR 2016
  • Witten, Neal & Cleary, Arithmetic Coding for Data Compression, Communications of the ACM 1987
  • MacKay, Information Theory, Inference, and Learning Algorithms, 2003(第 4–6 章:信源编码、算术编码)
  • Neal, Annealed Importance Sampling, Statistics and Computing 2001
  • Wu, Burda, Salakhutdinov & Grosse, On the Quantitative Analysis of Decoder-Based Generative Models, ICLR 2017

样本质量

  • Zhou, Gordon, Krishna, Narcomey, Fei-Fei & Bernstein, HYPE: A Benchmark for Human eYe Perceptual Evaluation of Generative Models, NeurIPS 2019
  • Salimans et al., Improved Techniques for Training GANs, NeurIPS 2016(Inception Score)
  • Heusel, Ramsauer, Unterthiner, Nessler & Hochreiter, GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium, NeurIPS 2017(FID)
  • Bińkowski, Sutherland, Arbel & Gretton, Demystifying MMD GANs, ICLR 2018(KID)
  • Sajjadi et al., Assessing Generative Models via Precision and Recall, NeurIPS 2018;Kynkäänniemi et al., Improved Precision and Recall Metric for Assessing Generative Models, NeurIPS 2019
  • Lee et al., Holistic Evaluation of Text-to-Image Models(HEIM), NeurIPS 2023 Datasets and Benchmarks;Hessel et al., CLIPScore, EMNLP 2021

表示

  • Rosenberg & Hirschberg, V-Measure: A Conditional Entropy-Based External Cluster Evaluation Measure, EMNLP 2007
  • Higgins et al., β-VAE, ICLR 2017;Kim & Mnih, Disentangling by Factorising, ICML 2018;Chen, Li, Grosse & Duvenaud, Isolating Sources of Disentanglement in VAEs(MIG), NeurIPS 2018
  • Locatello et al., Challenging Common Assumptions in the Unsupervised Learning of Disentangled Representations, ICML 2019
  • Rolinek, Zietlow & Martius, Variational Autoencoders Pursue PCA Directions (by Accident), CVPR 2019
  • Liang et al., Holistic Evaluation of Language Models(HELM), TMLR 2023

2023 年之后

  • Stein et al., Exposing Flaws of Generative Model Evaluation Metrics and Their Unfair Treatment of Diffusion Models, NeurIPS 2023
  • Jayasumana et al., Rethinking FID: Towards a Better Evaluation Metric for Image Generation, CVPR 2024
  • Carlini et al., Extracting Training Data from Diffusion Models, USENIX Security 2023
  • Delétang et al., Language Modeling Is Compression, ICLR 2024

12. 下一讲预告 · Next lecture

第 13–14 讲的得分模型和第 5–6 讲的 VAE 看起来是完全不同的东西。第 16 讲(原课 Lecture 16,Score Based Diffusion Models)会发现它们是同一个模型的两种看法:

  • 扩散模型 = 一个层级很深的 VAE:编码器是固定的”逐步加噪”,解码器学”逐步去噪”;ELBO 一步步推下来,得到 DDPM 的训练目标;
  • 预测噪声 = 估计得分(第 13 讲的 Tweedie 公式)——DDPM 就是第 14 讲 VP SDE 的离散版本;
  • 采样:DDPM、DDIM、概率流 ODE,步数与质量的权衡;
  • 无分类器引导、潜空间扩散(Stable Diffusion)。

本讲的尺子也会派上用场:扩散模型用 ELBO 或概率流 ODE 报告 bits/dim,用 FID 报告样本质量——两者给出的结论并不总是一致。

← 返回课程目录