GAN综述(1)

生成对抗网络GAN兴起后,随之而来的GAN自身存在的问题也是在各位学者的严谨证明下展露出来。有问题就有改进,大量围绕着GAN的文章也是爆发式的发表 但是其中不乏存在一些质量很高的文章。本文将对目前比较好的GAN模型做一个汇总和简单的比较,篇幅问题就不详细扩展,在以后的文章中将对其中的一部 分GAN模型做详细的解读。

github上开源的GAN项目代码很多,我总结了一下,用tensorflow和pytorch写了部分GAN模型的代码。tensorflow版本在这里, pytorch版本在这里.这里主要将GAN按照模型和发表时间分为了GAN, LSGANWGANWGAN-GP, DRAGANCGANinfoGANACGANEBGANBEGAN, DCGAN。当然了还有很多其他模型下的GAN例如CycleGAN, DiscoGANDialGAN等等。我目前只对上述的GAN的模型做 了一定的了解,接下来我将简单参数一下各类GAN的优缺点。

最早GAN的提出是为了通过生成模型和鉴别模型对抗来达到对生成图片最大相似度的伪装,比起VAE的话生成的图片会相对清晰一点。但是GAN的诞生无形带 来了一些问题,主要的问题有两块:

i.判别器越好,生成器的梯度消失越严重,这样就会导致在网络训练上很多时候的weight是基本上不改变的,这个也就是我们认为GAN的理论依据不足的一 个问题。具体的理论公式的推导在WGAN和其作者前期发表的论文中有详细的推导,这里不阐述了。

ii.由于网络是对抗式的,常常会造成训练时模型的崩溃,这样的话在训练时往往需要权衡训练的生成器与鉴别器的参数来防止崩溃的发生。这样在实际的应 用上也带了一些不便。

为了解决GAN的问题,研究者们不断推成出新。LSGAN也称为损失敏感GAN的模型通过限定的GAN的建模能力来试图解决梯度消失问题。LSGAN的核心在于其损 失函数上的改进让模型在训练的过程中更多的关注真实度不高的样本,对于那些训练较好的样本则是花较小的关注度。

WGAN的提出是旨在解决GAN存在的问题,其在GAN的基础上做了些许的变动,论文证明了GAN的梯度消失和不稳定的问题。改进是对生成样本和真实样本加噪 声,直观上说,使得原本的两个低维流形“弥散”到整个高维空间,强行让它们产生不可忽略的重叠;用Wasserstein距离代替JS散度,Wasserstein距离相 比KL散度、JS散度的优越性在于,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的远近。WGAN的实验结果上确实是得到了不小的提高。每次 迭代更新权重后做weight clipping,把权重限制到一个范围内(例如限定范围[-0.1,+0.1],则超出这个范围的权重都会被修剪到-0.1或+0.1)。

WGAN-GP对WGAN的weight clipping做出了改进,根据D的输入后向计算出权重梯度,并针对梯度的范数进行惩罚,也就是自适应的对weight做出相应的 调整。

DRAGAN的提出是结合了WGAN和LSGAN两部分,也只是在损失函数上做了一定的改进,通过不断的更新后项系数来控制损失训练上的稳定,基本上的思想通过 繁琐的数学推导证明下来,这篇论文我看的不是特别的清晰。不过实验结果确实是蛮不错的。

CGAN在GAN原有的模型上在生成器和鉴别器上都加入额外的条件信息(additional information)来指导GAN两个模型的训练。条件化(conditional) GAN做法就是直接把额外的信息(y)直接添加到生成器G和判别器D的目标函数中,与输入Z和X中构成条件概率。

infoGAN在CGAN的基础上又做了创新。本文从disentangled representation角度出发,把信息理论与GAN相结合提出InfoGAN,采用无监督的方式学习 到输入样本X的可解释且有意义的表示(representation)。训练上通过最大化隐变量(latent variable)的一个子集与observation之间的互信息。

ACGAN是比较新的一种GAN的模型,在D的输出部分添加一个辅助的分类器来提高条件GAN的性能,提出 Inception Accuracy 这种新的用于评判图像合成 模型的标准,引进MS-SSIM用于判断模型生成图片的多样性。类标签的提出时文章的一大特色,用于更新和改进损失函数,最后会对上述模型给一张总图。

EBGAN将能量的概念和方法引入到了GAN中,EBGAN的改变在鉴别器上。把D看作是一个energy function,对real image赋予低能量,fake image赋予 高能量。用GAN原理来解释,可以看作generator的outputs输入到discriminator中,我们为达到以假乱真,那么mse向较小的方向更新,即此时G的分布 应该趋近Data的分布。

BEGAN是在EBGAN的基础上改进提出的,模型上两者相似。让生成图像的重构误差分布逼近真实图像的重构误差分布的做法,而传统的GAN的做法是让生成图 像的分布逼近真实图像的分布。文中不断更新kt的比例控制理论的提出在EBGAN上的损失函数上得到提高。

DCGAN是将把CNN与GAN结合,DCGAN的原理和GAN是一样的,把经典GAN中的G和D换成了两个卷积神经网络。去掉了G网络D网络的pooling layer。在G网络 D网络中使用Batch Normalization。

由于不想大篇幅的陈述所以在对每一部分只是写了我的一些总体的体会,一些细节这里不再大篇幅的展开,图1展示了各大GAN模型的框架图。

图1.各类GAN框架

小结一下:GAN的种类发展的相当的快,一些存在的问题也在不断的解决和完善。当然还存在其他GAN模型,在以后的学习过程中将不断的学习。GAN的发展 和创新离不开对结构和损失函数的改进,数学是一个相当重要的环节。所以大家还是把数学好好学起来,打好坚实的基础。

原文:http://www.twistedwg.com/2019/01/23/GAN_image_generation.html

著名的物理学家Richard Feynman说过:“What I cannot create, I do not understand”(对于我创造不出的事物,我是无法理解它的)。我们现阶段接触到的AI产品,都是在尝试去看懂人类可以看懂的,例如对Imagenet的图像分类、AlphaGo、智能对话机器人等。然而,我们仍然不能断定这些算法具有真正的“智能”,因为知道如何做某事并不一定意味着理解某些东西,而且真正智能的机器人理解其任务是至关重要的。

如果机器可以去create,这也就可以说明机器对它的输入数据已经可以自主的建模,这是否可以说明机器在朝着更加“智慧”迈进了一步。这种create在机器学习的领域下,目前最为可行的方法是生成模型。通过学习的生成模型,机器甚至可以绘制不在训练集中但遵循相同分布的样本。

在生成模型中比较有影响力的有VAE[1]、PixelCNN[2]、Glow[3]、GAN[4]。其中在2014年提出的GAN可谓是生成模型中最受欢迎的,即使不能说GAN是一骑绝尘但也可谓是鹤立鸡群。GAN由两个神经网络组成,一个生成器和一个判别器组成,其中生成器试图产生欺骗判别器的真实样本,而判别器试图区分真实样本和生成样本。这种对抗博弈下使得生成器和判别器不断提高性能,在达到纳什平衡后生成器可以实现以假乱真的输出,但是这种纳什平衡只存在于理论中,实际GAN的训练伴随着一些问题的限制。一个是GAN训练不稳定性另一个是模式崩溃,导致问题的理论推导在之前博客有所推证。

GAN存在的问题并没有限制GAN的发展,不断改进GAN的文章层出不穷,在这几年的铺垫下GAN已经发展的蛮成熟的。从这几年关于GAN的高质量文章可以看出,18年以后的文章更多关注的是GAN在各个领域的应用,而之前的文章则是集中在GAN存在问题的改进。GAN在图像生成应用最为突出,当然在计算机视觉中还有许多其他应用,如图像绘画,图像标注,物体检测和语义分割。在自然语言处理中应用GAN的研究也是一种增长趋势,如文本建模,对话生成,问答和机器翻译。然而,在NLP任务中训练GAN更加困难并且需要更多技术,这也使其成为具有挑战性但有趣的研究领域。

An Introduction to Image Synthesis with Generative Adversarial Nets一文是概述GAN图像生成中使用的方法,并指出已有方法的优缺点。这篇博客则是对这篇论文进行个人的理解和翻译,并对其中的一些方法结合个人实际应用经验进行分析。

GAN的基础

接触过GAN的学者如果对GAN的结构已经很熟悉,这一部分可以自行跳过。我们看一下GAN的基础结构:

GAN可以将任意的分布作为输入,这里的ZZ就是输入,在实验中我们多取Z∼N(0,1)Z∼N(0,1),也多取[−1,1][−1,1]的均匀分布作为输入。生成器G的参数为θθ,输入ZZ在生成器下得到G(z;θ)G(z;θ),输出可以被视为从分布中抽取的样本G(z;θ)∼pgG(z;θ)∼pg。对于训练样本xx的数据分布为pdatapdata,生成模型G的训练目标是使pgpg近似pdatapdata。判别器D便是为了区分生成样本和真实样本的真假,训练发生器和判别器通过最小 - 最大游戏,其中发生器G试图产生逼真的数据以欺骗判别器,而判别器D试图区分真实数据和合成数据。这种博弈可公式化为:

minGmaxDV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[log(1−D(G(z)))]minGmaxDV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[log(1−D(G(z)))] 最初的GAN 使用完全连接的层作为其构建块。后来,DCGAN [5]提出使用卷积神经网络实现了更好的性能,从那以后卷积层成为许多GAN模型的核心组件。然而,当判别器训练得比发生器好得多时,D可以有信心地从G中拒绝来自G的样本,因此损失项log(1−D(G(z)))log(1−D(G(z)))饱和并且G无法从中学到任何东西。为了防止这种情况,可以训练G来最大化logD(G(z))logD(G(z)),而不是训练G来最小化log(1−D(G(z)))log(1−D(G(z)))。虽然G的改变后的损失函数给出了与原始梯度不同的梯度,但它仍然提供相同的梯度方向并且不会饱和。

条件GAN

在原始GAN中,无法控制要生成的内容,因为输出仅依赖于随机噪声。我们可以将条件输入cc添加到随机噪声ZZ,以便生成的图像由G(c,z)G(c,z)定义。这就是CGAN[6],通常条件输入矢量cc与噪声矢量zz直接连接即可,并且将得到的矢量原样作为发生器的输入,就像它在原始GAN中一样。条件cc可以是图像的类,对象的属性或嵌入想要生成的图像的文本描述,甚至是图片。

辅助分类器GAN(ACGAN)

为了提供更多的辅助信息并允许半监督学习,可以向判别器添加额外的辅助分类器,以便在原始任务以及附加任务上优化模型。这种方法的体系结构如下图所示,其中C是辅助分类器。 添加辅助分类器允许我们使用预先训练的模型(例如,在ImageNet上训练的图像分类器),并且在ACGAN [7]中的实验证明这种方法可以帮助生成更清晰的图像以及减轻模式崩溃问题。 使用辅助分类器还可以应用在文本到图像合成和图像到图像的转换。

GAN与Encoder的结合

尽管GAN可以将噪声向量z转换为合成数据样本G(z),但它不允许逆变换。如果将噪声分布视为数据样本的潜在特征空间,则GAN缺乏将数据样本x映射到潜在特征z的能力。为了允许这样的映射,两个并发的工作BiGAN[8]和ALI[9]在原始GAN中添加编码器E,如下图所示。令ΩxΩx为数据空间,ΩzΩz为潜在特征空间,编码器E将x∈Ωxx∈Ωx作为输入,并产生特征向量E(x)∈ΩzE(x)∈Ωz作为输出。修正判别器D以将数据样本和特征向量都作为输入来计算P(Y|x,z)P(Y|x,z),其中Y=1Y=1表示样本是真实的而Y=0Y=0表示数据由G生成。用数学公式表示为:

minGmaxDV(D,G)=Ex∼pdata(x,E(x))[logD(x)]+Ez∼pz(z)[log(1−D(G(z),z))]minGmaxDV(D,G)=Ex∼pdata(x,E(x))[logD(x)]+Ez∼pz(z)[log(1−D(G(z),z))]

GAN与VAE的结合

VAE生成的图像是模糊的,但是VAE生成并没有像GAN的模式崩溃的问题,VAE-GAN[10]的初衷是结合两者的优点形成更加鲁棒的生成模型。模型结构如下:

但是实际训练过程中,VAE和GAN的结合训练过程也是很难把握的。

处理模式崩溃问题

虽然GAN在图像生成方面非常有效,但它的训练过程非常不稳定,需要很多技巧才能获得良好的结果。GAN不仅在训练中不稳定,还存在模式崩溃问题。判别器不需要考虑生成样品的种类,而只关注于确定每个样品是否真实,这使得生成器只需要生成少数高质量的图像就足以愚弄判别者。例如在MNIST 数据集包含从0到9的数字图像,但在极端情况下,生成器只需要学会完美地生成十个数字中的一个以完全欺骗判别器,然后生成器停止尝试生成其他九位数,缺少其他九位数是类间模式崩溃的一个例子。类内模式崩溃的一个例子是,每个数字有很多写作风格,但是生成器只学习为每个数字生成一个完美的样本,以成功地欺骗鉴别器。

目前已经提出了许多方法来解决模型崩溃问题。一种技术被称为小批量(miniBatch)特征,其思想是使判别器比较真实样本的小批量以及小批量生成的样本。通过这种方式,判别器可以通过测量样本在潜在空间中的距离来学习判断生成的样本是否与其他一些生成的样本过于相似。尽管这种方法运行良好,但性能在很大程度上取决于距离计算中使用的特征。 MRGAN [11]建议添加一个编码器,将数据空间中的样本转换回潜在空间,如BiGAN 它的编码器和生成器的组合充当自动编码器,重建损失被添加到对抗性损失中以充当模式正则化器。同时,还训练判别器以区分重构样本,其用作另一模式正则化器。 WGAN [12]使用Wasserstein距离来测量真实数据分布与学习分布之间的相似性,而不是像原始GAN那样使用Jensen-Shannon散度。虽然它在理论上避免了模式崩溃,但模型收敛的时间比以前的GAN要长。为了缓解这个问题,WGAN-GP [13]建议使用梯度惩罚,而不是WGAN中的权重削减。 WGAN-GP通常可以产生良好的图像并极大地避免模式崩溃,并且很容易将此培训框架应用于其他GAN模型。SAGAN[14]将谱归一化的思想用在判别器,限制判别器的能力。

GAN在图像生成方法

GAN在图像生成中的主要方法为直接方法,迭代方法和分层方法,这三种方法可由下图展示:

区分图像生成方法是看它拥有几个生成器和判别器。

直接法

该类别下的所有方法都遵循在其模型中使用一个生成器和一个判别器的原理,并且生成器和判别器的结构是直接的,没有分支。许多最早的GAN模型属于这一类,如GAN [4]、DCGAN [5]、ImprovedGAN [15],InfoGAN [16],f-GAN [17]和GANINT-CLS [18]。其中,DCGAN是最经典的之一,其结构被许多后来的模型使用,DCGAN中使用的一般构建块如下图所示,其中生成器使用反卷积,批量归一化和ReLU激活,而判别器使用卷积,batchnormalization和LeakyReLU激活,这也是现在很多GAN模型网络设计所借鉴的。

与分层和迭代方法相比,这种方法设计和实现相对更直接,并且通常可以获得良好的结果。

分层法

与直接法相反,分层方法下的算法在其模型中使用两个生成器和两个鉴别器,其中不同的生成器具有不同的目的。这些方法背后的想法是将图像分成两部分,如“样式和结构”和“前景和背景”。两个生成器之间的关系可以是并联的或串联的。

SS-GAN [19]使用两个GAN,一个Structure-GAN用于从随机噪声z^z^作为输入并输出图像,整体结构可由下图展示:

迭代法

迭代法不同于分层法,首先,不使用两个执行不同角色的不同生成器,此类别中的模型使用具有相似或甚至相同结构的多个生成器,并且它们生成从粗到细的图像,每个生成器重新生成结果的详细信息。当在生成器中使用相同的结构时,迭代方法可以在生成器之间使用权重共享,而分层方法通常不能。

LAPGAN [20]是第一个使用拉普拉斯金字塔使用迭代方法从粗到细生成图像的GAN。LAPGAN中的多个生成器执行相同的任务:从前一个生成器获取图像并将噪声矢量作为输入,然后输出再添加到输入图像时使图像更清晰的细节(残留图像)。这些发生器结构的唯一区别在于输入/输出尺寸的大小,而一个例外是最低级别的生成器仅将噪声向量作为输入并输出图像。LAPGAN优于原始GAN 并且表明迭代方法可以生成比直接方法更清晰的图像。

StackGAN [21]作为一种迭代方法,只有两层生成器。第一个生成器接收输入(z,c)(z,c),然后输出模糊图像,可以显示粗略的形状和对象的模糊细节,而第二个生成器采用(z,c)(z,c)和前一个生成器生成的图像,然后输出更大的图像,可以得到更加真实的照片细节。

迭代法的另一个例子是SGAN [22],其堆叠生成器,其将较低级别的特征作为输入并输出较高级别的特征,而底部生成器将噪声矢量作为输入并且顶部生成器输出图像。对不同级别的特征使用单独的生成器的必要性是SGAN关联编码器,判别器和Q网络(用于预测P(zi|hi)P(zi|hi)的后验概率以进行熵最大化,其中hihi每个生成器的第i层的输出特征),以约束和改善这些特征的质量。

其它方法

与前面提到的其他方法不同,PPGN[23]使用激活最大化来生成图像,它基于先前使用去噪自动编码器(DAE)学习的采样。为了生成以特定类别标签y为条件的图像,而不是使用前馈方式(例如,如果通过时间展开,可以将循环方法视为前馈),PPGN优化过程为生成器找到输入z这使得输出图像高度激活另一个预训练分类器中的某个神经元(输出层中与其类标签y对应的神经元)。

为了生成更好的更高分辨率的图像,ProgressiveGAN [24]建议首先训练4×44×4像素的生成器和判别器,然后逐渐增加额外的层,使输出分辨率加倍至1024×10241024×1024。这种方法允许模型首先学习粗糙结构,然后专注于稍后重新定义细节,而不是必须同时处理不同规模的所有细节。

GAN在文本到图像的应用

GAN应用于图像生成时,虽然CGAN [6]这样的标签条件GAN模型可以生成属于特定类的图像,但基于文本描述生成图像仍然是一个巨大的挑战。文本到图像合成是计算机视觉的里程碑,因为如果算法能够从纯粹的文本描述中生成真实逼真的图像,我们可以高度确信算法实际上理解图像中的内容。

GAN-INT-CLS [18]是使用GAN从文本描述生成图像的第一次尝试,这个想法类似于将条件向量与噪声向量连接起来的条件GAN,但是使用文本句子的嵌入而不是类标签或属性的区别。

GAN-INT-CLS开创性的区分两种错误来源:不真实的图像与任何文本,以及不匹配的文本的真实图像。为了训练判别器以区分这两种错误,在每个训练步骤中将三种类型的输入馈送到判别器:{真实图像,匹配文本},{真实图像,不匹配文本}和{伪图像,真实文本}。这种训练技术对于生成高质量图像非常重要,因为它不仅告诉模型如何生成逼真的图像,还告诉文本和图像之间的对应关系。

TAC-GAN [25]是GAN-INT-CLS [18]和ACGAN [7]的组合。

位置约束的文本到图像

尽管GAN-INT-CLS [18]和StackGAN [21]可以基于文本描述生成图像,但是它们无法捕获图像中对象的定位约束。为了允许编码空间约束,GAWWN [26]提出了两种可能的解决方案。

GAWWN 提出的第一种方法是通过空间变换网络对空间复制的文本嵌入张量进行学习,从而学习对象的边界框。空间变换器网络的输出是与输入具有相同维度的张量,但是边界外的值都是零。空间变换器的输出张量经过几个卷积层,以将其大小减小回一维向量,这不仅保留了文本信息,而且还通过边界框提供了对象位置的约束。这种方法的一个好处是它是端到端的,不需要额外的输入。

GAWWN 提出的第二种方法是使用用户指定的关键点来约束图像中对象的不同部分(例如头部,腿部,手臂,尾部等)。对于每个关键点,生成一个掩码矩阵,其中关键点位置为1,其他为0,所有矩阵通过深度级联组合形成一个形状[M×M×K][M×M×K]的掩码张量,其中MM是掩码的大小,KK是数字关键点。然后将张量放入二进制矩阵中,其中1指示存在关键点,否则为0,然后在深度方向上复制以成为要被馈送到剩余层中的张量。虽然此方法允许对对象进行更详细的约束,但它需要额外的用户输入来指定关键点。

尽管GAWWN提供了两种可以对生成的图像强制执行位置约束的方法,但它仅适用于具有单个对象的图像,因为所提出的方法都不能处理图像中的多个不同对象。

堆叠GAN的文本到图像

StackGAN [21]建议使用两个不同的生成器进行文本到图像的合成,而不是只使用一个生成器。第一个生成器负责生成包含粗糙形状和颜色的对象的低分辨率图像,而第二个生成器获取第一个生成器的输出并生成具有更高分辨率和更清晰细节的图像,每个生成器都与其自己的判别器相关联。

StackGAN ++ [27]建议使用更多对生成器和判别器而不是仅仅两个,为判别器增加无条件图像合成损失,并使用由均值平均损失计算的色彩一致性正则化项和真实和虚假图像之间的差异。

AttnGAN [28]通过在图像和文本特征上使用注意机制进一步扩展了StackGAN ++ [27]的体系结构。在AttnGAM中,每个句子都嵌入到全局句子向量中,并且句子的每个单词也嵌入到单词向量中。全局句子向量用于在第一阶段生成低分辨率图像,然后以下阶段使用前一阶段的输入图像特征和单词向量作为对关注层的输入并计算将使用的词语上下文向量。与图像特征组合并形成生成器的输入,将生成新的图像特征。

文本到图像模型的局限性

目前的文本到图像模型在每个图像具有单个对象的数据集上表现良好,例如CelebA中的人脸,CUB中的鸟以及ImageNet中的一些对象。此外,他们可以在LSUN 中为卧室和起居室等场景合成合理的图像,即使场景中的物体缺乏清晰的细节。然而,在一个图像中涉及多个复杂对象的情况下,所有现有模型都工作得很糟糕。

当前模型在复杂图像上不能很好地工作的一个合理的原因是模型只学习图像的整体特征,而不是学习其中每种对象的概念。这解释了为什么卧室和起居室的合成场景缺乏清晰的细节,因为模型不区分床和桌子,所有它看到的是一些形状和颜色的图案应放在合成图像的某处。换句话说,模型并不真正理解图像,只记得在哪里放置一些形状和颜色。

生成性对抗网络无疑提供了一种有前途的文本到图像合成方法,因为它产生的图像比迄今为止的任何其他生成方法都要清晰。为了在文本到图像合成中迈出更进一步的步骤,需要找到新的方法实现算法的事物概念。一种可能的方法是训练可以生成不同种类对象的单独模型,然后训练另一个模型,该模型学习如何基于文本描述将不同对象(对象之间的合理关系)组合成一个图像。然而,这种方法需要针对不同对象的大型训练集,以及包含难以获取的那些不同对象的图像的另一大型数据集。另一个可能的方向可能是利用Hinton等人提出的胶囊理念,]因为胶囊被设计用于捕获物体的概念,但是如何有效地训练这种基于胶囊的网络仍然是一个需要解决的问题。

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值