这份攻略帮你「稳住」反复无常的GAN
作者:网友投稿 时间:2019-02-19 16:42
生成对抗网络(GAN)是一类非常强大的神经网络,具有非常广阔的应用前景。GAN 本质上是由两个相互竞争的神经网络(生成器和判别器)组成的系统。

GAN 的工作流程示意图
给定一组目标样本,生成器会试图生成一些人造的样本,这些生成的样本能够欺骗判别器将其视为真实的目标样本,达到「以假乱真」的目的。而判别器则会试图将真实的(目标)样本与虚假的(生成)样本区分开来。通过这样循环往复的训练方法,我们最终可以得到一个能够很好地生成与目标样本相似的样本的生成器。
由于 GAN 几乎可以学会模拟出所有类型的数据分布,它有着非常广泛的应用场景。通常,GAN 被用来去除图片中的人为影响、超分辨率、姿势迁移以及任何类型的图像转换,如下所示:

使用 GAN 完成的图像变换
然而,由于 GAN 的训练稳定性反复无常,使用 GAN 是十分困难的。诚然,许多研究人员已经提出了很好的解决方案来缓解 GAN 训练中涉及的一些问题。然而,这一领域的研究进展是如此之快,以至于人们很难跟上这些最新的有趣的想法。本文列出了一些常用的使 GAN 训练稳定的技术。
一、使用 GAN 的弊端
由于一系列原因,想要使用 GAN 是十分困难的。本节列举出了其中的一些原因:
1. 模式崩溃
自然的数据分布是极其复杂的多模态函数(也称多峰函数)。也就是说,数据分布有许多「峰」或「模式」。每个模态代表相似的数据样本聚集在一起,但是与其它的模态并不相同。
在模式崩溃的情况下,生成器会生成从属于有限模态集集合的样本。当生成器认为它可以通过生成单一模式的样本来欺骗鉴别器时,就会发生这种情况。也就是说,生成器只从这种模式生成样本。

上面一排图片表示没有发生模式崩溃的情况下 GAN 输出的样本。下面一排图片表示发生模式崩溃时 GAN 输出的样本。
判别器最终会发现这种模式是人为生成的。结果,生成器会直接转而生成另一种模式。这样的情况会无限循环下去,从本质上限制了生成样本的多样性。详细解释请参考博客《Mode collapse in GANs》
()
2. 收敛性
在 GAN 的训练过程中,一个普遍的问题就是「何时停止训练 GAN 模型?」由于在判别器损失降低的同时生成器的损失会增高(反之亦然),我们并不能基于损失函数的值就来判别 GAN 的收敛性。下图说明了这一点:

一张典型的 GAN 损失函数示意图。请注意,此图无法说明 GAN 的收敛性。
3. 质量
和前面提到的问题一样,很难定量地判断生成器何时能生成高质量的样本。向损失函数中加入额外的感知正则化项可以在一定程度上帮助我们缓解这种情况。
4. 评价标准
GAN 的目标函数说明了生成器(G)与判别器(D)这一对相互博弈的模型相对于其对手的性能,但却不能代表输出样本的质量或多样性。因此,我们需要能够在目标函数相同的情况下进行度量的独特的评价标准。
二、术语
在我们深入研究可能有助于提升 GAN 模型性能的技术之前,让我们回顾一些术语。
1. 下确界及上确界
简而言之,下确界是集合的最大下界,上确界是集合的最小上界,「上确界、下确界」与「最小值、最大值」的区别在于下确界和上确界不一定属于集合。
2. 散度度量
散度度量代表了两个分布之间的距离。传统的 GAN 本质上是最小化了真实数据分布和生成的数据分布之间的 Jensen Shannon 散度(JS 散度)。GAN 的损失函数可以被改写为最小化其它的散度度量,例如:Kulback Leibler 散度(KL 散度)或全变分距离。通常,Wasserstein GAN 最小化了推土机距离。
3. Kantorovich Rubenstein 对偶性
我们很难使用一些散度度量的原始形式进行优化。然而,它们的对偶形式(用上确界替换下确界,反之亦然)可能就较为容易优化。对偶原理为将一种形式转化为另一种形式提供了框架。详细解释请参考博客:《Wasserstein GAN and the Kantorovich-Rubinstein Duality》
(https://vincentherrmann.github.io/blog/wasserstein/)
4. LiPSCHITZ 连续性



