经典生成式对抗网络(GANs)的理解

1. 简介

首先简要介绍一下生成模型(Generative model)与判别模型(Discriminative mode)的概念:

生成模型:对联合概率进行建模,从统计的角度表示数据的分布情况,刻画数据是如何生成的,收敛速度快,例如朴素贝叶斯,GDA,HMM等。
    判别模型:对条件概率P(Y|X)

进行建模,不关心数据如何生成,主要是寻找不同类别之间的最优分类面,例如LR,SVM等。

判别模型在深度学习乃至机器学习领域取得了巨大成功,其本质是将样本的特征向量映射成对应的label;而生成模型由于需要大量的先验知识去对真实世界进行建模,且先验分布的选择直接影响模型的性能,因此此前人们更多关注于判别模型方法。生成式对抗网络(Generative Adversarial Networks,GANs)是蒙特利尔大学的Goodfellow Ian于2014年提出的一种生成模型, 在之后引起了业内人士的广泛关注与研究。

GANs中包含了两个模型,一个是生成模型G
,另一个是判别模型D

,下面通过一个生成图片的例子来解释两个模型的作用:

生成模型G

:不断学习训练集中真实数据的概率分布,目标是将输入的随机噪声转化为可以以假乱真的图片(生成的图片与训练集中的图片越相似越好)
判别模型D
:判断一个图片是否是真实的图片,目标是将生成模型G

产生的“假”图片与训练集中的“真”图片分辨开。

GANs的实现方法是让D
和G进行博弈,训练过程中通过相互竞争让这两个模型同时得到增强。由于判别模型D的存在,使得 G 在没有大量先验知识以及先验分布的前提下也能很好的去学习逼近真实数据,并最终让模型生成的数据达到以假乱真的效果(即D无法区分G生成的图片与真实图片,从而G和D

达到某种纳什均衡)。
2. 生成对抗网络

GANs中生成模型和判别模型的选择没有强制限制,在Ian的论文中,判别模型D
和生成模型G均采用多层感知机。GANs定义了一个噪声pz(x) 作为先验,用于学习生成模型G 在训练数据x上的概率分布pg,G(z)表示将输入的噪声z映射成数据(例如生成图片)。D(x)代表x 来自于真实数据分布pdata而不是pg

的概率。据此,优化的目标函数定义如下minmax的形式:
图片名称

原论文在参数的更新过程,是对D更新k次后,才对G更新1次。上式中的minmax可理解为当更新D时,需要最大化上式,而当更新G时,需要最小化上式,详细解释如下:

在对判别模型D

的参数进行更新时:对于来自真实分布pdata的样本x而言,我们希望D(x)的输出越接近于1越好,即logD(x)越大越好;对于通过噪声z生成的数据G(z)而言,我们希望D(G(z))尽量接近于0(即D能够区分出真假数据),因此log(1−D(G(z)))也是越大越好,所以需要maxD

在对生成模型G
的参数进行更新时:我们希望G(z)尽可能和真实数据一样,即pg=pdata。因此我们希望D(G(z))尽量接近于1,即log(1−D(G(z)))越小越好,所以需要minG。需要说明的是,logD(x)是与G(z)

无关的项,在求导时直接为0。

原论文中对GANs理论上的有效性进行了分析,即当固定G
更新D时,最优解为D∗(x)=pdata(x)pdata(x)+pg(x);而在更新G时,目标函数取到全局最小值当且仅当pg=pdata。最后两个模型博弈的结果是G可以生成以假乱真的数据G(z)。而D难以判定G生成的数据是否真实,即D(G(z))=0.5

下面这张图解释了这一博弈过程:
图片名称

第一阶段只有判别模型D
参与。将训练集中的样本x作为D的输入,输出0-1之间的某个值,数值越大意味着样本x为真实数据的可能性越大。在这个过程中,我们希望D尽可能使输出的值逼近1。第二阶段中,判别模型D和生成模型G都参与,首先将噪声z输入G,G从真实数据集里学习概率分布并产生假的样本,然后将假的样本输入判别模型D,这一次D将尽可能输入数值0。所以在这个过程中,判别模型D

相当于一个监督情况下的二分类器,数据要么归为1,要么归为0。

下图给出了一个更为直观的解释:
图片名称

其中,蓝色虚线为判别模型D
的分布,黑色虚线为真实数据的分布pdata,绿色实线为生成模型G学习的分布pg。下方的水平线为均匀采样噪声z的区域,上方的水平线为数据x的区域。朝上的箭头表示将随机噪声转化成数据,即x=G(z)。从图(a)到图(b)给出了一个GANs的收敛过程。图(a)中pg与pdata存在相似性,但还未完全收敛,D是个部分准确的分类器。图(b)中,固定G更新D,收敛到 D∗(x)=pdata(x)pdata(x)+pg(x) 。图(c)中对G进行了1次更新,D的梯度引导G(z)移向更可能分类为真实数据的区域。图(d)中,训练若干步后,若G和D均有足够的capacity,它们接近某个稳定点,此时pg=pdata。判别模型将无法区分真实数据分布和生成数据分布,即D(x)=0.5

论文中给出的算法流程如下:
图片名称

3. GANs的应用

对抗网络的一个主要缺点是训练过程不稳定,为了提高训练的稳定性,文献[2]提出了 Conditional Generative Adversarial Nets (CGAN),通过把无监督的 GAN 变成半监督或者有监督的模型,从而为 GAN 的训练加上一点目标,其优化的目标函数为:
图片名称

CGAN在生成模型G
和判别模型D

的建模中均引入了条件变量 y,这里y可以是label或者其他数据形态,将y和GAN原有的输入合并成一个向量作为CGAN的输入。这个简单直接的改进被证明很有效,并广泛用于后续的相关工作中。CGAN模型的示意图如下所示:
图片名称

文献[3]提出了一种Deep Convolutional Generative Adversarial Networks(DCGAN),将对抗网络与卷积神经网络相结合进行图片生成,DCGAN模型的结构如下:
图片名称

DCGANs的基本架构就是使用几层“反卷积”(Deconvolution)。传统的CNN是将图像的尺寸压缩,变得越来越小,而反卷积是将初始输入的小数据(噪声)变得越来越大(但反卷积并不是CNN的逆向操作),例如在上面这张图中,从输入层的100维noise,到最后输出层64x64x3的图片,从小维度产生出大的维度。反卷积的示意图如下所示,2x2的输入图片,经过3x3 的卷积核,可产生4x4的feature map:
图片名称

由于反卷积存在于卷积的反向传播中。其中反向传播的卷积核矩阵是前向传播的转置,所以其又可称为transport convolution。只不过我们把反向传播的操作拿到了前向传播来做,就产生了所谓的反卷积一说。但是transport convolution只能还原信号的大小,不能还原其值,因此不是真正的逆操作。

DCGAN的另一个改进是对生成模型中池化层的处理,传统CNN使用池化层(max-pooling或mean-pooling)来压缩数据的尺寸。在反卷积过程中,数据的尺寸会变得越来越大,而max-pooling的过程并不可逆,所以DCGAN的论文里并没有采用池化的逆向操作,而只是让反卷积的滑动步长设定为2或更大值,从而让尺寸按我们的需求增大。另外,DCGAN模型在G
和D

上均使用了batch normalization,这使得训练过程更加稳定和可控。

文献[3]将GANs应用于文本转图像(Text to Image),从而可根据特定输入文本所描述的内容来产生特定图像。因此,生成模型里除了输入随机噪声之外,还有一些特定的自然语言信息。所以判别模型不仅要区分样本是否是真实的,还要判定其是否与输入的语句信息相符。网络结构如下图所示:

图片名称

以下是实验的结果,同时可看到模型仍然存在Mode Collapse的问题:
图片名称

4. 文献

Goodfellow I J, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[C]// International Conference on Neural Information Processing Systems. MIT Press, 2014:2672-2680.
    Mirza M, Osindero S. Conditional generative adversarial nets[J]. arXiv preprint arXiv:1411.1784, 2014.
    Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint arXiv:1511.06434, 2015.
    Reed S, Akata Z, Yan X, et al. Generative adversarial text to image synthesis[J]. arXiv preprint arXiv:1605.05396, 2016.
---------------------
作者:Joe-Han
来源:CSDN
原文:https://blog.csdn.net/u010089444/article/details/78946039
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/pengzhi12345/p/11173995.html

时间: 2024-10-29 16:53:40

经典生成式对抗网络(GANs)的理解的相关文章

(转) 简述生成式对抗网络

简述生成式对抗网络 [转载请注明出处]chenrudan.github.io 本文主要阐述了对生成式对抗网络的理解,首先谈到了什么是对抗样本,以及它与对抗网络的关系,然后解释了对抗网络的每个组成部分,再结合算法流程和代码实现来解释具体是如何实现并执行这个算法的,最后给出一个基于对抗网络改写的去噪网络运行的结果,效果虽然挺差的,但是有些地方还是挺有意思的. 1. 对抗样本 2. 生成式对抗网络GAN 3. 代码解释 4. 运行实例 5. 小结 6. 引用 1. 对抗样本(adversarial e

学习笔记TF051:生成式对抗网络

生成式对抗网络(gennerative adversarial network,GAN),谷歌2014年提出网络模型.灵感自二人博弈的零和博弈,目前最火的非监督深度学习.GAN之父,Ian J.Goodfellow,公认人工智能顶级专家. 原理.生成式对搞网络包含一个生成模型(generative model,G)和一个判别模型(discriminative model,D).Ian J.Goodfellow.Jean Pouget-Abadie.Mehdi Mirza.Bing Xu.Davi

(转)【重磅】无监督学习生成式对抗网络突破,OpenAI 5大项目落地

[重磅]无监督学习生成式对抗网络突破,OpenAI 5大项目落地 [新智元导读]"生成对抗网络是切片面包发明以来最令人激动的事情!"LeCun前不久在Quroa答问时毫不加掩饰对生成对抗网络的喜爱,他认为这是深度学习近期最值得期待.也最有可能取得突破的领域.生成对抗学习是无监督学习的一种,该理论由 Ian Goodfellow 提出,此人现在 OpenAI 工作.作为业内公认进行前沿基础理论研究的机构,OpenAI 不久前在博客中总结了他们的5大项目成果,结合丰富实例介绍了生成对抗网络

学习笔记GAN001:生成式对抗网络,只需10步,从零开始到调试

生成式对抗网络(gennerative adversarial network,GAN),目前最火的非监督深度学习.一个生成网络无中生有,一个判别网络推动进化.学技术,不先着急看书看文章.先把Demo跑起来,顺利进入断点调试.这样就可以边学习边修改边验证,亲自下手参与调试,会比只是当个看客,更有兴趣更有成就感也更容易理解内容. 1?下载并安装Anaconda.https://www.continuum.io/downloads Anaconda的使用可以看这篇文章:http://www.jian

生成式对抗网络GAN 的研究进展与展望

生成式对抗网络GAN的研究进展与展望.pdf 摘要: 生成式对抗网络GAN (Generative adversarial networks) 目前已经成为人工智能学界一个热门的研究方向. GAN的基本思想源自博弈论的二人零和博弈, 由一个生成器和一个判别器构成, 通过对抗学习的方式来训练. 目的是估测数据样本的潜在分布并生成新的数据样本. 在图像和视觉计算.语音和语言处理.信息安全.棋类比赛等领域, GAN 正在被广泛研究,具有巨大的应用前景. 本文概括了GAN 的研究进展, 并进行展望. 在

GAN生成式对抗网络的原理

生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型 GAN两个核心模块 GAN核心是两个模块. 1.生成器模块 --generator 2.判别器模块--desciminator GAN通俗原理解释 为了通俗的解释GAN原理,可以类比为伪造货币的例子(这个比方纯粹为了解释) 现在有个伪造货币的任务. 你有一堆真实的货币,一个可以不断提高鉴别能力的鉴定货币真伪的设备,还有一个可以提高伪造能力的伪造货币的设备. 1.我们继续不断的强化鉴定设

不要怂,就是GAN (生成式对抗网络) (四):训练和测试 GAN

在 /home/your_name/TensorFlow/DCGAN/ 下新建文件 train.py,同时新建文件夹 logs 和文件夹 samples,前者用来保存训练过程中的日志和模型,后者用来保存训练过程中采样器的采样图片,在 train.py 中输入如下代码: # -*- coding: utf-8 -*- import tensorflow as tf import os from read_data import * from utils import * from ops impo

不要怂,就是GAN (生成式对抗网络) (二)

前面我们了解了 GAN 的原理,下面我们就来用 TensorFlow 搭建 GAN(严格说来是 DCGAN,如无特别说明,本系列文章所说的 GAN 均指 DCGAN),如前面所说,GAN 分为有约束条件的 GAN,和不加约束条件的GAN,我们先来搭建一个简单的 MNIST 数据集上加约束条件的 GAN. 首先下载数据:在  /home/your_name/TensorFlow/DCGAN/ 下建立文件夹 data/mnist,从 http://yann.lecun.com/exdb/mnist/

不要怂,就是GAN (生成式对抗网络) (五):无约束条件的 GAN

GAN 这个领域发展太快,日新月异,各种 GAN 层出不穷,前几天看到一篇关于 Wasserstein GAN 的文章,讲的很好,在此把它分享出来一起学习:https://zhuanlan.zhihu.com/p/25071913.相比 Wasserstein GAN ,我们的 DCGAN 好像低了一个档次,但是我们伟大的教育家鲁迅先生说过:"合抱之木,生于毫末:九层之台,起于累土:千里之行,始于足下",(依稀记得那大概是我 7 - 8 岁的时候,鲁迅先生依偎在我身旁,带着和蔼可亲切的