一文读懂生成对抗网络GANs(附学习资源)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一文读懂生成对抗网络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)
nikhilbuduma./2014/12/29/deep-learning-in-a-nutshel l/
图像生成问题
图像生成问题上,我们希望机器学习模型可以生成图像。为了训练模型,我们得到了一个图像数据集(比如从网络下载的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)很小)。
如同平常的训练过程一样,使用随机初始化和反向传播,此外,我们需要单独交替迭代更新生成器和判别器。下面是在