Lecture 12 / Lecture 11: Generative Adversarial Network, GAN

0. 本章核心目标:从“显式建模概率密度”走向“隐式生成真实样本”

本章要解决的问题是:如何学习真实数据分布 ,并从中生成看起来真实的新样本。传统生成模型常常试图显式建模概率密度,例如最大化 。但真实图像、语音、文本等高维数据分布极其复杂,显式 likelihood 往往难以精确计算,VAE 等模型需要近似推断,因此会引入 approximation bias。

GAN 的核心转向是:不显式写出 (p_g(x)) 的密度,而是通过一个生成器 (G) 把简单噪声 映射到数据空间:

这里 (p_z(z)) 通常是标准高斯或均匀分布, 是生成样本, 是生成器参数。虽然我们不直接知道 (p_g(x)) 的解析密度,但 (G) 的输出隐式定义了一个生成分布 (p_g)。

本章的“进化树”可以概括为:

1. 生成模型的基本定位

1.1 判别模型 vs 生成模型

判别模型学习的是:

也就是给定输入 (x),预测标签 (y)。例如输入一张图片,判断它是 elephant 还是 horse。

生成模型学习的是:

也就是给定类别 (y),生成符合该类别的数据 (x)。更一般地,如果不带条件,也可以学习:

然后从中采样生成新数据。

重要程度:★★★★★ 这是 GAN 和 VAE 一类模型的出发点。考试中经常问 discriminative model 和 generative model 的区别。

1.2 显式生成模型与隐式生成模型

显式生成模型直接估计密度 ,通常用最大似然:

其中 (x_i) 是训练样本,(N) 是样本数, 是模型参数。优点是目标清晰;缺点是高维复杂数据的 likelihood 很难精确计算。

隐式生成模型不直接写出 (p_g(x)) 的密度,而是定义采样过程:

其中 (G) 把简单分布中的样本变成复杂数据空间中的样本。GAN 属于隐式生成模型。

重要程度:★★★★★ 这解释了为什么 GAN 不需要显式 likelihood,也解释了它和 VAE 的根本区别。

2. GAN 的基本结构:Generator vs Discriminator

GAN 有两个网络:

是生成器,输入噪声 (z),输出生成样本

是判别器,输入一个样本 (x),输出一个标量:

表示该样本来自真实数据分布 的概率。如果 (D(x)) 越接近 1,表示判别器越认为它是真样本;如果越接近 0,表示越认为它是生成样本。

GAN 的核心博弈是:

最终目标是:

当生成分布等于真实分布时,判别器无法区分真假:

重要程度:★★★★★ 这是 GAN 的核心直觉。考试中如果问 GAN equilibrium,答案就是 ,此时 (D(x)=1/2)。

3. GAN 的原始目标函数

3.1 判别器目标

课件给出的判别器 cost 是:

最小化 (J(D)) 等价于最大化:

其中:

符号解释:

表示对真实数据分布取期望。 表示对噪声分布取期望。 (D(x)) 是判别器认为 (x) 是真样本的概率。 (D(G(z))) 是判别器认为生成样本是真样本的概率。 ) 奖励判别器把真样本判为真。 奖励判别器把假样本判为假。

这个目标本质上就是二分类交叉熵:真实样本 label 为 1,生成样本 label 为 0。

重要程度:★★★★★

3.2 GAN minimax objective

GAN 的标准 minimax objective 是:

等价写法:

这里 (D) 最大化该目标,因为它希望正确分类真假样本;(G) 最小化该目标,因为它希望让 (D(G(z))) 尽可能接近 1,使得 变小。

重要程度:★★★★★ 这是 GAN 最核心公式,必须会写、会解释。

4. Minimax Game 的理论解释

GAN 是一个 two-player zero-sum game。两个玩家是 (G) 和 (D),目标相反。

课件中写:

这表示最简单的零和设定中,生成器和判别器的损失互为相反数。均衡点是 (J(D)) 的 saddle point,也就是一方无法单方面改进的点。

但是这里有一个训练问题:原始 minimax 的 generator loss 可能会出现梯度消失。因为当 (D) 很强时:

此时生成器从 中得到的有效梯度会很弱,导致学习困难。

重要程度:★★★★☆ 理论均衡很重要,但考试更可能考:为什么原始 GAN 会梯度消失,以及 non-saturating loss 怎么解决。

5. 最优判别器 () 的推导

5.1 固定生成器 (G),求最优判别器

对于固定的 (G),也就是固定 (p_g),判别器最大化:

因为 ) 诱导出生成分布 (p_g(x)),所以第二项可以改写为:

因此:

对每一个固定的 (x),我们只需要最大化:

其中:

求导:

令导数为 0:

所以:

代回:

重要程度:★★★★★ 这是 GAN 理论证明的核心。必须会推导。

5.2 这个公式的直觉

如果某个 (x) 在真实数据中概率大,而生成器很少生成:

那么:

判别器认为它是真样本。

如果某个 (x) 主要由生成器产生,而真实数据很少出现:

那么:

判别器认为它是假样本。

如果:

那么:

判别器完全无法区分真假。

6. GAN 的全局最优性:为什么 ()

把最优判别器代入 GAN 目标:

使用:

以及:

得到:

定义混合分布:

注意:

所以:

同理:

因此:

而 Jensen-Shannon Divergence 定义为:

所以:

因为:

且当且仅当:

时取 0,所以全局最优为:

并且:

重要程度:★★★★★ 这是本章最重要的理论证明之一。考试可能直接要求证明 GAN objective 等价于 minimi in g JSD。

7. GAN 的训练过程

GAN 实际训练时不会真的让 (D) 完全达到最优,而是交替优化:

先固定 (G),更新 (D):

再固定 (D),更新 (G):

训练步骤可以理解为:

真实训练中通常用 Adam 或 SGD-like optimizer。每次训练同时使用两个 minibatch:一个真实样本 minibatch,一个生成样本 minibatch。

重要程度:★★★★★ GAN 训练伪代码、交替优化、两个 minibatch 是常考点。

8. GAN 的主要训练问题

8.1 Vanishing Gradients

原始 minimax generator loss 是:

生成器希望最小化它。问题在于,当判别器太强时:

此时 fake samples 被判别器高置信度识别为假。虽然 loss 数值可能不小,但通过 sigmoid classifier 反传到生成器的梯度容易饱和,导致生成器几乎无法更新。

解决方法之一是 non-saturating loss。

重要程度:★★★★★

8.2 Non-Convergence

GAN 是非凸-非凹 minimax optimization。即使理论上有 equilibrium,参数空间中的 simultaneous gradient descent 也不保证收敛。

原因包括:

都是神经网络,目标高度非凸。实际训练中,(G) 和 (D) 的更新可能互相抵消,导致 oscillation。

重要程度:★★★★☆

8.3 Mode Collapse

Mode collapse 指生成器只覆盖真实分布的一小部分模式。例如真实数据有 9 个模式,但 GAN 只学会生成其中 1 个模式。

形式上,真实分布 可能有多个高概率区域:

但生成分布 (p_g) 只覆盖其中少数几个:

这会导致样本看起来局部真实,但多样性不足。

重要程度:★★★★★ mode collapse 是 GAN 最经典缺陷之一,考试非常可能问。

8.4 Mode Dropping

Mode dropping 和 mode collapse 类似,但更强调生成分布没有覆盖完整真实分布。它可能不是完全崩到一个模式,而是漏掉一些数据模式。

重要程度:★★★★☆

9. Non-Saturating GAN:解决梯度消失

原始 discriminator loss 保持不变:

但 generator loss 改为:

这个目标不再是最小化:

而是最大化:

直觉是:原始 minimax 是让 (G) 减少 (D) 正确识别 fake 的概率;non-saturating 是让 (G) 直接增加 (D) 把 fake 判为 real 的概率。

当:

时:

非常大,梯度信号强,因此生成器仍然能学习。

重要程度:★★★★★ 必须会区分 minimax loss 和 non-saturating loss。

对比表:

| 目标 | Discriminator loss | Generator loss | 主要问题/优点 | | ———————– | ——————————————————– | —————————————————– | ———————– | | Original minimax GAN | (-bb(E){x}log D(x)-bb(E){z}log(1-D(G(z)))) | (bb(E){z}log(1-D(G(z)))) | 理论漂亮,但 (D) 太强时 (G) 梯度消失 | | Non-saturating GAN | 同上 | (-bb(E){z}log D(G(z))) | 梯度更强,实践中更常用 | | Maxi mum-likelihood game | 同上 | () | 试图模拟 MLE / op(“KL”) 目标 |

10. Maximum Likelihood Game

课件给出的 generator loss 是:

其中 是 sigmoid 的 inverse,也就是 logit function:

这个目标被解释为等价于最小化:

即:

符号解释:

) 是生成模型分布。 ) 衡量用 (q) 近似 (p) 的信息损失。 这个 op(“KL”) 是 forward op(“KL”),倾向于覆盖真实数据的所有模式,因此和 mode dropping 问题有关。

重要程度:★★★☆☆ 课件提到,但通常不会比 non-saturating 和 WGAN 更核心。

11. WGAN:从 JSD 到 Wasserste in Distance

11.1 为什么 JSD 会出问题

前面证明了原始 GAN 在理想情况下等价于最小化:

但在高维空间中,真实数据往往分布在低维流形上。例如图像虽然维度很高,但有效图像只占据一个低维 manifold。生成分布 (p_g) 也可能在另一个低维 manifold 上。

如果两个分布的支撑集几乎不重叠,那么 JSD 会饱和,导致梯度几乎为 0。也就是说,即使 (p_g) 离 很远,JSD 也无法提供连续有效的优化方向。

重要程度:★★★★★

11.2 Wasserstein-1 Distance / Earth-Mover Distance

WGAN 使用 1-Wasserste in distance:

符号解释:

(P_r) 是真实分布,等同于 。 (P_g) 是生成分布。 是所有 coupling distributions 的集合。 表示一种“运输计划”,说明如何把 (P_r) 中的质量搬运到 (P_g)。 (|x-y|) 是把质量从 (x) 移到 (y) 的代价。 表示在所有运输计划中找最小运输成本。

直觉:Wasserste in distance 衡量的是“把一个分布搬成另一个分布需要付出多少最小代价”。即使两个分布没有重叠,它仍然能给出平滑、可用的距离信号。

重要程度:★★★★★

11.3 课件中的例子

设:

真实分布:

生成分布:

这表示真实样本在二维平面上的竖线 (x=0),生成样本在竖线 。如果 ,两个分布支撑在两条平行线,几乎不重叠。JSD 容易饱和,而 Wasserste in distance 可以自然得到:

因此对 有有效梯度。

重要程度:★★★★☆

11.4 Kantorovich-Rubinste in Duality

直接优化 Wasserste in distance 中的 很难,因此 WGAN 使用对偶形式:

其中:

表示 (f) 是 1-Lipschitz function,即:

如果是 (K)-Lipschitz:

那么目标会变成:

在 WGAN 中,(f) 用 neural network 参数化,通常称为 critic,而不是 discriminator,因为它不输出概率,而是输出一个 real-valued score。

重要程度:★★★★★

11.5 如何保证 Lipschitz 条件

课件提到两种方式:

和:

Gradient clipping 通过限制 critic 参数范围来近似满足 Lipschitz 条件,但可能导致 capacity 受限。Gradient penalty 则直接惩罚梯度范数偏离 1,实践中更稳定。

虽然课件没有写 WGAN-GP 公式,但常见形式是:

其中 是真实样本和生成样本之间插值得到的点, 是 penalty coefficient。

重要程度:★★★★☆ 课件只提到了 gradient clipping 和 gradient penalty,但考试可能要求解释它们为什么和 Lipschitz 约束有关。

12. Unrolled GAN:缓解 mode collapse

Unrolled GAN 的核心思想是:更新生成器时,不只看当前判别器 (D),而是考虑判别器未来经过 (k) 步优化后的状态。

普通 GAN 中,(G) 可能 exploit 当前 (D) 的弱点,于是生成器学会某几个模式来骗过当前判别器,造成 mode collapse。

Unrolled GAN 做法是:

然后用第 (k) 步后的判别器参数:

来计算 generator objective,并对 反传:

关键是,更新 (G) 时会 backpropagate through discriminator’s (k)-step optimization。这样 (G) 不能只骗当前 (D),而要考虑 (D) 反应后的结果,因此可以减少 mode collapse。

课件特别强调:虽然为了更新 (G) 会 unroll (k) steps of (D),但真正保留到下一轮训练的只有 (D) 的第一次更新,而不是全部 (k) 次。这是为了避免 (D) 过拟合。

重要程度:★★★★☆

13. Conditional GAN 与 Image-to-Image Translation

13.1 Conditional GAN

普通 GAN 只从噪声生成样本:

Conditional GAN 引入条件 (y) 或输入图像 (x),让生成过程可控。例如:

判别器输入 pair:

判断 (y) 是否是给定 (x) 的真实 translation。

重要程度:★★★★☆

13.2 Pix2Pix-style objective

课件中 image-to-image translation 使用 conditional GAN,并加入 L1 loss:

总目标:

符号解释:

(x) 是输入图像,例如边缘图、语义分割图、低分辨率图像。 (y) 是目标图像。 (G(x,z)) 是生成的目标域图像。 () 是像素级 L1 reconstruction loss。 控制 GAN loss 和 L1 loss 的权重。

L1 loss 的作用是保证生成结果和 paired ground truth 对齐;GAN loss 的作用是让生成图像更真实、更符合目标域分布。

课件指出缺陷:

也就是说,在 paired image-to-image translation 中,生成器往往忽略噪声 (z),输出 deterministic result,导致没有 stochastic outputs。

重要程度:★★★★★ CGAN + L1 是图像翻译、超分辨率、视频预测等任务的共同模板。

14. 其他 GAN variants 与应用

14.1 DCGAN

DCGAN 是 Deep Convolutional GAN。它把 generator 和 discriminator 改成卷积结构,更适合图像生成。Generator 常用反卷积或上采样结构,Discriminator 用 CNN 提取图像特征。

重要程度:★★★☆☆

14.2 InfoGAN

InfoGAN 的目标是无监督地学习 disentangled representations。它把 latent code 分成普通噪声和可解释因素,希望某些 latent variables 控制语义因素,例如数字类别、旋转角度、笔画粗细。

重要程度:★★★☆☆

14.3 LSGAN

LSGAN 使用 least squares loss 替代 binary cross-entropy loss。其动机是缓解梯度饱和,让 fake samples 即使在判别边界之外也有较强梯度。

重要程度:★★★☆☆

14.4 BEGAN

BEGAN 使用 equilibrium enforcing mechanism,并结合 Wasserstein-inspired loss,目标是稳定训练。

重要程度:★★☆☆☆

14.5 Progressive Growing GAN

Progressive Growing GAN 的思想是从低分辨率开始训练,例如:

逐渐增加生成器和判别器的层数,使训练更稳定,并生成高分辨率图像。

重要程度:★★★☆☆

15. GAN 的应用

GAN 的应用包括:

图像生成:从随机噪声生成 MNIST、CIFAR-10、人脸等图像。 Latent vector arithmetic:在 latent space 中做语义运算,例如:

Image-to-image translation:例如边缘图到真实图像、语义图到街景。 Next video frame prediction:给定过去帧,预测未来帧。 Super-resolution:低分辨率图像生成高分辨率图像,是 conditional GAN 的特殊形式。 Unpaired image-to-image translation:例如 CycleGAN,不需要 paired data。 Semi-supervised learning:用 discriminator/classifier 的 feature matching 帮助利用少量标签。 Discrete sequential data generation:把生成器视为 policy,用 policy gradient 处理不可微采样。

重要程度:★★★☆☆ 应用一般不会考特别细,但 conditional GAN、super-resolution、discrete sequence generation 可能会出概念题。

16. 离散序列生成:GAN + Policy Gradient

课件给出公式:

其中:

是生成器,也可以看作 policy。 (y_t) 是第 (t) 个 token/action。 是已经生成的前缀序列。 是判别器,提供 reward。 ) 是 action-value function,表示在前缀 后选择 (y_t) 的长期回报。

课件给出的 (Q) 定义是:

注意课件中写了 (),但从语义上更自然的是 ():如果序列还没生成完,就用 Monte Carlo rollout 补全序列,再由判别器打分。

直觉:离散 token 采样不可微,所以不能直接把 (D) 的梯度传回 (G)。因此把 (G) 当作 policy,把 (D) 的输出当 reward,用 policy gradient 更新。

重要程度:★★★★☆ 如果课程覆盖 SeqGAN,这个公式可能考。关键是理解:离散采样不可微,所以要用 policy gradient。

17. 方法演进总表

| 阶段 | 核心方法 | 解决什么问题 | 新问题 | | —————— | ————————— | ————————————– | ——————————– | | 显式生成模型 | MLE, VAE | 直接建模 (p_theta(x)),目标清晰 | 高维 likelihood 难算;VAE 有近似偏差 | | 原始 GAN | (min_G max_D V(D,G)) | 不显式建模密度,直接学习生成样本 | 训练不稳定、梯度消失、mode collapse | | Non-saturating GAN | () | 缓解 (D) 太强时 (G) 梯度消失 | 仍可能 non-converge 和 mode collapse | | Unrolled GAN | 反传穿过 (k) 步 (D) 更新 | 减少 (G) exploit 当前 (D),缓解 mode collapse | 计算成本更高 | | WGAN | Wasserste in distance | JSD 饱和时仍提供有意义梯度 | 需要 Lipschitz 约束 | | WGAN-GP / clipping | gradient penalty / clipping | 近似满足 Lipschitz 条件 | clipping 可能限制 capacity | | CGAN / Pix2Pix | 条件输入 + GAN + L1 | 可控生成、图像翻译 | 可能忽略噪声 (z),输出缺少多样性 | | Progressive GAN | 逐步提高分辨率 | 高分辨率图像训练更稳定 | 架构和训练流程更复杂 |

18. 期末考试重点排序

最高优先级:必须掌握

中高优先级:需要能解释

Mode collapse、mode dropping、vanishing gradient、non-convergence 的区别。 为什么原始 GAN 理论上好,但实践训练难。 为什么 WGAN 比 JSD 更适合高维 manifold。 为什么 conditional GAN 需要把 condition 输入给 (G) 和 (D)。 为什么 Pix2Pix 需要 (L_1) loss。 为什么离散序列生成不能直接 backprop,需要 policy gradient。

较低优先级:了解即可

InfoGAN、BEGAN、Progressive GAN、latent vector arithmetic、semi-supervised GAN 的细节。

19. 一句话总结本章

GAN 的核心思想是:用一个判别器 (D) 学习真实分布和生成分布之间的 density ratio,用这个判别信号训练生成器 (G),使隐式生成分布 (p_g) 逐渐逼近真实数据分布 。理论上,最优判别器诱导出的目标等价于最小化 Jensen-Shannon divergence;实践中,原始 GAN 会遭遇梯度消失、非收敛和 mode collapse,因此发展出了 non-saturating loss、Unrolled GAN、WGAN、CGAN 等一系列改进方法。