在图像生成领域里,GAN这一大家族是如何生根发芽的

生成对抗网络这一 ML 新成员目前已经枝繁叶茂了,截止今年 5 月份,目前 GAN 至少有 300+的论文与变体。而本文尝试借助机器之心 SOTA 项目梳理生成对抗网络的架构与损失函数发展路径,看看 GAN 这一大家族都有什么样的重要历程。

在前一篇文章中,我们展示了如何借助 SOTA 项目探索机器翻译最前沿的进展。我们可以发现,拥有最顶尖效果的模型,通常都有非常美妙的想法,这对于理解整个任务或领域非常重要。但是如果从另一个角度,探讨这些顶尖模型的关系与演化,我们能获得另一种全局体验。


为了获得这种全局概览,我们探索了 SOTA 项目中图像生成领域的*模型。根据机器之心的 SOTA 模型统计,在图像生成领域 58 个顶尖模型中,有 32 个模型在命名中带了「GAN」。这还是包含了生成对抗网络、变分自编码器和流模型三大生成模式的结果。


由此可见,GAN 最近两年构建的变体非常多,我们难以理清它的发展主线。为此,通过 SOTA 项目理解 GAN 的发展全景,也不失为一个好方法。
在图像生成领域里,GAN这一大家族是如何生根发芽的


图像生成 SOTA 排名:https://www.jiqizhixin.com/sota/tech-task/3070d792-9832-48aa-bb1c-3b899fc3c100


因为图像生成领域的 SOTA 排名涉及非常多的数据集与度量方法,我们并不能直观展示不同 GAN 的发展路线。但是通过统计最主流的一些解决方案,我们还是能从模型架构与损失函数两方面介绍 GAN 的发展。
在图像生成领域里,GAN这一大家族是如何生根发芽的图注:模型由浅到深、机制由简单到复杂、图片质量由低到高的发展过程,其中 SinGAN 获得了 ICCV 2019 最佳论文。图片改编自 arXiv:1906.01529。


在图像生成领域里,GAN这一大家族是如何生根发芽的

图注:不同生成对抗网络所采用的损失函数,它们针对 GAN 的不同缺点提出了自己的解决方案。


生成对抗这个思想可以很早


我们都知道生成对抗网络是 Ian Goodfellow 在 2014 年提出来的,它在图像生成上得到了令人惊艳的效果。本身生成对抗的思想非常容易理解,可以总结为「茅与盾」这几个字。稍微具体一点的话,我们可以看看 Goodfellow 在原论文中给出的一个案例:


在图像生成领域里,GAN这一大家族是如何生根发芽的

图注:生成对抗网络的简要学习过程,选自 arXiv: 1406.2661。


GAN 主要分为生成器与判别器,如上图所示生成器会将初始的随机分布 z 映射到 x,并得到绿色的随机分布。而判别器会判断黑点的真实分布与绿线分布是不是一致,只要判别器能分辨出来,那就它就能指导生成器继续更新。如蓝色虚线所示,较高的位置表示判别器认为样本来自真实分布,较低位置则来自生成分布。直到蓝色虚线一直处于中间位置,那么它分辨不出两个分布的差别,上图从 a 到 d 展示的就是 GAN 的学习过程。


虽然这种生成对抗的思路是通过 GAN 来发扬光大的,但是之前其实就有比较类似的思想。Olli Niemitalo 在 2010 年就在博客写到:「与生成器同时训练一个分类器网络,以随机或交替顺序向该网络输入生成数据和原始数据。然后,分类器根据周围图像的语境猜测该输入是原始数据 (1) 或生成数据 (0)。同时,生成器网络尝试从分类器中获得高分 (1)。」


此外,Jurgen Schmidhuber 也表示,GAN 与他 1992 年提出的 Predictability Minimization(PM)非常相似,GAN 和 PM 的主要区别只在于方向相反。在 Jurgen 今年的一篇概述论文中(arXiv: 1906.04493),他表示 PM 模型与 GAN 都是建模给定数据的无监督技术,它们都利用基于梯度的对抗网络来实现极小极大博弈。


在图像生成领域里,GAN这一大家族是如何生根发芽的

图注:PM 模型与 GAN 的工作流,其包括了各种变体。其中 PM 模型通过极小极大策略训练一个编码器,从而得到高质量的中间表征,该表征是可以生成为对应样本。而 GAN 看起来正好相反,它根据随机的中间表征,学习一个能生成真实样本的编码器。选自 arXiv: 1906.04493。


如上所示,PM 模型使用基于梯度的极小极大策略学习数据的编码器,从而使中间表征与数据的分布保持一致。而 GAN 却使用基于梯度的极小极大策略直接学习给定中间表征的解码器。因此,PM 模型编码器的输入类似于 GAN 解码器的输出,PM 模型编码器的输出类似于 GAN 解码器的输入。


 此外,GAN 尝试根据其它给定类型的分布逼近真实数据分布,通常可以给定高斯或二项分布等。而 PM 模型尝试通过多变量阶乘(factorial)二项分布毕竟真实分布。


总的而言,尽管 GAN 为大家所熟知,但之前也有沿着极小极大博弈做生成模型的思路。1992 年的 PM 模型尽管不是那么为人所知,但它的思想还是非常先进的。


GAN 的损失函数演进


除了核心思想外,另一个重要的问题是我们该如何拉近真实图像分布与生成分布之间的距离。如同上文黑色点线和绿色实线一样,GAN 的学习本质就是令生成分布逼近未知的真实分布。要做到这一点,损失函数就必不可少了,GAN 的损失函数会度量两个分布之间的距离,并尽可能拉近它们。


在 14 年 Goodfellow 等研究者提出来的 GAN 中,它使用 KL 散度度量这种距离。机器之心之前曾详细推导过这种基于 KL 散度的学习过程,感兴趣的读者可以查阅该文章。但是原版 GAN 的训练并不稳定,最开始的对抗阶段可能一直生成随机噪声,最后收敛的结果也很可能只生成少量类别的大量重复图像。


为了解决这一系列问题,生成对抗网络后续也就有了一系列的损失函数创新。上文按时间顺序展示了不同的损失函数,其中有一些耳熟能详的损失函数,例如 Wasserstein 距离、最小二乘距离、几何距离或相对距离等等。


总体而言,不同的损失函数主要从梯度消失问题、图像质量和样本多样性三个方面提升 GAN 的效果。不同的度量方法也会有其独特的角度,例如 WGAN-GP 就特别关注梯度消失问题与图像质量,Spectral normalization GAN 对于处理梯度消失与样本多样性是最高效的。


在图像生成领域里,GAN这一大家族是如何生根发芽的

图注:相比原始 GAN 采用的 KL 散度,不同损失函数能获得的性能增益,选自 arXiv: 1906.01529。


Wasserstein 距离


W 距离又称之为推土机距离,直观理解的话,真实图像分布是一堆土,生成分布也是一堆土,而 W 距离就是将生成分布的一堆土沿着某种路径移动到真实分布位置所做的功。当然这种路径对 W 距离是最优的,所做的功也是最小的。在 WGAN 论文中,研究者将该距离描述为:
在图像生成领域里,GAN这一大家族是如何生根发芽的


其中 Π(P_r, P_g) 表示所有联合分布的集合,而 γ(x, y) 的边缘分布分别表示 p_r 与 p_g,它们分别代表真实图像分布与生成分布。相比原版 GAN 采用的 KL 散度与 JS 散度,推土机距离即使在 p_r 与 p_g 之间完全没有重复的情况下,也能反映真实距离。而 JS 散度只会给出固定值 log2,因此也就没有梯度来拉近分布。


在图像生成领域里,GAN这一大家族是如何生根发芽的

图注:两个分布 P_r 与 P_g 之间的 W 距离与 JS 距离,在θ小于或大于 0 时,两个分布没有交叉,JS 散度只能给出定值 log2,而 W 距离能反映两个分布的真实距离。选自 arXiv: 1701.07875。


相对距离


另一种非常有意思的距离是相对距离,在 2018 年研究者提出这种距离后,Ian Goodfellow 在小型数据集上尝试了这种 Relativistic GAN,他表示这种相对距离有很好的属性。之前 GAN 主要希望增加伪造图像看起来很真实的概率,而 Relativistic GAN 同时希望降低真实数据看起来为真的概率。


下面展示了 Relativistic GAN 的损失函数,其中 f_1、f_2、g_1、g_2 都是标量到标量的函数。
在图像生成领域里,GAN这一大家族是如何生根发芽的


看起来这个损失很复杂,但实际上并不难理解,其最为重要的地方在于 C(x_r) - C(x_f),正是这种减法带来了相对性。而通常 GAN 度量的只是 C(x_r) 或 C(x_f),它们是绝对的。


正常情况下,GAN 只要求判别器最大化真实样本的概率,即将 D(x) 推向 1,而 RGAN 会要求度量给定一张真实图像,它在多大程度上比随机生成的样本更真实,即将 D(x) 推向 0.5。
在图像生成领域里,GAN这一大家族是如何生根发芽的


图注:右图在训练生成器中,判别器将假数据识别为真的概率推向 1。而理想情况下,真识别为假和假识别为真的概率应该推向中间。选自 arXiv: 1807.00734。


GAN 的图像生成演进


除了拉近分布距离这一制胜法宝,模型的能力也非常重要。模型的能力越强,就表示它能构建更复杂的生成分布,能更好地拟合真实分布。因此模型越深越复杂,它生成的图像质量就越高。在 14 年原版 GAN 中,Goodfellow 采用最简单的浅层全连接网络作为判别器与生成器的架构,它可以在 MNIST 等低分辨率的数据集上获得很好的效果。


既然全连接可行,那么很自然的想法是利用深度卷积网络加强它的能力,后续 LAPGAN 利用卷积网络由低像素向高像素层级地生成;DCGAN 利用转置卷积的空间上采样能力生成更高分辨率的图像。如下图所示为 GAN 的代表性架构演进:
在图像生成领域里,GAN这一大家族是如何生根发芽的


后面根据不同的任务,生成对抗网络架构也有更多的变化。在 17 年提出来的 BEGAN 中,它为判别器加上了一个自编码器。与一般的 GAN 相比,BEGAN 度量生成分布与自编码器损失函数的距离,而不是直接度量生成分布与真实图像分布之间的距离。通过这种修改,模型能帮助生成器生成自编码器容易重建的数据,因此早期训练更加高效。


此外,Progressive GAN 或 Self-attention GAN 等模型都有其独特的地方,PGGAN 一点点增加分辨率,这类似于通过简单小任务走向最终的生成目标;SAGAN 用自注意力机制构建生成器与判别器,能学到生成图像的全局依赖性关系。所有这些创新,都为更真实的图像生成打下了基础。


BigGAN 相信读者们已经非常熟悉了,它在 SAGAN 的基础上证明,通过增加批量大小和模型复杂度,我们能极大地提升生成的图片质量。从 BigGAN 提出以来,我们看到的生成图片真的能欺骗人类的判断,StyleGAN 已经创建了一匹极其真实的「假人类」。但 StyleGAN 在论文中表明,它并没有构建新方法以稳定 GAN 的训练,也没有引入新的架构,它只是引入了一种生成效果非常好的 GAN。


SinGAN


最后,谈到生成对抗网络架构,那就要介绍一下这几天公布的 ICCV 2019 最佳论文,它提出了一种新的 Unconditional GAN。该模型能捕捉图像块(patch)的内部分布,从而生成高质量、多样化的样本,并承载与训练图像相同的视觉内容。


我们先看一些生成样本,模型在经过左侧单张图片的训练后,它就能生成真实的图片,这些生成样本都能描述真实图像的全局结构与精细纹理。


在图像生成领域里,GAN这一大家族是如何生根发芽的

图注:SinGAN 的生成效果,选自 arXiv: 1905.01164。


我们可以看到,上面案例的不同之处在于,生成图像的横纵比或尺寸是可变的。这主要在于 SinGAN 包含了一个全卷积金字塔 GAN,金字塔的每一层负责学习不同比例的图像块分布。


具体而言,给定单张图片 x,SinGAN 能捕捉图片的内部统计信息。与一般的 GAN 不同,SinGAN 的训练样本是图片块,而不是整张图像。SinGAN 希望获得纹理之外的图像信息,从而生成更一般的自然图像,这就要求模型能捕捉到不同尺度的复杂图像结构。


为此,研究者提出了如下架构的 SinGAN,它由一系列分层的 patch-GAN 组成,不同的 GAN 负责捕捉不同尺度的图像块分布。整个模型都采用了较小的感受野,从而限制模型的能力,并防止模型记住单张图片的某些特征。


在图像生成领域里,GAN这一大家族是如何生根发芽的

图 4:SinGAN 的多尺度生成流程,模型由 GAN 的一种金字塔方案组成,每一层都是一个生成对抗网络,它们从下到上学习着不同尺度的图像生成效果。SinGAN 的训练和推断过程都是从粗粒度到细粒度的方向进行,选自 arXiv: 1905.01164。


如上都是拿图像生成举例,这些技巧很多都能迁移到其它领域,例如图像转换、图像修复、图像超分辨率和表征学习等等。当然这些领域也有更多令人拍案叫绝的生成对抗网络,例如 CycleGAN、FaceSwap、BigBiGAN 等等,这些领域的顶尖模型就期待读者自行探索机器之心 SOTA 项目了。



上一篇:在图像生成领域里,GAN这一大家族是如何生根发芽的


下一篇:PyTorch学习6--GAN