GAN的入门与实践

作者:Double_V

  编辑:龚 赛 



PART

01 GAN 简介


引言


生成对抗网络(Generative Adversarial Nets,GAN)是由open ai研究员Good fellow在2014年提出的一种生成式模型,自从提出后在深度学习领域收到了广泛的关注和研究。目前,深度学习领域的图像生成,风格迁移,图像变换,图像描述,无监督学习,甚至强化学习领域都能看到GAN 的身影。GAN主要针对的是一种生成类问题。目前深度学习领域可以分为两大类,其中一个是检测识别,比如图像分类,目标识别等等,此类模型主要是VGG, GoogLenet,residual net等等,目前几乎所有的网络都是基于识别的;另一种是图像生成,即解决如何从一些数据里生成出图像的问题,生成类模型主要有深度信念网(DBN),变分自编码器(VAE)。而某种程度上,在生成能力上,GAN远远超过DBN、VAE。经过改进后的GAN足以生成以假乱真的图像。本文将首先介绍一些GAN 的原理和公式推导,另外会详细给出GAN生成图像的Tensorflow的实现,基于python语言。


PART

02 GAN 原理


生成类

GAN主要解决的是生成类问题,即如何从一段任意的随机数中生成图像。假设给定一段100维的向量X{x1, x2,…, x100 }作为网络的输入,其中x是产生的随机数,一般按照高斯分布或者均匀分布产生,GAN通过对抗训练的方式,可以生成清晰的图像,这个过程是通过GAN不断模拟训练集中图像的像素分布来实现的。看完下文GAN的原理后或许你会对这个过程有一个清晰的认识。


图1 


首先,附上一张GAN的网络流程图,如图1所示。不同于以往的判别网络模型,GAN包括两个网络模型,一个生成模型G(generator)和一个判别模型D(discriminator),其中D就是识别检测类模型中经常使用的网络。GAN的大概流程是,G以随机噪声作为输入,生成出一张图像G(z),暂且不管生成质量多好,然后D以G(z)和真实图像x作为输入,对G(z)和x做一个二分类,检测谁是真实图像谁是生成的假图像。D的输出是一个概率值,比如G(z)作为输入时D输出0.15,那么代表D认为G(z)有15%的概率是真图像。然后G和D会根据D输出的情况不断改进自己,G提高G(z)和x的相似度,尽可能的欺骗D,而D则会通过学习尽可能的不被G欺骗。二者相当于是做一个极大极小的博弈过程,称为零和博弈。可以用一个简单的例子描述他们之间的过程,我们把G想象成制造假币的团伙,视D为警察,G不断产生假币,而D任务就是从真钱币中分辨出G的假币,刚开始时,G没有经验,制造的假币太假,D很容易就能分辨出来,所以G不断改进自己的技术,产生的假币越来越真实,D可能就没有那么容易判别出真假了,所以D也根据自己的情况不断改进自己,经过很多次这样的循环之后,G产生的假币足以以假乱真了,D很难分出真假。对应到图像生成上,此时G足以生成出一般的分类神经网络分辨不出真假的图像了,G从而获得了生成图像的能力。

与传统神经网络训练不一样的且有趣的地方,就是训练生成器的方法不同,生成器参数的更新来自于D的反传梯度。生成器一心想要“骗过”判别器。使用博弈理论分析技术,可以证明这里面存在一种纳什均衡。



这里就是他们的损失函数定义,实际上是一个交叉熵,判别器的目的是尽可能的令D(x)接近1,令D(G(z))接近0,所以D主要是最大化上面的损失函数,G恰恰相反,他主要是最小化上述损失函数。

训练过程:


(图2)



图2展示了GAN训练的伪代码,首先在迭代次数范围内,首先对z和x采样一个批次,获得他们的数据分布,然后通过随机梯度下降的方法先对D做k次更新,之后对G做一次更新,这样做的主要目的是保证D一直有足够的能力去分辨真假。实际在代码中我们可能会多更新几次G只更新一次D,不然D学习的太好,会导致训练前期发生梯度消失的问题。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值