作者:Joseph Rocca
编译:ronghuaiyang
导读
GANs在2014年提出,然后就在图像生成领域取得了巨大的成功,但是其背后的原理却不是那么好理解,这篇文章带你从最基础的随机变量开始,一步一步推理得到GANs,非常的详细,一定要看看!由于文章较长,分两部分分享给大家,今天是第二部分。
生成匹配网络
免责声明 :“Generative Matching Networks”的名称不是标准名称。但是,我们可以在文献中找到,例如“Generative Moments Matching Networks”或者“Generative Features Matching Networks”。我们只是想在这里为我们下面的描述使用一个稍微通用一点的命名。
训练生成模型
到目前为止,我们已经表明,生成一个新的狗的图像的问题可以描述成一个生成一个符合在N维向量空间的“狗概率分布”的随机向量的问题,我们建议使用转换方法来实现,变换函数用神经网络来建模。
现在,我们仍然需要训练(优化)网络来表达正确的转换函数。为此,我们可以提出两种不同的训练方法:直接法和间接法。直接训练方法是比较真实概率分布和生成的概率分布,并通过网络反向传播差值(误差)。这就是规则生成匹配网络(GMNs)的思想。对于间接训练方法,我们不直接比较真实分布和生成的分布。相反,我们训练生成网络,让这两个分布通过一个下游任务,这样生成网络相对于下游任务的优化过程将强制生成的分布接近真实的分布。后面的想法就是生成对抗网络(GANs)背后的想法,我们将在下一节中介绍。但现在,让我们从直接法和GMNs开始。
比较两种基于样本的概率分布
如前所述,GMNs的思想是通过直接比较生成的分布和真实分布来训练生成网络。然而,我们不知道如何明确表达真正的“dog概率分布”,我们也可以说生成的分布过于复杂,无法明确表达。因此,基于显式表达式的比较是不可能的。然而,如果我们有一种方法来比较基于样本的概率分布,我们可以用它来训练网络。事实上,我们有真实数据的样本,我们可以在训练过程的每次迭代中,生成一个生成数据的样本。
虽然理论上可以使用任何基于样本的距离(或相似性度量)来有效地比较两个分布,但是我们可以特别提到最大平均差异(Maximum Mean difference, MMD)方法。MMD定义了两个概率分布之间的距离,可以根据这些分布的样本进行计算(估计)。尽管它还没有完全超出本文的范围,但是我们已经决定不再花太多时间描述MDD。但是,我们有一个项目即将发布一篇包含更多细节的文章。现在想了解MMD更多信息的读者可以参考这些幻灯片,这篇文章或这篇文章。
分布的匹配误差的反向传播
因此,一旦我们定义了一种基于样本的比较两种分布的方法,我们就可以定义GMNs生成网络的训练过程。给定一个概率为分布均匀的随机变量作为输入,我们希望生成输出的概率分布为“dog概率分布”。GMNs的理念是通过重复以下步骤来优化网络:
- 生成一些均匀分布的输入
- 让这些输入通过网络并收集生成的输出
- 根据可用的样本比较真实的“dog概率分布”和生成的“dog概率分布”(例如计算真实dog图像样本与生成图像样本之间的MMD距离)
- 使用反向传播做一个梯度下降的步骤,以降低真实分布和生分布之间距离(例如MMD)
如上所述,在执行这些步骤时,我们在网络上应用一个梯度下降函数,该函数是当前迭代中真实分布和生成分布之间的距离。
生成匹配网络采用简单的随机输入,生成新的数据,直接将生成数据的分布与真实数据的分布进行比较,并反向传播匹配误差来训练网络。
生成对抗网络
“间接”的训练方法
在生成网络的训练中,上述“直接”的方法直接将生成的分布与真实分布进行比较。GANs的绝妙之处在于用一个间接的比较来替代这种直接的比较,这两个分布的间接的比较以下游任务的形式出现。生成网络的训练就是针对这个任务来完成的,这样就可以使生成的分布越来越接近真实的分布。
GANs的下游任务是区分真样本和生成样本的任务。或者我们可以说“非区分”任务,因为我们希望区分尽可能失败。所以,在GAN架构中,我们有一个判别器,它从真实的和生成的数据中提取样本并尽可能地对它们进行分类,还有一个生成器,它被训练成尽可能地欺骗判别器。让我们看一个简单的例子,为什么我们提到的直接和间接方法在理论上应该导致相同的最优生成器。
理想的情况:完美的生成器和判别器
为了更好地理解为什么训练生成器欺骗判别器会得到与直接训练生成器匹配目标分布相同的结果,让我们举一个简单的一维的例子。我们暂时忘记了生成器和判别器是如何表示的,并将它们视为抽象概念(将在下一小节中指定)。此外,它们都被认为是“完美的”(具有无限的容量),因为它们不受任何类型(参数化)模型的约束。
假设我们有一个真实的分布,例如一维高斯分布,我们想要一个生成器从这个概率分布中采样。我们所谓的“直接”训练方法包括迭代地调整生成器(梯度下降迭代),以纠正真实分布和生成的分布之间的测量差/误差。最后,假设优化过程是完美的,我们应该得到与真实分布完全匹配的生成分布。
图解直接匹配法的概念。蓝色的分布是真实的,而生成的分布用橙色表示。通过逐次迭代,我们比较了这两个分布,并通过梯度下降的步骤来调整网络的权重。这里比较的是平均值和方差(类似于截断矩匹配 方法)。注意(显然)这个例子非常简单,不需要迭代方法:目的只是为了说明上面给出的直觉。
对于“间接”方法,我们还必须考虑一个判别器。我们现在假设这个判别器是一种神器,它确切地知道什么是真实的和生成的分布,并且能够根据这些信息预测任意给定点的类(“真实的”或“生成的”)。如果这两个分布距离较远,判别器将能够很容易地对我们提供给它的大多数点进行分类,并具有较高的可信度。如果我们想欺骗判别器,我们必须使生成的分布接近真实分布。当两个分布在所有的点上都一样时,判别器将最难预测这个点的类别:在这种情况下,每个点是“真实的”还是“生成的”具有相等的机会,这样,判别器的预测没办法比直接取平均效果更好了。
对抗性方法的直觉。蓝色的分布是真实的,橙色的是生成的。在灰色中,在右侧对应的y轴上,我们展示了鉴别器选择每个点上密度较高的类(假设“真实”和“生成”数据的比例相等)的概率为真。两个分布越接近,判别器越容易出错。训练时,目标是“将绿色区域(生成的分布太高)移动到红色区域(生成的分布太低)”。
在这一点上,怀疑这种间接方法是否真的是一个好主意似乎是合理的。实际上,它似乎更复杂(我们必须基于下游任务而不是直接基于分布优化生成器),并且它需要一个判别器,我们在这里将其视为给定的神器,但实际上它既不已知也不完美。首先,直接比较基于样本的两种概率分布的难度抵消了间接法明显较高的复杂性。对于第二点,很明显判别器是未知的。然而,这是可以学会的!
近似:对抗神经网络
现在让我们描述一下在GANs体系结构中使用生成器和判别器的特定形式。生成器是一个神经网络,它对转换函数进行建模。它以一个简单的随机变量作为输入,并且在经过训练后必须返回一个遵循目标分布的随机变量。由于判别器结构复杂且未知,我们决定用另一种神经网络对其进行建模。这个神经网络模拟一个判别函数。它将一个点作为输入(在我们的dog示例中是一个N维向量),并将这个点为“真”的概率作为输出返回。
注意一个事实,我们现在用参数化模型表达生成器和判别器(而不是前面小节中的理想化版本),在实践中,并没有一个产生巨大影响的理论/观点给出上面的直觉:我们只是工作在一些参数空间中,而不是理想的全空间,所以,我们应该达到的最佳点,在理想的情况下在参数模型的精确容量中可以被视为“圆”。
一旦确定,这两个网络就可以(同时)以相反的目标联合训练:
- 生成器的目标是欺骗判别器,因此生成神经网络被训练来最大化最终分类错误(在真数据和生成数据之间)
- 判别器的目标是检测虚假生成的数据,因此对判别神经网络进行训练,使最终的分类误差最小化
因此,在每一次迭代的训练过程,生成网络的权重更新为了增加分类错误(在生成器的参数上使用误差梯度提升),而判别网络的初始权值更新,以便减少这种错误(在判别器的参数上用误差梯度下降法)。
生成对抗网络表示。生成器以简单的随机变量作为输入并生成新的数据。鉴别器对“真实”和“生成”的数据进行鉴别,构建一个分类器。生成器的目标是欺骗鉴别器(尽可能将生成的数据与真实数据混合以增加分类错误),而鉴别器的目标是区分真实和生成的数据。
这些相反的目标和对这两种网络的对抗性训练的隐含概念解释了“对抗性网络”的名称:这两种网络都试图打败对方,这样做,它们都变得越来越好。他们之间的竞争使得这两个网络在各自的目标上“进步”。从博弈论的角度来看,我们可以认为这个设置是一个极大极小两个玩家的游戏,其平衡态对应的情况是,生成器产生的数据正好就完全符合目标分布,判别器预测任何一个点为“真实”或“生成”的概率为1/2。
GANs的数学相关的细节
注 :本节比较技术性,对于全面理解GANs并不是绝对必要的。所以,现在不想读数学的读者可以跳过这部分。对于其他的,让我们看看上面给出的直觉是如何用数学形式表示的。 免责声明 :以下方程不是Ian Goodfellow文章中的方程。我们在这里提出另一种数学形式,有两个原因:第一,与上面给出的直觉更接近一些;第二,因为原始论文的方程已经非常清晰,重写它们是没有必要的。还请注意,我们绝对不会进行的可能的损失函数实际方面的考虑(梯度消失或其他)。我们强烈建议读者也看一看原始论文的方程式:主要的区别是Ian Goodfellow和他的合著者使用的是交叉熵误差,而不是绝对误差(就像我们下面所做的那样)。此外,在下面我们假设一个无限容量的生成器和判别器。
神经网络建模本质上需要定义两个东西:结构和损失函数。我们已经描述了生成对抗网络的结构。它包括两个网络:
- 生成网络G(.),它接受一个具有概率密度p_z的随机输入z,并返回一个输出x_g = G(z),该输出应该遵循(训练后)目标概率分布
- 判别网络D(.),输入x,可以是一个“真实的”(x_t,其概率密度用p_t来表示)或一个“生成”(x_g,其概率密度用p_g由诱导密度p_z经过G得到)和返回的概率D(x),x是一个“真正的”数据
现在让我们仔细看看GANs的“理论”损失函数。如果将“真实”和“生成”的数据按相同比例发送给判别器,则判别器的期望绝对误差可以表示为:
生成器的目标是欺骗判别器,判别器的目标是能够区分真实数据和生成的数据。所以,在训练生成器的时候,我们想要使误差最大化,同时我们想要使判别器的误差最小化。我们得到
对于任意给定的生成器G(以及诱导概率密度p_g),最好的判别器是最小化的那个
为了最小化(关于D的)这个积分,我们可以最小化每个x值在积分内的函数,然后定义给定生成器的最佳判别器
(实际上,这是最好的值之一,因为可以用另一种方式处理p_t(x)=p_g(x)这样的x值,但这与后面的内容无关)。然后我们搜索最大的G
同样地,为了使(关于G的)这个积分最大化,我们可以对x的每个值使积分内的函数最大化,因为概率密度p_t独立于生成函数G,我们不能做得更好了
当然,由于p_g是一个概率密度,它的积分应该是1,所以我们对于最好的G,我们的必要条件
所以,我们表明,在理想情况下无限容量的生成器和判别器,最优的对立的设置是这样的,生成器生成和真实的概率密度一样的概率密度,判别器无法区分真实的和生成的。就像直觉告诉我们的一样,最后,注意G是最大化的
在这种形式下,我们最好看到G想要使判别器出错的期望概率最大化。
要点总结
本文的主要结论是:
- 计算机基本上可以生成简单的伪随机变量(例如,它们可以生成与均匀分布非常接近的变量)
- 产生更复杂随机变量的方法有多种,包括“变换法”的概念,即把一个随机变量表示为某个更简单随机变量的函数
- 在机器学习中,生成模型试图从给定的(复杂的)概率分布中生成数据
- 深度学习生成模型被建模为神经网络(非常复杂的函数),它接受一个简单的随机变量作为输入,然后返回一个遵循目标分布的随机变量(与“转换方法”类似)
- 这些生成网络可以“直接”训练(通过比较生成数据的分布和真实分布):这是生成匹配网络的思想
- 这些生成网络也可以被“间接”训练(通过试图欺骗另一个同时被训练来区分“生成”数据和“真实”数据的网络):这就是生成对抗网络的思想
尽管围绕着GANs的“炒作”可能有点夸张,但我们可以说,Ian Goodfellow及其合著者提出的对抗性训练的想法确实很棒。这种把损失函数从直接比较到间接比较的方法,对于深入学习领域的进一步研究是非常鼓舞人心的。综上所述,我们不知道GANs的想法是否真的是“过去十年机器学习中最有趣的想法”……但很明显,它至少是最有趣的想法之一!
前文链接:理解生成对抗网络,一步一步推理得到GANs(第一部分)
英文原文:https://towardsdatascience.com/understanding-generative-adversarial-networks-gans-cd6e4651a29
https://www.toutiao.com/a6725010870054683150/