GAN系列
GAN 系列笔记
核心定义
生成对抗网络 (Generative Adversarial Network, GAN) 由 Ian Goodfellow 于 2014 年提出。它利用博弈论的思想,通过两个神经网络——生成器 (G) 和 判别器 (D) 的相互对抗,学习数据的分布并生成逼真的新样本。
1. 核心原理与架构
1.1 对抗流程
GAN 的本质是一个 Minimax Game (极小极大博弈)。
graph LR
Z["随机噪声 z"] --> G["生成器 G"]
G --> Fake["假样本 G(z)"]
Real["真实样本 x"] --> D["判别器 D"]
Fake --> D
D --> Result{"判断真/假"}
Result -.->|反馈梯度| G
Result -.->|反馈梯度| D1.2 目标函数
$$ \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))] $$- 判别器 D:目标是最大化 $V(D,G)$,即尽可能准确区分真假。
- 生成器 G:目标是最小化 $\log(1-D(G(z)))$,即让判别器无法区分真假。
2. 深度拆解:为什么 GAN 这么难训练?
2.1 理论症结:JS 散度的“病态”
原生 GAN 的目标函数在本质上是最小化真实分布 $P_r$ 与生成分布 $P_g$ 之间的 JS 散度。然而,JS 散度在 GAN 的场景下存在严重的数学缺陷。
核心难题:非重叠区域梯度消失
- 在高维空间中,真实分布 $P_r$ 和生成分布 $P_g$ 通常分布在低维流形上。
- 两个低维流形在整个高维空间中几乎不重叠(测度为 0)。
- 结论:当两个分布完全不重叠时,JS 散度恒等于常数 $\log 2$。常数的导数为 0,这意味着生成器 G 无法获得任何梯度信息来调整自己的权重,从而导致“原地打转”。
2.2 形象比喻:瞎子带路
判别器 D 就像一个恢复视力的向导,生成器 G 是一辆车。如果向导 D 恢复得太快(太强),他给出的指令会变得极其抽象(梯度消失),导致 G 根本听不懂,最后原地崩溃。
3. GAN 训练优化工具箱
3.1 架构与约束 (Structural Constraints)
- Spectral Normalization (谱归一化, SN):通过约束每一层权重的谱半径,使其满足 Lipschitz 连续性,防止梯度爆炸。
- WGAN / WGAN-GP:用 EM 距离 (Wasserstein 距离) 替代 JS 散度,即使分布不重叠也能提供连续梯度。
3.2 训练技巧 (Training Heuristics)
- TTUR (双尺度学习率):D 跑得比 G 快一点,有助于达到平衡。
- Label Smoothing:防止 D 过度自信导致的梯度饱和。
3.3 评估指标 (Evaluation)
- FID (越低越好):捕捉图像质量与多样性,目前最主流。
- IS (越高越好):评价生成的确定性和多样性。
4. 重点补全:数学基石 - 散度与距离
为了深刻理解 GAN 的演进,必须掌握以下三个数学工具:
4.1 KL 散度 (Kullback-Leibler Divergence)
$$ D_{KL}(P||Q) = \int P(x) \log \frac{P(x)}{Q(x)} dx $$- 特性:不对称性 ($D_{KL}(P||Q) \neq D_{KL}(Q||P)$)。
- 代价:如果用 KL 散度训练 GAN,会面临“宽容”或“严苛”的抉择,容易产生 Mode Collapse 或 垃圾样本。
4.2 JS 散度 (Jensen-Shannon Divergence)
$$ D_{JS}(P||Q) = \frac{1}{2} D_{KL}(P || \frac{P+Q}{2}) + \frac{1}{2} D_{KL}(Q || \frac{P+Q}{2}) $$- 改进点:
- 对称性:$D_{JS}(P||Q) = D_{JS}(Q||P)$。
- 有界性:取值范围在 $[0, \log 2]$ 之间。
- 致命缺陷:当 $P$ 和 $Q$ 不重叠时,$D_{JS}$ 恒为 $\log 2$,导致产生阶跃函数,梯度消失。
4.3 Wasserstein 距离 (推土机距离)
$$ W(P, Q) = \inf_{\gamma \in \Pi(P, Q)} \mathbb{E}_{(x,y) \sim \gamma} [\|x-y\|] $$- 形象理解:把分布 $P$ 移动成 $Q$ 所需的最少“工作量”(土方量 × 距离)。
- 优势:它具有连续性。即使两个分布没有任何重叠,Wasserstein 距离依然能根据“距离”提供平滑的梯度。这就是 WGAN 为什么比 原生 GAN 稳得多的根本原因。
5. 经典生成模型演进
(此处保留后续各模型 (StyleGAN, Pix2Pix, CycleGAN 等) 的详细分析…)
6. 面试/复习高频考点
快速通关
- Q: 为什么 WGAN 解决了训练不稳定的问题?
- A: WGAN 将损失函数从 JS 散度(在不重叠时梯度消失)切换到了 Wasserstein 距离,确保了梯度的连续性,同时通过 Lipschitz 约束限制了判别器的权重变化。