GAN 生成对抗网络
生成对抗网络(Generative Adversarial Network, GAN,Goodfellow et al., 2014)是生成式 AI 的里程碑架构——用对抗博弈的思想训练生成模型,能生成逼真的图像、音频和视频。本页系统讲解 GAN 的博弈原理、网络架构细节、训练难题与解决方案、条件 GAN、GAN 与扩散模型的融合趋势,以及 2024–2025 年 GAN 蒸馏与实时生成的最新进展。与扩散模型的对比见 扩散模型,VAE 的另一种生成思路见 VAE 变分自编码器。
- GAN = 伪造者 vs 鉴定师:生成器(Generator)是伪造者,负责把随机噪声变成假钞(假图像);判别器(Discriminator)是鉴定师,负责分辨真钞(真实图像)和假钞。两者不断对抗:伪造者越来越精,鉴定师也越来越毒辣——最终伪造者能造出鉴定师都认不出的”超级假钞”。
- 为什么是对抗? 传统生成模型需要显式定义数据分布(如 VAE 需要假设高斯分布),GAN 不需要——它让判别器隐式地学习”什么是真实的”,生成器只需骗过判别器。这种博弈框架非常灵活,能生成极其锐利的图像。数学上,GAN 实现的是隐式密度估计(implicit density estimation):我们不写出概率密度函数
p(x)的解析式,而是直接从分布中”采样”——生成器G(z)本身就是这个采样函数。 - 对抗背后的信息论直觉:判别器本质上在估计真实分布
p_data和生成分布p_g之间的 Jensen-Shannon 散度(JS divergence)——一种衡量两个概率分布差异的度量。当两个分布完全一致时 JS = 0,判别器无法区分。原始 GAN 的理论保证是:在判别器最优的情况下,训练生成器等价于最小化 JS 散度。 - 与扩散模型的关系:GAN 曾是图像生成的王者(2017–2021),但 扩散模型(2020 年后)以更稳定的训练和更好的多样性逐渐取代了 GAN 的主导地位。不过 2024–2025 年,对抗蒸馏(adversarial distillation)技术将扩散模型的多步推理压缩为 GAN 式的单步生成,让 GAN 思想在新时代重新焕发活力。两者各有优劣,详见下文对比。
对抗博弈架构
Section titled “对抗博弈架构”GAN 由两个神经网络组成,通过博弈同时提升:
架构细节:
- 噪声先验
p_z:通常选择标准正态分布N(0, I)或均匀分布U(-1, 1)。噪声维度dim(z)通常为 64–512,决定了生成器的”自由度”——维度越高,潜在的变化空间越大。 - 生成器 G:将低维噪声
z映射到高维数据空间(如图像像素空间)。在 DCGAN 中,G 是一系列**转置卷积(Transposed Convolution)**层——即正常卷积的”逆操作”,负责将小尺寸特征图逐步放大(如 4×4 → 8×8 → 16×16 → … → 最终分辨率)。每层间用 BatchNorm 稳定训练、ReLU 提供非线性。最终层用 Tanh 将输出归一化到[-1, 1]范围。 - 判别器 D:将图像映射到
[0, 1]标量(真假概率)。在 DCGAN 中,D 是一系列**步幅卷积(Strided Convolution)**层——用步幅 > 1 的卷积替代池化层,逐步缩小特征图尺寸。每层间用 LeakyReLU(允许小幅负值通过,避免梯度死亡)、最终层用 Sigmoid。D 不使用 BatchNorm(会破坏判别能力),改用 LayerNorm 或 Spectral Normalization(谱归一化) 稳定训练。
Minimax 目标函数
Section titled “Minimax 目标函数”GAN 的训练目标是一个极小极大博弈(minimax game):
- 判别器 D 想最大化 V:让 D(x) → 1(真样本判为真),D(G(z)) → 0(假样本判为假),即
log D(x)和log(1 - D(G(z)))都越大越好。 - 生成器 G 想最小化 V:让 D(G(z)) → 1(假样本骗过 D),即让
log(1 - D(G(z)))越小越好(趋近log(0) = -∞)。 - 非饱和技巧(Non-saturating loss):实践中直接最小化
log(1 - D(G(z)))在训练初期有梯度消失问题(D 轻松分辨假样本,梯度接近 0)。Goodfellow 提出 G 改为最大化log D(G(z))——数学上不等价但梯度表现更好,是实际训练的标准选择。
理论上,当生成器完美学到真实数据分布时,判别器对所有输入都输出 0.5(分不清真假),博弈达到纳什均衡。但实际训练中,完美均衡几乎不可能达到——两个网络在参数空间中互相追逐,容易陷入震荡或不收敛。
JS 散度的陷阱:为什么原始 GAN 不稳定?
Section titled “JS 散度的陷阱:为什么原始 GAN 不稳定?”原始 GAN 等价于最小化 p_data 和 p_g 之间的 Jensen-Shannon 散度。JS 散度有一个致命问题:当两个分布的支撑集不重叠时(support mismatch),JS 恒为常数 log 2,梯度为零——生成器收不到任何学习信号。
形象地说:在高维空间(如 1024×1024×3 的图像空间)中,真实图像只占据极小的流形(manifold),随机初始化的生成器产出的图像几乎不可能”碰到”这个流形——两者完全不重叠,JS 散度饱和,梯度消失。
WGAN 的突破:Arjovsky et al. (2017) 提出用 Wasserstein 距离(又称 Earth-Mover / 推土机距离)替代 JS 散度。Wasserstein 距离衡量”将一个分布搬运到另一个分布所需的最小代价”,即使分布不重叠,它也能提供平滑、有意义的梯度。WGAN 的判别器(改称 critic)去掉 Sigmoid,输出实数而非概率,并通过权重裁剪或梯度惩罚满足 Lipschitz 连续性约束。
模式崩塌(Mode Collapse)
Section titled “模式崩塌(Mode Collapse)”GAN 训练中最著名的难题:生成器只学会生成少数几种样本。比如训练人脸 GAN,生成器发现”正面美女脸”最容易骗过判别器,于是只生成这一种——多样性丧失。
好比伪造者只学会了造一种面额的假钞——鉴定师虽能识破,但伪造者会一直产这一种。
模式崩塌的根因:生成器的梯度只关心”当前这一批噪声 z 能否骗过判别器”,不关心不同 z 之间的多样性。生成器找到单个最优解后,梯度将所有 z 都映射到同一个输出。
缓解方案:
- Minibatch discrimination(Salimans et al., 2016):让判别器同时看一批样本,判断这批样本内部的多样性——如果所有假样本都长得一样,直接判负。
- Unrolled GAN:生成器在更新时考虑判别器未来 k 步的反应,避免短视。
- WGAN-GP:更稳定的损失函数间接减少崩塌。
- BigGAN 的截断技巧(Truncation trick):在推理时对噪声
z进行截断(从截断的正态分布采样),以牺牲多样性换取质量,或反过来调节质量-多样性的权衡。
训练技巧与架构演进
Section titled “训练技巧与架构演进”| 问题 | 解决方案 | 代表模型 |
|---|---|---|
| 训练不稳定 | 用卷积替换全连接,BatchNorm,LeakyReLU | DCGAN (2015) |
| 模式崩塌 / 梯度消失 | Wasserstein 距离替代 JS 散度,去掉 sigmoid | WGAN (2017) |
| Lipschitz 约束不精确 | 对判别器输入的梯度范数施加惩罚 | WGAN-GP (2017) |
| 判别器 Lipschitz 约束 | 对每层卷积权重做谱归一化(Spectral Norm) | SNGAN (2018) |
| 不可控生成 | 加入条件标签 y,同时输入 G 和 D | cGAN (2014) |
| 高分辨率人脸 | 渐进式增长(4→8→…→1024)+ 风格混合 | StyleGAN (2018) |
| 渐进式伪影 | 替换为固定分辨率 + 噪声注入 + AdaIN | StyleGAN2 (2019–2020) |
| 纹理粘附伪影 | 对抗性生成器滤波器 + 更深层风格 | StyleGAN3 (2021) |
| 大规模类条件生成 | 大 batch + 截断技巧 + 自适应数据增强 | BigGAN (2019) |
| 大图像数据有限 | 自适应数据增强(ADA)防过拟合 | StyleGAN2-ADA (2020) |
条件 GAN(cGAN)
Section titled “条件 GAN(cGAN)”普通 GAN 生成的内容不可控——你输入随机噪声,输出随机图像。条件 GAN(Mirza & Osindero, 2014)在生成器和判别器中都加入条件信息 y(如类别标签、文本描述、语义分割图):
G(z, y) → 假图像 D(x, y) → 真假概率条件注入方式:
- 拼接法(Concatenation):最简单——将 one-hot 编码的标签
y与噪声z拼接后输入 G,与图像x拼接后输入 D。 - 条件批量归一化(Conditional BatchNorm, cBN):标签
y经过一个小型 MLP 生成 BatchNorm 的缩放参数γ和偏移参数β,用于对特征图做仿射变换。不同标签产生不同的归一化参数,从而控制生成风格。AdaIN(Adaptive Instance Normalization) 是 StyleGAN 使用的变体——标签/风格向量直接控制 Instance Norm 的仿射参数,实现精细的风格控制。 - 投影判别器(Projection Discriminator):Miyato & Koyama (2018) 提出,判别器不仅判断真假,还判断”图像与标签是否匹配”——将标签嵌入与图像特征做内积,作为额外的 logit。
比如给 y = “金毛犬”,生成器就只生成金毛犬图片。cGAN 是可控生成的基础,后续的 StackGAN(文本→图像)、Pix2Pix / CycleGAN(图像翻译)、ControlNet 等都延续了条件生成的思路。
StyleGAN 系列详解
Section titled “StyleGAN 系列详解”StyleGAN 是 GAN 在可控图像生成上的巅峰之作,其核心创新是风格化的生成器架构:
关键设计:
- W 潜空间(Mapping Network):原始噪声
z先经过 8 层 MLP 映射到中间潜空间W(512 维)。这一步解耦了输入噪声的分布,使W空间更线性、更可控——比如在W空间做插值,人脸的变化比在Z空间自然得多。 - AdaIN 风格注入:生成器不再是”噪声 → 图像”的端到端映射,而是”常量张量 → 逐层风格调制 → 图像”。
W向量在每一层通过 AdaIN 控制该层的风格——粗分辨率层控制姿态、脸型;中分辨率层控制发型、眼镜;高分辨率层控制颜色、微细节。 - 随机噪声注入:每层额外注入单通道随机噪声,控制 stochastic variation(如头发丝、雀斑等随机细节),避免这些细节占用风格向量。
- 风格混合(Style Mixing):推理时用两个不同的
W向量分别控制不同层,实现风格混搭——A 的脸型 + B 的发型。
StyleGAN2 解决了 AdaIN 造成的”水滴伪影”(blob-like artifacts),改用 Weight Demodulation;StyleGAN3 解决了”纹理粘附”(aliasing)问题——传统架构的粗糙纹理”钉”在像素坐标上而非物体表面,StyleGAN3 引入连续的等变层让纹理跟随物体变换。至此,StyleGAN 系列基本收敛,后续再无 StyleGAN4。
GAN vs 扩散模型
Section titled “GAN vs 扩散模型”| 对比维度 | GAN | 扩散模型 |
|---|---|---|
| 生成速度 | 极快(单次前向传播,~10ms) | 慢(需多步去噪,通常 20–1000 步) |
| 图像质量 | 高(锐利) | 高(且更稳定) |
| 多样性 | 差(模式崩塌风险) | 好(覆盖全部数据分布) |
| 训练稳定性 | 差(需精调,易崩溃) | 好(损失函数简单稳定) |
| 可控性 | 中等(cGAN / StyleGAN) | 强(Classifier-free Guidance) |
| 模态覆盖 | 需要精心设计 | 天然多模态覆盖 |
| 代表应用 | 实时图像生成、超分、视频换脸 | 文生图(Stable Diffusion / DALL·E) |
趋势:扩散模型在质量和多样性上更优,主导了文生图领域;但 GAN 在速度敏感场景(实时超分、交互式编辑、视频换脸)仍有不可替代的优势。
2024–2025:对抗蒸馏——GAN 的第二春
Section titled “2024–2025:对抗蒸馏——GAN 的第二春”扩散模型虽好,但多步推理太慢。2023–2025 年,一系列工作用 GAN 的对抗损失把扩散模型蒸馏成单步生成器,将两种范式融合:
- ADD(Adversarial Diffusion Distillation),Stability AI (2023):在扩散模型 U-Net 的基础上,加入一个判别器对单步输出施加对抗损失,配合 score distillation,实现 1–4 步高质量生成(SDXL Turbo / SD3.5 Large Turbo)。
- DMD(Distribution Matching Distillation),MIT (2024):用分布匹配的视角将扩散模型蒸馏为一步 GAN,质量接近原始 50 步扩散。
- SDXL-Lightning,ByteDance (2024):结合对抗损失和渐进蒸馏,1–8 步即可生成高质量 1024×1024 图像。
- 一致性模型 + 对抗损失:OpenAI 的 Consistency Models 在蒸馏时加入 GAN 判别器,进一步压缩推理步数。
本质上,这些方法都是把扩散模型当作”教师”,用对抗博弈训练一个”学生”单步网络——学生网络继承了扩散模型的高质量和多样性,同时拥有 GAN 的推理速度。2025 年这一方向继续活跃,是 GAN 技术在新时代最强劲的生命力所在。
PyTorch 简单 GAN Demo
Section titled “PyTorch 简单 GAN Demo”一个最小化的 GAN:生成器 + 判别器 + 对抗训练循环:
import torchimport torch.nn as nn
G = nn.Sequential( # 生成器:噪声→假数据 nn.Linear(64, 128), nn.ReLU(), nn.Linear(128, 784), nn.Tanh()) # 输出 28×28 图像(归一化到 [-1,1])
D = nn.Sequential( # 判别器:数据→真假概率 nn.Linear(784, 128), nn.LeakyReLU(0.2), nn.Linear(128, 1), nn.Sigmoid()) # 输出 [0,1] 概率
optG = torch.optim.Adam(G.parameters(), lr=2e-4, betas=(0.5, 0.999))optD = torch.optim.Adam(D.parameters(), lr=2e-4, betas=(0.5, 0.999))bce = nn.BCELoss()
# 对抗训练循环(每个 batch 执行)for real in dataloader: # real: 真实图像 (B, 784) B = real.size(0) z = torch.randn(B, 64) # 随机噪声 fake = G(z) # 生成假图像 # 训练判别器:真的推到 1,假的推到 0 lossD = bce(D(real), torch.ones(B, 1)) + bce(D(fake.detach()), torch.zeros(B, 1)) optD.zero_grad(); lossD.backward(); optD.step() # 训练生成器:让判别器把假图像判为真(1) lossG = bce(D(fake), torch.ones(B, 1)) optG.zero_grad(); lossG.backward(); optG.step()注意训练顺序:先训练 D(用
fake.detach()阻断梯度),再训练 G。Adam 的betas=(0.5, 0.999)是 GAN 的经验值,比默认(0.9, 0.999)更稳定——较低的一阶矩衰减率减少了优化方向的震荡。fake.detach()的作用是让生成器参数不参与判别器的梯度更新。
DCGAN:用卷积生成真实图像
Section titled “DCGAN:用卷积生成真实图像”上述 MLP 版本适合教学,但要生成真实图像(如人脸、动漫),**卷积架构(DCGAN)**才是正道:
import torch.nn as nn
class Generator(nn.Module): # 生成器:噪声 (B, 256, 1, 1) → 图像 (B, 3, 64, 64) def __init__(self, z_dim=256, feat=64): super().__init__() self.net = nn.Sequential( nn.ConvTranspose2d(z_dim, feat*8, 4, 1, 0, bias=False), # 1→4 nn.BatchNorm2d(feat*8), nn.ReLU(True), nn.ConvTranspose2d(feat*8, feat*4, 4, 2, 1, bias=False), # 4→8 nn.BatchNorm2d(feat*4), nn.ReLU(True), nn.ConvTranspose2d(feat*4, feat*2, 4, 2, 1, bias=False), # 8→16 nn.BatchNorm2d(feat*2), nn.ReLU(True), nn.ConvTranspose2d(feat*2, feat, 4, 2, 1, bias=False), # 16→32 nn.BatchNorm2d(feat), nn.ReLU(True), nn.ConvTranspose2d(feat, 3, 4, 2, 1, bias=False), # 32→64 nn.Tanh()) # 输出归一化到 [-1, 1] def forward(self, z): return self.net(z.view(z.size(0), -1, 1, 1))
class Discriminator(nn.Module): # 判别器:图像 (B,3,64,64) → 概率 (B,1) def __init__(self, feat=64): super().__init__() self.net = nn.Sequential( nn.Conv2d(3, feat, 4, 2, 1, bias=False), # 64→32 nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(feat, feat*2, 4, 2, 1, bias=False), # 32→16 nn.BatchNorm2d(feat*2), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(feat*2, feat*4, 4, 2, 1, bias=False), # 16→8 nn.BatchNorm2d(feat*4), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(feat*4, feat*8, 4, 2, 1, bias=False), # 8→4 nn.BatchNorm2d(feat*8), nn.LeakyReLU(0.2, inplace=True), nn.Conv2d(feat*8, 1, 4, 1, 0, bias=False), # 4→1 nn.Sigmoid()) def forward(self, x): return self.net(x).view(x.size(0), -1)DCGAN 的经验法则至今适用:生成器用
ConvTranspose2d + BatchNorm + ReLU,判别器用Conv2d + BatchNorm + LeakyReLU(0.2),最后一层 G 用 Tanh、D 用 Sigmoid。学习率统一2e-4,Adam beta1=0.5。对于更高分辨率(128+),需要引入残差连接或 StyleGAN 式架构。
- 训练 GAN 是出了名的难:不像分类任务有明确的 loss 曲线,GAN 的 D loss 和 G loss 互相博弈,没有简单的”收敛”信号。常用技巧:定期肉眼检查生成质量、用 FID/IS 指标量化评估、保存检查点以便回退。
- 判别器太强 = 生成器学不动:D 太强时,假图像的梯度几乎为零,G 无法学习。解决方案:让 D 和 G 的学习能力匹配(控制各自的网络深度/学习率),或每训练 D k 次再训练 G 1 次。
- 判别器太弱也不行:D 太弱则无法提供有用的梯度信号,G 收敛到差的局部最优。训练初期要让 D “略微强于” G 但不要碾压。
- 谱归一化(Spectral Normalization)是现代 GAN 的标准配置:SNGAN(Miyato et al., 2018)对判别器每层卷积权重做谱归一化——除以权重矩阵的最大奇异值(largest singular value),强制满足 Lipschitz 约束。比 WGAN-GP 的梯度惩罚更高效(只需一次幂迭代),且无需调节惩罚系数。
- WGAN-GP 大幅改善稳定性:用 Wasserstein 距离替代原始 JS 散度,用梯度惩罚替代权重裁剪。WGAN-GP 的判别器(critic)输出实数而非概率,loss 越负代表生成质量越好——这提供了比原始 GAN 更直观的训练信号。
- 学习率调度:GAN 通常不使用学习率衰减(会破坏博弈平衡),但可以使用 TTUR(Two Time-scale Update Rule)——给 D 和 G 设置不同的学习率(通常 G 略大于 D),让两者更新速度匹配。
- GAN 的评估指标:
- FID(Fréchet Inception Distance):将生成图像和真实图像分别送入预训练的 Inception-V3 网络(一个在 ImageNet 上训练的经典图像分类网络),提取特征向量的均值和协方差,计算两个多元高斯分布之间的 Fréchet 距离。越低越好,是当前最常用的 GAN 评估指标。
- IS(Inception Score):衡量生成图像的清晰度(Inception 分类确信度高)和多样性(类别分布均匀)。缺点是不直接与真实数据比较,现已少用。
- Precision & Recall(Kynkäänniemi et al., 2019):分别衡量生成器的质量(Precision = 生成的图像有多少”接近”真实分布)和覆盖度(Recall = 真实分布有多少被生成器覆盖),比 FID 单一指标更全面。
- 数据增强防过拟合:StyleGAN2-ADA(Karras et al., 2020)发现当训练数据不足(< 1000 张图)时 GAN 会严重过拟合,解决方案是自适应数据增强(ADA)——对训练图像做随机翻转、旋转、色彩抖动等增强,增强强度根据判别器过拟合程度自动调节。
- StyleGAN 人脸生成:NVIDIA 的 StyleGAN 系列能生成以假乱真的人脸、汽车、建筑图片,催生了 thispersondoesnotexist.com 等网站。StyleGAN 的风格混合和层级控制是可控生成的经典示范。2024 年,StyleGAN3 仍是高质量人脸编辑、动漫角色生成、虚拟人像制作的主流工具。
- 实时图像生成(对抗蒸馏):2024–2025 年最重要的应用方向。SDXL Turbo、SDXL-Lightning、SD3.5 Large Turbo 等通过对抗蒸馏将扩散模型压缩为 1–4 步生成,速度接近原始 GAN 但质量远超。这对实时交互(AI 画板、游戏资产生成、视频生成中的帧插值)至关重要。
- DeepFake 与换脸:GAN 能实现高逼真度的面部替换,广泛用于影视后期(如 face-swap 特效)。同时也引发了深度伪造的伦理争议——检测 AI 生成内容成为重要的安全课题,催生了 Deepfake Detection Challenge 等竞赛和 FaceForensics++ 等基准数据集。
- 图像超分辨率:SRGAN / ESRGAN 用 GAN 恢复低分辨率图像的高频细节,比传统插值方法(双三次插值)更清晰自然,应用于老照片修复、视频增强、医学影像放大。Real-ESRGAN 将 GAN 超分与真实世界退化建模结合,至今仍是开源超分的标杆。
- 图像翻译(Image-to-Image Translation):Pix2Pix(配对翻译)、CycleGAN(无配对翻译,用循环一致性损失)、StyleGAN 系列可以实现素描→照片、马→斑马、白天→黑夜、线稿上色等翻译任务。
- 数据增强:在医学影像(CT/MRI 合成)、工业缺陷检测、自动驾驶场景合成等数据稀缺场景,GAN 可生成合成训练样本,扩充数据集提升下游模型性能。与扩散模型相比,GAN 推理速度快,适合大批量合成。
- 语音/音频生成:WaveGAN、GANSynth 等用 GAN 生成音频波形和音乐。虽然语音合成已转向自回归 / 扩散模型,但 GAN 在实时音频合成(如游戏音效、实时语音转换 voice conversion)场景仍有速度优势。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| PyTorch | Python | 灵活的动态图框架,GAN 研究的主流选择 |
| TensorFlow / Keras | Python | tf.keras 可快速搭建 GAN,TF Hub 有预训练 StyleGAN 模型 |
| StyleGAN2-ADA / StyleGAN3 | Python | NVIDIA 官方实现,支持高质量人脸/图像生成与迁移学习 |
| rosinality / stylegan2-pytorch | Python | 广泛使用的 PyTorch 版 StyleGAN2/3 实现,社区活跃 |
| MMGeneration | Python | OpenMMLab 的生成模型工具箱,统一 GAN/VAE/扩散模型接口 |
| diffusers (Hugging Face) | Python | 2024 年起支持对抗蒸馏模型(SDXL Turbo / Lightning)的加载与推理 |
| CleanGAN / GANsfolk | Python | 简化版 GAN 训练框架,适合入门和快速实验 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 生成对抗网络 | GAN (Generative Adversarial Network) | 用生成器与判别器对抗博弈训练的生成模型框架 |
| 生成器 | Generator | 将随机噪声映射为逼真数据的网络,目标是骗过判别器 |
| 判别器 | Discriminator | 区分真实数据与生成数据的二分类网络 |
| 极小极大博弈 | Minimax Game | 一方最大化、一方最小化的博弈框架,GAN 的训练目标 |
| Jensen-Shannon 散度 | JS Divergence | 衡量两个概率分布差异的对称度量,原始 GAN 等价于最小化 JS 散度;分布不重叠时梯度为零,导致训练不稳定 |
| Wasserstein 距离 | Wasserstein Distance / Earth-Mover Distance | 衡量两个概率分布差异的度量,即使分布不重叠也提供平滑梯度,WGAN 用它替代 JS 散度 |
| Lipschitz 约束 | Lipschitz Continuity | 要求函数的变化率有上界,WGAN 的判别器必须满足此约束才能正确估计 Wasserstein 距离 |
| 梯度惩罚 | Gradient Penalty | 对判别器输入的梯度范数施加约束(约束为 1),WGAN-GP 用它替代粗糙的权重裁剪 |
| 谱归一化 | Spectral Normalization | 将每层卷积权重除以其最大奇异值,优雅地满足 Lipschitz 约束,是现代 GAN 的标配 |
| 模式崩塌 | Mode Collapse | 生成器只学会生成少数几种样本,丧失多样性的常见问题 |
| 条件 GAN | Conditional GAN (cGAN) | 在生成器和判别器中加入条件信息,实现可控生成 |
| 自适应实例归一化 | AdaIN (Adaptive Instance Normalization) | 用风格向量控制 Instance Normalization 的仿射参数,实现风格注入,StyleGAN 的核心组件 |
| 映射网络 | Mapping Network | StyleGAN 中将原始噪声 z 映射到中间潜空间 W 的 MLP,使 W 空间更线性、更可控 |
| 截断技巧 | Truncation Trick | 从截断的正态分布采样噪声 z,牺牲多样性换取质量,BigGAN / StyleGAN 常用 |
| 对抗蒸馏 | Adversarial Distillation | 用 GAN 的对抗损失将扩散模型蒸馏为少步/单步生成器,2024–2025 年的热点方向 |
| FID | Fréchet Inception Distance | 衡量生成分布与真实分布在 Inception 特征空间中的距离,越低越好 |
| IS | Inception Score | 衡量生成图像清晰度与类别多样性的指标,不直接与真实数据比较,现已少用 |
| 双时间尺度更新 | TTUR (Two Time-scale Update Rule) | 给判别器和生成器设置不同学习率,满足随机近似收敛条件,使 GAN 训练有理论保证 |
| 转置卷积 | Transposed Convolution | 正常卷积的”逆操作”,用于将小特征图放大,是生成器的标准上采样层 |
- GAN 谱系:Ian Goodfellow 2014 年提出原始 GAN → DCGAN(2015,卷积架构)→ cGAN(2014,条件生成)→ WGAN(2017,Wasserstein 距离)→ WGAN-GP(2017,梯度惩罚)→ SNGAN(2018,谱归一化)→ BigGAN(2019,大规模类条件训练)→ StyleGAN / StyleGAN2 / StyleGAN3(2018–2021,风格控制,系列终结)→ 对抗蒸馏时代(2023–2025)。
- GAN 的衰落与新生:2020 年后 扩散模型 以更好的稳定性和多样性主导了文生图领域,但 GAN 并未消亡——两条路线让它焕发新生:(1) 对抗蒸馏:ADD、DMD、SDXL-Lightning 等用 GAN 损失将扩散模型蒸馏为 1–4 步生成器,兼顾扩散质量与 GAN 速度;(2) 实时推理:在需要亚秒级响应的场景(视频生成帧插值、交互式编辑、AR/VR 实时合成),GAN 仍是首选。
- StyleGAN 的遗产:StyleGAN3 虽是系列终章,但其 W 空间、风格注入、可控编辑的理念深刻影响了后续的可控生成研究——包括扩散模型时代的 IP-Adapter、InstantID 等身份/风格控制方法。
- 与其他生成模型的关系:GAN 是隐式生成模型(不显式建模分布),而 VAE 是显式概率模型(通过 ELBO 优化),自回归模型 则通过逐步预测建模,扩散模型 通过逐步去噪建模。四种路线各有优劣,详见 生成式 AI 概览。
- 2025 年展望:GAN 的纯研究热度已大幅下降(NeurIPS / CVPR 的纯 GAN 论文逐年递减),但对抗训练作为一种通用技术——用于蒸馏、数据增强、对抗防御、评估——比以往任何时候都更活跃。GAN 没有死,它化整为零,融入了更广阔的生成式 AI 生态。