GAN论文精读

Introduction

GAN的全称是Generative Adversarial Nets,是一种生成模型,目的是为了训练出一个生成器,使得生成器能够生成我们想要的数据,比如说一张图片。GAN在刚推出的时候成功生成了简单的手写数字和人脸照片,虽然现在看来生成的图片质量也比较一般,但是也开创了一个生成模型的新时代。

在以前的生成网络中,需要有大量的概率计算, 极大似然估计, 比较麻烦i。GAN就成功的避免了概率计算的问题,不需要马尔科夫链、极大似然估计等等。GAN的思想非常简单,总的来说就是一个生成器和一个判别器进行对抗,最终达到一个纳什均衡的状态。

GAN和对抗样本(Adversarial examples)的区别

对抗样本是指通过添加噪声的方式迷惑深度神经网络,让VGG等判别模型错误的对图像进行判断。下图中在熊猫的图片上增加了一个噪声,尽管生成的图片在人眼看来还是一个熊猫很难看出区别,但是使用深度神经网络进行判断的话就会错误的将熊猫判断为长臂猿。对抗样本通过训练(反向传播梯度下降)可以找到能够误导网络的噪声图。GAN和对抗样本的区别在于,对抗样本不是用来训练生成模型的,而是用来直接修改输入来达到误导网络的目的,二者的目的是不一样的。

Adversarial Nets

GAN首次提出了对抗损失函数,如下所示 \[ \min_G \max_D V(D, G)=\mathbb{E_{x\sim p_{data}(x)}}[\log D(x)]+\mathbb{E_{z\sim p_{z}(z)}}[\log(1-D(G(z)))] \] 其中G代表使用多层感知器的生成器,D代表使用另一个多层感知器的判别器,z代表输入的噪声,\(p_z(z)\)表示z的分布函数,x是真实的数据,\(D(x)\)代表判别器判断x来自真实数据的概率。通过训练D来最大化判别成功的可能性(max判别器),第一项表示判别器输入真实数据时,判别器的输出越大越好,后一项代表判别器输入假数据时判别器输出越小越好。同时通过训练G来最小化第二项,使得生成器生成的图片更加不容易被判别器辨别。这个过程就像是一个双人极大极小博弈游戏 (two-player minimax game),G和D在互相对抗的同时共同进步。 在训练过程中,GAN采用了同时训练生成器和判别器的方式,如上图所示。其中蓝色虚线代表判别器的分布,黑色虚线代表真实数据分布,绿色虚线代表生成器生成的数据分布,z代表输入的噪声。在图(a)中,噪声z映射到绿色线上,判别器目前分辨出假数据和真数据的能力并不好。通过一次判别器的训练,来到(b)状态,此时的判别器可以比较好的分辨出真实数据和假数据,接着训练生成器,生成器的分布会向着辨别器判定真数据的分布上靠拢,这样子不断迭代之后,最终我们可以达到(d)状态,达到一个平衡状态,判别器判定真假数据的概率都为1/2,无法再区分出真假数据。下图是GAN算法的伪代码。

参考资料