最近,数据科学界大力推广生成性对抗网络(Generative Adversarial Networks:简称“GAN”)。但是,当你开始了解它们时,你马上就会明白其中的缘由。GAN架构简直是一个天才的设计,主要是因为它“释放”了现实数据生成和增强的巨大潜力。在本文中,我将首先向您介绍GAN的基础知识,并向您展示如何使用Keras/Tensorflow库在Python环境中编写一个GAN。归纳起来,主要包括下面几项内容:,即使是经验丰富的数据科学家也很容易在数百种不同的机器学习算法中迷失方向。为了归纳这些算法,我对一些最常见的算法进行了分类,并创建了一个可视化的旭日图。,,机器学习算法分类旭日图,注意,这其中的一些算法相当灵活,可以应用于不同的任务。因此,任何分类算法都永远不会是最完美的分类算法。尽管如此,能够看到一个如此高层次的视图仍然有重大意义。注意:原文中展示的图表是交互式的,只要点击不同类别的链接便可以了解更多对应的提示信息。因此,本译文中提供的静态图表只能让各位稍有一些遗憾了。,你会发现,GAN也不过是神经网络的一个子类,它自身也进一步包含多个不同的子类型,如基本GAN(本文的重点)、条件GAN(cGAN)、深度卷积GAN(DCGAN)和我将在未来文章中介绍的其他类型。,生成性对抗网络是深度学习机器,它将两个单独的模型组合到一个架构中。这两个组件是:,这两个模型在零和博弈中相互竞争。生成器模型尝试生成与问题域中的数据样本相似的新数据样本。同时,鉴别器尝试识别给出的样本是假的(来自生成器)还是真的(来自实际数据域)。,生成器和鉴别器之间的竞争使它们成为对手,GAN由此而得名。,首先,让我们分析一下生成器模型,看看它是如何生成新的数据样本的。,,生成器模型示意图,接下来,让我们看看如何构造鉴别器模型。,,鉴别器模型,生成性对抗网络结合了相互竞争的生成器和鉴别器模型。下面的GAN架构图说明了两个模型是如何互连的。,,GAN模型架构示意图,如图所示,我们将假的(生成的)和真实的样本数据输入鉴别器模型,对其进行训练以区分这两种类型。,随着鉴别器更好地区分真假样本数据,生成器模型的权重和偏差会得到更新,以使其产生更令人信服的假样本数据。,该过程将循环执行若干遍(根据指定次数的世代),直到生成器和鉴别器在其各自特定任务中变得更好。最后,在极限情况下,生成器模型的输出与实际输出无法区分,鉴别器模型收敛到大约0.5的中性预测结果。,本示例的目的是让您从根本上了解GAN的工作原理。因此,我们将其应用于一个简单的问题。,我们将使用到下面一些库:,首先,让我们导入库:,以上代码将打印出本例中使用的包的版本信息,如下所示:,接下来,我们将创建一个圆,并获取其边缘(圆周)上点的坐标。然后,我们将通过训练生成器和鉴别器,让GAN“识别”和“生成”这样的圆。,上面的代码将生成1000个点,并绘制一个圆形。,,由1000个点组成的圆,现在,我们已经准备好了数据。接下来,让我们开始定义和组装我们的模型。我们将从生成器开始:,,生成器模型图,如您所见,我们的生成器有三个输入节点,因为我们决定从三维潜在空间中绘制一个随机向量。注意,我们可以自由选择潜在空间维度。,同时,输出结果中显示了两个值,对应于二维空间中的一个点的x和y坐标。接下来,我们建立鉴别器模型:,,鉴别器模型图,鉴别器输入采用两个值,与生成器输出对齐。同时,鉴别器输出只是一个值,告诉我们模型对数据真实/虚假的信心有多大。接下来,我们结合这两个模型来创建GAN。下面代码中的一个关键细节是,我们使鉴别器模型不可训练。我们这样做是因为,我们想使用真实和虚假(生成)数据的组合分别训练鉴别器。稍后,您将看到我们是如何做到这一点的。,,GAN模型示意图,我们将创建三个简单的函数,用于辅助我们完成为两个模型的采样与生成数据。第一个函数的功能是从圆上采样真实点数据;第二个函数负责从潜在空间中提取随机向量;第三个函数负责将潜在变量传递到生成器模型中以生成伪样本数据。#构造函数,使负责从我们的圆上采集随机点数据,最后两个函数将帮助我们训练模型,并在指定的时间间隔评估结果数据。首先,让我们创建模型性能评估函数:,如您所见,上述函数分别对真实和虚假(生成)点对鉴别器进行了评估。然后绘制二维散点图,以显示这些点在二维平面上的位置。,最后,训练函数如下:,如前所述,我们通过传递一批50%真实和50%虚假(生成)的样本数据来分别训练鉴别器。同时,生成器训练通过组合的GAN模型进行。,让我们调用训练函数来显示一些上述实验的结果:,下图展示的是在世代(epoch)0时期输出的结果:,,世代0完成后的GAN性能,在世代3,000时期输出的结果:,,在世代3,000完成后输出的结果,在世代10,000时期输出的结果:,,在世代10,000完成后输出的结果,我们可以看到生成器在每一步都得到了改进。然而,在经历了10000个世代之后,鉴别器仍然表现良好,能够识别大多数真实样本和大部分虚假(生成)样本。因此,我们可以继续将该模型训练到下一个10000个世代,以取得更好的结果。比较上述模型性能的另一种方法是查看真实和虚假点分布的汇总统计结果:,,真实和虚假(生成)点分布统计的比较,上述实验数据清楚地表明了:分布差异相对较小。,我希望阅读完本文后,你能够很好地理解了GAN网络的工作原理。,朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。早期专注各种微软技术(编著成ASP.NET AJX、Cocos 2d-X相关三本技术图书),近十多年投身于开源世界(熟悉流行全栈Web开发技术),了解基于OneNet/AliOS+Arduino/ESP32/树莓派等物联网开发技术与Scala+Hadoop+Spark+Flink等大数据开发技术。,原文链接:https://towardsdatascience.com/gans-generative-adversarial-networks-an-advanced-solution-for-data-generation-2ac9756a8a99,,
© 版权声明
文章版权归作者所有,未经允许请勿转载。