在你的浏览器中玩转生成对抗网络(GANs)!
Loading...
可能需要几十秒钟的时间。

什么是生成对抗网络GANs?

许多机器学习系统会处理某种复杂的输入(比如一张图片),并产生一个简单的输出(如"猫"的标签)。相比之下,生成模型的目标正好相反:从一个小的输入(比如几个随机数)产生一个复杂的输出,比如一个逼真的人脸图像。生成对抗网络(GAN)是一种特别有效的生成模型,几年前才被引入,并在机器学习社区引起了极大的兴趣。

你可能会想知道为什么我们需要一个能够生成逼真图像或其他类型数据的系统。除了固有的知识挑战之外,这实际上是一个非常实用的工具,具有从艺术到提升模糊图像的各种应用

GAN是如何工作的?

机器从零开始“创建”逼真图像的想法似乎像是魔术,但GAN使用两个关键技巧将一个模糊的、看似不可能的目标变成现实。

第一个想法,对于GAN来说并不新鲜,就是利用随机性作为一个要素。从基本层面上讲,这是有道理的:如果你构建了一个每次运行都产生相同脸部的系统,那将不会有太大的惊喜。然而同样重要的是,以概率的角度思考也有助于我们将生成图像的问题转化为自然的数学框架。显然,我们不希望随机均匀地选择图像,因为那只会产生噪声。相反,我们希望我们的系统能够学习哪些图像很可能是脸,哪些不是。从数学上讲,这涉及对图像建模一个概率分布,也就是一个告诉我们哪些图像可能是脸的函数。这种类型的问题——对高维空间上的函数建模——恰恰是神经网络所擅长的。

定义GAN的重要洞察是将这个建模问题设置为一种竞争。这就是名称中"对抗性"的含义。关键的想法是构建不只一个,而是两个相互竞争的网络:一个生成器和一个判别器。生成器试图创建随机的合成输出(比如脸部图像),而判别器则试图将其与真实输出(比如名人数据库)区分开。希望随着两个网络的较量,它们都能变得越来越好,最终结果是生成器网络产生逼真的输出。

总结一下:生成对抗网络(GAN)是一种神经网络,它通过建立一个竞争关系(因此称为"对抗性")来学习从特殊分布中选择样本(名称中的"生成"部分)。

可视化中发生了什么?

GAN是复杂的模型,可视化中有很多内容。以下是基本思想。

首先,我们不会可视化生成逼真图像这样复杂的任务。相反,我们展示的是一个仅在二维空间中学习数据分布的GAN。这个简化的示例没有实际应用,但更容易展示系统的机制。一方面,在普通的二维(x,y)空间中的概率分布比在高分辨率图像空间中的分布更容易可视化。

选择数据分布。

在顶部,你可以选择一个概率分布供GAN学习,我们将其可视化为一组数据样本。一旦你选择了一个分布,我们会在两个地方展示它:在左侧的模型概览图视图中显示较小版本,在右侧的分层分布视图中显示较大版本。

图1. 在两个地方显示选择的数据分布。

我们设计了这两个视图,以帮助你更好地理解GAN生成逼真样本的工作原理:
(1) 模型概览图显示了GAN的架构、主要组件及其连接方式,并可视化组件产生的结果;
(2) 分层分布视图将模型概览图中组件的可视化效果叠加在一起,这样你在分析模型时可以更容易地比较组件的输出。

开始训练。

要开始训练GAN模型,请点击工具栏上的播放按钮()。除了来自你选择的分布的真实样本,你还会看到模型生成的伪样本。随着训练的进行,伪样本的位置会不断更新。完美的GAN会生成伪样本的分布与真实样本的分布无法区分。当这种情况发生时,在分层分布视图中,你会看到两个分布很好地重叠在一起。

图2. 随着训练的进行,伪样本的位置会不断更新。然后,真实样本和伪样本的分布会很好地重叠在一起。

可视化生成器和判别器。

回想一下,GAN中的生成器判别器进行一场小小的比赛,相互竞争,迭代地更新伪样本,使其更加接近真实样本。GAN Lab可视化了它们之间的相互作用。

生成器。 如前所述,生成器是一个将随机输入转换为合成输出的函数。在GAN Lab中,随机输入是一个具有(x, y)值的2D样本(从均匀或高斯分布中抽取),输出也是一个2D样本,但映射到不同的位置,即伪样本。一种可视化这种映射的方法是使用流形 [Olah, 2014]。输入空间被表示为均匀的正方形网格。当函数将输入空间中的位置映射到新的位置时,如果我们可视化输出,整个网格,现在由不规则的四边形组成,看起来像原始规则网格的扭曲版本。每个(扭曲的)单元格的面积(或密度)现在已经改变,我们将密度编码为不透明度,因此较高的不透明度意味着较小空间中的更多样本。一个非常精细的流形将几乎与伪样本的可视化相同。这个可视化展示了生成器学习一个映射函数,使其输出看起来与真实样本的分布相似。

Figure 3. The generator's data transformation is visualized as a manifold, which turns input noise (leftmost) into fake samples (rightmost).

判别器。 当生成器创建伪样本时,判别器(一个二元分类器)试图将它们与真实样本区分开来。GAN Lab将其决策边界可视化为一个2D热图(类似于TensorFlow Playground)。网格单元格的背景颜色编码了分类器结果的置信度值。较深的绿色表示该区域的样本更有可能是真实的;较深的紫色表示更有可能是伪造的。当GAN接近最优时,整个热图的颜色将变得更加灰色,表示判别器不再轻易区分伪样本和真实样本。

Figure 4. 通过2D热图可以解释判别器的性能。在这里,判别器表现良好,因为大多数真实样本位于其分类曲面的绿色区域(伪样本位于紫色区域)。

理解生成器和判别器之间的相互作用。

在GAN中,两个网络在迭代更新自身的过程中相互影响。GAN Lab的一个很好的用途是利用其可视化功能了解生成器是如何逐步更新自身以生成越来越逼真的伪样本的。生成器通过试图欺骗判别器来实现这一点。当判别器将伪样本分类为真实时(对于判别器来说是不好的,但对于生成器来说是好的),生成器的损失值会降低。GAN Lab将梯度可视化为粉色线条,以便生成器能够取得成功。

Figure 5. 生成器的梯度(粉色线条)基于伪样本的当前位置和判别器的当前分类曲面(由背景颜色可视化)来指示伪样本的移动方向。

这样,生成器逐渐改进,以产生更加逼真的样本。一旦伪样本被更新,判别器将相应地进行更新,以微调其决策边界,并等待下一批试图欺骗它的伪样本。这个迭代的更新过程将继续,直到判别器无法区分真实伪造的样本。

使用交互功能进行实验。

GAN Lab具有许多酷炫的功能,支持交互式实验。

交互式超参数调整
单击编辑图标()以显示单个超参数,并在训练过程中即时编辑它们。
用户定义的数据分布
如果您不喜欢我们提供的分布选择,请通过单击数据分布列表末尾的图标()绘制自己的分布。
慢动作模式
忘记了动画的进度?您可以通过点击慢动作图标()进入慢动作模式来减慢动画速度。 观看此视频
手动逐步执行
如果您想要更多控制,您可以通过点击图标()逐步手动训练每个迭代步骤。 观看此视频

GAN Lab是使用TensorFlow.js实现的,这是一个在浏览器中运行的GPU加速深度学习库。所有的模型训练和可视化都是通过JavaScript实现的。您只需要像Chrome这样的网络浏览器就可以运行GAN Lab。我们的实现方法极大地扩展了人们对交互式深度学习工具的使用范围。源代码可在GitHub上找到。

GAN Lab的开发者是谁?

GAN Lab是由Minsuk KahngNikhil ThoratPolo ChauFernanda ViégasMartin Wattenberg开发的, 它是佐治亚理工学院(Georgia Tech)和Google Brain/PAIR之间的研究合作的成果。 我们还要感谢Shan Carter和Daniel Smilkov、 Google大图团队Google People + AI Research (PAIR), 以及佐治亚理工学院可视化实验室(Georgia Tech Visualization Lab)的反馈意见。

欲了解更多信息,请参阅我们的研究论文:

Minsuk KahngNikhil ThoratPolo ChauFernanda ViégasMartin Wattenberg。 "GAN Lab: Understanding Complex Deep Generative Models using Interactive Visual Experimentation." IEEE Transactions on Visualization and Computer Graphics, 25(1) (VAST 2018), 2019年1月。