跳转至

生成对抗网络 (GAN)

GAN 的基本原理是什么?生成器和判别器的目标函数分别是什么?

image.png

生成对抗网络(Generative Adversarial Network, GAN)由 Goodfellow 等人在 2014 年提出。它包含两个神经网络:生成器 G 和判别器 D,两者进行一场零和博弈。

  • 生成器 G:接收随机噪声 z∼pz(通常是标准正态分布或均匀分布),输出伪造样本 G(z),试图“欺骗”判别器,使其认为这些样本是真实的。

  • 判别器 D:接收真实数据 xpdata 或生成数据 G(z),输出一个标量,表示输入来自真实数据的概率。

GAN 的核心思想是让生成器和判别器在对抗中共同进化:判别器不断提高区分真假的能力,生成器不断提高生成逼真样本的能力,最终达到纳什均衡。

目标函数

原始 GAN 的目标函数是一个极小极大优化问题:

image.png


GAN 的训练过程是一种什么博弈?其最优解是什么?

GAN 的训练可视为一种二人零和博弈。生成器和判别器轮流更新参数,各自试图优化自己的目标函数,但两个目标完全对立。

从博弈论角度,判别器希望最大化 V(D,G),生成器希望最小化 V(D,G),最终收敛到鞍点(纳什均衡)。在该均衡点,生成器完全捕获了真实数据分布,判别器无法区分真假,对任何输入都输出 0.5。

最优解的理论分析

image.png

此时,生成器学到了真实数据分布,博弈达到理论均衡。但在实践中,由于优化过程的困难,GAN 往往难以达到这一理想状态。


为什么原始 GAN 的训练极不稳定?模式坍塌是怎么产生的?

训练不稳定的原因

image.png

模式坍塌(Mode Collapse)

模式坍塌是指生成器只生成少数几种样本(甚至一种),不能覆盖真实数据分布的所有模式。例如在 MNIST 上,生成器可能只生成数字“1”,而无法生成其他数字。

产生原因:

  • 生成器发现某个或某几个样本能够很好地欺骗当前的判别器,就会倾向于只产生这些“安全”的样本。

  • 判别器在应对这种单一模式时,可能会暂时被欺骗,但随后学会了识别该模式,生成器再跳到另一个模式,形成恶性循环。

  • 从优化角度看,生成器试图最小化 log⁡(1−D(G(z))) 等价于反转 KL 散度,该散度对覆盖所有模式惩罚较轻,更鼓励生成器集中在少数高似然模式上,加重了模式坍塌。


什么是模式坍塌?有哪些类型?如何检测和缓解?

定义

模式坍塌是 GAN 训练中的典型失败现象,生成器无法产生反映数据多样性的样本,输出集中在少数几个模式甚至单一模式上。

类型

  • 完全模式坍塌:生成器对所有输入噪声都输出完全相同或极为相似的样本,即生成分布退化为一个点或几个点。

  • 部分模式坍塌:生成器可以生成部分模式,但遗漏了训练数据中的一些其他模式。例如,在包含十类数字的数据集上,生成器只能生成三类。

  • 跨批次模式坍塌:在同一个训练批次内,生成器可能只生成一两种样本,但在不同批次间可以变换模式。这会导致训练过程中的震荡。

检测方法

  • 人工观察:直接观察生成的样本,特别是大量采样后看其多样性。

  • 最近邻分析:利用预训练分类器提取生成样本的特征,计算特征空间的最近邻距离,若大量样本聚集,说明多样性缺失。

  • 分类器覆盖率:用训练好的分类器对生成样本进行预测,统计预测类别的分布,如果某些类别很少出现,则表明模式缺失。

  • Fréchet Inception Distance (FID) 对模式坍塌敏感,能反映生成样本与真实样本分布的整体差异。

缓解措施

  • 改用更好的损失函数:使用 Wasserstein GAN (WGAN) 及其改进版本,提供更稳定和有意义的梯度。

  • 小批量判别(Minibatch Discrimination):允许判别器查看整个 batch 的样本统计量,迫使生成器产生具有多样性的批次。

  • 展开 GAN(Unrolled GAN):生成器优化时考虑判别器未来的更新步骤,使博弈更平衡。

  • 打包损失(Packing):如 PacGAN,将多个生成样本打包作为一个判别输入,使判别器能发现模式坍塌。

  • 多样性正则化:如增加生成样本之间的相似性惩罚项。

  • 使用辅助分类器:AC-GAN 训练判别器也做类别预测,帮助保留类别多样性。


WGAN 使用 Wasserstein 距离替代 JS 散度,带来了什么好处?

Wasserstein GAN (WGAN, Arjovsky et al. 2017) 提出用 Wasserstein-1 距离(Earth Mover's Distance) 来衡量真实分布 Pr 与生成分布 Pg 之间的距离,取代 JS 散度。

Wasserstein 距离的优势

  1. 连续且有意义的梯度:JS 散度在两个分布没有重叠或重叠可忽略时,梯度过零或为常数,无法指导生成器更新。Wasserstein 距离在这种情况下仍然连续且可微,能给生成器提供平滑的梯度,即使两个分布相距甚远。

  2. 缓解模式坍塌:由于 Wasserstein 距离对分布几何结构更敏感,优化它能更有效地推动分布从远处靠近,避免了 JS 散度下的“跳模”行为。

  3. 训练更稳定:WGAN 的损失函数的值与生成样本的质量相关性更强,可以作为评估指标,不再需要精心平衡生成器和判别器的训练次数。

  4. 理论保证:Wasserstein 距离具有更好的度量性质,可以反映分布的收敛过程。

WGAN 的核心改变

  • 去掉判别器最后一层的 sigmoid,要求其函数是 1-Lipschitz 连续,输出实值(称为 critic)。

  • 损失函数变为:

image.png

  • 为了保证 Lipschitz 条件,原始 WGAN 使用权重裁剪。

WGAN 中的权重裁剪(Weight Clipping)有什么问题?WGAN-GP 如何改进?

权重裁剪的问题 WGAN 通过将判别器的权重限制在一个小范围 [−c,c][−c,c] 内来强制 Lipschitz 连续,但这带来了严重问题:

  • 容量限制:权重裁剪会严重限制网络的表达能力,使得深层网络难以拟合复杂函数。

  • 梯度消失或爆炸:裁剪范围 cc 难以调节,稍微过大或过小都可能导致梯度异常。过大可能违反 Lipschitz 条件,过小导致所有权重达到边界,形成“二值化”网络,梯度几乎消失。

  • 优化偏差:裁剪会扭曲优化方向,使 critic 倾向于学习简单的函数,而不是真正的最优判别器。

WGAN-GP(Gradient Penalty)的改进

Gulrajani et al. (2017) 提出用梯度惩罚替代权重裁剪,直接约束 critic 的梯度范数接近 1(1-Lipschitz 条件)。

image.png

这种机制既保证了 Lipschitz 条件,又几乎不损害网络容量,极大地提升了训练的稳定性和生成质量。WGAN-GP 成为当时 GAN 训练的标准方案。


写出 WGAN-GP 的梯度惩罚项,并解释其作用。

梯度惩罚项

image.png

梯度惩罚项通过在真实分布和生成分布之间的区域施加约束,鼓励 critic 的梯度范数接近 1。这迫使 critic 成为一个平滑的、满足 Lipschitz 限制的函数,而又不像权重裁剪那样限制网络容量。惩罚仅作用在插值点上,因为这些点位于两个分布的支撑集之间,是梯度最可能违反约束的区域。最终使得 critic 能够提供有意义的梯度来指导生成器更新,保障训练稳定。


DCGAN 提出了哪些架构指导原则?它对生成质量有何提升?

DCGAN (Radford et al., 2016) 将卷积神经网络引入 GAN,并提出了一套稳定训练和提升生成质量的架构设计原则:

架构原则

  1. 用步长卷积(strided convolutions)替代池化层:判别器中使用步长卷积进行下采样,生成器中使用转置卷积进行上采样,让网络自己学习空间降维和升维。

  2. 取消全连接层:尤其是在生成器的第一层和判别器的最后一层,用卷积和全局平均池化替代,减少参数并保持空间结构。

  3. 批归一化(Batch Normalization):在生成器和判别器中均使用 BN,稳定训练,改善梯度流动,防止模式坍塌。但判别器的最后一层和生成器的第一层不适用 BN。

  4. 使用 ReLU 和 Leaky ReLU:生成器输出层用 Tanh,其他层用 ReLU;判别器所有层用 Leaky ReLU(如斜率 0.2)。

  5. 其他细节:使用 Adam 优化器,学习率调整,噪声输入从均匀分布变为标准正态分布等。

对生成质量的提升

  • 使得生成的图像更加清晰、自然,在卧室、人脸等数据集上生成了有意义的图像,证明了 CNN 在 GAN 中的有效性。

  • 提升了训练的稳定性,使 GAN 更容易收敛,不再像原始全连接 GAN 那样容易出现振荡。

  • 引导了后续各种卷积 GAN 结构的设计,成为 GAN 的经典基线。


条件 GAN(cGAN)是如何将条件信息(如类别)注入生成器和判别器的?

条件生成对抗网络 (Conditional GAN, Mirza & Osindero, 2014) 允许我们控制生成的内容。条件信息 y(如类别标签、文本描述、图像等)同时提供给生成器和判别器。

注入方式

  • 生成器:噪声 z 和条件 y 拼接后作为输入。例如,将类别标签的 one-hot 向量与噪声向量连接,然后输入生成器网络。

  • 判别器:输入不仅包括图像 x,还包括条件 y。判别器需要判断图像是否真实且符合条件。实现上,可以将条件信息拼接到图像特征(在中间层或输入层),或通过嵌入层将离散条件转换为向量后与图像特征融合。常见方法是在判别器的第一层将图像和条件进行拼接或相加/相乘。

训练目标

与原始 GAN 类似,只是分布变为条件分布:

image.png

通过这种方式,cGAN 可以生成指定类别的图像、根据文本描述生成图片等,极大扩展了 GAN 的应用范围。


Pix2Pix 是做什么的?它使用了什么损失函数?为什么需要成对数据?

Pix2Pix (Isola et al., 2017) 是一个通用的图像到图像翻译框架,能够将一种类型的图像转换为另一种类型,如将语义分割图转为街景照片,素描转为彩色图,白天转为夜晚等。它基于条件 GAN。

损失函数

Pix2Pix 使用了组合损失函数:

  1. cGAN 损失:原始的对抗损失,判别器判断输入图像对(输入-输出)是否真实。

  2. L1 损失:生成器不仅要骗过判别器,还要使输出接近真实目标。L1 损失能捕获低频结构,减少模糊:

image.png

这里 x 是输入图像,y 是目标图像。

总损失:

image.png

λ 是平衡权重(通常为 100)。U-Net 作为生成器,PatchGAN 作为判别器(对图像局部块进行判别)。

为什么需要成对数据

Pix2Pix 要求训练数据是严格对齐的图像对(例如同一场景的素描和照片)。因为 L1 损失和判别器都需要一一对应的输入和目标图像来监督,学习像素级映射。这种监督方式决定了它只能用于有成对数据的任务(如基于边缘图生成真实图像,已知对应关系)。如果缺乏成对数据,需要使用 CycleGAN 等方法。


CycleGAN 如何实现不成对数据的图像翻译?循环一致性损失是什么?

CycleGAN (Zhu et al., 2017) 解决了没有成对训练数据的图像翻译任务,例如将普通照片转换为梵高风格的绘画,只需要两类图像集合(源域 X 和目标域 Y),无需一一对应。

实现方式

image.png

除了标准的对抗损失(确保转换后的图像看起来属于目标域),关键引入了循环一致性损失:

image.png

直观理解:将图像从 X 翻译到 YY,再从 Y 翻译回 X,应该得到原始图像。这能确保翻译过程保留图像内容结构,而仅改变风格。

总损失:

image.png

通过这种设计,CycleGAN 无需成对数据也能学习到有意义的双向映射。


StyleGAN 的风格调制是如何实现的?它如何控制不同层次的细节?

StyleGAN (Karras et al., 2019) 彻底重新设计了生成器的架构,引入了风格调制机制,允许在不同尺度上控制图像的属性。

风格调制实现

image.png

控制不同层次细节

  • 粗糙层(低分辨率,如 4×4 - 8×8):控制高级别属性,如姿态、脸型、发型轮廓。

  • 中间层(中等分辨率):控制面部特征、眼睛大小等。

  • 精细层(高分辨率):控制颜色方案、纹理、微小的细节(如头发纹理、肤色等)。

通过在生成器的不同分辨率层注入不同的风格向量(可以来自不同的 w),StyleGAN 实现了风格混合,可以对不同尺度分别控制。此外,生成器还加入独立的高斯噪声输入,进一步增加随机变化(如雀斑、头发丝的随机摆放)。


Progressive GAN 逐步增大分辨率,这种训练策略有什么优势?

Progressive Growing of GANs (Karras et al., 2018) 提出逐渐增加生成器和判别器的分辨率,从极低分辨率(如 4×4)开始,逐步增加层以生成更高分辨率图像。

训练策略

  • 初始阶段仅训练低分辨率图像(4×4),网络很小,训练快速稳定。

  • 当该分辨率训练稳定后,平滑地添加新层来加倍分辨率(如 8×8),新层使用类似残差的 fade-in 技术平滑引入。

  • 重复此过程,直至达到目标分辨率(如 1024×1024)。

优势

  • 稳定训练:低分辨率下数据分布简单,生成器可以快速学习数据的大致结构,避免了高分辨率下初始分布不匹配导致的梯度问题。

  • 加速训练:早期大多数训练在低分辨率下进行,计算成本极低,总训练时间远小于直接训练高分辨率 GAN。

  • 更好的全局结构:先学全局结构,再逐步学习细节,符合由粗到精的自然生成过程,有助于生成更合理的高质量图像,减少伪影。

  • 隐式正则化:渐进训练本身具有正则化效果,减少了模式坍塌的风险。

Progressive GAN 成功生成了当时最高质量的 1024×1024 人脸图像,并为后续 StyleGAN 等奠定了基础。


BigGAN 是如何把 GAN 扩展到大规模训练的?使用了哪些技巧?

BigGAN (Brock et al., 2019) 证明了通过大幅增加模型规模(深度和宽度)和批次大小,可以极大提升 GAN 的生成质量和多样性,在 ImageNet 上生成高分辨率、高逼真度的图像。

关键技巧

  1. 大幅增加批大小(Batch Size):使用高达 2048 的批次大小,显著增加稳定性,因为大 batch 能提供更稳定的梯度估计,帮助生成器捕捉更多模式。

  2. 增加模型容量:增大每层的通道数(宽度)以及网络深度,例如生成器使用大量通道(如 96 至 384),判别器使用相应规模。

  3. 正交初始化和正则化:使用正交权重初始化,并添加谱归一化(Spectral Normalization)到判别器,以控制 Lipschitz 常数,极大提升训练稳定性。

  4. 截断技巧(Truncation Trick):在推理时,通过对潜在噪声 z 进行截断(限制其超出某个范围的值),牺牲一部分多样性以换取更高的保真度。常用方法是把 zz 的值约束在阈值内,或使用平均潜在向量。

  5. 共享类条件嵌入:在生成器和判别器中共享类别嵌入矩阵,提升条件建模效率。

  6. 正交正则化:防止滤波器间的共线性,促使生成的特征多样化。

  7. 多步训练策略:先使用标准 GAN 损失训练,然后转入微调阶段,采用铰链损失(Hinge loss)等。

这些方法共同使得 BigGAN 能在复杂数据集上生成极为逼真的图像,但也需要巨大的计算资源。


如何评估 GAN 的生成质量?IS(Inception Score)和 FID(Fréchet Inception Distance)分别如何计算?

评估生成模型的质量和多样性是个挑战。两个最广泛使用的定量指标是 IS 和 FID。

Inception Score (IS)

  • 原理:使用一个在大规模数据集(ImageNet)上预训练的 Inception v3 网络。对生成图像 x,将其输入网络得到条件标签分布 p(y∣x)。

  • 计算:

image.png

  1. 即生成样本条件分布与边缘分布之间 KL 散度的期望的指数。分数越高表示生成器越好。

  2. 缺陷:仅评估生成样本,不直接与真实数据比较;对 ImageNet 类别过拟合,泛化差;对模式坍塌敏感度有限。

Fréchet Inception Distance (FID)

  • 原理:将真实图像和生成图像分别送入 Inception v3,提取其高层特征(通常是倒数第二层池化后的向量)。假设特征服从多维高斯分布,计算两个高斯分布之间的 Fréchet 距离(Wasserstein-2 距离)。

  • 计算:

image.png

  • 解读:FID 衡量真实分布与生成分布在特征空间的距离,值越低越好,表示生成图像的质量和多样性更接近真实数据。FID 对模式坍塌更敏感,也是目前最常用的指标。

其他指标:Precision and Recall for Distributions (PRD)、Kernel Inception Distance (KID) 等补充了不同角度的评估。实际中常结合 FID 和人类主观评估来判断生成质量。