一文读懂生成对抗网络GANs

一文读懂生成对抗网络 GANs (附学习资源)

原文标题: AnIntuitive Introduction to Generative

Adversarial Networks 作者:KeshavDhandhania、ArashDelijani 翻译:申利彬校对:和中华本文约 4000 字,建议阅读 10 分 钟。

本文以图像生成问题引出 GAN 模型,并介绍了 GAN 模型的 数学原理和训练过程,最后提供了丰富的 GAN 学习资料。

 本文讨论生成对抗网络,简称 GANs 。在生成任务或更广泛 的无监督学习中, GANs 是为数不多在此领域表现较好的机 器学习技术之一。特别是他们在图像生成相关任务上拥有出 色表现。深度学习领域先驱 Yann LeCun ,称赞 GAN 是机器 学习近十年来最好的想法。

 最重要的是, GAN 相关核心概念 很容易理解(事实上,读完本文后你就可以对它有个清晰的 认识)。

我们将 GANs 应用在图像生成任务中, 并以此来解释 GANs, 下面是本文的概要: 简单回顾深度学习图像生成问题生成任务中的关键问题生 成对抗网络挑战进一步阅读总结 简单回顾深度学习 (前馈)神经网络示意图,棕色为输入层,黄色为隐藏层, 红色为输出层 我们先简单介绍一下深度学习。上图是神经 网络示意图,它是由神经元组成,神经元之间通过边相互连 接,而且神经元按层排列,中间为隐藏层,输入层和输出层 分别在左右两侧。神经元之间的连接边都有权重,每一个神 经元都会根据与其连接的神经元的输入值加权求和,然后带 入非线性激活函数中计算,这类激活函数有 Sigmoid 和 ReLU 。例如,第一层隐藏层神经元对来自输入层神经元的值 进行加权求和,然后再应用 ReLU 函数。激活函数引入了非 线性,它使神经网络可以模拟复杂的现象(多个线性层等价 于一个线性层) 。

 给一个特定的输入,我们依次计算每个神 经元输出的值(也称为神经元的活性) 。从左到右,我们利 用前层计算好的值来逐层计算,最后得到输出层的值。然后 根据输出层的值和期望值(目标值)定义一个损失函数,例 如,均方误差损失函数。其中, x 是输入, h(x )是输出, y 是目标值,总和包含数据集中所有数据点。

 在每步中,我 们的目标是以合适的数值优化每条边的权重,从而尽可能降 低损失函数的大小。我们计算出梯度值,然后利用梯度具体 优化每一个权重。当我们计算出损失函数值,就可以用反向 传播算法计算梯度。反向传播算法的主要结果是:利用链式 求导法则和后一层参数的梯度值来计算这层的梯度。然后, 我们通过与各个梯度成比例的量(即梯度下降)来更新每个 权重。

 如果你想要进一步了解神经网络和反向传播算法的 细节,我推荐你阅读 Nikhil Buduma 写的简单学习深度学习 ( Deep Learning in aNutshell )

/2014/12/29/deep-learning-in-a-nutshell

/

图像生成问题 图像生成问题上,我们希望机器学习模型可以生成图像。为 了训练模型,我们得到了一个图像数据集(比如从网络下载 的 1,000,000 张图片)。在测试的时候,模型可以生成图 像,这些图像看起来像属于训练集,但实际上并不是训练集 中的图像。也就是说,我们想生成新的图像(与单纯地记忆 相反),但仍然希望它能捕获训练数据集中的模式,从而使 新的图像感觉与训练数据集相似。

图像生成问题:没有输入,所需的输出是一个图像 需要注 意的一点是:在测试或预测阶段,这个问题没有输入。每次 “运行模型”时,我们希望它生成(输出)一个新的图像。

 这可以说输入将从一个容易抽样的分布(例如均匀分布或高 斯分布)中随机抽样而来。

 生成任务中的关键问题 生成任务中的关键问题是:什么是一个好的损失函数?假如 你有两张机器学习模型生成的图片,我们如何决定哪一个更 好,好多少呢? 在以前的方法中,这个问题最常见的解决 方案是计算输出图像和训练集中最邻近图像的距离,其中使 用一些预定义的距离度量标准来计算距离。例如,在语言翻 译任务中,我们通常有一个源语句和一个小的(约 5 个)目

标句子集,也就是由不同翻译人员提供的译文。当模型生成 一个译文,我们把译文与提供的目标句子比较,然后根据它 距离哪个目标句子最近,分配一个相应的分数(特别是,我 们是用 BLEU 分数,它是根据两个句子之间有多少个 n-grams 匹配的距离度量标准) 。但这是一种单句子翻译方法,当目 标是一个较大的文本时,同样的方法会使损失函数的质量严 重恶化。例如,我们的任务可能是生成给定文章的段落摘要, 那么这种恶化源于少量的样本无法代表在所有可能的正确 答案中观察到的变化范围。

生成对抗网络

GAN 针对上面问题的回答是: 用另外一个神经网络 --- 记分神 经网络(称为判别器 Discriminator ),它将评估生成神经网 络输出的图像的真实性。这两个神经网络具有相反的目标 (对抗),生成网络的目标是生成一个看起来真实的假图像, 判别网络的目标是区分假图像和真实图像。

 这将生成任务 的设置类似于强化学习的双人游戏(如象棋, Atari games or

围棋),在强化学习中我们有一个从零开始通过自我对抗不 断改进的机器学习模型 。象棋或者围棋这些游戏的对抗双 方总是对称的(尽管并非总是如此) ,但对于 GAN 的设置, 两个网络的目标和角色是不相同的。一个网络产生假的样 本,而另一个网络区分真的和假的样本。

生成对抗网络的示意图,生成器网络标记为 G,判别器网络

标记为 D 如上图所示, 是生成对抗网络示意图。

 生成网络 G

和判别网络 D 在进行一场双方极大极小博弈。

 首先, 为了更 好地理解这种对抗机制,需要注意到判别网络( D )的输入

可以是从训练集中抽样出的样本,也可以是生成网络( G)

的输出,不过一般是 50%来自训练集,剩余50%来自G。为 了从 G 中生成样本, 我们从高斯分布中提取潜在的向量并输 入生成网络(G)。如果我们想生成200*200的灰度图像,那 么生成网络(G)的输出应该是200*200的向量。下面给出 目标函数,它是判别网络(D )做预测的标准对数似然函数。

 生成网络(G)是最小化目标函数,也就是减小对数似然函 数或是说“迷惑”判别网络(D)。也就是说,无论何时从生 成网络(G)输出中抽取样本作为判别网络(D)的输入,都 希望判别网络识别为真样本。判别网络( D)是要最大化目

标函数,也就是要增大对数似然函数或者说是把真实样本和 生成样本区分开。换句话说,如果生成网络( G)在“迷惑”

判别网络(D)上效果很好,也就会通过增大公式第二项中 D(G(z))来最小化目标函数。另外,如果判别网络( D)能很

好地工作,那么在从训练数据中选择样本的情况下,会通过 第一项(因为D(x)很大)增大目标函数,也会通过第二项减 小它(因为D(x)很小)。

如同平常的训练过程一样,使用随机初始化和反向传播,此 外,我们需要单独交替迭代更新生成器和判别器。下面是在 特定问题上应用 GANs 的端到端的工作流程描述:

决定GAN网络架构:G的架构是什么? D的架构是什么?

训练:一定数量的交替更新

更新D (固定G): 一半样本是真的,另一半是假的更新 G

(固定D):生成所有样本(注意,即使 D保持不变,梯度

流还是会经过 D)

人工检查一些假样本, 如果质量很高 (或者质量没有提升) 则停止,否则重复 2。

 当 G 和 D 都是前馈神经网络时,我 们得到的结果如下(在 MNIST 数据集中训练)

来自 Goodfellow et. Al ,从训练集开始, 最右边一列 (黄色框 内)图像与其紧邻左边一列的图像最接近。其它所有图像都 是生成的样本 关于 G 和 D 我们可以使用更复杂的架构,例 如使用跳格卷积( strided convolutional )和 adam 优化器来代 替随机梯度下降。另外,还有其它一些方面的改进,例如优 化架构,使用超参数和优化器(具体可参考论文) 。改进后, 我们得到了如下的结果: 卧室图片,来自 Alec Radford et. Al 挑战 训练 GANs 最关键的挑战是有可能不收敛,有时这个问题也 被称为模式崩溃(mode collapse)。举个例子,来简单解释这 个问题。假设任务是生成数字图像,就像 MNIST 数据集中 的一样。可能出现的问题(实践中确实出现)是生成器 G 开 始生成数字 6,而不能生成其它数字。

 一旦 D 适应 G 的当前 行为,为了最大限度地提高分类的准确性,它开始把所有的

数字 6 归为假,所有其它数字都是真实的(假设它不能分辨

假的6和真实的6)。然后G又适应了 D的当前行为,开始 只生成数字 8 而不生成其它数字。

 然后 D 又适应, 开始把数 字 8 归为假,其它的都是真。接着 G 又开始只生成 3,如此 循环下去。

 基本上, 生成器 G 仅生成与训练数据集的一个小 的子集相似的图像, 而一旦识别器 D 开始把这个小的子集与 其余的区分开, 生成器 G 又转换到另外的子集, 它们将一直 简单的来回震荡。虽然这个问题没有被完全解决,但还是有 一些方法可以避免这个问题。这些方法涉及小批量特征

(minibatch features)和多次更新 D的反向传播。我们不再 讨论这些方法的细节,如果要了解更多信息,请查看下一节 中的建议阅读材料。

进一步阅读

如果你想更深一步了解 GANs,我建议你阅读ICCV 2017 tutorials on GANs

( /view/iccv-2017-gans/home ),那里 有很多最新的教程, 并且它们对 GANs 的不同方面各有侧重。

 我还想说一点关于条件 GANs (Conditional GANs )的概念, 条件 GANs ,是在输入的条件下产生输出。例如,任务可能 是输出与输入描述相匹配的图像。所以,当你输入狗时,输 出的应该是狗的图像。

 下面是一些最近研究的成果(附论 文链接)

文本到图像合成( ‘Text to Image synthesis' 成果,作者

Reed et. al

超分辨率图像( Image Super-resolution )成果,作者 Ledig et.

Al

图像到图像转换 ( Image to Image translation )成果,作者 Isola et. Al

生成高分辨率名人相( Generating high resolution

‘ celebritylike ' images),作者 Karras et. Al 最后也是最重 要的,如果你想阅读更多关于 GANs 资料,请查看这个按照 GANs 的应用分类的论文列表 : /zhangqianhui/AdversarialNetsPapers 100+GAN 的变种论文清单: https://deephunt.in/the-gan-zoo-79597dc8c347 总结 通过这篇文章,希望你可以理解深度学习领域中的一种新技 术—生成对抗网络。它们是无监督机器学习中少数成功的技 术,并且这种技术正在快速革新我们执行生成任务的能力。

 过去的几年中, 我们发现了一些让人印象深刻的成果。

 GANs 应用在语言任务中,提高语言任务的稳定性和训练的方便 性,等等,也是研究的热点。

 GANs 在工业中也被广泛应用, 从交互式图像编辑、三维形状估计、药物发现、半监督学习 到机器人技术。最后,我希望这篇文章是你对抗机器学习之 旅的开始。

原文链接:

/2018/01/18/an-intuitive-introduction-to-g enerative-adversarial-networks/ 申利彬,研究生在读,主要研究方向大数据机器学习。目前 在学习深度学习在 NLP 上的应用,希望在 THU 数据派平台 与爱好大数据的朋友一起学习进步。翻译组招募信息工作内 容:需要一颗细致的心,将选取好的外文文章翻译成流畅的 中文。如果你是数据科学 /统计学 /计算机类的留学生,或在 海外从事相关工作,或对自己外语水平有信心的朋友欢迎加 入翻译小组。

 你能得到:定期的翻译培训提高志愿者的翻译水平,提高对 于数据科学前沿的认知,海外的朋友可以和国内技术应用发 展保持联系, THU 数据派产学研的背景为志愿者带来好的发 展机遇。其他福利:来自于名企的数据科学工作者,北大清 华以及海外等名校学生他们都将成为你在翻译小组的伙伴。