许多机器学习系统会处理复杂的输入(例如图像),并输出简单的结果(例如“猫”这样的标签)。相比之下,生成模型的目标则恰恰相反:它接受少量输入(可能是几个随机数),并生成复杂的输出,例如逼真的人脸图像。生成对抗网络(GAN)是一种特别有效的生成模型,它是在几年前被提出的,在机器学习领域引起了广泛关注。
你可能会好奇,为什么我们需要一个能够生成逼真图像或其他数据模拟的系统。除了内在的智力挑战外,事实证明,这是一个非常实用的工具,其应用范围从艺术创作到模糊图像增强等。
机器“从零开始”创建逼真图像的想法似乎很神奇,但 GAN 使用了两个关键技巧,将一个看似不可能的模糊目标变为现实。
第一个想法并非 GAN 所独有,即使用随机性作为输入。从基本层面来看,这是有道理的:如果每次运行系统都生成相同的人脸,那就没什么意思了。同样重要的是,从概率的角度思考也有助于我们将图像生成问题转化为一个自然的数学框架。显然,我们不希望随机选择图像,因为这样只会产生噪声。相反,我们希望系统学习哪些图像可能是人脸,哪些不是。从数学上讲,这涉及对图像的概率分布进行建模,即一个函数,它告诉我们哪些图像可能是人脸,哪些不是。这类问题——在高维空间上对函数进行建模——正是神经网络擅长的。
定义 GAN 的重大见解是将这个建模问题设置为一种竞赛。这就是“对抗”这个词的由来。关键思想是构建两个相互竞争的网络:一个生成器和一个判别器。生成器尝试创建随机的合成输出(例如人脸图像),而判别器则尝试将这些合成输出与真实输出(例如名人数据库)区分开来。我们希望,随着这两个网络的对抗,它们都会变得越来越好——最终结果是一个能够生成逼真输出的生成器网络。
总结一下:生成对抗网络是一种神经网络,它学习从特定分布中选择样本(这就是“生成”这个词的由来),并且通过设置竞争来实现这一点(因此称为“对抗”)。
GAN 是复杂的模型,可视化中包含了很多信息。以下是基本概念。
首先,我们并没有可视化像生成逼真图像这样复杂的内容。相反,我们展示的是一个学习二维空间中数据点分布的 GAN。虽然这种简单的模型没有实际应用,但它更容易展示系统的工作原理。一方面,二维(x, y)空间中的概率分布比高分辨率图像空间中的分布更容易可视化。
在顶部,你可以选择一个 GAN 要学习的概率分布,我们将其可视化为一组数据样本。选择后,我们会在两个地方显示它们:左边的模型概览图中显示较小的版本;右边的分层分布视图中显示较大的版本。
我们设计这两个视图是为了帮助你更好地理解 GAN 如何生成逼真的样本:
(1) 模型概览图展示了 GAN 的架构、主要组件及其连接方式,还可视化了组件产生的结果;
(2) 分层分布视图叠加了模型概览图中组件的可视化效果,这样在分析模型时,你可以更轻松地比较组件的输出。
要开始训练 GAN 模型,请点击工具栏上的播放按钮 ()。除了从你选择的分布中获取的真实样本,你还会看到模型生成的假样本。随着训练的进行,假样本的位置会不断更新。一个完美的 GAN 会生成与真实样本分布无法区分的假样本。当这种情况发生时,在分层分布视图中,你会看到两个分布完美重叠。
请记住,GAN 中的生成器和判别器正在进行一场小竞赛,它们相互对抗,迭代更新假样本,使其更接近真实样本。GAN 实验室可视化了它们之间的交互。
生成器。 如前所述,生成器是一个将随机输入转换为合成输出的函数。在 GAN 实验室中,随机输入是一个具有 (x, y) 值的二维样本(从均匀分布或高斯分布中抽取),输出也是一个二维样本,但映射到了不同的位置,即假样本。一种可视化这种映射的方法是使用流形 [Olah, 2014]。输入空间表示为一个均匀的正方形网格。当函数将输入空间中的位置映射到新位置时,如果我们可视化输出,整个网格(现在由不规则四边形组成)看起来就像原始规则网格的变形版本。每个(变形后的)单元格的面积(或密度)现在发生了变化,我们将密度编码为不透明度,因此不透明度越高意味着在更小的空间中有更多的样本。一个非常精细的流形看起来几乎与假样本的可视化相同。这种可视化展示了生成器如何学习一个映射函数,使其输出看起来与真实样本的分布相似。
判别器。 当生成器创建假样本时,判别器(一个二元分类器)尝试将它们与真实样本区分开来。GAN 实验室将其决策边界可视化为一个二维热力图(类似于TensorFlow 游乐场)。网格单元格的背景颜色编码了分类器结果的置信度值。深绿色表示该区域的样本更有可能是真实的;深紫色表示更有可能是假的。当 GAN 接近最优状态时,整个热力图将整体变为灰色,这表明判别器无法再轻易区分假样本和真实样本。
在 GAN 中,两个网络在迭代更新过程中相互影响。GAN 实验室的一个重要用途是通过其可视化来学习生成器如何逐步更新自己,以生成越来越逼真的假样本。生成器通过试图欺骗判别器来实现这一点。当判别器将假样本分类为真实样本时,生成器的损失值会降低(这对判别器不利,但对生成器有利)。GAN 实验室将假样本的梯度可视化为粉色线条,这样生成器就可以实现其目标。
通过这种方式,生成器逐渐改进,以生成更逼真的样本。一旦假样本更新,判别器将相应地更新其决策边界,等待下一批试图欺骗它的假样本。这个迭代更新过程会一直持续,直到判别器无法区分真实和假样本。
GAN 实验室有许多很酷的功能,支持交互式实验。
GAN 实验室使用了 TensorFlow.js,这是一个在浏览器中运行的 GPU 加速深度学习库。从模型训练到可视化,一切都用 JavaScript 实现。你只需要像 Chrome 这样的浏览器就可以运行 GAN 实验室。我们的实现方法大大拓宽了人们使用深度学习交互式工具的途径。源代码可以在 GitHub 上找到。
GAN 实验室由 Minsuk Kahng、Nikhil Thorat、Polo Chau、Fernanda Viégas 和 Martin Wattenberg 创建,这是佐治亚理工学院和谷歌 Brain/PAIR 之间研究合作的成果。我们还感谢 Shan Carter 和 Daniel Smilkov、谷歌大图景团队、谷歌人机交互研究团队(PAIR) 以及 佐治亚理工学院可视化实验室 提供的反馈。
如需更多信息,请查看 我们的研究论文: