作者:思源

本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载

图像生成领域的 SOTA 排名涉及非常多的数据集与度量方法,我们并不能直观展示不同 GAN 的发展路线。但是通过统计最主流的一些解决方案,我们还是能从模型架构与损失函数两方面介绍 GAN 的发展。

图注:模型由浅到深、机制由简单到复杂、图片质量由低到高的发展过程,其中 SinGAN 获得了 ICCV 2019 最佳论文。图片改编自 arXiv:1906.01529。

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

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

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

图注:生成对抗网络的简要学习过程,选自 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 都是建模给定数据的无监督技术,它们都利用基于梯度的对抗网络来实现极小极大博弈。

图注: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 采用的 KL 散度,不同损失函数能获得的性能增益,选自 arXiv: 1906.01529。

Wasserstein 距离

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

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

图注:两个分布 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 都是标量到标量的函数。

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

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

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

GAN 的图像生成演进

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

既然全连接可行,那么很自然的想法是利用深度卷积网络加强它的能力,后续 LAPGAN 利用卷积网络由低像素向高像素层级地生成;DCGAN 利用转置卷积的空间上采样能力生成更高分辨率的图像。如下图所示为 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)的内部分布,从而生成高质量、多样化的样本,并承载与训练图像相同的视觉内容。

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

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

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

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

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

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

如上都是拿图像生成举例,这些技巧很多都能迁移到其它领域,例如图像转换、图像修复、图像超分辨率和表征学习等等。当然这些领域也有更多令人拍案叫绝的生成对抗网络,例如 CycleGAN、FaceSwap、BigBiGAN 等等。

不断更新资源

获取更多精彩

长按二维码扫码关注

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

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

    作者:思源 生成对抗网络这一 ML 新成员目前已经枝繁叶茂了,截止今年 5 月份,目前 GAN 至少有 300+的论文与变体.而本文尝试借助机器之心 SOTA 项目梳理生成对抗网络的架构与损失函数发展 ...

  2. NIPS 2018 | 中科院自动化所两篇入选论文:高清真实图像生成领域及GAN研究在人脸识别领域的进展...

    [论文一]自动化所在高清真实图像生成领域获得新突破 IntroVAE: Introspective Variational Autoencoders for Photographic Image Sy ...

  3. GAN综述及其在图像生成领域的应用(含原理、代码详解)

    本文将持续更新. 目录 1. 基本GAN 1.1 GAN(2014) 1.2 CGAN(2015) 1.3 DCGAN(2015) 1.4 VAE-GAN(2016) 1.5 ACGAN(2017) ...

  4. 【视频课】生成对抗网络经典任务,详解基于GAN的图像生成算法!

    前言 欢迎大家关注有三AI的视频课程系列,我们的视频课程系列共分为5层境界,内容和学习路线图如下: 第1层:掌握学习算法必要的预备知识,包括Python编程,深度学习基础,数据使用,框架使用. 第2层 ...

  5. 从“判断力”到“创造力”:GAN 在图像生成上的应用

    生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一.GAN自从Ian Goodfellow ...

  6. 涵盖18+ SOTA GAN实现,这个图像生成领域的PyTorch库火了

    视学算法报道 转载自:机器之心 作者:杜伟.陈萍 GAN 自从被提出后,便迅速受到广泛关注.我们可以将 GAN 分为两类,一类是无条件下的生成:另一类是基于条件信息的生成.近日,来自韩国浦项科技大学的 ...

  7. 这个图像生成领域的PyTorch库火了,涵盖18+ SOTA GAN实现

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 机器之心报道 近日,在 GitHub 上看到了一个非常有意义的项目 PyTorch-S ...

  8. 基于GAN的图像生成模型

    文章目录 定义一些参数 数据加载类 创建dataset和dataloader 模型权重的初始化函数 定义生成器 验证生成器是否正确 定义判别器 验证判别器是否正确 定义损失函数 训练 输入一个随机值查 ...

  9. “用于无监督图像生成解耦的正交雅可比正则化”论文解读

    Tikhonov regularization terms https://blog.csdn.net/jiejinquanil/article/details/50411617 本文是对博客http ...

最新文章

  1. OpenCL™(开放计算语言)概述
  2. MapInfo中常用查询函数及用法
  3. 小凡模拟器使用视频(续)
  4. java tostring方法_Java程序员小伙启动项目报错,原来是使用了lombok
  5. .NET Core 以及与 .NET Framework的关系
  6. scrapy 分布式 mysql_Scrapy基于scrapy_redis实现分布式爬虫部署的示例
  7. layui入门基础:资源汇总
  8. Window服务器可安装的live messager最新版本-20090826
  9. 如何修改linux的 系统语言
  10. Cookie和Session有什么区别?
  11. 新员工进入公司,应告知的工作纪律
  12. eclipse插件开发的打包
  13. kmz转换为dwg_甲方发来PDF图纸,你还得重新CAD绘制?教你30秒PDF转DWG
  14. unity如何往下挖地形_Unity 地形
  15. java经典源码_java经典源代码
  16. 中国未来房价基本走势的分析和预测
  17. C#生成格林威治时间字符串
  18. element-ui上传excel表格,展示在微信小程序中
  19. java字符转转长整型_P104 将数字字符串转换成长整型整数 ★★
  20. Linux 文件系统(2)sda sdb 和 SATA IDE SCSI

热门文章

  1. 对于本专业的看法和认识
  2. 从新手到专家——我对于计算机科学专业的经验分享
  3. 使用xplorer2代替explorer
  4. HTML CSS3阴影属性
  5. 自制炒股盯盘神器——python实现(2)
  6. 怎么把图片文件大小压缩到25k到40k还比较清晰
  7. Spring Boot 如何优雅的校验参数?
  8. Git 工具的下载安装
  9. PCIe(一)——基础知识
  10. 利用Wox实现无障碍谷歌翻译