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散度对批次分布的敏感度上。不同批次的隐变量分布如果差异太大,生成质量就会抖动。这个我们在后面第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的生成质量很高,但训练难度也大。梯度消失、模式崩塌、不收敛——这些坑我基本上都踩过一遍。改良版如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) )
模型预测每个时间步的噪声,然后逐步去除
扩散模型虽然生图质量高,但采样速度是硬伤。我之前尝试加速时,发现训练集划分对噪声预测影响很大——如果某个时间步对应的样本批次数量不均,模型在那个步长上的去噪能力就会偏弱。
2.4 三种模型的对比
聊完各自的原理,我用一个表格来对比一下它们对训练集划分的敏感度:
| 模型 | 核心原理 | 训练稳定性 | 生成质量 | 批次效应风险 |
|---|---|---|---|---|
| VAE | 编码-采样-解码 | 稳定收敛快 | 中等(模糊) | 中(依赖KL平衡) |
| GAN | 生成器 vs 判别器 | 不稳定易崩 | 高(细节好) | 高(模式崩塌风险) |
| 扩散模型 | 逐步加噪-去噪 | 稳定但慢 | 极高(细节完美) | 中(时间步分布敏感) |
为什么会这样?说白了,每种模型对数据分布的学习方式不一样。
- VAE学的是隐空间分布,批次差异会直接影响KL散度的计算。
- GAN依赖判别器的梯度反馈,批次多样性一差,生成器马上跑偏。
- 扩散模型按时间步拆解任务,批次分配不均会导致某些步长学不好。
2.5 知识结构总览
为了方便理解,我把这一章的核心逻辑画成了一张图——三种模型从随机噪声到生成数据的路径。你看看,区别挺明显的。
你看图就能明白:VAE依赖隐空间采样,GAN依赖两个网络的对抗,扩散模型依赖时间步调度。每种路径都绕不开批次数据,一旦批次分布出现系统性偏差,生成效果就会打折扣。
嗯,这一章先把模型本身聊透。后面我们会拆解每种模型在训练集划分不当时的具体表现,以及怎么从批次效应角度去规避它们。