深度生成模型旨在学习数据的概率分布 P(x),从而能够生成新的样本。主要分三大主流框架:
- 自回归模型(Autoregressive Models):显式建模可分解密度
- 变分自编码器(VAE):通过变分推断近似隐变量后验
- 生成对抗网络(GAN):通过对抗训练隐式学习分布
一、生成模型概述
判别模型(Discriminative)
- 建模条件概率 P(y∣x)
- 直接学习决策边界
- 目标:对输入进行分类或回归
- 代表:Logistic Regression, SVM, CNN 分类器
生成模型(Generative)
- 建模联合概率 P(x) 或 P(x,z)
- 学习数据的完整分布
- 目标:能够生成新的逼真样本
- 代表:VAE, GAN, Flow Models
| 类别 | 方法 | 核心思想 | 代表模型 |
|---|
| 显式-可解析 | 自回归分解 | P(x)=∏iP(xi∣x1,…,xi−1) | PixelRNN, PixelCNN, WaveNet |
| 显式-近似 | 变分推断 | 引入隐变量,最大化证据下界 ELBO | VAE, NVIL |
| 隐式密度 | 对抗训练 | 生成器与判别器博弈 | GAN, WGAN, DCGAN |
二、变分自编码器(VAE)
传统自编码器(Autoencoder)通过编码器将输入压缩为低维表示 z=fθ(x),再通过解码器重建 x^=gϕ(z)。训练目标是最小化重建误差:
LAE=∥x−gϕ(fθ(x))∥2
传统自编码器的问题
- 隐空间缺乏结构:不同样本的编码可能不连续、不规整
- 无法从隐空间随机采样生成有意义的新样本
- 没有概率解释,不是真正的生成模型
VAE 的关键创新:不再将输入编码为确定性的点,而是编码为一个概率分布。编码器输出隐变量的均值 μ 和方差 σ2,从该分布中采样得到 z。
假设数据由如下过程生成:
- 从先验分布采样隐变量:z∼p(z)=N(0,I)
- 由隐变量生成观测数据:x∼pθ(x∣z)
数据的边际似然为:
pθ(x)=∫pθ(x∣z)p(z)dz
关键困难:该积分在高维空间中不可解析计算(intractable),因为需要对所有可能的 z 求积分。同样,真实后验 pθ(z∣x)=pθ(x)pθ(x∣z)p(z) 也不可解。
引入一个可学习的近似后验分布 qϕ(z∣x)(由编码器参数化),来近似真实后验 pθ(z∣x)。
对数据对数似然进行分解:
logpθ(x)=Eqϕ(z∣x)[logqϕ(z∣x)pθ(x,z)]+DKL(qϕ(z∣x)∥pθ(z∣x))
由于 KL 散度非负,我们得到证据下界(ELBO):
ELBO(Evidence Lower BOund)
logpθ(x)≥重建项Eqϕ(z∣x)[logpθ(x∣z)]−正则化项DKL(qϕ(z∣x)∥p(z))=ELBO
- 重建项:鼓励解码器从 z 准确重建 x
- KL 散度项:迫使近似后验接近先验 N(0,I),保证隐空间的规整性
当 qϕ(z∣x)=N(μ,diag(σ2)) 且 p(z)=N(0,I) 时,KL 散度有解析解:
DKL(qϕ(z∣x)∥p(z))=−21∑j=1J(1+logσj2−μj2−σj2)
其中 J 是隐变量维度。
问题:训练中需要对 ELBO 求梯度,但采样操作 z∼qϕ(z∣x) 是随机的,梯度无法通过随机采样节点反向传播。
解决方案:将随机性从计算图中分离出来:
z=μ+σ⊙ϵ,ϵ∼N(0,I)
不可微路径
z∼N(μ,σ2)
梯度被随机采样阻断
重参数化路径
z=μ+σ⊙ϵ
梯度可通过 μ 和 σ 正常流动
最终的训练损失为负 ELBO:
LVAE(θ,ϕ;x)=−Eqϕ(z∣x)[logpθ(x∣z)]+DKL(qϕ(z∣x)∥p(z))
实际训练中使用蒙特卡洛估计重建项(通常单次采样即可):
L≈−logpθ(x∣z(l))+DKL(qϕ(z∣x)∥p(z)),z(l)=μ+σ⊙ϵ(l)
| 组件 | 具体形式 | 作用 |
|---|
| 编码器 qϕ(z∣x) | 输出 μ,logσ2 | 近似后验推断 |
| 解码器 pθ(x∣z) | Bernoulli(二值图像)或 Gaussian | 由隐变量重建数据 |
| 先验 p(z) | N(0,I) | 正则化隐空间 |
| 重建损失 | 交叉熵或 MSE | 保证重建质量 |
| KL 损失 | 解析公式 | 保证隐空间连续可采样 |
三、生成对抗网络(GAN)
GAN 的核心思想来源于博弈论:训练两个相互对抗的网络。
生成器 G(Generator)
- 输入:随机噪声 z∼pz(z)(通常为高斯或均匀分布)
- 输出:伪造样本 G(z)
- 目标:生成尽可能逼真的样本,欺骗判别器
判别器 D(Discriminator)
- 输入:真实样本 x 或生成样本 G(z)
- 输出:样本为真实的概率 D(x)∈[0,1]
- 目标:准确区分真实样本和伪造样本
GAN 目标函数
minGmaxDV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[log(1−D(G(z)))]
- 判别器 D 试图最大化V(D,G):正确分类真假样本
- 生成器 G 试图最小化V(D,G):让 D(G(z)) 尽可能大
固定 G,对 V(D,G) 关于 D 求最优解:
D∗(x)=pdata(x)+pg(x)pdata(x)
推导:对于任意 x,V 关于 D(x) 的被积函数为 f(D)=pdata(x)logD+pg(x)log(1−D),对 D 求导令其为零:
Dpdata(x)−1−Dpg(x)=0⟹D∗(x)=pdata(x)+pg(x)pdata(x)
将 D∗ 代入 V(D∗,G):
V(D∗,G)=Ex∼pdata[logpdata(x)+pg(x)pdata(x)]+Ex∼pg[logpdata(x)+pg(x)pg(x)]
=−log4+2⋅DJS(pdata∥pg)
关键结论:在最优判别器下,最小化生成器的目标等价于最小化 pdata 与 pg 之间的 Jensen-Shannon 散度。当且仅当 pg=pdata 时,V(D∗,G) 达到全局最小值 −log4。
GAN 的训练采用交替优化:
- 从真实数据采样 mini-batch {x(1),...,x(m)}
- 从噪声分布采样 {z(1),...,z(m)}
- 更新判别器(梯度上升):∇θdm1∑i=1m[logD(x(i))+log(1−D(G(z(i))))]
- 重新采样噪声 {z(1),...,z(m)}
- 更新生成器(梯度下降):∇θgm1∑i=1mlog(1−D(G(z(i))))
实践技巧:在训练初期,G 很弱,D(G(z))≈0,此时 log(1−D(G(z))) 的梯度饱和(接近于 0)。实践中最大化 logD(G(z)) 代替最小化 log(1−D(G(z))),能提供更强的梯度信号。
| 问题 | 描述 | 表现 |
|---|
模式崩塌 Mode Collapse | 生成器只学会生成少数几种样本,忽略数据分布的多样性 | 生成的图像缺乏多样性 |
| 训练不稳定 | G 和 D 的平衡难以维持,容易出现振荡 | 损失曲线震荡不收敛 |
| 无收敛保证 | minimax 博弈在一般神经网络参数化下不保证收敛到纳什均衡 | 训练难以判断何时终止 |
| 评估困难 | 缺乏明确的量化指标判断生成质量 | 需要 FID、IS 等辅助指标 |
四、GAN 变体
DCGAN 将卷积网络引入 GAN 框架,是第一个成功稳定训练 GAN 的卷积架构。
DCGAN 架构指南
- 用步幅卷积(strided convolution)替代池化层
- G 和 D 中均使用 Batch Normalization
- 去除全连接层(最后一层除外)
- 生成器使用 ReLU 激活(最后一层 Tanh)
- 判别器使用 LeakyReLU 激活
生成器结构:噪声向量 z∈R100 经过多层转置卷积(反卷积)逐步上采样为图像:
zReshape4×4×1024DeConv8×8×512DeConv16×16×256DeConv32×32×128DeConv64×64×3
问题:当 pdata 和 pg 的支撑集不重叠时(高维空间中几乎总是如此),JS 散度恒等于 log2,梯度为 0,导致生成器无法学习。
Earth Mover's Distance(推土机距离):衡量将一个分布"搬运"成另一个分布所需的最小工作量:
W(pdata,pg)=infγ∈Π(pdata,pg)E(x,y)∼γ[∥x−y∥]
其中 Π(pdata,pg) 是所有以 pdata 和 pg 为边际分布的联合分布集合。
利用 Kantorovich-Rubinstein 对偶性:
W(pdata,pg)=sup∥f∥L≤1Ex∼pdata[f(x)]−Ex∼pg[f(x)]
WGAN 目标
minGmax∥D∥L≤1Ex∼pdata[D(x)]−Ez∼pz[D(G(z))]
判别器(Critic)不再输出概率,而是输出实数得分。通过权重裁剪(weight clipping)w∈[−c,c] 来强制 Lipschitz 约束。
- Wasserstein 距离在分布不重叠时仍能提供有意义的梯度
- 训练更稳定,损失曲线与生成质量相关
- 减少模式崩塌
通过引入条件信息 y(如类别标签),控制生成内容:
minGmaxDV(D,G)=Ex∼pdata[logD(x∣y)]+Ez∼pz[log(1−D(G(z∣y)∣y))]
- 生成器:G(z,y),将噪声 z 和条件 y 拼接后生成
- 判别器:D(x,y),同时接收样本和条件来判断真假
- 应用:按类别生成特定数字、按文本描述生成图像
InfoGAN 通过最大化互信息来学习解耦的隐表示:
将噪声分为两部分:z(不可压缩噪声)和 c(隐编码)。目标是使 c 和 G(z,c) 之间的互信息最大:
minGmaxDV(D,G)−λI(c;G(z,c))
由于互信息不可直接计算,使用变分下界近似:
I(c;G(z,c))≥Ec∼p(c),x∼G(z,c)[logQ(c∣x)]+H(c)=LI(G,Q)
其中 Q(c∣x) 是辅助网络,用于从生成样本预测隐编码。
InfoGAN 的价值:无需标签即可自动发现数据中有意义的变化因子(如 MNIST 中的数字类型、倾斜角度、笔画粗细等)。
| 模型 | 核心创新 | 目标函数改进 | 优势 | 局限 |
|---|
| DCGAN | 卷积架构设计原则 | 无(原始 GAN 目标) | 训练更稳定,图像质量提升 | 仍有模式崩塌 |
| WGAN | Wasserstein 距离替代 JS 散度 | Critic + weight clipping | 梯度有意义,损失可监控 | weight clipping 限制网络容量 |
| CGAN | 条件信息引导生成 | G(z,y) 和 D(x,y) | 可控生成 | 需要标签数据 |
| InfoGAN | 最大化互信息学习解耦表示 | 增加互信息正则项 | 无监督发现语义因子 | 训练复杂度增加 |
五、VAE 与 GAN 对比
| 维度 | VAE | GAN |
|---|
| 密度建模 | 显式(近似):最大化 ELBO | 隐式:不直接建模密度 |
| 训练方式 | 最大似然(变分推断) | 对抗博弈(minimax) |
| 生成质量 | 倾向模糊(均值回归效应) | 图像锐利、细节丰富 |
| 多样性 | 覆盖性好(mode covering) | 易模式崩塌(mode dropping) |
| 隐空间 | 结构化、连续、可插值 | 不保证连续性 |
| 训练稳定性 | 稳定(标准 SGD 优化) | 不稳定(需精心调参) |
| 评估 | 可计算 ELBO 作为指标 | 缺乏内在评估指标 |
| 数学基础 | 变分推断、贝叶斯框架 | 博弈论、对偶理论 |
| 典型应用 | 表示学习、异常检测、插值 | 高质量图像生成、超分辨率 |
六、GAN 应用
SRGAN 使用对抗训练将低分辨率图像恢复为高分辨率图像。损失函数包含:
- 内容损失:基于 VGG 特征的感知损失 LVGG=∥F(IHR)−F(G(ILR))∥2
- 对抗损失:使超分结果在判别器看来像真实高清图
利用 GAN 填补图像中缺失或损坏的区域。生成器学习根据周围上下文信息合理补全内容,判别器确保补全部分与原图风格一致。
CycleGAN 实现无配对的图像到图像翻译(如照片到油画、马到斑马)。核心创新:
- 两对生成器-判别器:G:X→Y,F:Y→X
- 循环一致性损失:Lcyc=∥F(G(x))−x∥1+∥G(F(y))−y∥1
- 无需成对训练数据,只需两组无关联的图像集合
StackGAN 将文本描述转换为高分辨率图像,采用两阶段生成:
- Stage-I:根据文本编码生成低分辨率草图(64×64)
- Stage-II:在草图基础上细化生成高分辨率图像(256×256)
七、相关公式
| 公式名称 | 表达式 |
|---|
| VAE ELBO | logp(x)≥Eq(z∣x)[logp(x∣z)]−DKL(q(z∣x)∥p(z)) |
| 重参数化 | z=μ+σ⊙ϵ,ϵ∼N(0,I) |
| KL 散度(高斯) | DKL=−21∑j(1+logσj2−μj2−σj2) |
| GAN 目标 | minGmaxDEx[logD(x)]+Ez[log(1−D(G(z)))] |
| 最优判别器 | D∗(x)=pdata(x)+pg(x)pdata(x) |
| WGAN 目标 | minGmax∥D∥L≤1Ex[D(x)]−Ez[D(G(z))] |
| CycleGAN 循环一致性 | ∥F(G(x))−x∥1+∥G(F(y))−y∥1 |