生成式对抗网络Generative Adversarial Networks(GANs)论文笔记

1. 前言

GAN(Generative Adversarial Networks),是生成对抗网络于2014年由Ian Good fellow在他的论文Generative Adversarial Nets提出。
在GAN被提出之后,立刻在机器学习领域得到了巨大反响,并且被科学工作者们应用在许多领域,且取得了令人印象深刻的成果。在2016NIPS会议上,Goodfellow对GAN做了一次长达2个小时的报告,将GAN的原理,训练tips,以及一些影响比较大的GAN变体等等综合在一起,信息量比较大。

2. 参考资料

  1. Paper: Generative Adversarial Nets.
  2. Slide:”Generative Adversarial Networks,” NIPS 2016 tutorial.

3. 研究背景

生成式对抗网络Generative Adversarial Networks(GANs)论文笔记
其实在机器学习中主要分为两类模型:
1. 判别模型(Discriminative model)
实现高维的、人可以感知的信息(如声音、图片等)到一个标签(可以是语义,类别)的映射,如上图,我们向判别模型输入一张猫的图片,就能输出”cat”的标签。
2. 生成模型(Generative model)
学习的是真实数据的概率分布,并且模拟真实数据的生成。对大家来说可能较为常见的例子就是自动编码器(Autoencoder)反卷积(Transposed convolution),对这两者我稍微解释一下。
- 自动编码器:见上图,自动编码器分为encoder(编码器)和decoder(解码器)。将图片输入自动编码器时,编码器首先对图像进行编码,然后通过解码器恢复成原图。在整个网络训练好以后,如果我们将编码器去掉,留下从code通过解码器的一个结构,那这个就是生成真实数据的过程,因此code通过decoder这部分结构这属于一种生成模型。
- 反卷积:卷积实际上会对图片进行下采样,而反卷积的过程会对图像进行上采样,这个上采样的过程也是一种生成的过程,因此也属于生成模型。在讨论的时候,学长提到反卷积可以被归为自动编码器,因为卷积和反卷积的kernel是互为转置的关系,与解码器与编码器之间的关系一致,但是我表示不同意啦,因为在训练时,自动编码器的编码器和解码器是一起训练的,但是反卷积的核是利用训练好的卷积核进行变换的,即不是联合训练得到的。(Update:17.9.14,还没研究过反卷积,日后可能需要修改。)
生成式对抗网络Generative Adversarial Networks(GANs)论文笔记
生成模型的任务是学习概率密度并且生成数据,但在求解真实数据的概率密度分布的过程中有很大难度,常用的方法有最大似然估计(Maximum likelihood estimation)等,要求解概率几乎无法进行。
而Goodfellow就想到一种超奇妙的方法,利用判别网络(D)和生成网络(G)两个网络一起训练,成功绕开以上的难点,模拟真实数据的生成。

4. GAN的框架

论文提出了一个新的网络,通过一个对抗的过程来估计生成模型。在这个过程中会同时训练两个模型:一个生成模型G用于估计数据分布,一个判别模型D来预测一个样本是来自训练集(真实数据集)而非G的概率。对于G来说训练过程就是要使D判断错误的可能性最大化。
形象一点说,生成模型G是一个造假币的人,而辨别模型D是一个鉴别真假币的人,G的目标是造出能够以假乱真的假币,而D的目标是正确判别真假,俩人最开始都是新手,D鉴别能力如果变强,则G的造假能力也必须变强才能蒙蔽D的双眼;G造假能力变强之后,D也必须提高自己的鉴别能力才能做一个合格的鉴别师。于是DG在相互博弈的过程当中不断提高各自的能力,理论上来说,最终G则能够造出接近和真币一样的假币。

4.1 对抗框架(Adeversarial Nets)

将这个框架应用到图像生成上,就有了下面这个框架:
生成式对抗网络Generative Adversarial Networks(GANs)论文笔记
同样,框架中涉及到两个网络GD,对这俩网络参数进行更加详细的解释:
xfake=G(z;θ(G)):表示G的输入是噪声z(符合特定分布),输出x,即假的图片,而θ(G)则是生成器G里的待训练权重集合;
D(x;θ(D))[0,1]:表示D的输入是x(分为xfakexreal),D会对输入的图片x做一个判断,得到x是真的概率,由此输出一个范围在[0,1]之间的数,θ(D)则是辨别器D里的待训练参数集合。

上图中的工作流程解释:
从符合特定分布的噪声中采样一定数目的点z输入生成器,生成假造的数据xfakeD输入,另外向D同时输入的还有真实数据xreal。按照DG各自的目标:D希望辨别真假的能力强,则希望相应的D(xreal)接近1,而D(xfake)(即D(G(z)))接近0;而G的任务是希望D(xfake)(即D(G(z)))接近1。
上述的”1”和”0”其实可以看作是对输入打上的标签,那么GD的矛盾点在于,对于输入D中的G(z)D希望D(G(z))能对应标签0,而G希望它对应标签1。

*关于“无监督学习”的说明

GAN还很吸引人的一点是,它是无监督学习,也就是说输入数据时是不需要输入标签的,那就让人很好奇了,要同时训练新手G和新手DGD引导学习,那没有标签的情况下谁来引导D学习呢?
所以这里要说明的一点是,确实我们不需要向D输入标签,但不代表在训练的时候没有标签。上图有表明,x的数据来源有两个,一个是输入的training data,一个是G(z),这就是说只要是输入的数据一定是real,而生成的数据一定是fake,由此根据数据来源不同就可以确定样本是real还是fake,在程序中就可以根据数据来源给数据打上相应标签”1”或者”0”。所以D在训练的时候是有标签的,training data(real)的标签是”1”,generated data(fake)的标签是”0”,所以其实D就是一个普通的判别器,在训练的时候既有数据又有标签,利用标签和D输出的loss利用随机梯度下降的方法(STD)来求解D中的参数θ(D)

4.2 Minimax two-player game(Loss)

前文已经到DG的各自目标,以及两者在数据G(z)上的矛盾。将这个矛盾以数学公式的形式表示出来如下:
生成式对抗网络Generative Adversarial Networks(GANs)论文笔记
这个公式就叫做GD之间的Minimax two-player game
以下从GD的角度对这个公式进行分析:
1. D的角度:
上述公式左边部分表示D希望V(D,G)的值尽量大。
公式右边前半部分