生成对抗网络模型巡览

生成对抗网络(GAN)是深度学习架构的生成模型,已取得广泛成功。

关于 GAN 的论文有数千篇,命名 GAN 也有数百种,即具有明确名称(通常包含“GAN”,例如 DCGAN)的模型,而不是对方法的微小扩展。鉴于 GAN 文献和模型数量的庞大,要了解应重点关注哪些 GAN 模型,至少会令人感到困惑和沮丧。

在这篇文章中,您将了解在这一领域建立有用且富有成效的基础所需掌握的生成对抗网络模型。

阅读本文后,你将了解:

  • 奠定该研究领域基础的 GAN 模型。
  • 在现有成功模型的基础上,为更高级模型指明方向的扩展 GAN 模型。
  • 突破架构极限并取得惊人成果的先进 GAN 模型。

通过我的新书《Python 生成对抗网络》“启动您的项目”,包括分步教程和所有示例的 Python 源代码文件。

让我们开始吧。

A Tour of Generative Adversarial Network Models and Extensions

生成对抗网络模型及其扩展之旅
图片由 Tomek Niedzwiedz 拍摄,保留部分权利。

概述

本教程分为三个部分;它们是:

  • 基础
    • 生成对抗网络 (GAN)
    • 深度卷积生成对抗网络 (DCGAN)
  • 扩展
    • 条件生成对抗网络 (cGAN)
    • 信息最大化生成对抗网络 (InfoGAN)
    • 辅助分类器生成对抗网络 (AC-GAN)
    • 堆叠生成对抗网络 (StackGAN)
    • 上下文编码器
    • Pix2Pix
  • 高级
    • Wasserstein 生成对抗网络 (WGAN)
    • 循环一致生成对抗网络 (CycleGAN)
    • 渐进式增长生成对抗网络 (Progressive GAN)
    • 基于风格的生成对抗网络 (StyleGAN)
    • 大型生成对抗网络 (BigGAN)

基础生成对抗网络

本节总结了大多数(如果不是全部)其他 GAN 的基础 GAN 模型。

生成对抗网络 (GAN)

生成对抗网络架构及其首次实证演示由 Ian Goodfellow 等人于 2014 年发表的题为《生成对抗网络》的论文描述。

该论文简洁地描述了该架构,包括一个生成器模型,它以潜在空间中的点作为输入并生成图像,以及一个判别器模型,它将图像分类为真实(来自数据集)或虚假(由生成器输出)。

我们提出了一种通过对抗过程估计生成模型的新框架,在该框架中,我们同时训练两个模型:一个捕获数据分布的生成模型 G,和一个估计样本来自训练数据而不是 G 的概率的判别模型 D。G 的训练过程是最大化 D 犯错的概率。

生成对抗网络,2014年。

这些模型由全连接层(MLP)组成,生成器中采用 ReLU 激活,判别器中采用 Maxout 激活,并应用于 MNIST 和 CIFAR-10 等标准图像数据集。

我们训练了包括 MNIST、多伦多人脸数据库 (TFD) 和 CIFAR-10 在内的一系列数据集上的对抗网络。生成器网络使用了整流线性激活和 sigmoid 激活的混合,而判别器网络使用了 maxout 激活。在训练判别器网络时应用了 Dropout。

生成对抗网络,2014年。

深度卷积生成对抗网络 (DCGAN)

深度卷积生成对抗网络,简称 DCGAN,是 GAN 架构的扩展,它将深度卷积神经网络用于生成器和判别器模型,并对模型和训练进行配置,从而实现生成器模型的稳定训练。

我们引入了一类称为深度卷积生成对抗网络 (DCGAN) 的 CNN,它们具有某些架构约束,并证明它们是无监督学习的有力候选者。

——《使用深度卷积生成对抗网络进行无监督表示学习》,2015年。

DCGAN 之所以重要,是因为它提出了有效开发高质量生成器模型所需的模型约束。这种架构反过来又为大量 GAN 扩展和应用的快速发展奠定了基础。

我们提出并评估了一组卷积 GAN 架构拓扑约束,这些约束使其在大多数设置中都能稳定训练。

——《使用深度卷积生成对抗网络进行无监督表示学习》,2015年。

想从零开始开发GAN吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

生成对抗网络扩展

本节总结了对 GAN 模型架构或训练过程提供了一些更常见或广泛使用的离散扩展的命名 GAN 模型。

条件生成对抗网络 (cGAN)

条件生成对抗网络,简称 cGAN,是 GAN 架构的扩展,它除了图像之外,还利用额外的信息作为生成器和判别器模型的输入。例如,如果存在类别标签,它们可以用作输入。

如果生成器和判别器都以一些额外信息 y 为条件,则生成对抗网络可以扩展为条件模型。y 可以是任何类型的辅助信息,例如类别标签或其他模态的数据。我们可以通过将 y 作为额外的输入层馈送到判别器和生成器来进行条件化。

——《条件生成对抗网络》,2014年。

Example of the Model Architecture for a Conditional Generative Adversarial Network (cGAN)

条件生成对抗网络 (cGAN) 的模型架构示例。
摘自:《条件生成对抗网络》。

信息最大化生成对抗网络 (InfoGAN)

信息生成对抗网络,简称 InfoGAN,是 GAN 的一个扩展,它试图为生成器构建输入或潜在空间。具体来说,目标是为潜在空间中的变量添加特定的语义含义。

...,当从 MNIST 数据集生成图像时,理想情况是模型自动选择分配一个离散随机变量来表示数字的数值身份(0-9),并选择两个额外的连续变量来表示数字的倾斜角度和笔画粗细。

——《InfoGAN:通过信息最大化生成对抗网络进行可解释表示学习》,2016年。

这是通过将潜在空间中的点分为噪声和潜在编码来实现的。然后,潜在编码用于调节或控制生成图像中的特定语义属性。

...我们建议将输入噪声向量分解为两部分,而不是使用单个非结构化噪声向量:(i) z,被视为不可压缩噪声的来源;(ii) c,我们将其称为潜在代码,并将目标定位于数据分布的显著结构化语义特征

——《InfoGAN:通过信息最大化生成对抗网络进行可解释表示学习》,2016年。

Example of Using Latent Codes to vary Features in Generated Handwritten Digits with an InfoGAN

使用 InfoGAN 通过潜在编码改变生成手写数字特征的示例。
摘自:《InfoGAN:通过信息最大化生成对抗网络进行可解释表示学习》。

辅助分类器生成对抗网络 (AC-GAN)

辅助分类器生成对抗网络(AC-GAN)是 GAN 的一个扩展,它将生成器更改为类别条件生成器,如 cGAN,并向判别器添加一个额外的或辅助模型,该模型被训练以重构类别标签。

……我们引入了一个模型,它结合了利用侧信息的两种策略。也就是说,下面提出的模型是类别条件的,但带有一个辅助解码器,其任务是重构类别标签。

——《使用辅助分类器 GAN 的条件图像合成》,2016年。

这种架构意味着判别器既预测给定类别标签的图像的可能性,又预测给定图像的类别标签。

判别器提供来源的概率分布和类别标签的概率分布,P(S | X), P(C | X) = D(X)。

——《使用辅助分类器 GAN 的条件图像合成》,2016年。

堆叠生成对抗网络 (StackGAN)

堆叠生成对抗网络,或 StackGAN,是 GAN 的一个扩展,用于使用分层堆叠的条件 GAN 模型从文本生成图像。

……我们提出了堆叠生成对抗网络(StackGAN)来生成基于文本描述的 256×256 真实感图像。

——《StackGAN:使用堆叠生成对抗网络从文本到真实感图像合成》,2016年。

该架构由一系列文本和图像条件 GAN 模型组成。第一级生成器(Stage-I GAN)以文本为条件并生成低分辨率图像。第二级生成器(Stage-II GAN)以文本和第一级输出的低分辨率图像为条件,并输出高分辨率图像。

低分辨率图像首先由我们的 Stage-I GAN 生成。在我们的 Stage-I GAN 之上,我们堆叠 Stage-II GAN,以在 Stage-I 结果和文本描述的条件下生成逼真的高分辨率(例如 256×256)图像。通过再次以 Stage-I 结果和文本为条件,Stage-II GAN 学习捕获 Stage-I GAN 遗漏的文本信息,并为对象绘制更多细节

——《StackGAN:使用堆叠生成对抗网络从文本到真实感图像合成》,2016年。

Example of the Architecture for the Stacked Generative Adversarial Network for Text to Image Generation

用于文本到图像生成的堆叠生成对抗网络的架构示例。
摘自:《StackGAN:使用堆叠生成对抗网络从文本到真实感图像合成》。

上下文编码器

上下文编码器模型是一种用于条件图像生成的编码器-解码器模型,它使用为 GAN 设计的对抗方法进行训练。尽管在论文中它没有被称为 GAN 模型,但它具有许多 GAN 特征。

与自编码器类比,我们提出了上下文编码器——一种卷积神经网络,它被训练来生成任意图像区域的内容,并以其周围环境为条件。

——《上下文编码器:通过图像修复进行特征学习》,2016年。

Example of the Context Encoders Encoder-Decoder Model Architecture

上下文编码器编码器-解码器模型架构示例。
摘自:《上下文编码器:通过图像修复进行特征学习》

该模型使用联合损失进行训练,该损失结合了生成器和判别器模型的对抗损失以及计算预测图像和预期输出图像之间向量范数距离的重建损失。

在训练上下文编码器时,我们尝试了标准的像素级重建损失,以及重建加对抗损失。后者产生更清晰的结果,因为它可以更好地处理输出中的多种模式。

——《上下文编码器:通过图像修复进行特征学习》,2016年。

Pix2Pix

Pix2Pix 模型是 GAN 的扩展,用于图像条件图像生成,被称为图像到图像翻译任务。生成器模型中使用 U-Net 模型架构,判别器模型中使用 PatchGAN 模型架构。

我们的方法在生成器和判别器的几个架构选择上也有别于以前的工作。与过去的工作不同,我们的生成器使用基于“U-Net”的架构,而我们的判别器使用卷积“PatchGAN”分类器,该分类器仅惩罚图像块尺度的结构。

——《使用条件对抗网络进行图像到图像翻译》,2016年。

生成器模型的损失更新也包括与目标输出图像的向量距离。

判别器的任务保持不变,但生成器不仅要欺骗判别器,还要在 L2 意义上接近真实输出。我们还探讨了这种选项,使用 L1 距离而不是 L2,因为 L1 鼓励更少的模糊。

——《使用条件对抗网络进行图像到图像翻译》,2016年。

高级生成对抗网络

本节列出了最近在现有 GAN 扩展的基础上取得了令人惊讶或令人印象深刻成果的 GAN 模型。

这些模型主要侧重于实现生成大型逼真图像的开发。

Wasserstein 生成对抗网络 (WGAN)

Wasserstein 生成对抗网络,简称 WGAN,是 GAN 的一个扩展,它改变了训练过程,使判别器模型(现在称为评论家)在每次迭代中更新的次数比生成器模型多得多。

Algorithm for the Wasserstein Generative Adversarial Network (WGAN)

Wasserstein 生成对抗网络 (WGAN) 算法。
摘自:《Wasserstein GAN》。

评论家被更新为输出一个实值(线性激活),而不是使用 sigmoid 激活的二进制预测,并且评论家和生成器模型都使用“Wasserstein 损失”进行训练,该损失是评论家输出的真实值和预测值乘积的平均值,旨在提供用于更新模型的线性梯度。

判别器很快就学会了区分虚假和真实,并且正如预期的那样,没有提供可靠的梯度信息。然而,评论家无法饱和,并收敛到一个线性函数,该函数在任何地方都提供非常清晰的梯度。我们对权重施加的约束将函数的可能增长限制为在空间的不同部分最多是线性的,从而迫使最佳评论家具有这种行为。

Wasserstein GAN,2017年。

此外,评论家模型的权重被剪裁以保持其较小,例如,一个 [-0.01, 0.01] 的边界框。

为了使参数 w 位于紧凑空间中,我们可以做的简单事情是在每次梯度更新后将权重钳制到固定框(例如 W = [−0.01, 0.01]l)中。

Wasserstein GAN,2017年。

循环一致生成对抗网络 (CycleGAN)

循环一致性生成对抗网络(CycleGAN)是 GAN 的一个扩展,用于无需配对图像数据的图像到图像转换。这意味着不需要目标图像的示例,就像条件 GAN(如 Pix2Pix)的情况一样。

...对于许多任务,配对训练数据将不可用。我们提出了一种在没有配对示例的情况下学习将图像从源域 X 转换为目标域 Y 的方法。

——《使用循环一致性对抗网络进行非配对图像到图像转换》,2017年。

他们的方法寻求“循环一致性”,即从一个域到另一个域的图像转换是可逆的,这意味着它形成了一个一致的转换循环。

……我们利用了翻译应该“循环一致”的特性,意思是如果我们翻译,例如,一句话从英语到法语,然后将其从法语翻译回英语,我们应该回到原始句子

——《使用循环一致性对抗网络进行非配对图像到图像转换》,2017年。

这是通过拥有两个生成器模型实现的:一个用于将 X 转换为 Y,另一个用于在给定 Y 的情况下重建 X。反过来,该架构具有两个判别器模型。

……我们的模型包含两个映射 G : X -> Y 和 F : Y -> X。此外,我们引入了两个对抗判别器 DX 和 DY,其中 DX 旨在区分图像 {x} 和转换图像 {F(y)};同样,DY 旨在区分 {y} 和 {G(x)}。

——《使用循环一致性对抗网络进行非配对图像到图像转换》,2017年。

渐进式增长生成对抗网络 (Progressive GAN)

渐进式增长生成对抗网络,或简称 Progressive GAN,是对 GAN 模型架构和训练的改变,涉及在训练过程中逐步增加模型深度。

关键思想是逐步增长生成器和判别器:从低分辨率开始,我们随着训练的进行添加新层,这些层模拟越来越精细的细节。这既加快了训练速度,又大大稳定了训练,使我们能够生成前所未有的高质量图像……

——《GAN 的渐进式增长以提高质量、稳定性和变异性》,2017年。

这是通过在训练期间保持生成器和判别器深度对称并逐步添加层来实现的,这与深度神经网络早期发展中的贪婪分层预训练技术非常相似,只是前一层中的权重未被冻结。

我们使用的生成器和判别器网络相互镜像,并且始终同步增长。两个网络中所有现有层在整个训练过程中都保持可训练。当新层添加到网络时,我们会平滑地引入它们……

——《GAN 的渐进式增长以提高质量、稳定性和变异性》,2017年。

Example of the Progressive Growing of Generative Adversarial Networks During Training

训练期间生成对抗网络渐进式增长的示例。
摘自:《GAN 的渐进式增长以提高质量、稳定性和变异性》。

大型生成对抗网络 (BigGAN)

大型生成对抗网络,简称 BigGAN,是一种方法,它展示了通过扩展现有类别条件 GAN 模型如何创建高质量输出图像。

我们证明了 GAN 从扩展中受益匪浅,并且训练的模型参数是现有技术的两到四倍,批量大小是现有技术的八倍。

——《用于高保真自然图像合成的大规模 GAN 训练》,2018年。

该模型架构基于各种 GAN 模型和扩展的最佳实践。通过系统实验取得了进一步的改进。

使用了一种“截断技巧”,即在生成时从截断的高斯潜在空间中采样点,该空间与训练时使用的未截断分布不同。

值得注意的是,我们最好的结果来自使用与训练时不同的潜在分布进行采样。取一个用 z ∼ N (0, I) 训练的模型,并从截断的正态分布中采样 z(其中超出范围的值被重新采样以使其落在范围内)立即提供了提升

——《用于高保真自然图像合成的大规模 GAN 训练》,2018年。

基于风格的生成对抗网络 (StyleGAN)

基于风格的生成对抗网络,简称 StyleGAN,是生成器的一个扩展,它允许潜在代码在模型的不同点作为输入,以控制生成图像的特征。

……我们重新设计了生成器架构,以揭示控制图像合成过程的新方法。我们的生成器从一个学习到的常数输入开始,并根据潜在代码在每个卷积层调整图像的“风格”,从而直接控制不同尺度下图像特征的强度。

——《用于生成对抗网络的基于风格的生成器架构》,2018年。

该方法不是将潜在空间中的点作为输入,而是将该点通过一个深度嵌入网络,然后将其作为输入提供给生成器模型中的多个点。此外,噪声也与嵌入网络的输出一起添加。

传统上,潜在代码通过输入层提供给生成器 [...] 我们摒弃了这种设计,完全省略了输入层,而是从一个学习到的常数开始。给定输入潜在空间 Z 中的潜在代码 z,非线性映射网络 f : Z -> W 首先产生 w ∈ W。

——《用于生成对抗网络的基于风格的生成器架构》,2018年。

Example of the Traditional Generator Architecture Compared to the Style-based Generator Model Architecture

传统生成器架构与基于风格的生成器模型架构的比较示例。
摘自:《用于生成对抗网络的基于风格的生成器架构》。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

基础论文

扩展论文

高级论文

文章

总结

在这篇文章中,您发现了在这一领域建立有用且富有成效的基础所需掌握的生成对抗网络模型

具体来说,你学到了:

  • 奠定该研究领域基础的 GAN 模型。
  • 在现有成功模型的基础上,为更高级模型指明方向的扩展 GAN 模型。
  • 突破架构极限并取得惊人成果的先进 GAN 模型。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

立即开发生成对抗网络!

Generative Adversarial Networks with Python

在几分钟内开发您的GAN模型

...只需几行python代码

在我的新电子书中探索如何实现
使用 Python 构建生成对抗网络

它提供了关于以下内容的自学教程端到端项目
DCGAN条件GAN图像翻译Pix2PixCycleGAN
以及更多...

最终将GAN模型引入您的视觉项目

跳过学术理论。只看结果。

查看内容

对《生成对抗网络模型之旅》的 9 条评论

  1. PW 2019年7月19日 12:37 上午 #

    您知道任何多标签条件 GAN 吗?我正在寻找可以处理一组标签(例如 {‘nature’、‘tree’、‘park’})来描述图片的 GAN。不是成对的图片;只是图片及其标签集。

  2. Simone 2021年11月7日 6:39 上午 #

    你好,

    首先,感谢您对不同类型 GAN 的精彩阐述。

    我还有一个问题:您能告诉我 CAN(创意对抗网络)也是一种不同类型的 GAN,还是像 NLP、GAN 和现在的 CAN 一样是一个单独的类别?

    我读过它是一种 GAN 的修改,但仍然无法完全理解它。

    • Adrian Tam
      Adrian Tam 2021年11月7日 11:53 上午 #

      CAN 只是 GAN 的一个用例。

      • simone 2021年11月8日 12:34 上午 #

        明白了,非常感谢。

      • simone 2021年11月8日 12:37 上午 #

        抱歉再次打扰您:那么 CAN 不像 StyleGAN 那样是 GAN 的模型吗?

        • Adrian Tam
          Adrian Tam 2021年11月14日 11:59 上午 #

          我会认为它是 GAN 家族中的一个模型。

  3. ABAL 2022年1月1日 9:07 下午 #

    大家好,所有这些 GAN 都在讨论创建图像,而我遇到了一些 GAN,它们生成特征,然后将其用于分类任务。您能解释一下在 GAN 中创建特征与在 GAN 中生成图像有何不同,以及哪种方法最好吗?您能结合多标签分类解释一下吗?

发表评论

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。