技术 | 生成对抗网络(GANs)的前沿话题(一)

推荐理由:

1.本文对GANs的原理进行了简明扼要的阐述,并结合其众多主流的前沿应用。

2.对于GANs训练中的常见问题进行了细致归类总结,并给出了针对性的改进方法。

3.结合实例,提供了详细的代码实例。有利于读者加深巩固对GANs的认知。

4.需要本教程源代码,请添加微信janelj78,回复:gan 获取。

 

生成对抗网络(GANs)的一些前沿话题

 

你想把一般的马变成斑马吗?想DIY出来动画角色或者名人?生成对抗网络(GANs)是你最好的伙伴。

 

生成对抗网络过去十年里机器学习领域最能吸引人的点子」—— Yann LeCun,前Facebook AI研究院主管。

 

第一部分的教程你可以在下面这个链接里找到:

https://towardsdatascience.com/comprehensive-introduction-to-turing-learning-and-gans-part-1-81f6d02e644d

 

这是关于使用生成对抗网络创建深度生成模型的三部分教程的第二部分。本文是关于变分自编码器的上一个话题的扩展。 我们将看到GANs在很大程度上优于变分自编码器,但「臭名昭著」地难以使用。
 


 

在本教程中,我们将解决以下主题:

  • GAN的简短回顾
  • GAN应用
  • GAN存在的问题
  • 其他类型的GAN
  • 构建图像GAN
  • 编码教程

 

本文的大部分内容将涉及编码GAN以及对GAN的一些更高级实现的广泛介绍。

 

GAN的简短回顾


在过去5年左右,我们引入了生成性对抗网作为训练生成模型的新方法,即创建能够生成数据的模型。它们由两个“对抗”模型组成:生成模型G用于捕获数据分布,判别模型D用于估计训练集中样本的分布,而不是G所生成的分布。G和D都可以是非线性的映射函数,例如多层感知器。

 

 

在生成对抗网络(GAN)中,我们有一个在零和游戏中两个相互对立的神经网络,其中第一个网络,即生成器,其任务是欺骗第二个网络,即鉴别器。生成器创建“假的”数据,在以下这个例子中是大熊猫的图像,生成器试图欺骗鉴别器将图像分类为真正的熊猫。我们可以迭代地改进这两个网络,以便生成逼真地图像以及执行其他一些非常酷的应用程序,其中一些我们将在本教程后面讨论。

 

 

最初图像可能会被看出相当明显的伪造痕迹,但随着对抗网络不断优化,即使对于人类区分真实和虚假图像也开始变得更加困难。

 

这两个网络可以被认为是两个黑盒,可以把它想象为具有某种任意复杂功能的盒子。我们将一些「噪音」数据或真实数据输入黑盒。 生成器的输入是一些随机噪音数据,产生伪图像,鉴别器的输入既是伪样本,也是来自真实数据集的样本。 然后,鉴别器做出关于所提供的图像z是真实图像D(z)= 1还是假图像D(z)= 0的二元判定。


 

 

为了训练两个网络,我们必须具有损失函数,并且每个网络的损失函数取决于第二网络。 在通过反向传递训练一个网络的同时,我们固定另一个网络的神经元权重。


 


 

如果你对我们现在讲的内容感到困惑,我建议您回过头来阅读第1部分,以便更好地直观了解此培训程序的工作原理。
 

 

重要的是通常鉴别器和生成器网络可以是任何形式的映射函数,例如支持向量机(SVM)。 正是于此GAN的这种形式经常被称为图灵学习。 然而在应用中,神经网络是最常见的叫法,因为它们是任意非线性函数的广义函数逼近器。
 

我现在将讨论GAN的一些最酷的应用程序,然后再讨论一些更高级的主题,以及GAN的代码讲解,旨在生成名人面部和动画角色。

 

GAN的应用

 

在本节中,我将简要介绍一下我在数据科学研究过程中发现的一些最有趣的GAN应用。最常见的主题是:

 

(有条件)合成 - 包括字体生成,文字转图像以及3D对象生成。

数据扩充 - 旨在减少对标记数据的需求(GAN仅用作增强其他模型的培训过程的工具)。

风格迁移和操纵 - 面部老化,绘画,姿态估计和操作,修复以及混合。

信号超分辨率 - 人工地提高图像的分辨率。
 

条件合成
 

在我看来条件合成是相当不可思议的。可以说条件合成最迷人的应用是图像转文字和文字转图像,它能够将图片翻译成文字(整个画面可以包含成千的文字量),反之亦然

 

这种应用影响深远,因为假设如果不仅仅是用于分析医学图像,而是更进一步用来描述图像的特征,那么我们可以减少医生对图像的主观分析潜在地影响。(这实际上是我目前正在尝试用乳房X光检查作为自己 业余项目的一部分)。

 


这也是另一种方式(假设我们给网络提供它理解的单词),并且图像可以纯粹从单词生成。 以下是用于执行此文本到图像条件合成的多条件GAN(MC-GAN)的示例:

 

数据增强

 

以下是个还不错的例子。GAN像VAEs一样学习数据生成分布。因此我们可以从我们的生成器中采样并生成其他样本,我们可以使用这些样本来增强我们的训练集。因此,GAN提供了另一种数据增加的视角(除了旋转和扭曲图像之外)。

 

风格迁移和操作
 

图像风格迁移是一个更好的例子。它涉及将一个图像的“风格”转移到另一个图像上。这与神经网络风格转换非常相似,我将在以后的文章中讨论这个问题。

 

 

这对于背景场景非常有效,并且类似于图像过滤,除了我们可以操纵实际图像的各个方面(比较上面图像中的云以用于输入和输出)。

 

GAN如何在动物或水果等其他物体上表现?

 


看起来相当不错! 如果我对GAN一无所知,我可能会认为马的形象实际上是风格转移后的斑马。

 

我们还可以改变风景来操纵季节,这方面在电子游戏和虚拟现实模拟器等事物上应用可以说具有很大潜力。

 

 

我们还可以使用GAN更改景深。


 


 

我们还可以操纵绘图,将它们变成真实的物体,相对容易(但是,这可能需要比我目前拥有的绘画技能更多)。


 


 

自动驾驶汽车以与下图相似的视角看世界,这样可以以更高对比度的方式(通常称为语义地图)观察物体。


 


 

我们甚至可以进行风格转换来渲染图像,如侠盗猎车手的环境(适用于那里的任何粉丝)。

https://youtu.be/lCR9sT9mbis

我们也可以以同样的方式将白天转移到夜晚。

https://youtu.be/N7KbfWodXJE

 

关于风格转移和图像处理就足够了。 这有很多很好的应用,但我们已经看到了该技术的几种恶意使用,人们冒充政治人物并制造虚假的电话交谈,电子邮件等。

 

这实际上是一个问题,所以美国军方正在开发一个新的取证领域来研究视频和媒体的类似例子,以确定它们是否是由GAN产生的(瞧我们生活的这个世界……)

 

图像超分辨率

 

图像超分辨率(SR)是指从低分辨率(LR)图像中恢复高分辨率(HR)图像的过程,是计算机视觉和图像处理中一类重要的图像处理技术。
 

通常,该问题非常具有挑战性并且固有地不适合,因为总是存在对应于单个LR图像的多个HR图像。

 

 

目前已经有应用各种深度学习方法来处理SR任务,范围从早期基于卷积神经网络(CNN)的方法(例如,SRCNN)到使用GAN的后起之秀SR方法(例如,SRGAN)。 通常,使用深度学习技术的SR算法族在以下主要方面彼此不同:不同类型的网络架构,不同类型的损失函数,不同类型的学习原理和策略等。

 

 

实现这一目标的过程实际上非常复杂,所以我不会在本文中详细介绍(尽管如果读者感兴趣我会在将来讨论这个问题)。

 

GAN的问题

 

此前,我们讨论过GAN的一些最基本的问题,主要存在于对算力的巨大需求,大尺寸图像的训练较为困难,模型敏感,以及易崩溃。

 

在这里重申这些问题是因为培训GAN非常困难且耗时。

 

振荡
 

当发生器和鉴别器共同寻找平衡时可能会发生振荡,但同时模型更新是独立的。 没有理论上的收敛性保证,事实上结果可能会因此发生变化。

 

 

对此的解决方案是广泛的超参数搜索,有时可能需要手动干预。 一个广泛的超参数搜索已经需要10个小时才能运行的东西并不是我推荐的。
 

梯度消失
 

鉴别器可能会变得太强而不能为发生器提供信号。 这意味着什么? 如果生成器太快太好(很少发生反过来的情况),生成器可以学会一致地欺骗鉴别器,并且不再需要再学习任何东西。

 

这种情况地解决方案不是预先训练鉴别器,或者与发生器相比降低其学习率。 也可以在每次迭代时更改生成器/鉴别器的更新次数(正如我在第1部分中所建议的那样)。
 

以下很容易看出GAN何时收敛,因为两个网络将在某个中间地带稳定(而非由其中某一个网络来主导 )。

 


 

发生器崩溃
 

发生器可以崩溃,以便始终生成相同的样本。 当发生器被约束到小子空间并因此开始生成低分集的样本时,这可能发生。

对此的解决方案是通过小批量区分(将整批提交给鉴别器以供审查)或通过特征匹配(例如:为低多样性添加发生器惩罚)或使用多个GAN来实现多样性。

 

计量学评价 

 

GAN仍然在非常定性的基础上进行评估 - 基本上,这个图像看起来很好吗? 人们定义某些客观的指标出乎意料地具有挑战性。所以一个“好”的生成器看起来是什么样的?


 


 

我们对此没有明确的解决方案,引起它目前仍然是一个活跃的研究领域。 强分类模型通常用于判断生成样本的质量。 使用的两个常见分数是Inception score和TSTR分数


 

Jonathan Hui有一篇相当全面的文章,解释了用于评估GAN性能的最常用指标,你可以在此处找到:

https://medium.com/@jonathan_hui/gan-how-to-measure-gan-performance-64b988c47732