转载连接:https://www.leiphone.com/news/201706/ty7H504cn7l6EVLd.html
链接:https://www.jianshu.com/p/998cf8e52209
GAN(生成对抗网络)学习笔记

GAN的思想是一种二人零和博弈思想(two-player game),博弈双方的利益之和是一个常数,比如两个人掰手腕,假设总的空间是一定的,你的力气大一点,那你得到的空间就多一点,相应的我的空间就少一点,反之亦然。但有一点确定的就是,两个人的总空间是一定的,这就是二人博弈,但是总利益是一定的。

GAN中有两个这样的博弈者,一个人名字是生成模型(G),另一个人名字是判别模型(D),它们各自有各自的功能。
相同点是:这两个模型都可以看成是一个黑匣子,接受输入然后有一个输出,类似一个函数,一个输入输出映射。

不同点是:

  1. 生成模型功能:比作是一个样本生成器,输入一个噪声/样本,然后把它包装成一个逼真的样子,也就是输出。
  2. 判别模型:比作一个二分类器(如同0-1分类器),来判断输入的样本是真是假。(就是输出值大于0.5还是小于0.5)

GAN(生成对抗网络)学习笔记
**判别模型,**就是图中右边的网络,直观来看就是简单的神经网络结构,输入是一副图像,输出是一个概率值,用于判断真假使用(概率值大于0.5就是真,小于0.5就是假)

其次是生成模型:同样是一个神经网络模型,输入是一组随机数Z,输出是一个图像,不再是一个数值而已。从图中可以看到,会存在两个数据集,一个是真实数据集,另一个是假的数据集,那这个数据集就是由生成网络造出来的数据集。

GAN的目标是要干什么:1. 判别网络的目的:就是能判别出来属于的一张图它是来自真实样本集还是假样本集。例如输入的是真样本,网络输出就接近1,输出的是假样本,网络输出接近0。

  1. 生成网络的目的:生成网络是造样本,它的目的就是使得自己造样本的能力尽可能强,强到什么程度呢,判别网络没法判断我是真样本还是假样本。

有了这个理解再来看看为什么叫做对抗网络:

判别网络说,我很强,来一个样本我就知道它是来自真样本集还是假样本集。生成网络就不服来,说我也很强,我生成一个假样本,虽然我生成网络知道是假的,但是你判别网络不知道呀,我包装的非常逼真,以致于判别网络无法判断真假,那么用输出数值来解释就是,生成网络生成的假样本进去了判别网络之后,判别网络给出的结果是一个接近0.5的值,极限情况就是0.5,也就是说判别不出来来,这就是纳什平衡来。

数据集:真实采集的人脸样本数据集,没有类标签。

目的: 最远书的GAN的目的,通过输入一个噪声,模拟得到一个人脸图像,这个图像可以非常逼真以致于以假乱真。

训练方法:

GAN(生成对抗网络)学习笔记
训练两个模型的方法:单独交替迭代训练

判别模型: 希望真样本集尽可能输出1,假样本集输出0。对于判别网络,此时问题转换成一个有监督的二分类问题,直接送到神经网络模型中训练就ok。

**生成网络:**目的是生成尽可能逼真的样本。原始生成网络如何知道真不真?就是送到判别网络中。在训练生成网络的时候,需要联合判别网络才能达到训练的目的。什么意思?如果单单只用生成网络,那么后面怎么训练,误差来源在哪里?细想一下没有,但是如果把刚才的判别网络串接在生成网络的后面,这样就知道真假来,也就有了误差。!!!所以对生成网络的训练其实是对生成-判别网络串接的训练,就像图中显示的那样。 生成来假样本,要把这些假样本的标签都设置为 1,也就是认为这些假样本在生成网络训练的时候是真样本。起到了迷惑判别器的目的。!!!在训练这个串接网络的时候,一个很重要的操作就是不要判别网络的参数发生变化,也就是不让它参数发生更新,只是把误差一直传,传到生成网络那块后更新生成网络的参数。这样就完成来生成网络的训练。

假样本在训练过程中的真假变换公式:
GAN(生成对抗网络)学习笔记
先优化D,然后再优化G,拆解之后就如下:

优化D:
GAN(生成对抗网络)学习笔记
优化D,即优化判别网络时,没有生成网络什么事,后面的G(z)这里就相当于已经得到的假样本。优化D的公式的第一项,使得真样本x输入的时候,得到的结果越大越好,因为真样本的预测结果越接近1越好;对于假样本,需要优化的是其结果越小越好,也就是D(G(z))越小越好,因为它的标签为0。但是第一项越大,第二项越小,就矛盾了,所以把第二项改为1-D(G(z)),这样就是越大越好。

优化G:

GAN(生成对抗网络)学习笔记
在优化G的时候,这个时候没有真样本什么事,所以把第一项直接去掉,这时候只有假样本,但是我们说这个时候是希望假样本的标签是1,所以是D(G(z))越大越好,但是为了统一成1-D(G(z))的形式,那么只能是最小化1-D(G(z)),本质上没有区别,只是为了形式的统一。之后这两个优化模型可以合并起来写,就变成最开始的最大最小目标函数了。

GAN强大之处在于可以自动的学习原始真实样本集的数据分布
传统机器学习方法,会定义一个什么模型让数据去学习,假设我们知道原始数据属于高斯分布,只是不知道高斯分布的参数,这个时候我们会定义高斯分布,然后利用数据去学习高斯分布的参数得到最终的模型。 然而从随机噪声到人脸应该服从什么分布,我们不知道,然而GAN机制可以学习到,也就是说GAN学习到了真实样本集的数据分布。

GAN强大之处在于可以自动的定义潜在损失函数
判别网络可以自动学习到一个好的判别方法,其实就是等效的理解为可以学习到好的损失函数,来比较好或者不好的判别出来结果。虽然大的loss函数还是人为定义的,基本上对于多数GAN也都这么定义就可以来,但是判别网络潜在学习到的损失函数隐藏在网络之中,不同的问题这个函数就不一样,所以说可以自动学习这个潜在的损失函数。