3 GANs 如何工作?
我们现在已经看过了几种其他的生成式模型,并解释了 GANs 与他们的不同原理。但是 GANs 是如何工作的呢?
3.1 GAN 框架
GANs 的基本思想是设置两个参与人的博弈。其中一个是生成器(generator)。生成器产生来自和训练样本一样的分布的样本。另外一个判别器(discriminator)。判别器检查这些样本来确定他们是真实的还是伪造的。判别器使用传统的监督学习技术进行训练,将输入分成两类(真实的或者伪造的)。生成器训练的目标就是欺骗判别器。我们可以将生成器当做一个伪钞制造者,而判别器是警察,想要找出伪钞。为了在这样的博弈中取胜,伪钞制造者必须学会制造出与真币相似的伪钞,生成器网络必须学会产生出和训练数据一致的分布的样本。图 12 解释了这个过程。
形式上看,GANs 是一种结构化概率模型(参看 Goodfellow 等人书的第 16 章)包含了隐含变量 z 和可观测变量 x。图结构在图 13 展示。
博弈中的两个参与人由两个函数表示,每个都是关于输入和参数可微分的。判别器是一个以 x 作为输入和使用 θ(D) 为参数的函数 D 定义。生成器由一个以 z 为输入使用 θ(G) 为参数的函数 G 定义。
两个参与人有用两个参与人的参数定义的代价函数。判别器希望仅控制住 θ(D) 情形下最小化 J(D)( θ(D), θ(G))。生成器希望在仅控制 θ(D) 情形下最小化 J(G)( θ(D), θ(G))。因为每个参与人的代价依赖于其他参与人的参数,但是每个参与人不能控制别人的参数,这个场景其实更为接近一个博弈而非优化问题。优化问题的解是一个局部最小,这是参数空间的点其邻居有着不小于它的代价。而对一个博弈的解释一个纳什均衡。这里我们使用局部可微分 Nash 均衡这个术语。在这样的设定下,Nash 均衡是一个元组,( θ(D), θ(G)) 既是关于θ(D)的 J(D) 的局部最小值和也是关于θ(G)的 J(G) 局部最小值。
生成器 生成器是一个可微分函数 G。当 z 从某个简单的先验分布中采样出来时,G(z) 产生一个从 pmodel 中的样本 x。一般来说,深度神经网络可以用来表示 G。注意函数 G 的输入不需要和深度神经网络的第一层的输入相同;输入可能放在网络的任何地方。例如,我们可以将 z 划分成两个向量 z(1) 和 z(2),然后让 z(1) 作为神经网络的第一层的输入,将 z(2) 作为神经网络的最后一层的输入。如果 z(2) 是 Gaussian,这就使得 x 成为 z(1) 条件高斯。另外一个流行的策略是将噪声加到或者乘到隐含层或者将噪声拼接到神经网络的隐含层上。总之,我们看到其实对于生成式网络只有很少的限制。如果我们希望 pmodel 是 x 空间的支集(support),我们需要 z 的维度需要至少和 x 的维度一样大,而且 G 必须是可微分的,但是这些其实就是仅有的要求了。特别地,注意到使用非线性 ICA 方法的任何模型都可以成为一个 GAN 生成器网络。GANs 和变分自编码器的关系更加复杂一点;一方面 GAN 框架可以训练一些 VAE 不能的训练模型,反之亦然,但是两个框架也有很大的重合部分。 最为显著的差异是,如果采用标准的反向传播,VAEs 不能在生成器输入有离散变量,而 GANs 不能够在生成器的输出层有离散变量。
训练过程 训练过程包含同时随机梯度下降 simultaneous SGD。在每一步,会采样两个 minibatch:一个来自数据集的 x 的 minibatch 和一个从隐含变量的模型先验采样的 z 的 minibatch。然后两个梯度步骤同时进行:一个更新 θ(D) 来降低 J(D),另一个更新 θ(G) 来降低 J(G)。这两个步骤都可以使用你选择的基于梯度的优化算法。 Adam (Kingmaand Ba, 2014) 通常是一个好的选择。很多作者推荐其中某个参与人运行更多步骤,但是在 2016 年的年末,本文作者观点是最好的机制就是同时梯度下降,每个参与人都是一步。
3.2 代价函数
有几种不同的代价函数可以用在 GANs 框架中。
3.2.1 判别器的代价 J(D)
目前为 GANs 设计的所有不同的博弈针对判别器 J(D) 使用了同样的代价函数。他们仅仅是生成器 J(G) 的代价函数不同。
判别器的代价函数是:
这其实就是标准的训练一个 sigmoid 输出的标准的二分类器交叉熵代价。唯一的不同就是分类器在两个 minibatch 的数据上进行训练;一个来自数据集(其中的标签均是 1),另一个来自生成器(其标签均是 0)。
GAN 博弈的所有版本都期望判别器能够最小化(8)式。所有情况下,判别器有同样最优策略。读者现在可以尝试一下 7.1 节的练习并在 8.1 节可以考到给出的答案。这个练习展示了如何去推到最优的判别器策略并讨论了这个解的形式的重要性。
我们发现通过训练这个判别器,能够得到一个在每个点 x 对下面的比例的估计:
对其的估计可以让我们计算很多的散度和梯度。这其实是将 GANs 和变分自编码器和 Boltzmann machines 区分开的关键的近似技术。其他的深度生成式模型基于下界或者 Markov chain 进行近似;GANs 基于监督学习来估计两个密度的比例来进行近似。GANs 近似受到监督学习的影响:过匹配或者欠匹配。原则上讲,有最好的优化技术和足够多的训练数据,这些影响可以被克服。其他的模型使用不同的近似方法也有对应的缺点。
由于 GAN 框架可以被博弈论工具自然地分析,我们称 GANs “对抗”。但是我们同时也将其看做合作的,因为判别器估计密度之间的比例,然后自由地将这个信息分享给了生成器。从这一点看,判别器更加像是一名老师在教生成器如何提升效果。到目前为止,合作博弈的观点还没有产生特定的数学形式的变化。
3.2.2 Minimax
我们目前仅仅介绍了判别器的代价函数。而这个博弈需要的完整的说明包含对生成器的代价函数介绍。
最简单的博弈版本是零和博弈,其中所有参与人的代价总是 0。在这个版本的博弈中,
因为 J(G) 和 J(D) 直接捆绑,我们可以将整个博弈通过一个指定判别器收益的值函数来进行刻画:
Minimax 博弈由于其理论分析的便利,大家都比较喜欢。Goodfellow et al. (2014b) 使用这个 GAN 博弈变体展示了在这个博弈中的学习类似于最小化数据分布和模型分布 Jensen-Shannon 散度,当所有参与人的策略可以在函数空间直接进行更新时,这个博弈将收敛到均衡点。特别地,参与人由深度神经网络表示,更新则是在参数空间中,所以这些依赖于凸性(convexity)的结论不能应用。
3.2.3 启发式,非饱和博弈
在 minimax 博弈中用在生成器上的代价对理论分析很有用但是在实践中表现很糟糕。
最小化目标类和分类器预测的分布的交叉熵是很高效的,因为代价不会在分类器有错误的输出的时候饱和。最终代价会饱和到 0,但是仅仅是在分类器选择了正确的类标的情况下。
在 minimax 博弈中,判别器最小化交叉熵,但是生成器是最大化同一个交叉熵。这对于生成器是不利的,因为判别器成功地以高置信度反对生成器产生的样本时,生成器的梯度会消失。
为了解决这个问题,一种方式是继续使用交叉熵来最小化生成器。不过我们不是去改变判别器代价函数的正负号来获得生成器的代价。我们是将用来构造交叉熵代价的目标的正负号。所以,生成器的代价函数就是:
在 minimax 博弈中,生成器最小化判别器正确的对数概率。在这个博弈中,生成器最大化判别器错误的对数概率。
这个版本的博弈是启发式激发的想法,而非理论上的考量。而唯一的动机就是确保每个参与人在他要输掉博弈时有一个更强的梯度。
当然,这里已经不再是零和博弈了,所以不能被描述成一个单一值函数。
3.2.4 最大似然博弈
我们可能能够使用 GANs 进行最大似然学习,这就意味着可以最小化数据和模型之间的 KL 散度,见(4)。
在第 2 节中,为了简化模型之间的对比,我们提到 GANs 可以选择性地实现最大似然。
有很多中方式能够使用 GAN 框架来近似(4)式。 Goodfellow (2014) 使用下式:
其中 σ 是 logistic sigmoid 函数,等价于在假设判别式最优的情形下最小化(4)式。这个等价关系依照期望的形式成立;实践中,对 KL 散度进行随机梯度下降和GAN 训练过程由于通过采样(x 为最大似然而 z 为GANs)来构造期望梯度将会按照某个方差在真实的期望梯度附近。这个等价关系可以作为一个练习(参见 7.3 节练习,8.3 节答案)。
另外还有一些近似最大似然的方法。比如说 Nowozin et al. (2016).
3.2.5 选择散度是 GANs 的突出特点么?
作为我们讨论 GANs 如何工作的一部分,大家可能想知道什么让 GANs 能够产生更好的样本。
以前,很多人(包括作者本人)相信 GANs 能够产生清晰真实的图片是由于他们最小化了数据和模型之间的 Jensen-Shannon 散度而 VAEs 产生模糊的图片是其最小化 KL 散度 造成的。
KL 散度不是对称的;最小化 DKL(pdata || pmodel) 和 DKL(pmodel || pdata) 并不相同。最大似然估计执行的是前者,而最小化 Jensen-Shannon 散度某种程度上是后者。正如图 14 所示,后者可能会期望得到更好的样本因为使用这个散度训练的模型更倾向于生成仅仅来自训练分布的众数(mode)样本即使会忽略一些众数,而不是包含所有的众数但是生成不来自任何训练数据众数的一些样本。
某些更新的证据表明使用 Jensen-Shannon 散度并没有解释为何 GANs 得到更加清晰的图片:
- 3.2.4 节提到现在可以使用最大似然来训练 GANs 了。这些模型也能够产生清晰的样本,并且也选择了少量的众数。参见图 15.
- GANs 通常会从极少量的众数中选择生成;小于由模型容量带来的限制。逆 KL 倾向于生成和模型能够容纳的那么多的数据分布的众数;一般不会是更少的众数。这就意味着众数坍缩是由于散度之外的因素导致。
总之,GANs 由于训练过程的问题选择生成小量的众数,并不是选择最小化的散度导致。在 5.1.1 节会进行讨论。GANs 产生更加清晰的样本的原因还很模糊。可能是使用 GANs 训练的模型族和使用 VAEs 训练的模型族不同(例如,用 GANs 很容易使得模型的 x 有更加复杂的分布而不仅仅是一个各向同性 isotropic 高斯条件分布在生成器的输入上)可能是 GANs 的近似的类型有这个不同于其他框架使用的近似导致的效果。
3.2.6 代价函数的比对
我们可以讲生成式网络看成是一个特别的强化学习。不是被告知一个具体的输出 x 应该被关联上每个 z,生成器采取行动并接受奖励。特别是,注意到 J(G) 没有直接引用训练数据,所有关于训练数据的信息都仅是从判别器所学到的获得。(巧的是,这会让 GANs 不再害怕过匹配,因为生成器不能够直接复制训练样本)学习过程和传统的强化学习也有一点差异:
- 生成器能够同时观察奖励函数的输出和梯度
- 奖励函数不是静止的,奖励是基于学习生成器策略的变化的判别器的。
在所有的情形中,我们可以将采样过程看做是从一个特定 z 选择开始作为一个 可以获得奖励的 episode,而独立的行动对所有其他的 z 的值进行选择。给于生成器的奖励就是一个单个标量值的函数,D(G(z))。我们通常将这个用代价(负的代价)表示。生成器的代价总是在 D(G(z)) 中单调下降的,但是不同的博弈设计成让这个代价沿着曲线不同的部分下降更快。
图 16 展示了三个不同 GANs 的作为 D(G(z)) 函数的代价反应曲线。我们看到最大似然博弈结果是很高方差,大多数代价梯度来自很少的样本 z 对于那些更可能是真的样本。这个启发式设计的非饱和代价有低的样本方差,这就可能解释为何在实践中更加成功了。因为这表明方差降低技术可以成为一个提升 GANs 性能的重要的研究领域,特别是基于最大似然的 GANs。
3.3 DCGAN 架构
大多数 GANs 或多或少是基于 DCGAN 架构的 (Radford et al., 2015). DCGAN 全称“deep, convolution GAN”。尽管 GANs 在 DCGANs 前也是深的和卷积的,不过 DCGAN 就用来代表这一类风格的架构了。DCGAN 架构的关键点如下:
- 使用批规范化 Batch Normalisation,简称 BN (Ioffe and Szegedy, 2015) 层,在判别器和生成器中大多数层是 BN 的,有两个独立的 minibatch。生成器最后一层和判别器的第一层没有 BN,所以模型可以学到数据分布的正确的均值和尺度。参加图 17。
- 总体网络结构师从 all-convolutional net(Springenberg et al., 2015). 这个架构不含有 pooling 或者 unpooling 层。当生成器需要增加空间维度是,它使用了 stride 大于 1 的转置卷积。
- 使用 Adam 优化器而不是 SGD with momentum
在 DCGANs 前,LAPGANs 是唯一一个能规划化到高分辨率图像的 GAN。LAPGANs 需要一个多步骤生成过程,多个 GANs 产生在一个图像的 Laplacian 金字塔表示不同细节的层。DCGANs 是第一个学会单步生成高分辨率图像的 GAN。正如图 18 所示,DCGANs 在限制的图像领域能够产生高质量的图像,比如说卧室的图像。DCGANs 同样能够展示 GANs 学会以很多有意义的方式来使用他们的隐含编码,隐含空间中的简单的算术运算也有了语义上的意义,比如图 19 所示。
3.4 GANs 和 noise-contrastive 估计和最大似然有什么关联?
在理解 GANs 工作原理时,大家很自然地想了解他们和 noise contrastive estimation(NCE) (Gutmannand Hyvarinen, 2010)的关联。Minimax GANs 使用 NCE 的代价函数作为值函数,所以这两个方法看起来紧密关联。但实际上,他们学到的非常不同的东西,因为两个方法关注博弈中的不同参与人。粗略地说,NCE 的目标是学习判别器的密度模型,GANs 则是学习定义生成器的采样器。尽管这两个任务看起来在相近,其梯度完全不同。令人惊奇的是,最大似然是和 NCE 更为相近的,对应于进行一个用同样的值函数的 minimax 博弈,但是使用启发式更新策略而不是对参与人其中之一进行梯度下降。这个在图 20 中进行了总结。