GAN:基本理论
生成机器以前从未见过的数据一直是一个有趣的问题。人类可以创造它从未听过的音乐或绘制不存在的人物。能够为机器做到这一点意味着它具有一定的创造性。本文讨论Ian Goodfellow在2014年提出的生成对抗网络(GAN)方法的理论部分[1]。在GAN被提出之前,我们先从传统的方法开始。
传统的方法
当我们要求机器生成之前看到的类似数据时,我们要求它从底层数据分布中抽取新数据。当然我们不知道分布,我们只有样本。传统的方法首先用可调参数(如高斯混合模型)逼近一些已知分布到真实数据分布,希望调整完成后,已知分布的采样数据将类似于真实分布中的采样数据
与已知分布近似的真实分布
为了这个工作,我们需要定义两个分布之间的“closeness”。一个这样的措施是Kullback–Leibler divergence(https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence)
KL分歧是衡量两种分布之间“closeness”的一种度量
你可以将KL散度看作两个分布之间的“距离”。当两个分布不相等时,它总是大于零,当两个分布相等时,它等于零。它的值越大,它们越不相同。
现在,每件事情都已准备就绪,让我们看看我们如何才能最小化距离。请注意,我们可以将其扩展到以下内容
在求KL散度的最小值时,第一项没有作用,因为它是一个常数,所以它等于第二项的最大值。实际上我们不知道数据分布,但是我们有样本,这是我们的训练数据集,所以第二项实际上是训练数据集的可能性
最大化可能性等于使KL散度最小化
我们有一个训练数据集,其中包含来自真实分布(未知数据分布)的样本。我们选择一个具有可调参数的已知分布(模型)。最后,我们最大化训练数据集的可能性,这等效地使两个分布之间的距离最小化。希望这样做后,我们的模型分布将足够接近真实的数据分布,并且来自模型的样本将看起来像来自真实数据分布的样本。
传统方法存在的问题
如果您尝试使用高斯混合模型进行面部生成,您将得不到任何东西。一个重要的原因是面孔的分布是在一些复杂的低维流形中。眼睛,耳朵,嘴和发型(等)的组合具有某些远离高斯混合物的结构。高斯混合模型对于生成真实的人脸而言太简单了。
一个三维高斯混合不能像这样近似一个二维complex manifold
神经网络作为函数逼近器
这就是神经网络的作用所在。我们可以训练神经网络来显式地估计真实的分布,例如像像像素cnn、像素rnn这样的自回归方法,或者像变分自动编码器这样的变分方法。或者,因为在我们的例子中我们只希望机器为我们生成新的数据,我们甚至不需要对分布建模,我们只需要对采样过程建模,这正是GAN所做的。
生成对抗的方法
在GAN中,我们没有显式地对分布建模,我们只对抽样过程建模。这意味着,给定任意一个数据点x,我们不知道模型的P(x)但我们仍然可以从中抽取样本。抽样过程如下所示
GAN的采样过程
我们对z空间中的许多点进行采样,这些点可以是高斯或均匀分布,并且希望神经网络将它映射到我们想要的真实分布的空间。这里的问题是,我们不能使用KL散度作为以前的距离度量,因为我们没有明确地对分布进行建模,所以我们不能计算可能性
Discriminator 作为距离的估计量
有趣的是,如果我们将两个分布之间的距离定义为Jensen–Shannon divergence,
JS divergence作为两种分布之间距离的量度
我们仍可以通过训练另一个神经网络来测量这个距离。现在我们有两个神经网络,我们称第一个用于产生数据作为generator,另一个用于测量距离作为Discriminator 器。它被称为Discriminator ,因为它的目标是识别天气数据点是从真实分布中采样还是从模型(generator)中采样。这与二元分类器基本相同,目标函数是
objective function for the discriminator
Discriminator 是二元分类器
如果x来自真实数据分布,则Discriminator D(x)预计输出1,如果x来自generator,则Discriminator D输出0。现在,让我们看看训练D如何与找到距离有关
理想情况下,如果我们可以从我们想要的真实分布和generator中采样尽可能多的数据,并且Discriminator 具有足够的容量,那么我们可能能够将Discriminator 训练得非常接近最优分类器。最佳分类器可以通过最大化目标函数来计算
由于D(x)是我们要找到的函数,因此它可以是任何函数。因此,最大化积分相当于使每个x的内部括号最大化。这是简单的微积分,你可以验证每个x的最佳D值
最佳Discriminator
把它回到你得到的eq(4)
目标函数为最优D与距离有关
你会发现最佳分类器的目标函数是一个常数加上距离的两倍!每当我们想知道generator与真实分布的接近程度时,我们就会训练一个Discriminator 来测量距离。
通过最小化距离改进generator
现在我们有了距离测量,我们可以通过最小化距离来改善generator 。这里有一个问题:当对generator 应用梯度合适时,目标函数是什么?每次我们改变G的参数,G的分布就会改变,我们要训练D来测量距离,好像目标函数随不同的G变化?关键在于,如果我们不把G的参数更新太多,G的分布不会改变太多,D在这个情况下仍然可以很好地测量距离。也就是说,
如果D测量G的距离,那么如果G'接近于G,那么D仍然是G'的一个很好的测量距离。
所以G的目标函数也是方程(4),它是对G附近G'距离的度量。我们可以应用梯度下降来最小化它。
Training as a minmax probelm
注意,eq(4)是D和G的目标函数,我们称之为V(G, D),而优化的标准在每种情况下都是不同的。给定G,我们将测量距离因此我们对d取最大值,给定距离,我们将G的参数更新到减小距离的方向。理论上它被称为最小问题
G和D的目标函数
finding the optimal generator is a minmax problem
训练算法
我们几乎涵盖了GAN最基本的部分。总之,训练GAN的算法如下
用于训练GAN的算法