前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从概率分布角度理解GAN

从概率分布角度理解GAN

作者头像
McGL
发布2020-10-30 10:46:00
1.1K0
发布2020-10-30 10:46:00
举报
文章被收录于专栏:PyVisionPyVision

❝导读:另一种视角解读GAN,从概率分布角度理解更直观。 ❞

作者:Alireza Koochali 编译:McGL

生成对抗网络(GANs / Generative Adversarial Networks)是当今 AI 领域的热门话题之一。在这篇文章中,我们将从一个不同的视角来看GANs,即不是将它视为一个漂亮图像的生成器,而是一个概率分布变换函数。我们将探索 GAN 的核心理念,但不纠缠于实现和复杂的数学。我们从分析手头上的问题类型开始。然后,我们会观察到解决方案的要求是如何塑造 GAN 的想法的。

欢迎来到游乐园

假设我们拥有一个游乐园。里面我们有一台机器,投入10美元,然后会随机返回一个价值在1美元到100美元之间的玩具。这种机器在游客中非常受欢迎,因为他们时不时会赢得非常酷且昂贵的玩具。此外,这台机器对我们来说是很有利可图的。因此,机器的玩具选择逻辑恰到好处地击中了理想点(sweet spot),它保证了我们和客户的满意度。

因此,我们想增加更多的机器,以获取更多的利润。然而,有一个问题。这台机器超级贵。因此,我们有兴趣自主研发制造(山寨)这种机器。要做到这一点,我们需要弄清楚机器的玩具选择逻辑。显然,选择玩具的关键参数是它的价值。如果一个玩具很昂贵,它应该不太可能被选择到,以保证我们的利润。然而,如果我们大幅降低了选择到昂贵玩具的可能性,这将导致访客的不满。因此,我们的目标是尽可能精确地了解玩具价值的概率分布。首先,我们有一个清单,有以前机器吐出的玩具及其相应的价格。我们尝试研究玩具的分布情况。如果分布类似于一个著名的概率分布,问题就解决了。我们使用概率分布作为我们新机器的玩具选择逻辑的核心。我们从这个分布中取样,以确定返回哪个玩具。

复杂的机器,复杂的问题

然而,如果我们遇到一个复杂的吐出玩具分布,我们需要在只给出这个分布的样本的情况下,设计一个方法来了解生成过程的概率分布。

换句话说,我们需要一个模型来查看我们的数据并计算出机器逻辑。关键点是“学习数据的概率分布是数据生成的主要任务。”

通过变换来生成

让我们抽象地描绘我们的目标。首先,我们有一组数据,从现在开始我们称之为真实数据。我们的目标是伪造与真实数据相似的人造数据。人造数据通常被称为假数据。因此,我们需要一个输入真实数据并生成逼真的假数据的模型。目标很明确。现在,我们需要从抽象的目标转向对我们的任务进行更详细的描述,并且最好将它与我们更熟悉的事物联系起来。为了做到这一点,我们需要改变我们看这个问题的视角。首先,我们需要熟悉变换函数。假设我们有一组来自概率分布的样本。通过应用一个变换函数,我们可以将这些样本从它们的原始分布转换到期望的目标分布。理论上,我们可以从任何源分布转换到任何目标分布。然而,计算这些转换函数在解析上并不总是可行的。

现在,回到我们的问题。我们可以将我们的生成问题重新定义为一个变换任务。我们从一个已知的分布开始。通常情况下,我们会选择一个均值为0且标准差为1的正态分布。我们称这种分布为“潜在空间”。现在,我们需要定义一个变换函数,将样本从潜在空间变换到数据空间。换句话说,我们的变换函数从潜在空间获取样本,并输出数据空间中的样本,即数据点。瞧!我们生成数据!只有一个问题,用解析方法定义这个函数是不可能的。然而,我们不是应该用神经网络来逼近那些无法用解析方法定义的复杂函数吗?是的,我们知道,这正是我们要做的。我们使用神经网络来近似我们的变换函数。我们称这个神经网络为“生成器(Generator)” ,因为它最终会产生数据。非常合理。

既然要使用神经网络,我们需要定义一个损失函数来训练我们的神经网络。损失函数是正确训练和逼真数据生成的关键。因此,我们需要根据我们的目标精确地定义它。

鉴别器(Discriminator): 非常有帮助

一般来说,损失函数评估我们的神经网络对于我们的目标的执行情况,并提供反馈(以梯度的形式)给模型来改进自己。在这里,我们需要一个损失函数来衡量我们生成的数据服从真实数据分布的程度。换句话说,我们需要一个损失函数来告诉我们伪造数据的真实程度。尽管如此,我们仍然没有任何关于真实数据分布的信息。这从一开始就是我们的主要问题。然而,我们可以通过区分真实数据和伪造数据来达到同样的目的。

假设我们的损失函数可以区分真实数据和伪造数据。

然后,我们可以提供我们的伪造数据给这个函数。对于那些无法与真实数据区分开来的假样本,我们不需要做任何事情。对于其他伪造样本,损失函数将提供反馈,以更新和改进我们的生成器。

更具体地说,我们可以使用分类器作为损失函数,来区分真假数据。如果生成的数据点被归类为真实数据,这意味着它类似于真实数据,我们不需要采取任何进一步的行动。对于那些被识别为生成数据的假样本,我们会问损失函数,我们应该如何更新我们的生成器,使这些样本看起来更真实。损失函数以梯度的形式提供了答案,以更新我们神经网络中的权重。

看来我们已经找到了解决方案的最后一部分!然而,我们必须处理另一个问题。虽然我们建议的损失函数满足我们的要求,但是在实践中实现它并不简单。因此,我们的损失函数是一个复杂的函数,我们可以定义它的特征,但不能直接实现它。看起来像个死胡同。但是,是什么阻止我们使用神经网络来近似这个损失函数呢?没什么!那么,让我们开始吧。我们可以使用分类器神经网络作为我们的损失函数。我们称这个网络为“鉴别器(Discriminator)” ,因为它区分真假数据。非常明智的命名。

最重要的是,我们非常熟悉使用神经网络进行分类。我们知道如何训练它们,它们的损失函数,以及它们的输入和输出应该是什么样子。然而,同时训练两个神经网络并不是传统的方法。现在,最后一个问题是,我们应该如何一起同时训练所有这些网络。

让火车(Train,英文双关)开动吧!

如果我们在开始训练我们的生成器之前有一个完美的分类器,训练就会变得非常简单。不幸的是,在训练过程的开始,我们的鉴别器就像我们的生成器一样毫无头绪。更糟糕的是,我们不能在开始训练生成器之前训练鉴别器,因为我们需要假数据来训练鉴别器。正如你所看到的,这两个网络的训练相互依赖。生成器需要来自鉴别器的反馈来改进,鉴别器需要随着生成器的改进不断更新。因此,我们交替地训练它们。对于一个 batch,我们训练鉴别器对真假样本进行分类。然后对于另一个 batch,我们训练生成器生成被鉴别器识别为真实的样本。这种方法被称为“对抗训练(Adversarial training)”。当我们对数据生成任务使用对抗训练时,我们得到生成对抗网络或简称 GAN。

然而,当我们审视训练过程时,我们并没有看到“对手(adversary)”本身。为了找出“对抗训练(adversarial training)”一词的来源,我们应该仔细研究两个网络的目标。鉴别器的目标是尽可能准确地分类真假数据。因此,在鉴别器训练阶段,鉴别器尝试正确识别假样本。另一方面,我们训练生成器生成逼真的假数据。为了通过真实性测试,生成器应该使鉴别器相信它生成的数据是真实的。换句话说,生成器试图欺骗鉴别器,而鉴别器试图不被生成器欺骗。这些相互矛盾的目标使训练过程开始进行。

在训练过程中,两个网络的目标都得到了改进。最后,在某一点上,生成器变得非常好,以至于鉴别器无法区分虚假数据和真实数据,这时我们的训练完成了。

陷阱。多的是!

对于一个非常困难的问题来说,GANs 是一个漂亮而复杂的解决方案。有了 GAN,对于这个长期的问题,我们有了一个快速,高效,精确的答案,它为许多令人兴奋的应用铺平了道路。但是,在聊到应用程序之前,我们应该了解 GANs 的常见问题。首先,生成器是一个神经网络,根据定义,它是一个黑盒子。当一个训练好的生成器将关于真实数据分布的信息嵌入到它的权重中时,我们不能明确地访问它。当我们处理低维数据时,我们可以通过采样来检索这些信息,但是对于高维数据,我们什么也做不了。此外,不同于其他神经网络,GANs 的损失函数提供很少关于训练进度的信息。在训练过程中,我们需要手动检查生成器的样本,以检查训练进度。最后,如前所述,训练通过生成器和鉴别器之间的斗争进行。如果他们停止互相争斗,训练过程将停止,不幸的是,他们经常在一段时间后停止争斗。造成这个问题的原因有很多。例如,如果其中一个网络的改进速度比另一个网络快得多,它就可以压倒另一个网络,训练就会停止。因此,网络体系结构应该是平衡的。但这种平衡意味着什么呢?这个问题没有明确的答案。一般来说,人们应该通过反复试验来找到它们。因此,GAN 的训练过程是相当不稳定的。解决稳定性问题的方法有很多,但大多是解决了一个但引入了另一个问题,或需要满足一些特定的条件。简而言之,提高 GAN 的训练进度仍然是一个悬而未决的问题,围绕它的研究非常活跃。

结论: 冰山一角

让我们回到开头说的昂贵的机器。就时间和资源而言,这台机器象征着所有昂贵的数据生成过程。假设我们有一个中等大小的人脸数据集,对于应用程序,我们需要一个更大的数据集。我们可以拿起我们的相机,拍摄人物的照片,然后将他们添加到数据集中。然而,这是一个耗时的过程。现在,如果我们用可用图像训练一个 GAN,我们可以在几秒钟内生成数百张图像。因此,数据增强技术是 GANs 最重要的应用之一。

数据稀缺并不是唯一的动机。让我们回到人脸数据集。如果我们想使用这些照片,我们很可能会遇到关于隐私的问题。但是,如果我们使用生成的虚假的人物形象,而这些人实际上并不存在,那会怎样呢?非常好!没有人会担心。因此,关于数据的隐私问题,GANs 提供了一个干净利落的解决方案。

目前 GAN 的研究社区非常活跃,每天都有新的应用程序或改进提出。尽管如此,仍有许多东西有待发现。这只是冰山一角。

「来源:」https://towardsdatascience.com/gans-a-different-perspective-3f2648da6a28

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PyVision 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎来到游乐园
  • 复杂的机器,复杂的问题
  • 通过变换来生成
  • 鉴别器(Discriminator): 非常有帮助
  • 让火车(Train,英文双关)开动吧!
  • 陷阱。多的是!
  • 结论: 冰山一角
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档