EECS498 · Optional Review · 14

Generative Modeling: VAE and GAN

分类学习 x→y;生成建模要描述“像数据的 x 从哪里来”。A6 里你走了两条不同路线:显式 latent-variable objective 与 adversarial game。

55–70 分钟 A6 Optional review

30-second recall

30 秒回忆

你实现了 VAE/CVAE、reparameterization、ELBO loss,以及 FC/LS/DC GAN 的 generator、discriminator 与 losses。

  1. VAE 的 z 如何保持可反传?
  2. reconstruction 与 KL 各约束什么?
  3. GAN 为什么需要两个网络的对抗目标?

Why Is Generation Different?

Classifier 只需画 decision boundary;generator 必须学到数据分布足够多的结构,才能从随机性产生新样本。它需要回答“随机性放在哪里”与“什么叫生成得像”。

VAE · latent variable

Encoder 产生 q(z|x) 的 μ/logσ²;采样 z;decoder 重建 x。loss 同时奖励重建并把 latent distribution 拉向 prior。

GAN · adversarial signal

Generator 把 noise 变成样本;discriminator 区分 real/fake。Generator 从“骗过判别器”获得可学习信号。

Mental model

VAE 为每个数据点学习一个可采样 latent distribution;GAN 不写显式 likelihood,而让一个学习中的 critic 定义“哪里还不像数据”。

VAE Data Flow

image x [N,1,28,28]
encoder μ,logvar [N,Z]
sample z [N,Z]
decoder x̂ [N,1,28,28]
ELBO loss recon + KL

Why Reparameterization?

直接写 z ~ Normal(μ,σ) 看似把 sampling 挡在计算图中。改写成 ε~Normal(0,I)、z=μ+σ⊙ε,随机性移到无参数 ε,μ/σ 到 z 仍是可微函数。

Your code · 2023

A6/vae.py · reparametrize()

View source →
epsilon = torch.randn_like(logvar)
sigma = torch.exp(0.5 * logvar)
z = sigma * epsilon + mu

GAN Data Flow

z ~ noise [N,Z] → Generator → fake images [N,784]
real images ────────────────┐
fake images ────────────────┴→ Discriminator → real/fake logits

update D: separate real from fake
update G: make fake score as real

Your code · 2023

A6/gan.py · discriminator_loss()

View source →
loss = F.binary_cross_entropy_with_logits(
    logits_real, torch.ones_like(logits_real)
) + F.binary_cross_entropy_with_logits(
    logits_fake, torch.zeros_like(logits_fake)
)

Experiment Evidence

Repository 保存 vae_generation.jpg、conditional_vae_generation.jpg、fc_gan_results.jpg、ls_gan_results.jpg、dc_gan_results.jpg。GAN Notebook 的四组 loss checks 均保存为 zero maximum error;VAE/CVAE 有 10-epoch loss outputs。

Why Two Objectives in VAE?

只做 reconstruction,latent space 可变成任意离散编码,无法可靠从 prior 采样;只做 KL,所有 inputs 会坍缩到 prior,decoder 得不到样本信息。两项在 fidelity 与可采样结构之间拉扯。

Common misconceptions:GAN 的 discriminator accuracy 越高不代表整体越好;若 D 完全压制 G,generator gradient 可能很差。VAE 的 latent vector 也不是自动拥有可命名语义轴。

Then vs Now

Diffusion 与 autoregressive LLM 选择了不同生成 factorization,但同样需要把随机性/条件信息变成逐步可优化的 prediction objective。Transformer arithmetic 模型是离散 autoregressive generation;VAE/GAN 是图像生成的另外两种训练原则。

Concept Checks

μ/logvar=[64,15],采样 z 的 shape?

[64,15]。ε、σ、μ 逐元素组合,不改变 latent shape。

若 KL weight=0,VAE 还可重建,为何生成可能坏?

Encoder latent aggregate 不必接近采样 prior;从标准 Normal 抽到的 z 可能落在 decoder 从未训练过的区域。

训练 G 时为什么 fake target 常设为 real label?

Generator 的目标是让 D 对 fake 输出 real;梯度通过固定的 D 回到 G 参数。

Conditional VAE 在代码中把 class c 放在哪里?

输入侧把 flattened x 与 one-hot c concat,decoder 侧再把 sampled z 与 c concat,使编码与生成都受 class 条件控制。

Depth Lab · 生成不是多一个 class

Classifier 学 p(y|x) 的决策;generator 要描述可能的 x 本身。A6 的 VAE/CVAE 与 GAN 给出了两条不同训练信号:显式 latent-variable objective 与 adversarial discrimination。

一维 VAE posterior 设 μ=1.0, σ=0.5,采样 ε=-0.4:

z = μ + σ·ε = 1.0 + 0.5×(-0.4) = 0.8

reconstruction: decoder(z) should explain x
KL: q(z|x) should not drift arbitrarily far from prior

重参数化把 randomness 移到 ε,使 z 对 μ/σ 仍是可微 deterministic expression。

  1. Encoder 输出 latent distribution parameters,不是唯一 code。
  2. Reparameterization 允许 reconstruction gradient 回到 encoder。
  3. KL 正则使 latent space 可从 prior 采样。
  4. GAN discriminator 学 real/fake distinction。
  5. Generator 通过 discriminator gradient 学会产生更像 data 的 samples。
VAE 若没有 KL?

可退化成 stochastic autoencoder:每个 x 的 latent islands 可任意散开,从标准 prior 随机采样未必落在 decoder 见过的区域。

GAN 若 discriminator 永远完美?

Generator 可能得到弱或不稳定 learning signal;双方 capacity/optimization balance 是训练 dynamics 的一部分。

Misconception diagnosis

GAN 没有显式 likelihood 不等于“没有 loss”;它有 adversarial objectives,只是不会直接给每个 x 一个 normalized density。

CVAE 的 condition y 应进入哪里?

通常同时条件化 encoder 与 decoder,使 posterior 和 generation 都知道目标属性;具体以历史实现接口为准。

Transfer Question

Transformer language model 的 latent randomness 通常来自哪里:每个 sequence 的显式 z,还是 token sampling?这与 VAE 的 latent-variable modeling 有何不同?

闭卷解释

  1. 从 gradient path 解释 reparameterization。
  2. 为什么 reconstruction 与 KL 是拉扯?
  3. GAN generator 从哪里获得“更真实”的方向?

Connection

至此主线闭合:无论 discriminative、autoregressive 或 latent generation,训练仍是 representation → prediction/objective → gradient → parameter update。

Based on your implementation