前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用生成式对抗网络从随机噪声中创建数据

使用生成式对抗网络从随机噪声中创建数据

作者头像
WindCoder
发布2018-09-19 17:43:41
3K0
发布2018-09-19 17:43:41
举报
文章被收录于专栏:WindCoder

前言

由于最近几周工作紧以及该文涉及机器学习,翻译有点水的厉害。推荐不要在这浪费时间还是直接看英文原文的好。

原文Create Data from Random Noise with Generative Adversarial Networks 作者CODY NASH

正文

自从我发现了生成式对抗网络(GANs),我就被它们迷住了。GAN是一种能够从头开始生成新数据的神经网络。你可以给它一点点的随机噪声作为输入,它可以产生卧室,鸟类或任何它被训练产生的真实图像。

所有科学家都同意的一件事是我们需要更多的数据。

可以用来在数据有限的情况下产生新数据的GAN可以证明是非常有用的。数据有时可能比较困难,而且费时费钱。然而,为了有用,新的数据必须足够现实,以便我们从生成的数据中获得的任何见解仍然适用于真实的数据。如果你正在训练一只猫来捕捉老鼠,而你正在使用假老鼠,那么最好确保假老鼠看起来像老鼠。

另一种思考方法是,GANs在数据中发现结构,使他们能够做出真实的数据。如果我们不能看到我们自己的结构,或者不能用其他方法解决这个问题,这很有用。

使用生成式对抗网络从随机噪声中创建数据
使用生成式对抗网络从随机噪声中创建数据

在本文中,您将学习如何使用GAN生成新的数据。为了使本教程保持现实,我们将使用Kaggle 的信用卡欺诈检测数据集

在我的实验中,我尝试使用这个数据集来看看我能否得到一个GAN来创建足够真实的数据来帮助我们检测欺诈案例。这个数据集突出显示了有限的数据问题:在285,000个交易中,只有492个是欺诈。492个欺诈案例并不是一个庞大的数据集,尤其是在机器学习任务中,人们喜欢将数据集放大几个数量级。尽管我的实验结果并不令人吃惊,但是我很高兴地分享了一些关于GAN的知识。

在你开始之前

在我们深入研究GAN的这个领域之前,如果你想快速学习你的机器学习或深度学习技巧,你可以看看这两个相关的博客文章:

为什么选择GAN?

生成对抗网络(GAN)是一种神经网络架构,与先前的生成方法(如变分自编码器或受限玻尔兹曼机)相比,已经显示出令人印象深刻的改进。GAN可以生成更逼真的图像(例如DCGAN),支持图像之间的样式转换(参见这里这里),从文本描述生成图像(StackGAN),并通过半监督学习从较小的数据集中学习。由于这些成就,他们在学术界和商界都引起了很大的兴趣

Facebook的人工智能研究总监Yann LeCunn甚至称其为过去十年机器学习最令人兴奋的发展

基础

想想你如何学习。你尝试一下,你会得到一些反馈。你调整你的策略,然后再试一次。

反馈可能以批评,痛苦或利润的形式出现。它可能来自你自己的判断,你做得如何。通常情况下,最有用的反馈是来自另一个人的反馈,因为这不仅仅是一个数字或感觉,而是一个对你的任务执行情况的明智评估。

当计算机接受任务训练时,人通常以调整后的参数或算法的形式提供反馈。当这个任务得到很好的定义,比如学习乘以两个数字,这就很好。您可以轻松而准确地告诉计算机这是怎么回事。

随着一个更复杂的任务,如创建一个狗的形象,提供反馈变得更加困难。图像是否模糊,它看起来更像猫吗,还是看起来像什么?可以实现复杂的统计,但是很难捕捉使图像看起来真实的所有细节。

一个人可以做一些估计,因为我们有很多评估视觉输入的经验,但是我们相对较慢,我们的评估可能是非常主观的。我们可以训练一个神经网络来学习区分真实图像和生成图像的任务。

然后,通过让图像生成器(也是神经网络)和鉴别器轮流相互学习,它们可以随着时间的推移而改善。这两个网络,玩这个游戏,是一个生成的敌对网络。

你可以听到 GAN的发明者伊恩·古德费洛(Ian Goodfellow)谈论这个话题时,酒吧里的一个争论导致了第一个GAN的编码狂热的夜晚。是的,他确实承认了他的论文中的栏。您可以从Ian Goodfellow关于此主题的博客中了解有关GAN的更多信息。

使用生成式对抗网络从随机噪声中创建数据
使用生成式对抗网络从随机噪声中创建数据

使用GAN时遇到许多挑战。训练一个单一的神经网络可能是困难的,因为涉及的选择的数量:体系结构,激活函数,优化方法,学习率和辍学率,仅举几例。

GAN将所有这些选择加倍,并增加新的复杂性。发生器和鉴别器都可能忘记他们早先在训练中使用的技巧。这可能导致两个网络陷入稳定的解决方案周期,而这些解决方案并没有随着时间的推移而改善。一个网络可能压倒另一个网络,这样既不能学习。或者,生成器可能不会探索很多可能的解决方案空间,只能找到切合实际的解决方案。最后一种情况称为模式崩溃。

模式崩溃是当发生器只学习可能的实际模式的一小部分。例如,如果任务是生成狗的图像,生成器可以学习只创建小型的棕色狗的图像。发电机会漏掉所有其他模式,包括其他尺寸或颜色的狗。

已经实施了许多策略来解决这个问题,包括批量标准化,在训练数据中添加标签,或者通过改变鉴别器判断生成的数据的方式。

人们已经注意到,为数据添加标签 - 即将其分成几类,几乎总能提高GAN的性能。例如,不是一般地学习生成宠物图像,而应该更容易地生成猫,狗,鱼和雪貂的图像。

也许GAN开发中最重要的突破是通过改变鉴别器如何评估数据来实现的,所以我们来仔细看看。

Goodfellow等人在2014年的GAN原始公式中,鉴别器生成给定图像是真实的或生成的概率的估计。鉴别器将被提供一组包含实际图像和生成图像的图像,并且将为这些输入中的每一个生成估计。鉴别器输出和实际标签之间的误差将通过交叉熵损失来测量。交叉熵损失可以等同于Jensen-Shannon距离度量,它在2017年初由Arjovsky等人显示。这个指标在某些情况下会失败,在其他情况下不会指向正确的方向。这个小组表明,Wasserstein距离度量(也被称为地球移动者或EM距离)在许多情况下工作并且工作得更好。

交叉熵损失是鉴别器如何准确识别真实图像和生成图像的度量。Wasserstein指标反映了真实图像和生成图像中每个变量(即每个像素的每种颜色)的分布情况,并确定了实际数据和生成数据的分布距离。Wasserstein度量标准考虑了在质量乘以距离的情况下,将产生的分布推到实际分布的形状上,从而得到了另一个名称“地球移动距离”,这是多少努力。因为Wasserstein度量不再评估无论图像是否真实,而是提供对生成的图像距离真实图像有多远的批评,“鉴别器”网络在Wasserstein架构中被称为“评论者”网络。

为了对GAN进行更全面的探索,本文将探讨四种不同的体系结构:

  • GAN: The original (“vanilla”) GAN
  • CGAN:使用类标签的原始GAN的条件版本
  • WGAN: The Wasserstein GAN (with gradient-penalty)
  • WCGAN: A conditional version of the Wasserstein GAN

但是让我们先看看我们的数据集。

看看信用卡诈骗数据

我们将使用Kaggle 的信用卡欺诈检测数据集

数据集包含约285000个交易,其中只有492个是非法的。数据由31个特征组成:“时间”,“数量”,“班级”以及另外28个匿名功能。类别特征是指示交易是否为欺诈的标签,其中0表示正常,1表示欺诈。所有的数据是数字和连续的(标签除外)。数据集没有缺失值。数据集的形状已经相当不错了,但我会做更多的清理工作,主要是将所有特征的均值调整为零,将标准偏差调整为1。我描述我的清洗工艺更在笔记本这里。现在我只显示最终结果

使用生成式对抗网络从随机噪声中创建数据
使用生成式对抗网络从随机噪声中创建数据

人们可以很容易地发现这些分布中正常数据和欺诈数据之间的差异,但是也有很多重叠。我们可以应用更快,更强大的机器学习算法之一来识别最有用的识别欺诈功能。这个算法xgboost是一种梯度提升决策树算法。我们将对70%的数据集进行训练,并在剩下的30%进行测试。我们可以设置算法继续,直到它不能提高测试数据集的召回率(检测到欺诈样本的比例)。这在测试集中达到了76%的回忆,显然还有待改进。它确实达到了94%的精确度,这意味着只有6%的预测欺诈案例实际上是正常交易。从这个分析中,我们也可以得到一个按照其在检测欺诈中的效用排序的功能列表。我们可以使用最重要的功能来帮助以后看到我们的结果。

再次,如果我们有更多的欺诈数据,我们可能会更好地检测到它。也就是说,我们可以达到更高的召回率。现在我们将尝试使用GAN生成新的,现实的欺诈数据,以帮助我们检测实际的欺诈行为。

用GAN生成新的信用卡数据

为了将不同的GAN体系结构应用到这个数据集中,我将使用GAN-Sandbox,它使用Keras库和TensorFlow后端在Python中实现了许多流行的GAN体系结构。我所有的结果都可以在这里作为一个Jupyter笔记本。如果您需要一个简单的设置,所有必要的库都包含在Kaggle / Python Docker镜像中。

GAN-Sandbox中的例子是为图像处理而设置的。生成器为每个像素产生具有3个颜色通道的2D图像,并且鉴别器/评论器被配置为评估这样的数据。卷积变换被用于网络层之间以利用图像数据的空间结构。卷积层中的每个神经元只与一小组输入和输出(例如图像中的相邻像素)一起工作以允许学习空间关系。我们的信用卡数据集缺乏变量之间的任何空间结构,所以我已经将卷积网络转换成密集连接层的网络。密集连接的层中的神经元连接到层的每个输入和输出,使得网络能够了解其特征之间的自身关系。

我要评估的第一个GAN将发生器网络与鉴别器网络进行比较,利用鉴别器的交叉熵损失来训练网络。这是原来的“香草”GAN架构。我要评估的第二个GAN以条件GAN(CGAN)的方式为数据添加类标签。这个GAN在数据,类标签中还有一个变量。第三个GAN将使用Wasserstein距离度量来训练网络(WGAN),最后一个将使用类别标签和Wasserstein距离度量(WCGAN)。

使用生成式对抗网络从随机噪声中创建数据
使用生成式对抗网络从随机噪声中创建数据

我们将使用由所有492个欺诈交易组成的训练数据集训练各种GAN。我们可以添加类到欺诈数据集,以促进条件GAN体系结构。我在笔记本上探索了几种不同的聚类方法,并用KMeans分类将欺诈数据分为两类。

我将训练每次GAN 5000轮,并沿途检查结果。在图4中,随着培训的进行,我们可以看到实际的欺诈数据和来自不同GAN体系结构的欺诈数据。我们可以将实际的欺诈数据分成两个KMeans类,用最能区分这两个类的两个维度(PCA转换特征中的特征V10和V17)作图。不使用类别信息的两个GAN,GAN和WGAN将它们的生成输出全部作为一个类别。有条件的架构,CGAN和WCGAN,按类别显示他们生成的数据。在步骤0,所有生成的数据显示馈送给发生器的随机输入的正态分布。

使用生成式对抗网络从随机噪声中创建数据
使用生成式对抗网络从随机噪声中创建数据

我们可以看到,原来的GAN架构开始了解实际数据的形状和范围,但是随后倒塌成一个小的分布。这是前面讨论的模式崩溃。发生器已经学会了鉴别器很难检测为假的小范围的数据。CGAN体系结构稍微好一点,扩展并接近每类欺诈数据的分布,但是随后在步骤5000中看到模式崩溃。

WGAN不经历GAN和CGAN体系结构的模式崩溃。即使没有阶级信息,它也开始假定实际的欺诈数据的非正态分布。WCGAN体系结构执行类似,并能够生成单独的数据类。

我们可以使用之前用于欺诈检测的相同xgboost算法来评估数据的真实性。它速度快,功能强大,不需要太多的调整即可使用。我们将使用一半的实际欺诈数据(246个样本)和相等数量的GAN生成示例来训练xgboost分类器。然后,我们将使用另一半的实际欺诈数据和一组不同的246 GAN生成的例子来测试xgboost分类器。这种正交方法(在实验意义上)将给我们一些指示发生器在生成实际数据方面的成功程度。用完全真实的生成数据,xgboost算法应该达到0.50(50%)的准确度 - 换句话说,它不比猜测好。

使用生成式对抗网络从随机噪声中创建数据
使用生成式对抗网络从随机噪声中创建数据

我们可以看到 GAN产生的数据的xgboost精度首先降低,然后在训练步骤1000中随着模式崩溃的增加而增加.CAN结构在2000步之后实现了更现实的数据,但是对于该网络,模式崩溃设置为好。WGAN和WCGAN体系结构可以更快地获得更加真实的数据,并在培训过程中继续学习。WCGAN似乎没有比WGAN更有优势,这表明这些创建的类可能没有用于Wasserstein GAN体系结构。

您可以从这里这里了解更多关于WGAN架构。

WGAN和WCGAN体系结构中的评论者网络正在学习计算给定数据集与实际欺诈数据之间的Wasserstein(地球移动者,EM)距离。理想情况下,它将测量实际欺诈数据样本的接近零的距离。然而,评论家正在学习如何进行这个计算。只要测量生成数据的距离比真实数据更大,网络就可以改善。我们可以看到在训练过程中,生成的和真实的数据之间的差异如何变化。如果高原,那么进一步的训练可能无济于事。我们可以在图6中看到,WGAN和WCGAN在这个数据集上似乎有了进一步的改进

使用生成式对抗网络从随机噪声中创建数据
使用生成式对抗网络从随机噪声中创建数据

我们学到了什么?

现在我们可以测试我们是否能够产生足够现实的新的欺诈数据来帮助我们检测实际的欺诈数据。我们可以把训练好的发生器取得最低的准确度分数,并用它来生成数据。对于我们的基本训练集,我们将使用70%的非欺诈数据(1992020例)和100例的欺诈数据(约20%的欺诈数据)。然后,我们会尝试添加不同数量的实际或生成的欺诈数据到这个培训集,最多344个案例(70%的欺诈数据)。对于测试集,我们将使用另外30%的非欺诈案例(85295例)和欺诈案例(148例)。我们可以尝试从未经训练的GAN和训练良好的GAN中添加生成的数据,以测试生成的数据是否比随机噪声好。从我们的测试看来,我们最好的体系结构是在训练步骤4800时的WCGAN,在那里它达到了70%的xgboost准确度(记住,理想情况下,精确度是50%)。所以我们将使用这种架构来生成新的欺诈数据。

我们可以在图7中看到,召回(在测试集中准确识别的实际欺诈样本的一小部分)并没有增加,因为我们使用更多生成的欺诈数据进行培训。xgboost分类器能够保留100个真实案例中用于识别欺诈的所有信息,即使从数十万个正常案例中挑选出来,也不会被其他生成的数据所迷惑。未经训练的WCGAN产生的数据不会有帮助,也不会令人惊讶。但是训练后的WCGAN生成的数据也无济于事。看来数据不够现实。我们可以在图7中看到,当实际的欺诈数据被用来补充训练集时,召回显着增加。如果WCGAN刚刚学会了复制训练样本,而没有任何创造性,就可以像我们看到的真实数据那样,实现更高的召回率。

使用生成式对抗网络从随机噪声中创建数据
使用生成式对抗网络从随机噪声中创建数据

超越无限

虽然我们无法产生足够现实的信用卡诈骗数据来帮助我们发现实际的欺诈行为,但是我们几乎没有用这些方法去琢磨。我们可以训练更长,更大的网络,并调整我们在本文中尝试的体系结构的参数。xgboost准确度和鉴别器损失的趋势表明更多的培训将有助于WGAN和WCGAN架构。另一个选择是重新审视我们执行的数据清理,或许设计一些新的变量,或者改变我们是否以及如何处理特征的偏斜。也许不同的欺诈数据分类方案将有所帮助。

我们也可以尝试其他的GAN架构。该DRAGAN有表明它火车更快,更稳定地比瓦瑟斯坦甘斯的理论和实验依据。我们可以整合利用半监督学习的方法,这些方法已经显示出从有限的训练集中学习的希望(参见“ 改进的GAN训练技术 ”)。我们可以尝试一种架构,为我们提供人类可以理解的模型,所以我们可以更好地理解数据的结构(参见InfoGAN)。

我们也应该关注这个领域的新发展,最后但也是最重要的是,我们可以在这个快速发展的领域创造自己的创新。

你可以在这个GitHub仓库中找到这篇文章的所有相关代码。

了解基础知识

什么是GAN?

GAN是一种机器学习算法,其中一个神经网络产生数据而另一个神经网络确定输出是否真实。两个网络相互竞争,以提高生成的数据的真实性。

关于作者 CODY NASH 拥有5年以上开发医学基因测试的经验,包括测试设计和验证,设备选择,SOP生成和监管评估。他实施了多种测试方法,包括NGS,微阵列和定量PCR。他还从事Python,R,Perl和Excel开发的分析和管道工作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
  • 在你开始之前
  • 为什么选择GAN?
  • 基础
  • 看看信用卡诈骗数据
  • 用GAN生成新的信用卡数据
  • 我们学到了什么?
  • 超越无限
  • 了解基础知识
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档