对应 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
学完这一讲,你应该能够:
- 把前 14 讲的模型家族放在一张表里:各自怎样表示 、用什么目标训练、能不能算似然、采样快不快。
- 解释测试集似然 = 压缩:交叉熵 = 熵 + KL;bits/dim 的含义;为什么必须用测试集。
- 说出核密度估计的做法和它在高维失败的原因;知道 Parzen 估计为什么不能可靠地评价、甚至给模型排序。
- 用重要性采样和退火重要性采样估计隐变量模型的似然;知道它们为什么是随机下界,提议分布必须满足什么条件。
- 定义 Inception Score、FID、KID、precision / recall,说出每一个能发现什么问题、会被什么骗过。
- 说出评价表示的三类方法(聚类、重构、解耦),以及”解耦”为什么在没有归纳偏置时不可识别。
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 | 平均的 ,按整张图或每个维度(像素)计;像素世界 |
| 真实分布的熵:任何模型的测试 bits 的下限(像素世界约 25.5 bits/图) | |
| 带宽为 的核(高斯核,或 0/1 数据上的乘积伯努利核) | |
| 评价用的分类器(Inception 网络)给出的类别概率; | |
| 评价用的特征(Inception 网络的倒数第二层) | |
| / | 真实 / 生成样本特征的均值与协方差 |
| MIG | 互信息差(mutual information gap),一种解耦指标 |
0.5 关于数字 · About the numbers
像素世界(第 1 讲):8×8 的 0/1 小图,形状 + 位置 + 5% 翻转噪声,、后验、熵都能精确计算。测试集是第 3 讲 pixel_data() 的 5,000 张图。评价的模型全部来自前几讲的缓存(第 3 讲的自回归模型、第 6 讲的 VAE、第 1 讲的基线)。样本指标用的”Inception 网络”是代码 04 自己训练的形状分类器。所有数字来自固定种子的单次运行;和预想不同的结果记录在 代码 README 的”关于实验结果”里。
1. 期中小结 · Mid-quarter summary
slides 开头把到目前为止的模型放在一起:
| 家族 | 怎样表示 | 训练目标 | 精确似然? | 采样 |
|---|---|---|---|---|
| 自回归(第 3 讲) | 链式法则,每个条件一个网络 | 最大似然 | 是 | 慢(逐个维度) |
| VAE(第 5–6 讲) | 隐变量 + 解码器 | ELBO(似然的下界) | 否(可估计,§3.3) | 快 |
| 归一化流(第 7–8 讲) | 可逆变换 + 变量替换 | 最大似然 | 是 | 快 |
| GAN(第 9–10 讲) | 生成器(隐式) | 两样本检验 / -散度 / Wasserstein | 否(没有密度) | 快 |
| 能量模型(第 11–12 讲) | 对比散度 / 得分匹配 / NCE | 否( 未知) | 慢(MCMC) | |
| 得分模型(第 13–14 讲) | 得分 | 加权去噪得分匹配 | 是(概率流 ODE) | 较慢(多步) |
训练目标对应不同的”距离”:KL(最大似然)、JS 与 -散度、Wasserstein、Fisher 散度……每个家族在”表示—学习—推断”上各有取舍。于是一个自然的问题:不同家族的模型怎样比较?同一个家族里,哪个模型更好?
评价为什么难。 slides 的回答:取决于你想拿模型做什么——
- 密度估计 / 压缩:要的是 准(§2–§3);
- 生成:要的是样本好看、多样(§4);
- 表示学习:要的是隐变量有用(§5);
- 下游任务(分类、补全、编辑……):直接在任务上评价。
没有一把尺子能同时衡量所有这些——第 9 讲已经看到,似然和样本质量可以完全背离(噪声混合模型似然几乎最优、样本全是噪声;背诵训练集的模型样本完美、似然 −∞)。
2. 密度估计与压缩 · Density estimation or compression
2.1 测试集似然
slides:如果用途是密度估计,似然本身就是一个很好的指标。做法和监督学习一样:数据分成训练 / 验证 / 测试集;在训练集上训练,在验证集上调超参数,最后报告测试集上的平均对数似然 。图像模型常报告 bits/dim: 除以维数(像素数 × 通道数)。
为什么必须是测试集。 第 4 讲的过拟合:训练集似然会奖励背诵。代码 01 的查表模型(第 1 讲:见过的图按频率给概率,剩下 1% 的概率均匀分给所有 张图)在训练集上只要 13.2 bits/图——远低于真实分布的熵 25.6,因为它把训练集背了下来;在测试集上却要 68 bits/图,比不压缩(64 bit)还多。
2.2 为什么似然 = 压缩
香农的信源编码定理:给每个 分配 个比特的码字,平均码长接近熵 ,而任何无损编码的平均码长都不低于 。用模型 当编码器、给真实数据编码,平均码长是交叉熵:
所以”测试 bits 越低” ⇔ “压缩得越好” ⇔ “KL 越小、离真实分布越近”。像素世界知道 ,于是可以直接读出每个模型的 KL(代码 01 第 1 部分):
| 模型 | 怎么算的 | 测试 bits/图 | bits/dim | 比真实分布多(= KL) |
|---|---|---|---|---|
| 真实分布 | 精确 | 25.52 | 0.3987 | 0 |
| GRU / PixelCNN / RNN | 自回归:精确 | 26.35 / 26.36 / 26.43 | 0.4116 / 0.4118 / 0.4130 | +0.83 / +0.84 / +0.91 |
| Transformer | 自回归:精确 | 27.08 | 0.4231 | +1.56 |
| VAE() | 重要性采样,k = 1000 | 27.71 | 0.4329 | +2.19 |
| MADE / NADE | 自回归:精确 | 29.23 / 29.41 | 0.4568 / 0.4595 | +3.71 / +3.89 |
| VAE() | 网格积分:精确 | 29.34 | 0.4584 | +3.82 |
| FVSBN | 自回归:精确 | 30.17 | 0.4714 | +4.65 |
| 独立伯努利 | 精确 | 35.50 | 0.5548 | +9.98 |
| 查表(背诵训练集) | 精确 | 67.79 | 1.0592 | +42.27 |
没有任何模型低于真实熵——香农的下限。最好的几个模型每个像素只多约 0.01 bit。注意”怎么算的”一列:VAE 的似然只能估计(§3.3),用重要性采样得到的是 的一个下界的估计(bits 的上界),报告时要写明估计量和样本数。
2.3 实验:一个真正的算术编码器(代码 01 第 2 部分)
“似然 = 压缩”不只是一个比喻。算术编码(arithmetic coding)把这件事变成了可以运行的程序:维护一个区间 ,每编码一个符号,就按它的条件概率 把区间切开、保留对应的那一段;概率为 的符号让区间缩小 倍,编完后区间长度 ≈ ,指明区间里的一个点需要 个比特。自回归模型恰好给出每个像素的条件概率。
代码 01 实现了一个 32 位整数的二元算术编码器(Witten, Neal & Cleary 1987),用模型把 200 张测试图压成一个比特流,再解码回来:
| 编码方法 | 模型的 (平均) | 实际码长 bits/图 | 比特流总长 − | 解码一致? |
|---|---|---|---|---|
| 不压缩 | — | 64.00 | — | — |
| zlib(level 9) | — | 39.00 | — | — |
| bz2 / lzma | — | 44.12 / 43.36 | — | — |
| FVSBN + 算术编码 | 30.27 | 30.27 | +1.3 | 是 |
| MADE + 算术编码 | 29.36 | 29.36 | +0.9 | 是 |
| PixelCNN + 算术编码 | 26.67 | 26.67 | +0.5 | 是 |
(这 200 张图在真实分布下的平均 是 25.67 bits。)12,800 个像素的整个比特流只比理想码长多 0.5–1.3 个比特。模型越好,压缩得越好;通用压缩器不知道”图里有线条和方框”,远不如一个学到了数据分布的生成模型。一个实现细节:编码和解码必须算出逐位相同的概率,否则解码会出错——代码按”像素优先”的顺序编码,让解码时每一步对整批图的前向计算和编码时完全相同。
这也是”压缩 = 智能”(Hutter 奖)这个说法的出发点:能把数据压得越短,说明越理解它的规律。
2.4 似然的局限
slides 也提醒:似然好不等于样本好(第 9 讲 §1 的噪声混合:似然只差 bits,样本 99% 是噪声),样本好也不等于似然好(背诵)。Theis, van den Oord & Bethge(2016)还指出:在高维图像上,似然主要由”难以察觉的细节”(噪声、纹理的精确值)决定,不是所有比特都同样重要——人眼在意的语义内容只占码长的一小部分。所以似然最适合的用途是压缩和密度估计本身。
3. 似然算不出来时 · When the likelihood is not available
3.1 核密度估计(Parzen 窗口)
GAN 只给样本,能量模型的 未知。slides 的第一个办法:用模型的样本 拼出一个密度
直觉。 直方图把每个样本”堆”在它所在的格子里,结果依赖格子的位置、而且不光滑;核密度估计在每个样本上放一个光滑的小”土堆”(核),再把所有土堆加起来。带宽 是唯一的超参数:太小, 是一堆尖峰,没见过的点概率接近 0;太大,所有细节被抹平。slides:用交叉验证选 (在验证集上最大化似然)。
二维里它工作得很好(代码 02 第 1 部分,两个高斯,1,000 个样本):
| 带宽 | 0.01 | 0.03 | 0.1 | 0.2 | 0.3 | 0.5 | 1.0 |
|---|---|---|---|---|---|---|---|
| 验证集平均 | −16.96 | −2.80 | −1.59 | −1.56 | −1.61 | −1.85 | −2.63 |
| 测试集平均 | −17.88 | −2.89 | −1.59 | −1.54 | −1.60 | −1.84 | −2.63 |
验证集选出 ,测试集 −1.544,真实值 −1.513。
3.2 高维里靠不住
slides:“KDE is unreliable in high dimensions”。代码 02 第 2 部分:数据是标准正态 (真实的每维熵 nat),同样 1 万个样本,带宽用验证集选:
| 维数 | 1 | 2 | 5 | 10 | 20 | 50 |
|---|---|---|---|---|---|---|
| 选出的带宽 | 0.158 | 0.251 | 0.398 | 0.631 | 0.794 | 1.000 |
| 每维比真值多(nat) | −0.006 | −0.001 | +0.017 | +0.022 | +0.070 | +0.124 |
维数越高,离真值越远,带宽也被迫越来越大——高维空间太空了,测试点附近几乎没有样本,只能用一个很宽的核去够最近的那几个(第 11 讲的维数灾难)。 时每维多 0.12 nat,整个样本多 6 nat。增加样本也只能缓慢地改善: 时 = 100、1,000、1 万、10 万,误差 0.113 → 0.065 → 0.039 → 0.022,每涨 10 倍误差约减半,和理论速度 一致;维数越高越慢。
用 Parzen 估计评价模型(Theis et al. 2016 的复现)。 早期 GAN 论文用”Parzen 对数似然”报告结果。代码 02 第 3 部分在像素世界上做同样的事:每个模型取 1 万个样本当核中心(0/1 数据用”翻转概率 “的乘积伯努利核, 用验证集选),估计测试 bits,和精确的测试 bits 比较:
| 模型 | 真实的测试 bits | 真实排名 | Parzen 估计 | Parzen 排名 |
|---|---|---|---|---|
| 真实分布 | 25.56 | 1 | 28.34 | 1 |
| 背诵训练集(训练集的经验分布) | ∞ | 8 | 28.35 | 2 |
| 形状比例错误的像素世界 | 26.05 | 2 | 29.16 | 3 |
| PixelCNN | 26.41 | 3 | 29.23 | 4 |
| 翻转概率 12% 的像素世界 | 28.21 | 4 | 35.75 | 7 |
| VAE | 29.36 | 5 | 32.93 | 5 |
| FVSBN | 30.25 | 6 | 34.03 | 6 |
| 独立伯努利 | 35.54 | 7 | 38.59 | 8 |
- 即使对真实分布本身,估计也高了约 3 bit。
- 背诵训练集的真实测试似然是 −∞(测试图几乎都没在训练集里出现过),Parzen 却把它排第 2:它只看样本像不像数据,看不出背诵。
- 带噪的模型被严重低估(第 4 → 第 7):每个核离测试图都远一点,在 64 维里被指数放大;而 PixelCNN 和”形状比例错误”的世界真实差 0.36 bit,Parzen 只差 0.07 bit。
结论和 Theis et al. 一致:Parzen 估计既不是似然的好近似,也不能可靠地给模型排序。
3.3 隐变量模型:重要性采样与 AIS
VAE 的 算不出来,但可以估计。slides:
- 重要性采样:,。 是 的无偏估计,但 的期望 ≤ (Jensen)——一个随机下界, 越大越紧(第 5 讲的 IWAE 下界)。提议 可以是先验 或编码器 。
- 退火重要性采样(AIS,Neal 2001):定义一串中间分布 , 从 0(先验)走到 1(未归一化的后验)。每条链从先验出发,每一步先累加权重 ,再用一步 MCMC 让 适应新的 。它不要求一个提议一步就盖住后验,而是让样本一点点走过去。Wu et al.(2017)用它评价 GAN 和 VAE 的似然。
实验(代码 03)。 第 6 讲 的 VAE 可以在隐空间网格上精确积分,所以每个估计量的误差都能精确量出来(300 张测试图,精确的平均 nat):
| 样本数 | 先验提议:平均误差 | 最大 误差 | 编码器提议:平均误差 | 最大 误差 |
|---|---|---|---|---|
| 1 | −13.505 | 49.4 | −1.043 | 21.2 |
| 10 | −4.379 | 23.8 | −0.351 | 17.6 |
| 100 | −0.899 | 16.5 | −0.195 | 16.6 |
| 1,000 | −0.028 | 2.5 | −0.115 | 8.6 |
| 10,000 | +0.000 | 0.67 | −0.083 | 5.8 |
| AIS 退火步数 (16 条链) | 10 | 100 | 1,000 |
|---|---|---|---|
| 平均误差 / 最大 误差 | −1.770 / 18.2 | −0.178 / 4.7 | −0.009 / 0.57 |
- 误差都是负的:随机下界。
- 小时编码器提议好得多(:−0.35 vs −4.38):后验只占先验的一小块。
- 但 万时先验提议反而精确,编码器提议还差 0.08、个别图差 5.8 nat。 原因:对误差最大的 5 张图,精确后验有 91%–99.9% 的质量落在编码器高斯的 3σ 椭圆以外(全部图的中位数只有 5%)——编码器把高斯放错了地方(第 6 讲的摊销误差),提议漏掉了后验的主要部分, 再大也补不回来;先验虽然低效,但它盖住了一切,二维隐空间里 1 万个样本足够暴力覆盖。重要性采样的铁律:提议必须盖住目标,否则估计有偏而且不自知。
- AIS 只用先验和解码器,(每张图约 1.6 万次解码)时平均误差 −0.009、最大 0.57,比同样计算量的编码器提议可靠。
的 VAE 没有精确值,几种估计量的平均 :先验提议()−19.269、编码器提议()−19.326、AIS()−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):让众包标注者在限定时间内判断一张图是真是假。HYPE 测”人需要看多久才分得出”,HYPE 测”时间不限时被骗的比例”。人工评价贵、慢、难以复现,而且标注者看不出多样性(每次只看一张)和背诵(他们没见过训练集)。所以需要自动的指标。
4.2 Inception Score
Salimans et al.(2016)。用一个在 ImageNet 上训练的分类器(Inception 网络)给每个样本一个类别分布 。好的样本应该:
- 清晰(sharpness):每个样本”明确像某一类”, 的熵低;
- 多样(diversity):所有类别都出现, 的熵高。
slides 的写法:,,。越高越好,上限是类别数。缺点:不和真实数据比较;只看”像哪一类”,看不见类内的多样性;依赖一个特定的分类器。
4.3 FID
Heusel et al.(2017)。取 Inception 网络倒数第二层的特征 ,对真实样本和生成样本的特征各拟合一个高斯,算两个高斯之间的 Fréchet 距离(2-Wasserstein 距离的平方):
越低越好。它和真实数据比较、对多样性敏感,成了图像生成的标准指标。缺点:只比较前两阶矩;样本有限时有正的偏差(§4.6);依赖特征网络。
4.4 KID
Bińkowski et al.(2018)。在特征空间里算 MMD²(第 9 讲的两样本检验统计量),用多项式核 。它有一个无偏估计(同组的两项去掉对角线),而 FID 没有。slides:“unbiased, but more expensive”()。
4.5 Precision 与 recall
FID 把”保真度”和”多样性”混在一个数里。Sajjadi et al.(2018)、Kynkäänniemi et al.(2019)把它们拆开:在特征空间里,用每个真实样本到第 个近邻的距离画一个球,所有球的并就是”真实数据的流形”;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³ ↓ | precision | recall | 平均 | 和训练图相同 |
|---|---|---|---|---|---|---|---|
| 真实分布(新样本) | 3.470 | 0.009 | −1.08 | 0.924 | 0.919 | −25.56 | 4.5% |
| 背诵训练集 | 3.475 | 0.009 | 0.86 | 0.926 | 0.923 | −25.53 | 100% |
| 丢掉两种形状 | 2.144 | 6.146 | 534.6 | 0.930 | 0.697 | −25.61 | 5.1% |
| 类内坍塌(每种形状一个位置) | 3.623 | 2.296 | 202.9 | 0.907 | 0.223 | −25.71 | 4.7% |
| 干净的模板(无噪声) | 3.884 | 1.161 | 78.1 | 1.000 | 0.040 | −12.18 | 90.5% |
| 翻转概率 15% | 2.537 | 3.015 | 434.7 | 0.771 | 0.906 | −51.20 | 0% |
| PixelCNN | 3.150 | 0.229 | 8.6 | 0.904 | 0.928 | −28.72 | 3.4% |
| VAE | 2.829 | 0.472 | 25.1 | 0.901 | 0.919 | −31.74 | 1.2% |
| FVSBN | 2.600 | 1.030 | 34.6 | 0.858 | 0.928 | −34.91 | 0.3% |
| VAE | 2.507 | 1.200 | 58.8 | 0.897 | 0.889 | −33.45 | 0.7% |
| 独立伯努利 | 1.959 | 9.087 | 814.0 | 0.904 | 0.771 | −42.13 | 0% |
(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 最高、平均 比真实样本高一倍多、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):
| 每组样本数 | 200 | 500 | 1,000 | 2,000 | 5,000 | 20,000 |
|---|---|---|---|---|---|---|
| FID | 0.455 | 0.155 | 0.042 | 0.041 | 0.008 | 0.002 |
| KID×10³ | −5.17 | −2.51 | −5.58 | −0.29 | −4.26 | +0.06 |
同一个分布的两批样本,FID 仍是正的,并且大约 ——估计协方差和矩阵平方根带来系统性的正偏差(练习 6)。FID 只能在相同样本数下比较(论文里通常用 5 万个)。KID 无偏,在 0 附近波动(可以为负),但单次估计有 量级的噪声。
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 讲的”推断”),就要看隐变量 好不好用。slides 列了三类:
- 聚类:在隐空间里做 k-means,和真实类别比较。指标:同质性(每个簇里是不是只有一类,)、完整性(每一类是不是都在一个簇里,)、V-measure 。
- 有损压缩 / 重构:隐变量能不能把 重构出来——均方误差、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(, = 0.25 … 4),在 5,000 张带标签(形状、笔画中心的行与列)的新图上:
| 模型 | −ELBO(bits/图) | 重构错误率 | 活跃维数 | k-means V-measure | 线性探针:形状 | MIG:形状 | MIG:中心行 | MIG:中心列 |
|---|---|---|---|---|---|---|---|---|
| 38.99 | 5.53% | 7 | 0.007 | 41.7% | 0.008 | 0.146 | 0.278 | |
| 31.81 | 5.36% | 6 | 0.030 | 38.9% | 0.019 | 0.265 | 0.288 | |
| 29.36 | 5.74% | 4 | 0.017 | 42.9% | 0.001 | 0.264 | 0.257 | |
| 32.34 | 12.38% | 2 | 0.001 | 56.6% | 0.008 | 0.555 | 0.512 | |
| 35.65 | 13.31% | 0 | 0.124 | 46.2% | 0.000 | 0.000 | 0.000 |
- 越大,KL 惩罚越重:活跃维数从 7 降到 0、重构变差;ELBO 在 时最好(训练目标就是它)。
- 如实地说:这些 VAE 的隐变量主要编码了位置,几乎没有把形状放在单独的维度上(MIG ≈ 0),形状的线性探针只有 39%–57%(全猜”横线”是 30%)。在 8×8 的小图上,“笔画在哪里”解释了大部分像素,“是什么形状”只是位置上的细节——ELBO 不关心哪个因素”有意义”。
- 只剩 2 个活跃维度,行、列的 MIG 最高:更强的压缩迫使两个维度各管一个因素,” 大更解耦”在这里成立;但 完全坍塌,解码器忽略 ,重构只是”平均图”。( 的编码器均值仍随 有极小的变化,k-means 不在乎尺度,从中分出了一点簇——但解码器根本不用它。)
- 几个指标并不同步, 的最佳值取决于用哪把尺子。
5.3 解耦不可识别(代码 05 第 2 部分)
Locatello et al.(ICML 2019 最佳论文)证明:没有归纳偏置时,无监督地学到解耦的表示在理论上是不可能的。核心论证很简单:如果 是一个解耦的表示,那么对 做任何保持先验不变的变换(比如旋转,因为 各向同性)得到的 ,配上解码器 ,给出完全相同的 ——任何只看数据的训练目标都分不出这两个模型,而 的每一维都是几个因素的混合。
代码 05 把 的 VAE 在它的两个活跃维度张成的平面里转 45°:同一批噪声下,重构项的差是 0、KL 项的差 ——同一个模型。
| 隐空间坐标 | k-means V-measure | 线性探针:形状 | MIG:中心行 | MIG:中心列 |
|---|---|---|---|---|
| 原始坐标 | 0.001 | 56.6% | 0.555 | 0.512 |
| 转 45° 以后 | 0.001 | 56.6% | 0.025 | 0.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
把本讲的实验汇总成一张表(✓ 能发现,✗ 发现不了,— 不适用):
| 毛病 | 测试似然 | Parzen | IS | FID / KID | precision | recall | 和训练集比对 |
|---|---|---|---|---|---|---|---|
| 背诵训练集 | ✓(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 距离(FD)更好;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
- 评价取决于用途:密度估计、生成、表示学习各有各的尺子;第 9 讲已经看到似然和样本质量可以完全背离。
- 测试集似然 = 压缩:平均码长 = 熵 + KL;测试 bits 越低越好,下限是真实熵。必须用测试集(查表模型训练 13 bit、测试 68 bit)。算术编码把它变成真正的压缩器(比特流只比 多不到 2 bit)。
- 核密度估计在低维可用,高维里误差随维数增长、随样本数收敛极慢;Parzen 估计不能可靠地评价或排序模型(把背诵排第 2)。
- 隐变量模型用重要性采样或 AIS 估计似然:都是随机下界;提议必须盖住后验(编码器提议在少数图上漏掉 90% 以上的后验质量, 再大也有偏)。
- 样本指标:IS(清晰 + 多样,看不见类内多样性)、FID(特征的高斯 Fréchet 距离,有样本数偏差)、KID(无偏的 MMD)、precision / recall(保真 vs 覆盖)。没有一个样本指标能发现背诵。
- 表示:聚类、重构、线性探针、解耦(MIG)。解耦在没有归纳偏置时不可识别:旋转隐空间,模型不变,MIG 从 0.56 掉到 0.03。
9. 常见误区 · Common pitfalls
- “训练集似然高说明模型好。” 查表模型训练集 13.2 bits,比真实熵 25.6 还低——它在背诵。只看测试集。
- “bits/dim 的差别很小,所以模型差不多。” 每像素 0.01 bit 的差别乘以 64 个像素就是 0.6 bit/图;对高分辨率图像(几十万维),0.01 bits/dim 就是几千比特。
- “VAE 的测试似然就是 IWAE 的那个数。” 它是下界的估计,依赖提议和样本数;编码器提议在某些图上可能严重有偏(§3.3)。报告时写清楚估计量。
- “Parzen 对数似然可以用来比较 GAN。” 它既不准、也不能可靠排序(§3.2)。
- “IS 高说明样本又好又多样。” IS 看不见类内坍塌(3.62 > 真实的 3.47),也不和真实数据比较。
- “FID 降了 0.1 就是进步。” FID 有样本数偏差、依赖特征网络、单次估计有噪声;要在相同样本数、相同特征网络下比较,并报告方差。
- “FID、precision、recall 都很好,模型就没问题。” 背诵训练集在所有样本指标上都完美。需要单独检查与训练集的近重复。
- “β 越大越解耦。” 到一定程度后后验整体坍塌(β = 4:0 个活跃维度),而且解耦指标本身依赖坐标系——旋转一下就变了(§5.3)。
10. 练习 · Exercises
练习 1(交叉熵分解) 证明 。代码 01 里 PixelCNN 的测试 bits 是 26.36,真实熵 25.52:PixelCNN 的 KL 是多少?用它压缩 1 万张图,比理想的编码器多用多少字节?
参考答案
。KL ≈ 0.84 bits/图(严格说是估计,因为测试集有限)。1 万张图多 8,400 bit ≈ 1,050 字节。
练习 2(算术编码的码长) (a) 解释为什么编完一串符号后区间长度约为 。(b) 要从区间里指明一个点,大约需要多少比特?(c) 代码把概率量化到 1/65536 并截断在 :一个真实概率 的符号出现时,码长比 多还是少?一个 的符号呢?
参考答案
(a) 每编码一个概率为 的符号,区间按比例缩小为原来的 倍。(b) 长度为 的区间里总有一个形如 的点,,所以约 比特。(c) 被截断成 ,码长 16 bit < 真实的 19.9 bit——这个罕见符号反而便宜了;代价是其他符号的概率被压低一点。 被量化成 ,码长 bit,比真实的 bit 多——量化让”几乎确定”的符号也要付一点钱。代码里比特流多出的 0.5–1.3 bit 主要来自这两类效应和结尾。
练习 3(KDE 的偏差—方差) 一维、高斯核。(a) 说明 ,带宽越大偏差越大。(b) 说明 ,带宽越小方差越大。(c) 推广到 维:方差 ,偏差 。平衡两者,最优 ,均方误差 。和代码 02 第 2 部分的数字对照。
参考答案
(a) ;泰勒展开 。(b) 。(c) 偏差² 、方差 ,令导数为零得 ,误差 。:, 涨 10 倍误差乘 0.52——代码里 0.113 → 0.065 → 0.039 → 0.022(每次约 0.57–0.60 倍),一致。 越大,指数越接近 0。
练习 4(重要性采样为什么是下界) (a) 证明 ,但 。(b) 用 delta 方法说明偏差 , 是单个重要性权重。(c) 如果提议 在后验质量的 90% 所在的区域里几乎为零,为什么 很大时偏差仍然很大?
参考答案
(a) ; 是凹函数,由 Jensen 得到不等式。(b) ,取期望:第二项为 0,第三项 。(c) 几乎不在那个区域采样,但那里的权重 极大: 巨大甚至无穷,delta 方法的近似失效。实际看到的是: 个样本几乎都落在 的区域,只”看到”后验的 10%,估计约为 ,偏差约 nat,只有当 大到能偶尔抽到那 90% 的区域时才会突然跳上去——代码 03 里误差最大的图在 万时仍差 5.8 nat。
练习 5(Inception Score 的上限与”作弊”) (a) 证明 类别数 ,并且 。(b) 构造一个只生成 张图(每类一张最典型的)的”模型”,它的 IS 是多少?(c) 这和代码 04 的哪一行对应?
参考答案
(a) 。(b) 若每张图被分类器确信地分到一类、各类等概率,、,IS ——满分,尽管模型只会生成 张图。(c) “干净的模板”(IS 3.88,接近真实形状比例下的上限 3.92)和”类内坍塌”(3.62,超过真实分布)。
练习 6(FID 的偏差) 设真实分布和生成分布相同,都是 ,各取 个样本。(a) 说明 。(b) 直观解释为什么协方差那一项的期望也是正的。(c) 由此说明 FID 的偏差大约 ,和代码 04 第 2 部分对照()。
参考答案
(a) ,期望平方范数 。(b) 两个样本协方差 、 都是 加上独立的随机扰动; 是两个不同矩阵之间的”距离”,只有两者完全相同时才为 0,扰动让它系统地为正(大约是扰动的平方范数, 量级的常数乘以小因子)。(c) 两项都 。代码里 = 200 → 2,000 时 FID 0.455 → 0.041,约 11 倍,接近 。(这里的特征不是标准正态,数值不能直接代入 ,但标度一致。)
练习 7(precision、recall 与 k) (a) 用 近邻球定义的”真实流形”, 增大时 precision 和 recall 怎样变化?(b) 对”干净的模板”,为什么 precision = 1、recall = 0.04?(c) 如果把真实样本也换成干净的模板,precision 和 recall 会怎样?
参考答案
(a) 越大球越大、流形越”胖”,precision 和 recall 都单调不减——它们只有在相同的 下才可比。(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) ,同质性 0;,完整性按约定为 1;V-measure 0。(b) 同质性 1(每簇只有一个点、一个类别); 很大,完整性接近 0;V-measure 接近 0。(c) 调和平均在任一项接近 0 时就接近 0,防止用极端的聚类(一个簇、每点一簇)骗过单个指标——和 F1 用调和平均的理由相同。
练习 9(旋转不变性) (a) 证明 对正交矩阵 成立。(b) 说明旋转后的模型 。(c) 旋转后的编码器协方差 不再是对角的。如果我们要求编码器必须输出对角协方差,旋转后的模型还在模型族里吗?这和”对角后验提供了归纳偏置”有什么关系?
参考答案
(a) KL ,这四项在 、 下都不变(迹、范数、行列式对正交变换不变)。(b) (,雅可比行列式为 1)。(c) 不在:VAE 的编码器族只包含对角高斯,旋转后的真实后验(近似)不是对角的,ELBO 会变差(近似误差变大)。所以 ELBO 在”后验恰好近似对角”的坐标系里最好——这就是 Rolinek et al.(2019)说的对角后验偏好某些坐标轴。代码 05 里旋转后的 ELBO 完全不变,是因为我们把旋转后的协方差(非对角)原样保留了,而没有把它限制回对角。
练习 10(动手:给自己的模型挑尺子)
假设你训练了一个模型来补全被遮住一半的像素世界图片(第 1 讲 inpaint)。设计一个评价方案:哪些指标适合?用真实分布可以算出什么”标准答案”?(提示:PixelWorld.inpaint 和 log_prob(X, mask)。)
参考答案(思路)
补全的目标是从 采样。(1) 条件似然:测试集上的 ,下限是真实的条件熵(可由 log_prob(X) − log_prob(X, mask) 精确算出)。(2) 样本质量:补全结果在真实分布下的 ,以及条件 precision / recall(对同一个观测补全多次,和 inpaint 给出的真实条件样本比较)。(3) 多样性:同一个观测的多次补全是否覆盖了所有可能的形状(真实后验 posterior(X, mask) 给出每种配置的概率)。(4) 下游:补全后的图被形状分类器分对的比例。具体用哪个,取决于你在乎”最可能的答案”还是”所有可能的答案”。
11. 延伸阅读 · Further reading
原课材料
- CS236 Fall 2023 Lecture 15 slides:https://deepgenerativemodels.github.io/assets/slides/lecture15.pdf
似然与压缩
- 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 报告样本质量——两者给出的结论并不总是一致。