作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
科迪·纳什的头像

科迪纳什

作为一名数据科学家, Cody使用了包括Python和R在内的工具来探索和部署基因分析, 医疗保健和其他数据集.

专业知识

工作经验

25

Share

自从我发现生成对抗网络(GANs)以来,我就被它们迷住了. GAN是一种能够从头生成新数据的神经网络. 你可以给它一点随机噪声作为输入, 它还能生成逼真的卧室图像, or birds, 或者任何它被训练生成的东西.

所有科学家都同意的一点是,我们需要更多的数据.

GANs, 哪些可以用于在数据有限的情况下产生新数据, 能证明真的有用吗. 生成数据有时很困难、昂贵且耗时. 要有用, though, 新数据必须足够真实,以便我们从生成的数据中获得的任何见解仍然适用于真实数据. 如果你在训练猫捉老鼠, 你用的是假老鼠, 你最好确保假老鼠看起来真的像老鼠.

另一种思考方式是,gan正在发现数据中的结构,使它们能够生成真实的数据. 如果我们不能自己看到这个结构,或者不能用其他方法把它拉出来,这是很有用的.

生成对抗网络

在本文中,您将了解如何使用gan生成新数据. 为了保持本教程的真实性,我们将使用 信用卡欺诈检测数据集 从Kaggle.

在我的实验中, 我试着用这个数据集看看我是否能让GAN生成足够真实的数据来帮助我们检测欺诈案件. 这个数据集突出了有限的数据问题:在285,000个交易中,只有492个是欺诈. 492个欺诈案例对训练来说不是一个大数据集, 特别是当涉及到机器学习任务时,人们喜欢拥有大几个数量级的数据集. 虽然我的实验结果并不惊人, 在这个过程中,我确实学到了很多关于gan的知识,我很高兴与大家分享.

开始之前

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

Why GANs?

生成对抗网络(gan)是一种神经网络架构,它比以前的生成方法有了令人印象深刻的改进, such as 变分auto-encoders 或者受限玻尔兹曼机器. gan已经能够生成更真实的图像(例如.g., DCGAN),启用图像之间的样式转换(参见 here and here),从文字描述(StackGAN),并从较小的数据集中学习 semi-supervised学习. 由于这些成就,他们产生了很多 interest 在学术和商业领域.

脸书人工智能研究主管扬·勒昆甚至给他们打过电话 机器学习领域最激动人心的发展 在过去十年中.

最基本的

想想你是如何学习的. 你尝试一些东西,你会得到一些反馈. 你调整策略,再试一次.

反馈可能以批评、痛苦或利润的形式出现. 它可能来自于你自己对自己表现好坏的判断. Often, 最有用的反馈是来自他人的反馈, 因为它不仅仅是一个数字或感觉, 而是对你完成任务的能力进行明智的评估.

当计算机接受任务训练时, 人类通常以调整参数或算法的形式提供反馈. 当任务定义明确时,比如学习两个数字的乘法,这种方法就会很有效. 你可以很容易地准确地告诉计算机它是如何出错的.

更复杂的任务, 比如创造一个狗的形象, 提供反馈变得更加困难. 图像是否模糊,它看起来更像一只猫,或者它看起来像任何东西? 可以实现复杂的统计, 但是很难捕捉到使图像看起来真实的所有细节.

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

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

You can hear gan的发明者, 伊恩·格拉汉姆·古德费勒, 谈到在酒吧里关于这个话题的争论如何导致了一个狂热的编码之夜,最终产生了第一个GAN. 是的,他承认酒吧在他的 paper. 您可以从以下网站了解更多关于gan的信息 伊恩·格拉汉姆·古德费勒的博客 关于这个话题.

GAN示意图

在使用gan时存在许多挑战. 由于涉及的选择数量众多,训练单个神经网络可能很困难, 激活功能, 优化方法, 学习速率, 还有辍学率, 仅举几个例子.

gan将所有这些选择加倍,并增加了新的复杂性. 生成器和鉴别器都可能忘记他们之前在训练中使用的技巧. 这可能会导致这两个网络陷入一个稳定的解决方案循环,而这些解决方案不会随着时间的推移而改进. 一个网络可能会压倒另一个网络,以至于两者都无法再学习. Or, 生成器可能不会探索很多可能的解决方案空间, 只够找到现实的解决方案. 最后一种情况被称为模态塌缩.

模式崩溃是指生成器只学习了一小部分可能的真实模式. 例如, 如果任务是生成狗的图像, 生成器可以学习只创建小棕色狗的图像. 生成器将错过所有其他由其他大小或颜色的狗组成的模式.

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

人们已经注意到给数据添加标签——也就是, 把它分成几个类别, 几乎总能提高gan的性能. 而不是学习生成宠物的一般图像, 生成猫的图像应该更容易, dogs, fish, 和雪貂, 例如.

也许GAN发展中最重要的突破来自于改变鉴别器评估数据的方式, 让我们仔细看看.

在2014年gan的原始配方中由 古德费罗等人., 鉴别器对给定图像是真实的或生成的概率进行估计. 鉴别器将被提供一组由真实图像和生成图像组成的图像,它将为每一个输入生成一个估计. 鉴别器输出和实际标签之间的误差将通过交叉熵损失来测量. 交叉熵损失可以等同于Jensen-Shannon距离度量, 它在2017年初由 Arjovsky等人. 这个指标在某些情况下会失败,在其他情况下不会指向正确的方向. 这个小组表明,沃瑟斯坦距离度量(也被称为推土机或电磁距离)在很多情况下都有效,而且效果更好.

交叉熵损失衡量的是鉴别器识别真实图像和生成图像的准确度. 而Wasserstein度量则着眼于每个变量的分布(i.e., 每个颜色的每个像素)在真实和生成的图像, 并确定真实数据和生成数据的分布之间的距离. Wasserstein度量标准考察的是付出多少努力, 用质量乘以距离表示, 将生成的分布推到实际分布的形状, 因此它的别名是“推土距离”.“因为沃瑟斯坦的度量不再是评估图像是否真实, 而是批评生成的图像与真实图像相差甚远, 在Wasserstein体系结构中,“鉴别者”网络被称为“批评家”网络.

对于gan的更全面的探索, 在本文中, 我们将探索四种不同的架构:

  • GAN:原始的(“香草”)GAN
  • CGAN:原始GAN的条件版本,它使用类标签
  • WGAN: Wasserstein GAN(带梯度惩罚)
  • WCGAN: Wasserstein GAN的条件版本

但让我们先看一下我们的数据集.

信用卡诈骗数据分析

我们将与 信用卡欺诈检测数据集 从Kaggle.

该数据集包含约285,000个交易,其中只有492个是欺诈性的. 这些数据包括31个特征:“时间”、“金额”、“类别”和28个额外的匿名特征. 类特性是指示事务是否具有欺诈性的标签, 0表示正常,1表示欺诈. 所有数据都是数字和连续的(除了标签). 数据集没有缺失值. 数据集已经处于相当良好的状态, 但我会再打扫一下, 主要是将所有特征的均值调整为0,标准差调整为1. 我在笔记本上详细描述了我的清洁过程 here. 现在我只展示 最终结果:

功能与. 类图

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

同样,如果我们有更多的欺诈数据,我们可能能够更好地发现它. 也就是说,我们可以获得更高的召回率. 我们现在将尝试使用gan生成新的、真实的欺诈数据,以帮助我们检测实际的欺诈.

用gan生成新的信用卡数据

为了将各种GAN架构应用于此数据集,我将使用 GAN-Sandbox, 它使用Keras库和TensorFlow后端在Python中实现了许多流行的GAN架构. 我所有的结果都可以在Jupyter笔记本上找到 here. 所有必需的库都包含在Kaggle/Python Docker镜像中, 如果你需要一个简单的设置.

在GAN-Sandbox中建立了图像处理的实例. 生成器生成一个2D图像,每个像素有3个颜色通道, 鉴别器/评论家被配置为评估这些数据. 利用图像数据的空间结构,在网络层之间进行了卷积变换. 卷积层中的每个神经元只处理一小组输入和输出(e.g.(图像中相邻的像素)来学习空间关系. 我们的信用卡数据集在变量之间缺乏任何空间结构, 所以我把卷积网络转换成有密集连接层的网络. 密集连接层中的神经元连接到该层的每个输入和输出, 允许网络自己学习特征之间的关系. 我将对每个体系结构使用这种设置.

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

氮化镓的架构

我们将使用包含所有492个欺诈交易的训练数据集来训练各种gan. 我们可以向欺诈数据集添加类来促进条件GAN架构. 我在笔记本中探索了几种不同的聚类方法,并使用了KMeans分类,将欺诈数据分为两类.

我将训练每个GAN 5000轮,并在此过程中检查结果. 在图4中, 随着训练的进行,我们可以看到实际的欺诈数据和从不同GAN架构生成的欺诈数据. 我们可以看到实际的欺诈数据分为2个KMeans类, 用最好区分这两类的2个维度(特征V10和V17来自PCA转换的特征)绘制. 这两个gan不使用类信息, GAN和WGAN, 将它们生成的输出全部作为一个类吗. 条件结构CGAN和WCGAN按类显示其生成的数据. 在第0步,所有的 生成的数据显示 输入发电机的随机输入的正态分布.

GAN输出比较

我们可以看到,原始GAN架构开始学习实际数据的形状和范围, 然后就会趋向于一个小的分布. 这就是前面讨论过的模态坍缩. 生成器学习了一小部分鉴别器很难识别为假的数据. CGAN架构做得稍好一些, 展开并接近每一类欺诈数据的分布, 但随后模式崩溃就开始了, 如第5000步所示.

WGAN不会经历GAN和CGAN体系结构所表现出的模式崩溃. 即使没有班级信息, 它开始假设实际欺诈数据的非正态分布. WCGAN体系结构的执行类似,并且能够生成单独的数据类.

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

Accuracy

We can 请参阅xgboost精度 氮化镓生成的数据首先减少, 然后在训练1000步之后随着模式崩溃开始增加. 经过2000步后,CGAN架构获得了更真实的数据, 但是这个网络也开始崩溃了. WGAN和WCGAN体系结构可以更快地获得更真实的数据, 并在训练过程中不断学习. WCGAN与wggan相比似乎没有多少优势, 这表明这些创建的类可能对Wasserstein GAN架构没有用处.

有关WGAN体系结构的更多信息,请访问 here and here.

WGAN和WCGAN体系结构中的批评网络正在学习计算Wasserstein(土动器), EM)给定数据集与实际欺诈数据之间的距离. 理想情况下,对于实际欺诈数据的样本,它将测量接近于零的距离. 然而,评论家正在学习如何进行这种计算. 只要生成的数据比实际数据测量的距离大, 网络可以改善. 我们可以观察生成数据和真实数据的Wasserstein距离之间的差异在训练过程中是如何变化的. 如果它停滞不前,那么进一步的训练可能无济于事. 我们可以在图6中看到 似乎有进一步的改善 对于该数据集上的WGAN和WCGAN都有.

电磁距离估计

我们学到了什么??

现在我们可以测试我们是否能够生成足够真实的新的欺诈数据来帮助我们检测实际的欺诈数据. 我们可以使用获得最低准确率分数的训练有素的生成器来生成数据. 对于我们的基本训练集, 我们将使用70%的非欺诈数据(1999),020例)和100例欺诈数据(约占欺诈数据的20%). 然后,我们将尝试向这个训练集中添加不同数量的真实或生成的欺诈数据, 多达344个案例(占欺诈数据的70%). 对于测试集, 我们将使用另外30%的非欺诈案例(85,295宗)及148宗欺诈个案. 我们可以尝试将未经训练的GAN和经过最佳训练的GAN生成的数据相加,以测试生成的数据是否比随机噪声更好. 根据我们的测试, 看来我们最好的架构是训练步骤4800的WCGAN, 它实现了70%的xgboost精度(还记得吗, ideally, 准确率为50%). 所以我们将使用这个架构来生成新的欺诈数据.

我们可以在图7中看到,召回率(在测试集中准确识别的实际欺诈样本的比例)并没有随着我们使用更多生成的欺诈数据进行训练而增加. xgboost分类器能够保留用于从100个真实案例中识别欺诈的所有信息,并且不会被额外生成的数据所混淆, 即使是从成千上万的正常病例中挑选出来的. 毫无疑问,未经训练的WCGAN生成的数据既没有帮助也没有伤害. 但是从经过训练的WCGAN生成的数据也没有帮助. 看来这些数据不够真实. 我们可以从图7中看到,当使用实际欺诈数据来补充训练集时, 召回率显著增加. 如果WCGAN刚刚学会了复制训练样本, 完全没有创意, 它本可以达到更高的回忆率,因为我们 看看真实的数据.

附加数据的影响

走向无限和超越

虽然我们无法生成足够真实的信用卡欺诈数据来帮助我们检测实际的欺诈行为, 对于这些方法,我们仅仅触及了表面. 我们可以训练更长的时间, 拥有更大的网络, 并为本文中尝试的体系结构调优参数. xgboost精度和鉴别器损失的趋势表明,更多的训练将有助于WGAN和WCGAN体系结构. 另一种选择是重新访问我们执行的数据清理, 也许可以设计一些新的变量,或者改变我们处理特征偏度的方式. 也许不同的欺诈数据分类方案会有所帮助.

我们也可以尝试其他GAN架构. The DRAGAN 有理论和实验证据表明它比沃瑟斯坦gan训练得更快更稳定吗. 我们可以整合利用半监督学习的方法, 它们在从有限的训练集中学习方面显示出了希望(参见“改进的gan训练技术”). 我们可以尝试一种架构,为我们提供人类可以理解的模型, 因此,我们可能能够更好地理解数据的结构(参见 InfoGAN).

我们也应该留意这个领域的新发展, 最后但并非最不重要的一点, 我们可以在这个快速发展的领域进行自己的创新.

您可以在这里找到本文的所有相关代码 GitHub库.

了解基本知识

  • 什么是GAN?

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

聘请Toptal这方面的专家.
Hire Now
科迪·纳什的头像
科迪纳什

位于 布拉迪斯拉发,布拉迪斯拉发地区,斯洛伐克

成员自 2017年5月8日

作者简介

作为一名数据科学家, Cody使用了包括Python和R在内的工具来探索和部署基因分析, 医疗保健和其他数据集.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

专业知识

工作经验

25

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.