A6 · GENERATIVE MODELS

VAE 与 GAN:两个不同的生成契约

分别审计显式变分目标与对抗博弈,不把“能生成图片”当作同一种机制。

ELBO accountingReparameterizationAdversarial diagnostics

Review Lab,不是作业答案。阅读现有实现,先预测,再运行小实验并解释证据;原始仓库快照是代码事实来源。

阶段 01

VAE 的目标函数

拆开 reconstruction 与 KL,并说清每一项约束谁。

为什么需要它

两项失衡会导致只重建或只贴近 prior。

开始前应该已经会回答

  • 能解释 approximate posterior
  • 会手算 μ=0,logvar=0 的 KL

输入、输出与契约

输入
x, μ, logvar, reconstruction
输出
scalar ELBO loss
不变量
  • reconstruction 与 KL 分项记录
  • batch/reduction convention 一致
不成立的假设
  • 只报告 total loss
  • 把 KL 符号写反

用最小例子检查

单维 μ=0,logvar=0 时手算 KL;再令 μ=1 比较。

如果你看到……

KL 为负

优先检查:公式符号/reduction

KL 很快接近 0 且 decoder 忽略 z

优先检查:posterior collapse

预测 → 实验 → 证据

先预测
增大 KL 权重会更强约束 latent,但可能牺牲 reconstruction。
做实验
固定模型与 batch,比较两个 KL weight 的分项轨迹。
留证据
  • recon
  • KL
  • latent statistics

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先单维检查

提示 2

分项打印

提示 3

确认 logvar 不是 std

闭卷检查 · VAE 的目标函数

  • KL 边界正确
  • 分项可复现
  • 能解释 trade-off
阶段 02

重参数化

让随机采样保留从 loss 到 μ/logvar 的可微路径。

为什么需要它

直接从参数化分布采样会让普通反向传播无法穿过随机节点。

开始前应该已经会回答

  • 能画随机节点计算图
  • 知道 exp(0.5 logvar) 的来源

输入、输出与契约

输入
μ, logvar, ε~N(0,I)
输出
z=μ+σ⊙ε
不变量
  • ε 不需 gradient
  • σ 由 logvar 正确转换
不成立的假设
  • 把 logvar 直接当 σ
  • 在 z 上 detach

用最小例子检查

μ=2,logvar=0,ε=-1 时手算 z,并预测 dz/dμ。

如果你看到……

μ/logvar grad 为 None

优先检查:detach/no_grad

variance 爆炸

优先检查:logvar→std 转换

预测 → 实验 → 证据

先预测
固定 ε 时 z 对 μ 的局部导数为 1;随机性来自多次 ε。
做实验
固定 seed 做 gradient check,再换 seed 看样本变化。
留证据
  • ε
  • z
  • μ/logvar grad

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

打印 grad_fn

提示 2

固定 epsilon

提示 3

单元素开始

闭卷检查 · 重参数化

  • toy z 正确
  • gradient path 存在
  • 能解释随机与可微并存
阶段 03

对抗博弈

分开 discriminator 与 generator 的目标、参数和 update。

为什么需要它

GAN 是动态博弈;一个网络的改进会改变另一个网络看到的 objective。

开始前应该已经会回答

  • 能解释 non-saturating G loss
  • 会区分 detach 的位置

输入、输出与契约

输入
real x, noise z
输出
D/G losses + samples
不变量
  • 每步只更新目标网络参数
  • fake 在 D/G step 的 gradient 边界正确
不成立的假设
  • 两个 optimizer 同时更新全部参数
  • 只看一方 loss 判断成功

用最小例子检查

一维参数分别属于 G/D,逐步写出 D step 与 G step 哪个 gradient 应存在。

如果你看到……

G 从不变化

优先检查:fake 是否在 G step 也 detach

D/G 参数同时变化

优先检查:optimizer param list/zero_grad

预测 → 实验 → 证据

先预测
D 太强可能让 G 梯度差;loss 平衡不保证样本多样。
做实验
记录两方 loss、gradient norm 与固定 noise samples。
留证据
  • D/G loss
  • D/G grad norm
  • fixed-noise grid

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先断言参数集合不交叉

提示 2

每步比较参数 diff

提示 3

固定噪声观察模式

闭卷检查 · 对抗博弈

  • 更新边界正确
  • 样本轨迹可比较
  • 不以单一 loss 下结论
阶段 04

生成模型的证据

用重建、采样、多样性与失败模式比较 VAE/GAN。

为什么需要它

不同目标没有一个共享的“训练 loss 越低越好”标尺。

开始前应该已经会回答

  • 能解释 blurry reconstruction 与 mode collapse
  • 知道 qualitative evidence 需要固定 protocol

输入、输出与契约

输入
trained models + fixed eval protocol
输出
mechanism-aware comparison
不变量
  • 固定输入/噪声便于纵向比较
  • 同时检查质量与覆盖
不成立的假设
  • 用 VAE loss 与 GAN loss 数值直接比较
  • 只挑最好样本

用最小例子检查

为 VAE 固定输入重建,为 GAN 固定 noise,写出各自最可能暴露的失败。

如果你看到……

样本漂亮但高度重复

优先检查:mode collapse/coverage

重建模糊但 latent 平滑

优先检查:像素 likelihood 与目标取舍

预测 → 实验 → 证据

先预测
VAE 通常有可解释 objective 与覆盖倾向;GAN 可能更锐利但训练/覆盖更难。
做实验
用固定网格、latent interpolation 与最近邻检查建立证据包。
留证据
  • 固定协议
  • 失败样本而非只放最好
  • 目标边界解释

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先定义成功标准

提示 2

每种模型用适合它的证据

提示 3

加入反例样本

闭卷检查 · 生成模型的证据

  • 比较不混用 loss 尺度
  • 质量与覆盖都有证据
  • 能解释两种机制为何不同

复盘与迁移