【深度学习】生成式对抗网络(GAN)系列

近几年已经见证了深度神经网络在各个领域的巨大能力。 深度神经网络已经成为许多问题背后的常见解决方案,特别是对于与图像相关的难题。 具体而言,基于GAN的方法在一系列图像生成问题上表现出极好的性能。 更具体地说,对于基于指导的图像生成,与传统的深度学习方法相比,GAN展示出显着的成就。

一、 生成式对抗网络(GAN)

1. 网络结构:

GAN的主要灵感来源于博弈论的思想,生成对抗网络的出现对无监督学习,图片生成的研究起到极大的促进作用。GAN有两个网络,G(Generator)和D(Discriminator)。

生成网络G:生成网络负责捕捉样本数据的分布,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。

判别网络D:判别网络一般情况下是一个二分类器,判别输入是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x),表示x为真实图片的概率

在原始的GAN中,G和D均采用深度神经网络(DNN)

【深度学习】生成式对抗网络(GAN)系列_第1张图片

训练思路:生成网络G的目标就是尽量生成真实的图片去愚弄判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。

博弈结果:在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。

2. 训练过程

损失函数如下:

x是数据集里的图片,是一个真实值,z是一个随机噪声,G(z)是生成器生成的虚假的图片。   因为GAN是一个博弈的过程,所以我们要对D和G交替的训练 。

判别器D的训练:固定生成器G,只要考虑优化D 因为要让D能够区分真实的图片和虚假的图片,所以要让D(x)的值越接近1越好,D(G(z) )的值越接近0 越好,即1-D(G(z) )越大越好,只要D越强,那么V(D,G)就越大,所以需要max_D,训练D让V最大。

生成器G的训练:固定判别器,只要考虑优化G G的作用是要产生能以假乱真的图片,G越强,那么D(G(z) ) 越大,这个时候1-D(G(z) )会变小 ,这个时候V(D,G)会变小。所以需要min_G,训练G让V最小。

 

二、深度卷积生成式对抗网络(DCGAN)

DCGAN的思想和GAN的思想完全一致,但是原始的GAN使用的是神经网络NN,而DCGAN实现了CNN和GAN的结合,使得生成性能有了质的提升。

1. 网络结构

【深度学习】生成式对抗网络(GAN)系列_第2张图片

生成器网络的输入是一个100维的噪声z,最终输出是一个64*64*3的图像。如上图所示

判别器网络可以看成生成器网络的逆向,只是最后输出一个值,而不是100维的值。判别器网络的输入是一个图片,最终的输出是一个0~1的数,表示图片是真实图片的概率,输入的图片越像真实的,这个概率就越大。

2. 使用CNN的训练改进

  • 使用全卷积网络(all convolutional net):用步幅卷积(strided convolutions)替代确定性空间池化函数(deterministic spatial pooling functions)(比如最大池化)。允许网络学习自身upsampling/downsampling方式(生成器G/判别器D)。在网络中,所有的pooling层使用步幅卷积(strided convolutions)(判别网络)和微步幅度卷积(fractional-strided convolutions)(生成网络)进行替换。
  • 批量归一化(Batch Normalization):将每个单元的输入都标准化为0均值与单位方差。这样有助于解决poor initialization问题并帮助梯度流向更深的网络。防止G把所有rand input都折叠到一个点。但是,将所有层都进行Batch Normalization,会导致样本震荡和模型不稳定,因此,生成器(G)的输出层和辨别器(D)的输入层不采用Batch Normalization。
  • 消除全连接层:例如:全局平均池化(global average pooling),曾被应用于图像分类任务(Mordvintsev et al.)中。global average pooling虽然可以提高模型的稳定性,但是降低了收敛速度。图1所示为模型的框架。
  • 在生成器(G)中,输出层使用Tanh函数,其余层采用 ReLu激活 函数 ;
  • 判别器(D)中都采用leakyReLu激活函数

使用GAN可以干很多有趣的事情,这里给出一个用DCGAN生成动漫头像的例子(萌妹子在向你招手~)

 

【深度学习】生成式对抗网络(GAN)系列_第3张图片

三、条件生成式对抗网络(CGAN)

条件生成对抗网络(CGAN)是生成对抗网络的一个扩展,对于原始的GAN来说,它过于自由,一个很自然的想法是给GAN加一些约束,来控制模型的输出。

网络结构:

【深度学习】生成式对抗网络(GAN)系列_第4张图片

如上左图为原始GAN的结构,右图是CGAN的结构。我们可以观察到,和原始GAN相比,CGAN多出了一个输入y,这个y 可以是任何的额外信息,类别标签或者图片等。根据这个y我们可以指导生成器生成图片的方向。

对于CGAN的判别器而言,他的功能没有改变,仍是为了判断输入的图片是否为真。

但是生成器的作用改变了,生成器不仅要生成好的图片,也要让图片和条件y尽可能保持一致

 

你可能感兴趣的:(深度学习)