GAN网络的一些基本知识(杂记)

【时间】2018.10.08

【题目】GAN网络的一些基本知识(杂记)

【说明】本文的主要内容来自https://blog.csdn.net/xg123321123/article/details/78034859,对原博文进行了删减和修改,主要是其简化版本,想要了解详情请阅读原文,如若侵权,请联系本人删除

 

【相关知识】

1、关于生成对抗网络的第一篇论文是Generative Adversarial Networks,这是2014年发表的一篇论文。

2、GAN 是生成模型的一种,生成模型就是用机器学习去生成我们想要的数据,正规的说法是,获取训练样本并训练一个模型,该模型能按照我们定义的目标数据分布去生成数据。

比如autoencoder自编码器,它的decoding部分其实就是一种生成模型,它是在生成原数据。

3、  下图涵盖了基本的生成式模型的方法,主要按是否需要定义概率密度函数分为: Explicit density models和 Implicit density models ,其中 Implicit density models无需定义明确的概率密度函数,代表方法包括马尔科夫链、生成对抗式网络,该系列方法无需定义数据分布的描述函数。

GAN网络的一些基本知识(杂记)_第1张图片

【基本思想】

4、GAN的计算流程与结构如下图所示。判别模型的目的:能判别出来属于的一张图它是来自真实样本集还是假样本集。假如输入的是真样本,网络输出就接近1,输入的是假样本,网络输出接近0。生成网络的目的:使得自己生成样本的能力尽可能强,强到判别网络没法判断自己生成的样本是真还是假。由此可见,生成模型与判别模型的目的正好相反,一个说我能判别得好,一个说我让你判别不好,所以叫做对抗。

 

GAN网络的一些基本知识(杂记)_第2张图片

  • 我们用可微分函数D 和G 来分别表示判别器和生成器, 它们的输入分别为真实数据x 和随机变量z。

  • G(z) 为由G 生成的尽量服从真实数据分布pdatapdatap_{data}的样本。

  • 如果判别器的输入来自真实数据, 标注为1.如果输入样本为G(z), 标注为0。

【生成器及判别器目标】

  • D 的目标是实现对数据来源的二分类判别: 真(来源于真实数据x 的分布) 或者伪(来源于生成器的伪数据G(z))。

  • G 的目标是使自己生成的伪数据G(z) 在D 上的表现D(G(z)) 和真实数据x 在D 上的表现D(x)一致。

【训练过程】

5、基本训练过程:

  • 在噪声数据分布中随机采样,输入生成模型,得到一组假数据,记为D(z)G(z);

  • 在真实数据分布中随机采样,作为真实数据,记做xx;

  • 将前两步中某一步产生的数据作为判别网络的输入(因此判别模型的输入为两类数据,真/假),判别网络的输出值为该输入属于真实数据的概率,real为1,fake为0.

  • 然后根据得到的概率值计算损失函数;

  • 根据判别模型和生成模型的损失函数,可以利用反向传播算法,更新模型的参数。(先更新判别模型的参数,然后通过再采样得到的噪声数据更新生成器的参数)

GAN网络的一些基本知识(杂记)_第3张图片

6、具体训练过程: 生成模型与对抗模型是完全独立的两个模型, 训练采用的大原则是单独交替迭代训练。 先训练判别网络,再训练生成网络,具体如下:

  • 先是判别网络:

    • 假设现在有了生成网络(当然可能不是最好的),那么给一堆随机数组,就会得到一堆假的样本集(因为不是最终的生成模型,现在生成网络可能处于劣势,导致生成的样本不太好,很容易就被判别网络判别为假)。

    • 现在有了这个假样本集(真样本集一直都有),我们再人为地定义真假样本集的标签,很明显,这里我们默认真样本集的类标签为1,而假样本集的类标签为0,因为我们希望真样本集的输出尽可能为1,假样本集为0。

    • 现在有了真样本集以及它们的label(都是1)、假样本集以及它们的label(都是0)。这样一来,单就判别网络来说,问题变成了有监督的二分类问题了,直接送进神经网络中训练就好。

    • 判别网络训练完了。

  • 继续来看生成网络:

    • 对于生成网络,我们的目的是生成尽可能逼真的样本。

    • 而原始的生成网络生成的样本的真实程度只能通过判别网络才知道,所以在训练生成网络时,需要联合判别网络才能达到训练的目的。

    • 所以生成网络的训练其实是对生成-判别网络串接的训练,像上图显示的那样。因为如果只使用生成网络,那么无法得到误差,也就无法训练。

    • 当通过原始的噪声数组Z生成了假样本后,把这些假样本的标签都设置为1,即认为这些假样本在生成网络训练的时候是真样本。因为此时是通过判别器来生成误差的,而误差回传的目的是使得生成器生成的假样本逐渐逼近为真样本(当假样本不真实,标签却为1时,判别器给出的误差会很大,这就迫使生成器进行很大的调整;反之,当假样本足够真实,标签为1时,判别器给出的误差就会减小,这就完成了假样本向真样本逐渐逼近的过程),起到迷惑判别器的目的。

    • 现在对于生成网络的训练,有了样本集(只有假样本集,没有真样本集),有了对应的label(全为1),有了误差,就可以开始训练了。

    • 在训练这个串接网络时,一个很重要的操作是固定判别网络的参数,不让判别网络参数更新,只是让判别网络将误差传到生成网络,更新生成网络的参数。

  • 在生成网络训练完后,可以根据用新的生成网络对先前的噪声Z生成新的假样本了,不出意外,这次生成的假样本会更真实。

  • 有了新的真假样本集(其实是新的假样本集),就又可以重复上述过程了。

  • 整个过程就叫单独交替训练。可以定义一个迭代次数,交替迭代到一定次数后停止即可。不出意外,这时噪声Z生成的假样本就会很真实了。

 

【目标函数】即损失函数

7、论文中的目标函数:

这是一个最大最小优化问题,先优化D,然后再优化G,本质上是两个优化问题,拆解后得到下面两个公式:

  • 优化D:

  • 优化G:

                                                                            

【相关参数说明】E表示数学期望,    比如 表示log(D(x))的数学期望,其中x服从概率分布Pdata(x)。即等于

关于损失函数的一些说明:

  •  优化D(判别网络)时,不关生成网络的事,后面的G(z)相当于已经得到的假样本。优化D的公式的第一项,使的真样本x输入时,得到的结果越大越好,因为需要真样本的预测结果越接近于1越好。对于假样本,需要优化使其结果越小越好,也就是D(G(z))越小越好,因为它的标签为0。但是第一项越大,第二项就越小,这就矛盾了,所以把第二项改成1-D(G(z)),这样就是越大越好,两者合起来就是越大越好。 

  • 优化G(生成网络)时,不关真样本的事,所以把第一项直接去掉,只剩下假样本,这时希望假样本的标签是1,所以D(G(z))越大越好,但为了统一成1-D(G(z))的形式,就变成最小化1-D(G(z)),本质上没有区别,只是为了形式的统一。

  • 这两个优化模型合并起来,就成了上面的最大最小目标函数了,里面既包含了判别模型的优化,同时也包含了生成模型的以假乱真的优化。

【进一步的探讨】

8、GAN的生成模型最后可以通过噪声生成一个完整的真实数据(比如人脸),说明生成模型掌握了从随机噪声到人脸数据的分布规律。GAN一开始并不知道这个规律是什么样,也就是说GAN是通过一次次训练后学习到的真实样本集的数据分布。上图表明的是GAN的生成网络如何一步步从均匀分布学习到正太分布的。

拿原论文中的一张图来解释:

GAN网络的一些基本知识(杂记)_第4张图片

黑色的点状线代表真实的数据分布,绿色的线代表生成模型G模拟的分布,蓝色的线代表判别模型D。

  • a图表示初始状态

  • b图表示,保持G不动,优化D,直到判别模型的准确率最高

  • c图表示保持D不动,优化G,直到混淆程度最高

  • d图表示,多次迭代后,终于使得G生成的数据分布能够完全与真实的数据分布一致,而D再也鉴别不出是原始数据还是由生成模型所产生的数据,从而认为G就是真实的。

 

9、 有大神对各种GAN的paper都做了一个统计AdversarialNetsPapers 

GAN网络的一些基本知识(杂记)_第5张图片

10、另外还有大神用tensorflow实现了GAN和VAE的各种分支tensorflow-generative-model-collections  和generative-models 

 

11、 几个GAN的分支

  • CGAN

    CGAN首次提出为GAN增加限制条件,从而增加GAN的准确率。原始的GAN产生的数据模糊不清,为了解决GAN太过自由这个问题,一个很自然的想法就是给GAN加一些约束,于是便有了这篇Conditional Generative Adversarial Nets,这篇工作的改进非常straightforward,在生成模型和判别模型分别为数据加上标签,也就是加上了限制条件。实验表明很有效。

  • DCGAN

    DCGAN全称为Deep convolutional generative adversarial networks,即将深度学习中的卷积神经网络应用到了对抗神经网络中,这篇文章在工程领域内的意义及其大,解决了很多工程性的问题,再加上其源码的开放,将其推向了一个高峰。

    这个模型为工业界具体使用CNN的对抗生成网络提供了非常完善的解决方案,并且生成的图片效果质量精细,为之后GAN的后续再应用领域的发展奠定了很好的基础,当然也可以说提供了一个标杆。

  • iGAN

    iGAN完美地将DCGAN和manifold learning融合在一起,很好的展现了一个DCGAN在实践应用方面的具体案例,将交互这种可能性实现,这对将来类似的应用提供了很好的模板。

  • LAPGAN

    江湖人称拉普拉斯对抗生成网络,主要致力于生成更加清晰,更加锐利的数据。

    LAPGAN事实上受启发与CGAN,同样在训练生成模型的时候加入了conditional variable,这也是本案例成功的一大重要原因。

  • SimGAN

    Apple出品的SimGAN本质地利用了GAN可以产生和训练数据质量一样的生成数据这个特性,通过GAN生成大量的和训练数据一样真实的数据,从而解决当前大规模的精确标注数据难以获取,人工标注成本过高等一系列问题。

  • InfoGAN

    InfoGAN是一种能够学习disentangled representation的GAN,比如人脸数据集中有各种不同的属性特点,如脸部表情、是否带眼镜、头发的风格眼珠的颜色等等,这些很明显的相关表示, InfoGAN能够在完全无监督信息(是否带眼镜等等)下能够学习出这些disentangled representation,而相对于传统的GAN,只需修改loss来最大化GAN的input的noise和最终输出之间的互信息。

  • AC-GAN 

         AC-GAN即auxiliary classifier GAN。

 

 

 

你可能感兴趣的:(GAN网络)