嗨,大家好!
像许多追随AI进展的人一样,我无法忽略生成建模的最新进展,尤其是图像生成中生成对抗网络(GAN)的巨大成功。看看这些样本:它们与真实照片几乎没有区别!
Samples from BigGAN: https://openreview.net/pdf?id=B1xsqj09Fm
从2014年到2018年,面部生成的进展也非常显着:
我对这些结果感到非常兴奋,但我内心的怀疑论者总是怀疑它们是否真的有用且广泛适用。我已经在我的Facebook笔记中打开了这个问题:
基本上我“抱怨”,凭借生成模型的所有功能,我们并没有真正将它们用于比高分辨率面孔或汉堡代更实用的东西。当然,有些企业可以直接基于图像生成或风格转移(如游戏行业中的角色或关卡生成,从真实照片到动漫头像的风格转换),但我一直在寻找更多GAN和其他生成领域模型可以应用。我还想记住,通过生成模型,我们不仅可以生成图像,还可以生成文本,声音,声音,音乐,结构化数据,如游戏关卡或药物分子,还有令人惊叹的博文与其他类似应用程序一样,但在这里我们将以合成不是主要目标的示例来限制我们。
使用RNN生成游戏级别
在本文中,我将介绍7个替代用例。其中一些我已经亲自工作并且可以确认它们的用处,其他一些正在研究中,但这并不意味着它们不值得尝试。所有这些使用生成模型不一定用于创建的例子都可以应用于不同的领域和不同的数据,因为我们的主要目标不是生成一些现实的东西,而是利用神经网络的内在知识来完成新任务。
1.数据增加
也许最明显的应用可以是训练模型以从我们的数据生成新样本以增强我们的数据集。我们如何检查这种增强是否真的有帮助呢?那么,有两个主要策略:我们可以在“假”数据上训练我们的模型,并检查它在真实样本上的表现。相反:我们在实际数据上训练我们的模型来做一些分类任务,并且只有在检查它对生成的数据的执行情况之后(GAN粉丝可以在这里识别初始分数)。如果它在两种情况下都能正常工作 - 您可以随意将生成模型中的样本添加到您的实际数据中并再次重新训练 - 您应该期望获得性能。要使此方法更加强大和灵活,请检查应用程序#6。
NVIDIA展示了这种方法的惊人实例:他们使用GAN来增加具有不同疾病的医学脑CT图像的数据集,并且表明仅使用经典数据增强的分类性能产生78.6%的灵敏度和88.4%的特异性。通过添加合成数据增加,结果增加到85.7%的灵敏度和92.4%的特异性。
2.隐私保护
许多公司的数据可能是秘密的(如赚钱的财务数据),机密或敏感(包含患者诊断的医疗数据)。但有时我们需要与顾问或研究人员等第三方分享。如果我们只想分享关于我们的数据的一般概念,包括最重要的模式,对象的细节和形状,我们可以像前一段一样直接使用生成模型来抽样我们的数据示例以与其他人分享。这样我们就不会分享任何确切的机密数据,只是看起来完全像它的东西。
更困难的情况是我们想要秘密共享数据。当然,我们有不同的加密方案,如同态加密,但它们有已知的缺点,例如在10GB代码中隐藏1MB信息。2016年,谷歌开辟了一条关于使用GAN竞争框架加密问题的新研究路径,其中两个网络必须竞争创建代码并破解它:
但最好的一点不是获得的代码的效率或另一个领域的“AI”流行语。我们应该记住,通过神经网络获得的表示通常仍然包含有关输入数据的最有用的信息(其中一些甚至直接训练以获得像自动编码器那样的信息),并且从这个压缩数据我们仍然可以进行分类/回归/聚类或者我们想要什么。如果我们将“压缩”替换为“加密”,那么这个想法很明确:这是与第三方共享数据而不显示任何数据集的惊人方式。它比匿名甚至假样本生成强得多,可能是下一件大事(当然使用区块链,就像Numerai一样)
3.异常检测
变分自动编码器(VAE)或GAN等主要生成模型由两部分组成。VAE具有编码器和解码器,其中第一个基本上对分布进行建模并且从第二个重建。GAN由发生器和鉴别器组成,其中第一个模拟分布,第二个判断它是否接近训练数据。我们可以看到,它们在某种程度上非常相似 - 有建模和判断部分(在VAE中我们可以考虑重建为某种判断)。建模部分应该学习数据分布。如果我们将一些样本不是来自培训分发,那么判断部分将会发生什么?如果训练有素的GAN鉴别器会告诉我们0,并且VAE的重建误差将高于训练数据的平均值。它来了:我们的无监督异常探测器,易于训练和评估。如果我们想要的话,我们可以用一些像类统计距离的类固醇来喂它(Wasserstein GAN)。在本文中你可以找到例子甘用于异常检测和这里自动编码的。我还添加了自己的基于自动编码器的粗略草图,用于在Keras中编写的时间序列:
4.判别性建模
深度学习所做的一切都是将输入数据映射到某个空间,在这个空间中,通过SVM或逻辑回归等简单的数学模型可以更容易地分离或解释。生成模型也有自己的映射,让我们从VAE开始。Autoencoders将输入样本映射到一些有意义的潜在空间,基本上我们可以直接训练一些模型。它有意义吗?它是否与仅使用编码器层和训练模型直接进行分类有所不同?确实是。自动编码器的潜在空间是复杂的非线性降维,并且在变分自动编码器的情况下也是多变量分布,这可以比一些随机初始化更好地开始初始化训练判别模型。
GAN对于其他任务来说有点难度。它们被设计为从随机种子生成样本,并且不期望任何输入。但我们仍然可以至少以两种方式利用它们作为分类器。第一个已经研究过的,就是利用鉴别器将生成的样本分类到不同的类别,同时只是告诉它是真的还是假的。我们可以期望从获得的分类器更好地规则化(因为它已经看到不同类型的噪声和输入数据的扰动)并且具有用于异常值/异常的额外类:
https://towardsdatascience.com/semi-supervised-learning-with-gans-9f3cb128c5e
第二种是贝叶斯定理的不公平遗忘分类方法,其中我们基于p(x | c_k)(恰好是条件GAN所做的!)和先验p(x),p(c_k)来模拟p(c_k | x)。这里的主要问题是GAN真的学习数据分布吗?在最近的 一些研究中正在讨论它。
5.域适应
对我来说,这是最强大的之一。在实践中,我们几乎从未拥有相同的数据源来训练模型并在现实世界环境中运行它们。在计算机视觉中,不同的光线条件,相机设置或天气可以使甚至非常准确的模型无用。在NLP /语音分析中,俚语或重音会破坏您的模型在“语法正确”语言上训练的表现。在信号处理中,您很可能拥有完全不同的设备来捕获数据以训练模型和生产。但我们也注意到两种数据“类型”彼此非常相似。我们知道机器学习模型执行从一个条件到另一个条件的映射,保留主要内容,但更改细节。是的,我现在正在进行风格转移,但用于创作目的较少。
https://ml4a.github.io/ml4a/style_transfer/
例如,如果您正在处理应该在某种CCTV摄像机上工作的应用程序,但是您已经在高分辨率图像上训练了您的模型,那么您可以尝试使用GAN来对图像进行去噪处理并对其进行增强。我可以从信号处理领域提供更激进的例子:有很多与手机加速度计数据相关的数据集,描述了不同的人的活动。但是,如果您想在腕带上应用受过电话数据训练的模型,该怎么办?GAN可以尝试帮助您翻译不同类型的动作。一般来说,生成模型不是从噪声中进行生成,而是一些预定义的先验模型可以帮助您进行域适应,协方差转换以及与数据差异相关的其他问题。
6.数据处理
我们在前一段谈到了风格转移。我真正不喜欢的是它的映射函数适用于整个输入并改变它。如果我只想换一些照片的鼻子怎么办?或改变汽车的颜色?或者在不完全改变的情况下替换演讲中的某些单词?如果我们想要这样做,我们已经假设,我们的对象可以用一些有限的因素来描述,例如,脸是眼睛,鼻子,头发,嘴唇等的组合,这些因素有它们自己的属性(颜色) ,大小等)。如果我们可以将带有照片的像素映射到某些...我们可以调整这些因素并使鼻子更大或更小?有一些数学概念允许它:多样性假设和解开的表示。对我们来说好消息是,自动编码器,可能是
7.对抗训练
您可能不同意我添加关于攻击机器学习模型的段落,但它对生成模型(对抗性攻击算法确实非常简单)和对抗性算法(因为我们有一个模型与另一个模型竞争)做了一切。也许你熟悉对抗性例子的概念:模型输入中的小扰动(甚至可能是图像中的一个像素)导致完全错误的性能。有不同的方法来对抗它们,其中一个最基本的方法叫做对抗性训练:基本上是利用对抗性的例子来构建更准确的模型。
https://blog.openai.com/adversarial-example-research/
如果不深入细节,这意味着我们仍然拥有双人游戏:对抗模型(只是使得某些epsilon的输入扰动)需要最大化其影响力,并且存在需要最小化其损失的分类模型。看起来很像GAN,但出于不同的目的:使模型对对抗性攻击更稳定,并通过某种智能数据增强和正规化提高其性能。
小贴士
在本文中,我们已经看到了几个例子,说明GAN和其他一些生成模型如何用于生成漂亮的图像,旋律或短文本。当然,他们的主要长期目标是生成以正确情况为条件的真实世界对象,但今天我们可以利用他们的分布建模和学习有用的表示来改进我们当前的AI管道,保护我们的数据,发现异常或适应更多现实世界的案例。我希望你会发现它们很有用,并将适用于你的项目。敬请关注!