VAE · latent variable
Encoder 产生 q(z|x) 的 μ/logσ²;采样 z;decoder 重建 x。loss 同时奖励重建并把 latent distribution 拉向 prior。
EECS498 · Optional Review · 14
分类学习 x→y;生成建模要描述“像数据的 x 从哪里来”。A6 里你走了两条不同路线:显式 latent-variable objective 与 adversarial game。
30-second recall
你实现了 VAE/CVAE、reparameterization、ELBO loss,以及 FC/LS/DC GAN 的 generator、discriminator 与 losses。
Classifier 只需画 decision boundary;generator 必须学到数据分布足够多的结构,才能从随机性产生新样本。它需要回答“随机性放在哪里”与“什么叫生成得像”。
Encoder 产生 q(z|x) 的 μ/logσ²;采样 z;decoder 重建 x。loss 同时奖励重建并把 latent distribution 拉向 prior。
Generator 把 noise 变成样本;discriminator 区分 real/fake。Generator 从“骗过判别器”获得可学习信号。
VAE 为每个数据点学习一个可采样 latent distribution;GAN 不写显式 likelihood,而让一个学习中的 critic 定义“哪里还不像数据”。
直接写 z ~ Normal(μ,σ) 看似把 sampling 挡在计算图中。改写成 ε~Normal(0,I)、z=μ+σ⊙ε,随机性移到无参数 ε,μ/σ 到 z 仍是可微函数。
Your code · 2023
A6/vae.py · reparametrize()
epsilon = torch.randn_like(logvar)
sigma = torch.exp(0.5 * logvar)
z = sigma * epsilon + mu
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()
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)
)
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。
只做 reconstruction,latent space 可变成任意离散编码,无法可靠从 prior 采样;只做 KL,所有 inputs 会坍缩到 prior,decoder 得不到样本信息。两项在 fidelity 与可采样结构之间拉扯。
Common misconceptions:GAN 的 discriminator accuracy 越高不代表整体越好;若 D 完全压制 G,generator gradient 可能很差。VAE 的 latent vector 也不是自动拥有可命名语义轴。
Diffusion 与 autoregressive LLM 选择了不同生成 factorization,但同样需要把随机性/条件信息变成逐步可优化的 prediction objective。Transformer arithmetic 模型是离散 autoregressive generation;VAE/GAN 是图像生成的另外两种训练原则。
[64,15]。ε、σ、μ 逐元素组合,不改变 latent shape。
Encoder latent aggregate 不必接近采样 prior;从标准 Normal 抽到的 z 可能落在 decoder 从未训练过的区域。
Generator 的目标是让 D 对 fake 输出 real;梯度通过固定的 D 回到 G 参数。
输入侧把 flattened x 与 one-hot c concat,decoder 侧再把 sampled z 与 c concat,使编码与生成都受 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。
可退化成 stochastic autoencoder:每个 x 的 latent islands 可任意散开,从标准 prior 随机采样未必落在 decoder 见过的区域。
Generator 可能得到弱或不稳定 learning signal;双方 capacity/optimization balance 是训练 dynamics 的一部分。
GAN 没有显式 likelihood 不等于“没有 loss”;它有 adversarial objectives,只是不会直接给每个 x 一个 normalized density。
通常同时条件化 encoder 与 decoder,使 posterior 和 generation 都知道目标属性;具体以历史实现接口为准。
Transformer language model 的 latent randomness 通常来自哪里:每个 sequence 的显式 z,还是 token sampling?这与 VAE 的 latent-variable modeling 有何不同?
至此主线闭合:无论 discriminative、autoregressive 或 latent generation,训练仍是 representation → prediction/objective → gradient → parameter update。
Based on your implementation