2. 生成模型基础:VAE、GAN、扩散模型简介

要理解训练集划分怎么影响生成模型,得先搞明白这些模型到底在干嘛。

说白了,生成模型的核心目标就一个——拟合真实数据分布,然后从中采样出全新的样本。你给它一堆猫图,它学完能画出一只从来没人见过的猫。这个能力在图像生成、数据增强、跨模态翻译里都有大用。

我刚开始接触生成模型时,最喜欢拿MNIST手写数字做实验。效果直观,调试方便。但后来碰到医疗影像数据,才发现批次效应那才叫一个头疼——这些我们后面再细聊。先看三个最主流的生成模型。

2.1 变分自编码器(VAE)

VAE的思路非常直觉:把输入压缩成一个概率分布,再从这个分布里采样,重建出原始数据。它不像普通自编码器那样学一个固定的编码,而是学一个均值和方差,然后从高斯分布里采样。这样做的好处是,隐空间变得连续且平滑。

数学上,VAE优化的目标是证据下界(ELBO):

ELBO = E[ log p(x|z) ] - KL( q(z|x) || p(z) )

第一项:重建损失,让生成的数据尽量接近输入
第二项:KL散度,让学到的隐分布接近标准高斯分布

我记得第一次跑VAE时,发现输出全是模糊的。调试了半天,发现是KL项的权重没调好。让模型太“懒”了,直接忽略z去重建,结果啥也没学到。

小提示:训练VAE时,重建损失和KL项需要平衡。我习惯先固定重建损失(比如MSE或BCE),再逐渐增大KL的系数,从0.001开始慢慢试。

VAE的批次效应问题主要出在KL散度对批次分布的敏感度上。不同批次的隐变量分布如果差异太大,生成质量就会抖动。这个我们在后面第10章会详细讲。

2.2 生成对抗网络(GAN)

GAN可以说是生成模型里最有“对抗感”的。它让两个网络互相对抗——生成器负责造假,判别器负责打假。一开始生成器只会瞎蒙,判别器一眼就能识破。随着训练推进,生成器越来越强,直到判别器完全分不清真伪。

训练目标是极小极大博弈:

min_G max_D V(D,G) = E[ log D(x) ] + E[ log(1 - D(G(z))) ]

生成器想让 D(G(z)) 接近1,骗过判别器
判别器想让 D(x) 接近1,D(G(z)) 接近0,区分真伪

我在项目中遇到过GAN训练不稳定的情况——生成器突然崩了,输出全是噪声。这大概率是模式崩塌(mode collapse)。生成器发现只要输出一种假样本就能骗过判别器,之后就不再探索其他模式了。

注意:GAN对批次大小和数据分布极其敏感。如果训练集划分不当,某一批全是同一类样本,判别器会过拟合,生成器立刻跟着崩。我建议至少保证每个批次类别的多样性。

GAN的生成质量很高,但训练难度也大。梯度消失、模式崩塌、不收敛——这些坑我基本上都踩过一遍。改良版如WGAN、LSGAN能缓解一部分,但批次效应依然是个隐患。

2.3 扩散模型(Diffusion Model)

扩散模型是近年来的新星。它的思路和VAE、GAN完全不同——通过逐步加噪破坏数据,再学一个反向去噪过程来重建数据。简单来说,先给你的猫图加200步高斯噪声,直到变成纯噪声,然后训练一个U-Net从噪声里一步步把猫“去噪”回来。

前向过程是固定的马尔可夫链:

q(x_t | x_{t-1}) = N( sqrt(1-β_t)·x_{t-1}, β_t·I )

β_t是噪声调度参数,随时间增加
最终x_T接近标准高斯分布

反向过程是学习的:

p_θ(x_{t-1} | x_t) = N( μ_θ(x_t, t), Σ_θ(x_t, t) )

模型预测每个时间步的噪声,然后逐步去除

扩散模型虽然生图质量高,但采样速度是硬伤。我之前尝试加速时,发现训练集划分对噪声预测影响很大——如果某个时间步对应的样本批次数量不均,模型在那个步长上的去噪能力就会偏弱。

关键点:扩散模型训练时,每个时间步t的样本应该是均匀采样的。如果训练集划分让某个时间步的样本批次过于集中,模型就会“偏爱”那一段噪声水平,其他步长上的生成质量就会下降。

2.4 三种模型的对比

聊完各自的原理,我用一个表格来对比一下它们对训练集划分的敏感度:

模型 核心原理 训练稳定性 生成质量 批次效应风险
VAE 编码-采样-解码 稳定收敛快 中等(模糊) 中(依赖KL平衡)
GAN 生成器 vs 判别器 不稳定易崩 高(细节好) 高(模式崩塌风险)
扩散模型 逐步加噪-去噪 稳定但慢 极高(细节完美) 中(时间步分布敏感)

为什么会这样?说白了,每种模型对数据分布的学习方式不一样。

  • VAE学的是隐空间分布,批次差异会直接影响KL散度的计算。
  • GAN依赖判别器的梯度反馈,批次多样性一差,生成器马上跑偏。
  • 扩散模型按时间步拆解任务,批次分配不均会导致某些步长学不好。

2.5 知识结构总览

为了方便理解,我把这一章的核心逻辑画成了一张图——三种模型从随机噪声到生成数据的路径。你看看,区别挺明显的。

图2-1 三种生成模型的生成路径对比 随机噪声 z 输入 x 编码器 → 隐分布 q(z|x) 采样 z ~ N(μ, σ²) 解码器 重建为 x' VAE 生成器 G(z) 直接生成假样本 判别器 D(x) 判断真伪并反馈 对抗博弈 G和D迭代优化 GAN 前向加噪 q(x_t | x_{t-1}) 逐步加噪到纯噪 x_0 → ... → x_T 反向去噪 p_θ(x_{t-1} | x_t) 扩散 说明:VAE通过编码-采样-解码重建;GAN通过生成器和判别器的对抗博弈;扩散模型通过前向加噪和反向去噪

你看图就能明白:VAE依赖隐空间采样,GAN依赖两个网络的对抗,扩散模型依赖时间步调度。每种路径都绕不开批次数据,一旦批次分布出现系统性偏差,生成效果就会打折扣。

嗯,这一章先把模型本身聊透。后面我们会拆解每种模型在训练集划分不当时的具体表现,以及怎么从批次效应角度去规避它们。