原作:George Seif
夏乙 安妮 编译整理
量子位 出品 | 公众号 QbitAI
AutoML和神经架构搜索(NAS),是深度学习领域的新一代王者。
这些方法能快糙猛地搞定机器学习任务,简单有效,高度符合当代科技公司核心价值观。
它们背后原理如何,怎样使用?
技术博客TowardDataScience有一篇文章,就全面介绍了关于AutoML和NAS你需要了解的一切。
要了解AutoML,还得从NAS说起。
在开发神经网络的过程中,架构工程事关重大,架构先天不足,再怎么训练也难以得到优秀的结果。
当然,提到架构,很多人会想到迁移学习:把ImageNet上训练的ResNet拿来,换个我需要的数据集再训练训练更新一下权重,不就好了嘛!
这种方法的确也可行,但是要想得到最好的效果,还是根据实际情况设计自己的网络架构比较靠谱。
设计神经网络架构,能称得上机器学习过程中门槛最高的一项任务了。想要设计出好架构,需要专业的知识技能,还要大量试错。
NAS就为了搞定这个费时费力的任务而生。
这种算法的目标,就是搜索出最好的神经网络架构。它的工作流程,通常从定义一组神经网络可能会用到的“建筑模块”开始。比如说Google Brain那篇NasNet论文,就为图像识别网络总结了这些常用模块:
其中包含了多种卷积和池化模块。
论文:Learning Transferable Architectures for Scalable Image Recognition
地址:https://arxiv.org/pdf/1707.07012.pdf
NAS算法用一个循环神经网络(RNN)作为控制器,从这些模块中挑选,然后将它们放在一起,来创造出某种端到端的架构。
这个架构,通常会呈现出和ResNet、DenseNet等最前沿网络架构一样的风格,但是内部模块的组合和配置有所区别。一个架构的好坏,往往就取决于选择的模块和在它们之间构建的连接。
接下来,就要训练这个新网络,让它收敛,得到在留出验证集上的准确率。这个准确率随后会用来通过策略梯度更新控制器,让控制器生成架构的水平越来越高。
过程如下图所示:
这个过程很直观了。简单来说,很有小朋友搭积木的风范:让一个算法挑出一些积木,然后把它们组装在一起,做成一个神经网络。训练、测试,根据这个结果来调整选积木的标准和组装的方式。
这个算法大获成功,NasNet论文展现出非常好的结果,有一部分原因是出于他们做出的限制和假设。
论文里训练、测试NAS算法发现的架构,都用了一个比现实情况小得多的数据集。当然,这是一种折衷的方法,要在ImageNet那么大的数据集上训练验证每一种搜索结果,实在是太耗费时间了。
所以,他们做出了一个假设:如果一个神经网络能在结构相似的小规模数据集上得到更好的成绩,那么它在更大更复杂的数据集上同样能表现得更好。
在深度学习领域,这个假设基本上是成立的。
上面还提到了一个限制,这指的是搜索空间其实很有限。他们设计NAS,就要用它来构建和当前最先进的架构风格非常类似的网络。
在图像识别领域,这就意味着用一组模块重复排列,逐步下采样,如下图所示:
这些模块也都是当前研究中常用的。NAS算法在其中所做的新工作,主要是给这些模块换个连接方式。
下面,就是它发现的ImageNet最佳神经网络架构:
这篇NASNet论文带动了行业内的一次进步,它为深度学习研究指出了一个全新方向。
但是,用450个GPU来训练,找到一个优秀的架构也需要训练3到4天。也就是说,对于除了Google之外的普通贫民用户们,这种方法还是门槛太高、效率太低。
NAS领域最新的研究,就都在想方设法让这个架构搜索的过程更高效。
2017年谷歌提出的渐进式神经架构搜索(PNAS),建议使用名叫“基于序列模型的优化(SMBO)”的策略,来取代NASNet里所用的强化学习。用SMBO策略时,我们不是随机抓起一个模块就试,而是按照复杂性递增的顺序来测试它们并搜索结构。
这并不会缩小搜索空间,但确实用更聪明的方法达到了类似的效果。SMBO基本上都是在讲:相比于一次尝试多件事情,不如从简单的做起,有需要时再去尝试复杂的办法。这种PANS方法比原始的NAS效率高5到8倍,也便宜了许多。
论文:Progressive Neural Architecture Search
地址:https://arxiv.org/pdf/1712.00559.pdf
高效神经架构搜索(ENAS),是谷歌打出的让传统架构搜索更高效的第二枪,这种方法很亲民,只要有GPU的普通从业者就能使用。作者假设NAS的计算瓶颈在于,需要把每个模型到收敛,但却只是为了衡量测试精确度,然后所有训练的权重都会丢弃掉。
论文:Efficient Neural Architecture Search via Parameter Sharing
地址:https://arxiv.org/pdf/1802.03268.pdf
因此,ENAS就要通过改进模型训练方式来提高效率。
在研究和实践中已经反复证明,迁移学习有助在短时间内实现高精确度。因为为相似任务训练的神经网络权重相似,迁移学习基本只是神经网络权重的转移。
ENAS算法强制将所有模型的权重共享,而非从零开始训练模型到收敛,我们在之前的模型中尝试过的模块都将使用这些学习过的权重。因此,每次训练新模型是都进行迁移学习,收敛速度也更快。
下面这张表格表现了ENAS的效率,而这只是用单个1080Ti的GPU训练半天的结果。
很多人将AutoML称为深度学习的新方式,认为它改变了整个系统。有了AutoML,我们就不再需要设计复杂的深度学习网络,只需运行一个预先设置好的NAS算法。
最近,Google提供的Cloud AutoML将这种理念发挥到了极致。只要你上传自己的数据,Google的NAS算法就会为你找到一个架构,用起来又快又简单。
AutoML的理念就是把深度学习里那些复杂的部分都拿出去,你只需要提供数据,随后就让AutoML在神经网络设计上尽情发挥吧。这样,深度学习就变得像插件一样方便,只要有数据,就能自动创建出由复杂神经网络驱动的决策功能。
△ 谷歌云的AutoML pipeline
不过,AutoML价格也并不算亲民,每小时收费20美元。此外,一旦你开始训练,则无法导出模型,并且得用谷歌提供的API在云上运行你的网络,这些限制看起来都不是很方便,
AutoKeras也是一个使用了ENAS算法的GitHub项目,可以使用pip安装。它是用Keras编写的,因此很容易控制和使用,甚至可以自己深入研究ENAS算法并尝试进行一些改动。
如果你喜欢用TensorFlow或者Pytorch,也有一些开源项目可用:
https://github.com/melodyguan/enas
https://github.com/carpedm20/ENAS-pytorch
总的来说,若你想使用AutoML,现在已经有很多不同的选择,这完全取决于你是否会使用你想要的算法,以及你对这件事的预算如何。
过去几年,在深度学习工作的自动化上,整个领域都在大步向前,让深度学习更贴近大众、更易用。
不过,进步的空间永远都有。
架构搜索已经越来越高效了,用ENAS,一个GPU一天就能找出一种新的网络架构。的确鹅妹子嘤,但是这个搜索空间依然非常有限,而且,现在NAS算法所用的基本结构和模块还是人工设计的,只是将组装的过程自动化了。
将来要想取得重大突破,在更广阔的搜索范围里搜索真正的新架构是一个重要方向。
如果这样的算法出现,甚至能为我们揭示庞大复杂深度神经网络中隐藏的秘密。
当然,要实现这样的搜索空间,需要设计出更高效的算法。
对比下图普通机器学习流程,是不是高效多了?!
实现过程有以下步骤:
数据预处理
特性选择
模型算法选择
调参
上线后模型的再优化
效果评估
最后,附上原文传送门:
https://towardsdatascience.com/the-end-of-open-ai-competitions-ff33c9c69846
今天谷歌推出 Cloud AutoML、旨在实现全民玩 AI 的消息又刷爆了所有科技媒体头条和所有人的朋友圈。凌晨时分,李飞飞连发三条推特,发布了谷歌最新 AI 产品——Cloud AutoML Vision,“无需精通机器学习,每个人都能用这款 AI 产品定制机器学习模型。”
AutoML Vision 是 Cloud AutoML 这个大项目推出的第一项服务,提供自定义图像识别系统自动开发服务。根据谷歌介绍,即使是没有机器学习专业知识的的小白,只需了解模型基本概念,就能借这项服务轻松搭建定制化的图像识别模型。 只需在系统中上传自己的标签数据,就能得到一个训练好的机器学习模型。整个过程,从导入数据到标记到模型训练,都可以通过拖放式界面完成。
除了图像识别,谷歌未来还计划将 AutoML 服务拓展到翻译、视频和自然语言处理等领域。
是不是超厉害!是不是棒棒哒!是不是觉得小白可以翻身吊打机器学习工程师了!等等,先别激动,这事确实挺棒的,但事情可能没有你想象的那么简单。
AI 前线注意到了谷歌官方博客中提到的 Cloud AutoML 背后的核心技术——迁移学习(Transfer Learning)。通过迁移学习,谷歌就能将已训练完成的模型(又叫预训练模型,Pre-trained models),转移到新的模型训练过程,从而用较少量数据训练出机器学习模型,而 Cloud AutoML Vision 借助的预训练模型,正是“又大又好”的图像数据集 ImageNet 和 CIFAR。此外,谷歌还通过 learning2learn 功能自动挑选适合的模型,搭配超参数调整技术(Hyperparameter tuning technologies)自动调整参数。
无独有偶,在去年的 NIPS 2016 讲座上,吴恩达也表示:“在监督学习之后,迁移学习将引领下一波机器学习技术商业化浪潮。”
那么,有了迁移学习作为核心技术,Cloud AutoML 会成为下一个机器学习大杀器吗?
AI 前线在知乎上刷到了这么一个问题“如何评价谷歌刚推出的 Cloud AutoML?”,回答者中大多都对微软表示心疼。其实早在 8 个月之前,微软就已经发布了几乎一样的服务(也不用写代码、不用调参数,会拖控件就能帮你训练深度学习模型)。
答主“grapeot”表示:“真是心疼微软 pr 部门。我作为一个软狗到今天才知道 custom vision 这个东西。google 那边发布会都没开,就发了俩 twitter 媒体就轰动了。高下立判,高下立判啊!”也有答主调侃谷歌是一家“超一流的广告公司”。
于是 AI 前线也就“谷歌的 Cloud AutoML 到底有多厉害?”等一系列问题咨询了几位业界技术专家,得到的答复颇有点耐人寻味。
来自 IBM 的专家告诉 AI 前线,这还是个新兴的领域,他不认为短期内会真正产生落地的影响力和实际效果。神经网络来训练神经网络发展时间不长,所以 Cloud AutoML 的效果还需要通过实践来进一步检验。
另一位不具名技术专家认为,Cloud AutoML 目前推出的第一项服务是针对 Vision 的,ImageNet 数据集够好够大,所以大多情况下确实能够迁移出不错的效果,而且视觉现在属于比较好做的领域了,如果是 NLP、CTR 这些领域,则要难很多。大家现在有点“谷歌爸爸做的肯定都是好的”的心理,不得不说谷歌 PR 能力确实厉害。 当然,通过迁移学习实现 AutoML 这件事情本身确实给了从业者很大的想象空间,可以打破数据孤岛,更低成本地解决更多问题,比如用电商的数据去做传统行业的推荐,或者一个新公司没有数据但可以用其他公司或行业数据来做事情。
谷歌介绍称 AutoML Vision 提供了简洁的图形化用户界面,只需导入数据和拖拽组件就能打造全新模型,更有媒体报道直接突出“无需写一行代码”,那么真的可以不用写代码吗?这位专家讳莫如深地告诉 AI 前线:“不写代码容易做,不写代码能做出好结果难呀。”
第四范式是一家致力于利用机器学习、迁移学习等人工智能技术进行大数据价值提取的公司,而第四范式的联合创始人、首席科学家杨强教授更是迁移学习领域的奠基人和开拓者,他发表论文 400 余篇,论文被引用超过三万次。
这次 Cloud AutoML 推出后,很多读者也对第四范式怎么看表示强烈关切。 因此,AI 前线也将问题抛给了第四范式先知平台架构师陈迪豪,他对与我们的问题做了十分详尽的解答,整理如下:
AI 前线:你觉得谷歌 Cloud AutoML 最大的亮点有哪些?
陈迪豪: Cloud AutoML 最大的亮点是把完整的机器学习工作流做成云端易用的产品,用户只需要在界面上拖拽样本数据就可以完成数据处理、特征抽取、模型训练等全流程,针对图像分类这个场景在易用性上做到了极致。
AI 前线:谷歌开发 Cloud AutoML 系统的技术难度有多大?
陈迪豪: 目前根据 Cloud AutoML 的介绍,开发一个针对图像分类的 Cloud AutoML 难度并不大,通过对已经训练好的 Inception 模型在新数据集上进行 finetune,可以得到一个效果不错的新模型,这部分在 TensorFlow 官方文档就有介绍,开发者甚至可以在本地开发出一个“命令行版本的 Cloud AutoML Vision”。当然 Google 在过往的论文也介绍过 Learning to learn 和自动构建神经网络等算法,这些算法对于样本规模和计算能力有更高的要求,目前在业界仍处于研究阶段。
AI 前线:Cloud AutoML 使用了迁移学习等技术,用户只要上传很少的标注数据就能生成自己的模型,倒是很方便,但新模型的效果能有多好?能不能从技术角度解释一下呢?
陈迪豪: 前面已经提到,CloudML AutoML 并没有公开生成模型的算法细节,可能是基于 finetune 对模型参数进行调优,或者是用 AutoML 论文的方法重新构建神经网络模型。目前看使用 finetune 可能性较大,以使用 TensorFlow 对 Inception 模型进行 finetune 为例,用户只需要提供非常少量的标注数据即可,首先加载官方在 ImageNet 数据集上训练完成后得到的模型参数,然后在新数据集上训练神经网络的最后一层,根据 Label 和预测值更新部分的参数,很快就可以得到一个准确率超过 90% 的图像分类模型。当然也不排除 Google 已经使用或者未来将使用 AutoML 论文的算法,使用用户提供的数据集和 ImageNet 等已经标记好的数据集进行重新训练模型,模型的参数就是构建神经网络结构的参数,模型的目标就是找到图像分类正确率最高的神经网络结构,从论文的结果看在数据量和计算能力足够的情况下,机器训练得到的模型与人类设计最顶尖的模型效果接近,如果应用到 Cloud AutoML 场景下效果也不会太差。
AI 前线:你认为 Cloud AutoML 会给人工智能未来的发展带来什么样的影响?
陈迪豪: Google 的 Cloud AutoML 只是 AutoML 的一种使用场景,在此之前包括微软、亚马逊、国内的第四范式等公司都已经有 AutoML 的实际场景了,Cloud AutoML Vision 只是解决了在图像分类领域更低门槛的建模场景而已,在其他 State of the art 的机器学习领域并没有大家预期的革新式影响。当然 Google Cloud AutoML 的推出迅速引起了国外内对于自动机器学习模型构建的关注,为 AutoML 的研究和落地提供了强力的背书,相信能推动这个领域在未来有更好的发展。
AI 前线:在你看来,Cloud AutoML 会不会帮谷歌在一众云端机器学习服务厂商(微软 Azure、AWS、IBM 等)中脱颖而出?
陈迪豪: 在我看来目前 Google Cloud AutoML 还不是一个通用场景的机器学习解决方案,并不能可能直接淘汰微软、亚马逊等云机器学习平台。当然我们非常期待 Google Cloud 和 Google Brain 部门在 AutoML 后续的工作。随着 AutoML 算法的成熟和通用化,未来会有更多低门槛、贴近用户的机器学习建模范式出来,对人工智能行业也是很大的利好。
AI 前线:你所在公司推出的机器学习工具目前推广情况如何?未来是否也会计划推出类似 Cloud AutoML 这样的服务?或者还有别的比较重要的发展方向?
陈迪豪: 我目前在第四范式担任先知平台架构师,在去年乌镇互联网大会上发布的先知 3.0 就已经集成了 AutoML 功能,通过自研的 FeatureGo 自动特征组合算法和开源的自动调参算法等可以实现从特征抽取、特征组合、模型训练、超参数调优到模型上线等全机器学习工作流。目前我们在推荐系统提供给用户的模型全部以 AutoML 算法生成的。在 TensorFlow 上训练模型实现 Learning to learn 也是我们的关注重点,除此之外像大规模的数据拼接、时序特征抽取、模型灰度发布、工作流可视化以及自学习闭环都是切实的业务痛点,我们从算法和产品维度致力于打造一个比 Google Cloud AutoML 更低门槛、并且更落地的机器学习平台,也欢迎与同行们多多交流。
以下内容节选编译自知名 AI 博主、爱尔兰国立大学 NLP 博士生 Sebastian Ruder 标题为“迁移学习:机器学习的下一个前线”博文:
在机器学习经典的监督学习场景中,如果我们打算为某个任务和 A 域训练一个模型,假设我们为相同的任务和域提供了标记好的数据。我们可以在图 1 中清楚地看到,对于我们的模型 A,训练和测试数据的任务和域是一样的。稍后,我们会给出一个任务和一个域的详细定义。现在,我们假设一个任务是我们的模型要执行的目标,比如,在图片中识别物体;一个域是我们的数据来源,比如,在旧金山咖啡店拍摄的图像。
图 1:机器学习中经典的监督学习的建立
现在,我们可以在这个数据集上训练模型 a,并期望它在相同任务和域的不可见数据上表现良好。在另一种情况下,当给定其他任务或域 B 的数据时,我们需要再次标记相同任务或域的数据,以便训练新的模型 B,这样我们就可以期望它在这些数据上表现良好。
当我们没有足够的标记数据为我们所关注的要训练的可靠模型的任务或域时,经典的监督式学习范式就会崩溃。
如果我们想要训练一个模型来检测夜间图像上的行人,我们可以应用一个已经在类似的领域进行过训练的模型,比如:在日间图像上用过的。 然而在实践中,由于模型继承了训练数据的偏差,并且不知道如何推广到新的领域,我们往往会经历性能的恶化或模型的崩溃。
如果我们想要训练一个模型来执行一个新的任务,比如检测骑自行车的人,我们甚至不能重用一个现有的模型,因为任务之间的标记是不同的。
迁移学习使我们能够利用已经存在的某些相关任务或域的标记数据来处理这些场景。 我们尝试把解决源域任务所获得的知识存储在源域中,并将其应用于我们感兴趣的问题,如图 2 所示。
图 2:迁移学习设置
在实践中,我们试图从源头转移尽可能多的知识到我们的目标任务或域中。这种知识的形式由数据决定:它可以涉及物体是如何组成的,以便我们更容易识别新物体;可以是关于人们用来表达自己观点的一般词汇等等。
前百度首席科学家、斯坦福大学教授吴恩达(Andrew Ng)曾在广受欢迎的 NIPS 2016 讲座中说过:在监督学习之后,迁移学习将会成为机器学习商业成功的下一个推动力。
图 3:Andrew Ng 在 NIPS 2016 讲解迁移学习
他特意在白板上画了一张图,我尽可能忠实地复制成下面的图 4(很抱歉,我没有标记坐标轴)。 据吴恩达介绍,迁移学习将成为机器学习在行业中取得成功的关键因素。
图 4:Andrew Ng 所介绍的在机器学习行业中取得成功的推动力
毋庸置疑,迄今为止机器学习在行业中的使用和成功主要是由监督学习推动的。 在深度学习的进步、功能更强大的计算工具和大型标记数据集的推动下,监督学习已经重新激发了人们对人工智能的兴趣、融资和收购的浪潮,特别是近几年来,我们已经看到机器学习的应用成为我们日常生活的一部分。 如果我们无视那些反对者和另一个 AI 冬季的预兆,而是相信 Andrew Ng 的预见,这样的成功可能会继续下去。
然而,不太清楚的是,为什么尽管迁移学习已经存在了几十年,但是目前在行业上的应用还是很少,未来是否会看到 Andrew Ng 所预测的爆炸性增长呢?甚至,与其他机器学习领域,如无监督学习和强化学习相比,迁移学习目前受到的相对较少的关注,而那些领域已经越来越受到关注:无监督学习——从图 5 中可以看出,根据 Yann LeCun 的观点,它是寻求通用 AI 的关键因素—— 已经看到了兴趣的复苏,特别受到了生成敌对网络的推动。
反过来,由谷歌 DeepMind 领头的强化学习,已经引领了 AlphaGo 的成功,并在现实世界中取得了成功,例如将谷歌的数据中心的冷却成本降低了 40%。这两个领域虽然有希望,但在可预见的未来可能只会产生相对较小的商业影响,而且大部分仍停留在尖端研究论文的范围内,因为它们仍然面临许多挑战。
图 5:在 Yann LeCun 所展示的蛋糕里,显然没有迁移学习。
接下来,我们来看看是什么让迁移学习有所不同。在我们看来,它们激发了 Andrew Ng 的预见,并概述了为什么现在是关注迁移学习的时候。
目前在行业中对机器学习的应用呈现二元化:
一方面,在过去的几年里,我们已经获得了训练越来越精确的模型的能力。我们现在处于多任务阶段,最先进的模型已经达到了这样一个水平,它们的性能是如此的好以至于对用户来说,其不再是阻碍。有多好呢?在 ImageNet 上最新的残差网络(residual networks)实现了在识别对象时超过人类的性能;谷歌的智能回复能够自动处理 10% 的移动端回复任务;语音识别错误率不断下降,比打字输入更准确;我们可以像皮肤科医生一样自动识别皮肤癌;谷歌的 NMT 系统用于 10 多种翻译语言对的产生;百度能实时生成逼真的语音;这样的事情不胜枚举。这种成熟程度能够将这些模型大规模部署到数百万用户,并且已经被广泛采用。
另一方面,这些成功的模型非常需要数据,并且依靠大量的标记数据来实现其性能。 对于某些任务和领域,这些可用数据是多年来一直苦心经营的。 在少数情况下,它是公开的,比如, ImageNet,但是大量的标记数据通常是专有的或昂贵的,比如许多语音或 MT 数据集,因为是它们形成了竞争优势。
与此同时,在不熟悉的环境中应用机器学习模式时,模型面临着以前从未见过、不知如何处理的诸多情况;每个客户和每个用户都有自己的偏好,拥有或产生与用于训练的数据不同的数据;一个模型被要求执行许多与被训练的任务相关但不相同的任务。在所有这些情况下,我们目前最先进的模型,尽管在它们所接受的任务和域上表现出跟人类一样甚至是超人类的表现,但在性能方面却会遭受重大损失,甚至完全崩溃。
迁移学习可以帮助我们处理这些新场景,并且这对于哪些标记数据稀缺的任务领域,要使机器学习能够规模化应用,迁移学习是必不可少的。到目前为止,我们虽然已经将模型应用到了不少极具影响力的任务领域,但这些大多是数据“低树果实”,为了长远发展,我们必须学会将获得的知识转移到新的任务领域。
我认为迁移学习在将来会更多地应用于从模拟中学习,这也让我感到很兴奋。对于许多依靠硬件进行交互的机器学习应用程序来说,从现实世界中收集数据和训练模型不是昂贵、耗时,就是太危险。因此,以其他风险较小的方式收集数据是比较明智的。
在这方面,模拟是首选工具,并已在实践中被用于许多先进的机器学习系统。从模拟中学习,将获得的知识应用到实践是迁移学习的其中一个应用场景。因为源域和目标域之间的特征空间是相同的(通常两者都依赖于像素),但是模拟和现实场景中的边界概率分布不同,尽管随着模拟更接近现实,这种差异逐渐减小,但模拟场景中的物体和来源看起来仍然不同。同时,由于难以完全模拟现实世界中的所有反应,模拟与现实世界中的条件概率分布也不尽相同,例如,物理引擎不能完全模仿现实世界中物体的复杂交互。
图 6: 谷歌无人驾驶汽车(来源: 谷歌研究院博客)
然而,从模拟中学习也有好处,即可以更轻松地收集数据,这是因为模拟学习可以并行多个学习案例,在轻松绑定和分析物体的同时进行快速训练。因此,对于需要与现实世界进行交互的大型机器学习项目,它可以作为首选,比如自动驾驶汽车(参见图 6)。据谷歌的自动驾驶汽车技术负责人 Zhaoyin Jia 介绍,“如果你真的想做一辆自动驾驶汽车,模拟是必不可少的”。Udacity 已经开源了其用于训练自动驾驶汽车工程师的纳米级模拟器,如图 7 所示。OpenAI 的 Universe 也有可能会使用 GTA5 或其他视频游戏来训练自动驾驶汽车。
图 7:Udacity 的自动驾驶汽车模拟器(来源:TechCrunch)
另一个模拟学习将发生关键作用的应用领域是机器人技术:在一个真正的机器人上训练模型速度太慢且成本很高。从模拟中学习,并将知识迁移到实践中的机器人可以缓解这个问题,并且最近获得了很大的关注 [8]。图 8 是在现实世界和模拟场景中的数据操作任务示例。
图 8:机器人和模拟图像(来源:Rusu 等,2016)
最后,从模拟中学习是通向通用 AI 不可或缺的部分。训练一个代理直接在现实世界中实现通用人工智能代价太大,并且在初期不必要的复杂性会妨碍学习的效果。相反地,基于模拟环境进行学习会事半功倍,如图 9 中可见的 CommAI-env。
图 9:Facebook 人工智能研究院的 CommAI-env(来源:Mikolov 等, 2015)
虽然从模拟中学习是领域适应的一个特殊案例,我们还是有必要列出一些其他适应领域的例子。
在计算机视觉方向,领域适应是一个常见的需求,因为标签上的信息很容易获取,而我们真正关心的数据是不同的,无论是识别在图 10 中所示的自行车,还是在陌生环境中的其他物体。即使训练和测试数据看起来并无差异,但其中仍然可能包含对人类来说难以察觉,并会导致模型产生过度拟合的细微偏差。
图 10:不同的视觉领域(来源:Sun 等,2016)
另一个常见的领域适应场景,是适应不同的文本类型:标准的 NLP 工具,例如词类标注器或解析器,通常会使用诸如《华尔街日报》等自古以来就用于评估模型的新闻数据进行训练。然而,使用新闻数据训练的模型难以适应更新颖的文本形式,如来自社交媒体的消息。
图 11:不同的文本类型
即使在比如产品评论这样的一个领域,人们也会用不同的词语来表达同样的概念。因此,使用一种类型评论的文本的训练模式应该能够区分该领域的专业词汇和普通人使用的词汇,以免被领域的转换所迷惑。
图 12:不同的主题
最后,上述问题只是涉及到一般的文本或图像类型,但是如果将之扩大到与个人或用户群体有关的其他领域,问题就会被放大:比如语音自动识别(ASR)的情况。 语音有望成为下一个大有可为的领域,预计到 2020 年,语音搜索的占比将达 50%。传统上,大多数 ASR 系统在 Swithboard 数据集上进行评估,该数据集由 500 个说话者构成。标准口音还好,但系统很难理解移民、有口音、有言语障碍的人或儿童的语音。现在我们比以往任何时候都需要能够满足个人用户和少数群体需求的系统,以确保每个人的声音都能被理解。
图 13:不同的口音
最后,在我看来,迁移学习的另一杀手级应用,是将从一种语言学习中获得知识应用到另一种语言,我已经写过关于跨语言嵌入模型的文章。可靠的跨语言适应方法将使我们能够利用已拥有的大量英文标签数据,并将其应用于任何语言,尤其是不常用和数据缺乏资源的语言。鉴于目前的最新技术水平,这似乎仍然是个乌托邦,但 zero-shot 翻译等取得的最新进展预示着我们有望在这方面更进一步。
总而言之,迁移学习为我们提供了很多激动人心的研究方向,特别是许多需要模型的应用程序,这些模型可以将知识转化为新的任务并适应新的领域。
谷歌的这场 Cloud AutoML 大秀,不论有多少 PR 的成分,只要能够推动迁移学习这一技术方向的发展,就不失为一件好事。
2017 年微软 Build 开发者大会上,微软高级项目经理 Cornelia Carapcea 展示了一项技术:
用户创建的自定义视觉 API 模型只需要一个训练数据样例(只有几十个摄影样本),而 Custom Vision 则可以完成其余的工作。
一旦创建了这个模型 (只需几分钟),用户就可以通过安装在微软服务器上的 REST API 访问。Carapcea 说它可以用于识别食物和地标,甚至是应用在零售环境中。
Custom Vision 可以选择最可能为模型增加最大增益的图像,允许用户手工标记图像,然后继续改进总体的准确性和可靠性。
微软亚洲研究院副院长、人工智能系统联合中心负责人周礼栋博士在接受 AI 前线记者采访时告诉我们:Microsoft Custom Vision 和 Google Cloud AutoML 都是针对视觉识别领域里的 AutoML(自动学习)的一个应用,都非常的简单易用。通过把复杂的模型选取、参数调优的过程掩藏在了产品的背后,Microsoft Custom Vision 可以给用户提供一个非常简单易用的体验,使非专业人士也能零门槛的定制自己的模型。
同时,Microsoft Custom Vision 也是微软认知服务 (Cognitive Services) 中的一部分,微软推出的认知服务包括视觉、语音、语言、知识和搜索等五大类别的二十多个 API,如人脸识别、情绪识别、语音识别、拼写检查、语言理解等等。微软认知服务的侧重点是为用户提供一个通用的服务,用户可以直接调用现成的智能 API 来开发出更智能、更有吸引力的产品,而不需要花费大量时间来自己训练模型。
而对于最近刚刚兴起的 AutoML 技术,周博士也发表了一些自己的看法:
近年来,“AutoML(自动学习)”已经成为了一个研究热点。通过自动化的方式,机器试图学习到最优的学习策略,从而避免机器学习从业者低效的手动调整。经典的 AutoML 方法包括用于超参数调节的贝叶斯优化(Bayesian Optimization),以及用于优化器和网络结构调整的元学习技术(Meta learning/Learning-to-Learn)。除了在学术界引起了广泛研究兴趣,AutoML 在工业界也已经得到了实际应用,例如此前提到的微软 Azure 提供的自定义影像(Custom Vision)服务,它能够方便云计算用户自动训练用于计算机视觉的机器学习模型。
AutoML 让用户在没有专业知识的情况下使用机器学习的门槛大大地降低,甚至可谓是零门槛。在没有机器学习专家指导的情况下,用户通过 AutoML 就能在一定情况下得到高质量的模型,这使机器学习的行业应用更加容易可行。周博士说,微软亚洲研究院希望把这类技术的使用和研究更加普及化,在分享会上,我们也得知微软正在着力打造一款用于深度学习的项目,名曰:深度学习智能探索 (Neural Network Intelligence),简称叫 NNI。
据介绍,开发 NNI 工具包的目的是为用户提供智能化、自动化的深度学习工具包,可以帮助用户或者开发者自动地进行数据分析,自动的帮他们搜索模型,进行参数调试和性能分析,通过这样自动迭代的准备过程,用户可以节省更多的时间,将精力放在探索更有深度的机器学习的道路上。
周礼栋博士告诉我们,NNI 集成了 AutoML 算法,是一个支持不同操作系统的,在本地也可以云端运行的工具包。它特别适合有一定人工智能基础的科研人员更加有针对性、精准的选取模型。微软为此制定了全新的语言,使得定义和描述搜索空间只需几行代码,所有的底层通信等复杂问题都被封装起来,对使用者完全透明。NNI 着重解决了一系列支持 AutoML 的系统问题,以开放的方式有效加速 AutoML 算法研究者在这一领域的创新。为了鼓励更多人工智能的科研工作者一起加强这项研究,NNI 计划将在近期开源。
不过,在分享会之后,我们发现:微软对降低人工智能门槛,提升深度学习普及化的想法可不止于此,AutoML 技术只是其中的一环,微软要做的是智能系统。
另辟蹊径,微软要打造智能系统
在谷歌的 Cloud AutoML 发布之后,有不少网友为微软惋惜:其实微软早就有这样的技术,但是并没有大肆宣传,导致江湖上又是一片:谷歌牛 X 的呼声。
要是这么想,可就有些 naive 了,因为微软其实在准备一个大招——智能系统。
周博士表示,AutoML 是人工智能系统的一部分,它也对人工智能系统提出了包括资源管理、任务分配等一系列挑战。简单的说:灵活可扩展的好的人工智能系统能够更好的支撑 AutoML,使其更好更快的生成结果。而好的 AutoML 则能够使人工智能系统更加完备,更方便使用。
智能时代,系统为先
周礼栋博士首先告诉我们:人工智能如果没有系统的话,就只是一个海市蜃楼——看上去很美,但一点都不真实。
他认为,系统就是把复杂的东西变得有序易用。而在计算机领域,系统的重要性是不言而喻的, 在整个计算机发展的过程当中,我们感受到的每一次大的突破,背后实际上都有很多计算机系统的理论和设计作为推动力。
周博士为我们分析了每一个时代下,系统的重要性:
互联网时代,有很多非常新的系统出现在我们的生活中,其中最有代表性的一个系统就是搜索引擎。大家很多人都用搜索引擎搜索网上的信息,而搜索引擎背后就有很多系统领域的技术、理论。其中一个典型的系统理论就是分布式系统理论。
在大数据或者说大家都熟知的云计算时代,云计算的系统就是非常典型的系统。现在我们看到很多公司都在提供云计算的服务。这里就用到了一些新的计算机系统的技术,其中有虚拟机技术、容错技术等,因为这些技术才使得这样的服务和系统成为了可能。
如今的人工智能时代,我们看到越来越多深度学习在计算机视觉、语音识别、自然语言等领域都取得了突破,这就对系统产生了更大的需求。我们研究开发了很多大规模深度学习的平台,这其中也依托了最近在系统方面的进展和研究成果,包括怎么利用异构的硬件高效地执行这些深度学习的任务,也包括怎么进行高性能的并行计算。这些使得深度学习,特别是非常有深度的模型的处理成为可能。
周博士说:“我们还可以设想,未来量子计算将成为主流的技术。但是我们也可以看到,现在在系统方面的发展还没有到能够让它付诸实用的阶段。虽然理论上很成熟了,但若要变成现实,还需要在系统方面进行很多创新、研究、实践,才能促成这一步大的变革。”
深度学习的瓶颈
在演讲中,周博士提到了深度学习目前已经取得进一步的发展,但还是会遇到一些瓶颈,而且很多瓶颈还是产生在系统方面。他说:“现在,即便我们有很多不同的硬件加速,有很多不同的模型,我们能怎么解决把这个模型非常高效地映射到相应的硬件上,并且有不同定制的优化呢?整个深度学习领域里面的工作目前其实都是人工去做的,而不是用系统化的方法去完成的。”
产业智能官:见下图
此外,进行深度学习模型训练的时候,开发者们一般使用 GPU 来进行加速,当训练样本只有百万级别的时候,单卡 GPU 通常就能满足我们的需求,但是当训练样本量达到上千万、上亿级别之后,单卡训练的耗时会很长,所以这个时候通常需要采用多机多卡进行加速。在这种情况或者一些更复杂的情况下,我们就需要很多系统方面的设计和考虑。人工智能的实践者不用再担心是不是需要自己架一个 GPU 集群才可以做人工智能的事情。因为这是系统应该完成的事情,周博士说:“我们应该把这些事情都做了,那么人工智能方面的研究者就能被解放出来专注研究人工智能的问题了。”
人工智能领域的门槛非常高,所以人工智能从业者的身价也非常高。这也是因为系统层面的很多工作还不够深入。周博士表示,他们推进自己的工作,就希望能够把这个门槛降低,真正做到“人工智能普及化”。这将是非常可行、且必行的下一步工作。
微软的智能系统
周博士认为:系统最关键的创新,就是把抽象实现的非常完美。用户其实“看不到”系统,大家谈起来,似乎看到的都是视觉等上层的突破,永远看不到下面底层的进步。所以我们一直说,系统的最高境界就是完全不可见的,是隐形的。
他告诉我们:微软一直认为,未来,整个世界就是一台计算机。现实世界也好,虚拟世界也罢,所有这些部分都将连接在一起。
周博士说:“微软亚洲研究院对系统这个领域的理解是:首先,系统是一个跨领域、有广度的研究,我们需要对从底层的硬件一直到上层的应用,包括人工智能这样新的应用,都有非常广博的了解,这样才能够设计出适合应用的系统。其次,编译器原理、编译优化、数据库系统这些领域,我们也都需要有深入了解,这样才能够通过合理的系统设计充分利用硬件的能力,也就是说,系统方面的研究也一定要有深度,这也是非常重要的。”
据介绍,微软亚洲研究院系统领域的研究成果在现实的商业场景中已经有了广泛的应用,并产生了实际的商业效能,例如:
GraM 分布式并行图处理引擎,能够在内存里面通过集群处理具有超过 10 亿条边的图;
Apollo 大数据任务调度系统,可以直接部署在 10 万台机器 上,每天能够调度 几百万条的任务,用来支持搜索引擎、广告等部门的日常业务;
StreamScope 分布式流数据处理平台,能够实时处理数十亿的广告信息;
KV-Direct Key/Value 系统,可处理每秒 12 亿次以上的操作,相比同类最前沿的研究系统有至少一个数量级的提升。虽然这个系统还没有得到部署,但它是微软目前研究的最前沿的一个代表,发表在计算机系统的顶级会议 SOSP 2017。这些只是冰山一角,据说微软在智能系统方面的探索远不止于此,智能时代的微软似乎拥有着更多的可能性。
智能系统的未来
最后,周博士表达了他个人对智能系统发展趋势的一些看法:
首先,现在很多深度学习的框架,将来都将互通统一。其实数据库就是一个很好的例子——很久以前有各种各样的数据库,但最后大家发明了所谓的以 Relational algebra(关系代数)为基础的数据库,让所有数据库模型都成为一种统一的模型。在人工智能方面,这种互通的统一性,从系统角度来说也是肯定会发生的一件事情。
其次,系统的能力会越来越强,会有无界的资源。整个世界就是一台计算机,所以我们最后希望能够达到的目标就是,在资源无界的环境里,你所使用的资源,无论是来自于计算中心还是来自于自己的计算机,甚至是来自于一个不知道是什么的地方,都会被系统很好地隐藏起来。你只要把事情做好,而不用关心资源是从哪里来的。
最后,也是需要再强调的一点,在系统研究里最关键的创新在于要提出一种更简约的抽象,并且用全新的工具和平台来支持这个抽象,从而让大家各方面的工作效率得到提升。
结 尾
不论是 AutoML 技术平台,还是智能系统,科技公司为了推进人工智能普及化、降低开发门槛都在不断地努力和尝试,相信普通用户很快就能享受到这些努力的成果。就像周礼栋博士所说:系统的最高境界是无形的,我们私自将这句话的范围扩大了一些:技术的最高境界是无形的,好的技术就是这样在潜移默化中改变了我们的生活,虽然我们没有感觉,但是它的确发生了。
在开始之前,先来看看 Matthew Mayo 关于 AutoML 的一段话:
AutoML 不是自动化数据科学。虽然毫无疑问会有所重叠,但机器学习只是数据科学工具包中的众多工具之一,而且它不是所有数据科学任务不可或缺的因素。例如,在关于预测的数据科学任务中,机器学习将是一个有用的部分;但是,机器学习可能根本不会参与到描述性分析任务中去。
那么,什么是自动化机器学习呢?简单来说就是一种自动化(https://www.automl.org/automl/ )任务的方法:
预处理并清理数据。
选择并构建适当的功能。
选择合适的模型系列。
优化模型超参数。
后处理机器学习模型。
批判性地分析所获得的结果。
现在我们已经明确了什么是 AutoML,那什么是 Keras 呢?
Keras 是一个用 Python 编写的高级神经网络 API,能够在 TensorFlow、CNTK 或 Theano 之上运行。它的意义在于可以实现快速实验。而能够以最小的延迟把想法变成结果是顺利进行研究的关键。
FrançoisChollet 创建的这个工具,是让大众轻松学习深度学习的第一步。
虽然 TensorFlow 的 Python API 并不那么难,但是对很多人来说用 Keras 入门深度学习更加容易。值得注意的是,Keras 现在已经正式成为 Tensorflow 的一部分了:
https://www.tensorflow.org/api_docs/python/tf/contrib/keras
好了,现在我们知道什么是 Keras 和 AutoML,接下来是把它们结合起来。
AutoKeras 是一个用于自动化机器学习的开源软件库,提供自动搜索深度学习模型的架构和超参数的功能。
凭什么说 AutoKeras 比 AutoML 更好?
在机器学习自动化方面,谷歌的 AutoML 无疑地位稳固。AutoML 基于谷歌最新的图像识别技术神经架构搜索( Neural Architecture Search ,NAS)。NAS 是一种算法,会根据特定数据集搜索最佳神经网络架构,以在该数据集上执行特定任务。AutoML 是一套机器学习工具,可以轻松训练高性能深度网络,而无需用户掌握深度学习或 AI 知识,所有你需要的只是标记数据!
AutoML 完全改变了整个机器学习格局,因为许多应用程序不再需要专业技能和知识了,许多公司也只需要深度网络来完成简单的任务,如图像分类。这样,他们就不需要雇用 5 名机器学习博士来做这件事,而只需要能够处理和组织数据的人就行。
但是,AutoML 不是一剂万能的良方,不能让所有公司和个人轻轻松松做 AI,因为它是收费的。据悉,使用 Google 的 AutoML 进行计算机视觉,每小时需要花费 20 美元,在付费试用之前,我们不能确定结果的精确度会比自己手动设计的网络更好。但是,现在的 AI 社区开源已经成为潮流和趋势,这正是 AutoKeras 略胜 AutoML 一筹的地方——开源。
另一方面,AutoKeras 基于非常易于使用的深度学习数据库 Keras,使用 ENAS 的方法。ENAS 是 NAS 的最新版本,因此让 AutoKeras 具有高效、安装简单、参数可调、易修改等特点。
在为消费级产品构建机器学习时,数据科学家通常会关注一些易于理解的用例和数据集。然而,企业的数据和用例存在多样性,因此为企业产品构建机器学习成为一种完全不同的挑战。在 Salesforce,我们的客户希望能够预测一系列结果——从客户流失、销售预测和潜在客户转换,到电子邮件营销、网购、设备故障、延迟付款等等。对于企业客户而言,保护好数据不让它们与其他组织或竞争对手共享是至关重要的。这意味着我们必须为特定的用户需求构建特定的机器学习模型。我们能够构建全局模型,但这样做是毫无意义的,因为每个客户的数据都是唯一的,具有不同的模式、不同的形状和不同的业务流程引入的不同偏差。为了让机器学习能够真正为我们的客户带来价值,我们必须构建和部署数千个机器学习模型,它们都是针对每个客户的不同用例并基于每个客户自己的数据训练得出的。
要在不聘请大量数据科学家的情况下实现这一目标,唯一方法就是进行自动化。如今,大多数自动化 ML 解决方案要么只专注于整个机器学习工作流程的一小部分,要么专为图像、语音和语言的同质非结构化数据而构建。但我们需要一种能够为大规模异构结构化数据快速生成模型的解决方案。在词典中,Transmogrification 的意思是“以令人惊讶或神奇的方式进行转换”,这也正是 TransmogrifAI 为 Salesforce 所做的事情——让数据科学团队能够将客户数据转换为有意义的预测。如今,整个平台已经部署了数千个特定的机器学习模型,每天为超过 30 亿次预测提供支持。
在本文中,我们将介绍 TransmogrifAI 的工作流程,讨论其背后的设计决策。
TransmogrifAI 工作流程
构建机器学习模型通常涉及大量的研发工作。数据准备、特征工程和模型训练是一个迭代的过程,要对它们进行成熟的自动化,需要数周甚至数月的时间。TransmogrifAI 是一个基于 Scala 和 SparkML 构建的库,就是为了完成这项任务应运而生的。数据科学家只需几行代码就可以自动完成数据清理、特征工程和模型选择,从而获得一个高性能的模型,并在后续进一步的探索和迭代。
TransmogrifAI 封装了机器学习过程的五个主要组件:
机器学习管道的第一步通常是进行数据准备。数据科学家收集所有相关数据,并扁平化、连接和聚合不同的数据源,提取可用于预测的原始信号。然后,提取的信号被填充到一种灵活的数据结构中,通常称为 DataFrame。虽然这些数据结构简单易用,但它们不能让数据科学家免受下游错误的影响,例如对数据类型或空值的错误假设。因此,数据科学家可能通宵达旦运行一个管道却以失败告终,因为她试图将两个字符串相乘。
在 TransmogrifAI 中,我们允许用户为他们的数据指定模式,并自动将原始预测变量和响应信号提取为“特征”,以此来解决这个问题。特征是强类型的,TransmogrifAI 还支持丰富且可扩展的特征类型层次结构。这种层次结构超越了原始类型,支持更细化的类型,例如地理位置、电话号码、邮政编码等。除了允许用户指定类型之外,TransmogrifAI 还可以自行推断类型。例如,如果它检测到具有低基数的文本特征实际上是伪装的分类特征,就会对它进行编目和适当的处理。强类型特征可以让开发人员在编译时而不是在运行时捕获大多数错误。它们也是对机器学习管道中常见的特定类型处理进行自动化的关键。
虽然强类型特征有助于大量推理数据,并最大限度地减少下游错误,但所有特征最终仍然需要转换为数字表示,以便暴露出数据的规律性,这样机器学习算法才能轻松地利用这些数据。这个过程称为特征工程。有无数种方法可用于转换上图中所示的特征类型,选择正确的方法是一门数据科学艺术。
举个例子,如何将美国的州(例如 CA、NY、TX 等)转换成数字?一种方法是将每个州与 1 到 50 之间的数字映射起来。这种方法的问题在于它无法保留有关州的地理接近度信息。但在模拟用户购物行为时,接近度可能是一个重要特征。我们可以尝试另一种方法,就是使用州中心与美国中心之间的距离。这样可以解决第一个问题,但仍然不包含一个州是否位于美国的北部、南部、西部或东部的信息。这还只是一个简单的特征——想象以下数百或数千个特征!这个过程之所以如此具有挑战性,是因为还不存在一种万能的正确方法,因为成功的方法在很大程度上取决于具体的问题。
将一组不同的特征类型自动转换成数字向量,这也正是 TransmogrifAI 名称的由来。TransmogrifAI 为所有受支持的特征类型提供了大量的技术支持,从电话号码、电子邮件地址、地理位置到文本数据。TransmogrifAI 不仅仅是将数据转换为算法可以使用的格式,它还对转换进行优化,让机器学习算法更容易从数据中学习。例如,它可能会将年龄转换成适合某个特定问题的年龄段——时尚行业的年龄段可能与财富管理的年龄段不同。
但即使具备上述所有功能,特征工程仍然是一趟没有终点的旅程。因此,除了提供默认技术之外,我们还投入了大量精力,让共享特征工程技术变得更容易,这样开发人员就可以对默认值进行定制和扩展。
特征工程可能会出现数据维度的爆炸性增长。高维数据经常会出问题!例如,数据的特定字段可能会出现漂移,而且基于这些字段训练的模型可能在新数据上表现不佳。另一个(通常被忽略的)问题是事后偏见或数据泄漏。当在预测时没有出现的信息泄漏到训练样本中时就会发生这种情况。结果就是看起来很好的模型在实际当中就完全没有用。假设我们有一个包含交易信息的数据集,我们的任务是预测密集交易。想象一下,这个数据集中有一个字段叫作“已结算交易金额”,这个字段只在交易结束后才有。一个盲目的机器学习算法会认为这个字段具有高度的可预测性,因为所有已完成的交易都具有非零的“已结算交易金额”。实际上,对于仍在进行中的交易,这个字段永远不会有值,所以会导致机器学习模型表现不佳!在 Salesforce,这种后见之明的偏见也很成问题,因为未知和自动化的业务流程通常会填充大部分客户数据,很容易让数据科学家混淆因果关系。
TransgmogrifAI 提供了可用于执行自动特征验证的算法,用来删除几乎没有预测能力的特征——随着时间的推移而发生漂移的特征、呈现零方差的特征,或者在训练样本中的分布与预测时的分布显著不同的特征。这些算法对于处理可能充满事后偏见的高维和未知数据特别有用。它们应用了一系列基于特征类型的统计测试,并利用特征沿袭来检测和丢弃数据中的偏见。
流程的最后阶段涉及将机器学习算法应用于准备好的数据上,并构建出预测模型。他们可以尝试许多不同的算法,每种算法都有相应的调节参数。找到正确的算法和参数设置就可以获得高性能的模型。
TransmogrifAI 模型选择器在数据上运行几种不同的机器学习算法,并基于平均验证错误自动选择最佳的算法。它还会对数据进行采样并重新校准预测来自动处理不平衡数据问题。数据科学家训练得出的最佳和最差模型的性能通常存在显著差距,而探索模型空间对于避免错过更好的模型来说是至关重要的。
超参数优化:上述所有阶段的基础是超参数优化。在现今的机器学习社区,超参数指的是机器学习算法上的可调节参数。然而现实情况是,上述所有阶段都带有各种重要的调节参数。例如,在特征工程阶段,我们可以调整从分类预测器输出的二元变量的数量。处理不平衡数据的采样率是另一个可以调整的参数。调整所有这些参数对于数据科学家来说可能是个很大的负担,但这样可以让好的模型跟差的模型之间拉开差距。这就是为什么 TransmogrifAI 提供了一些自动调整这些超参数的技术和一个可扩展到更高级调优技术的框架。
在 Salesforce,自动化将模型训练所需的总时间从几周和几个月缩短到几个小时。封装所有这些复杂性的代码非常简单,只需几行代码就可以搞定上述的自动化特征工程、特征验证和模型选择:
// 读取交易数据
val dealData = DataReaders.Simple.csvCase[Deal](path = pathToData).readDataset().toDF()
// 抽取特征
val (isClosed, predictors) = FeatureBuilder.fromDataFrame[RealNN](dealData, response = "isClosed")
// 自动化特征工程
val featureVector = predictors.transmogrify()
// 自动化特征验证
val cleanFeatures = survived.sanityCheck(featureVector, removeBadFeatures = true)
// 自动化模型选择
val (pred, raw, prob) = BinaryClassificationModelSelector().setInput(isClosed, cleanFeatures).getOutput()
// 建立工作流并开始训练模型
val model = new OpWorkflow().setInputDataset(dealData).setResultFeatures(pred).train()
TransmogrifAI 的设计目标是提高机器学习开发人员的工作效率——不仅对机器学习进行自动化,还提供了一组 API 来实现编译时类型安全、模块化和重用。以下是我们的一些设计决策。
出于多种原因,我们选择在 Apache Spark 之上构建 TransmogrifAI。首先,我们需要能够处理各种大小的数据量。我们的一些客户和用例需要数千万条经过聚合或连接的数据记录来训练模型,但也有一些客户和用例只需要几千条记录。Spark 提供了连接和聚合分布式大数据的原语,这对我们来说很重要。其次,我们需要能够按照批量和流式的方式提供机器学习模型。Spark Streaming 可以让 TransmogrifAI 在这两种模式下工作。最后,基于一个活跃的开源库构建 TransmogrifAI,就可以充分利用这个库持续改进的特性,而无需为所有东西重新发明轮子。
SparkML Pipelines 引入了 Transformer 和 Estimator 的抽象,用于转换 DataFrame。TransmogrifAI 建立在这些抽象的基础之上(上面的特征转换、特征验证和模型选择,都由 Estimator 提供),此外,还引入了特征抽象。特征本质上是一个类型安全的指向 DataFrame 列的指针,它包含了所指列的所有信息——它的名称、它包含的数据类型,以及它的沿袭信息。
特征是开发人员主要的交互原语,定义和操作特征变得更像是在编程语言中使用变量,而不是操作 DataFrame 中的列。特征也是可共享的,可在开发人员之间重用。此外,TransmogrifAI 还提供了用于定义复杂时间序列聚合和连接的结果的能力。
特征是强类型的,所以 TransmogrifAI 可以在整个机器学习工作流程中进行类型检查,确保尽早捕获错误,而不是在数小时后进入管道之后才发现。类型安全还与开发人员生产力的其他细节有关,比如智能 IDE 代码建议。你可以在下面看到可以对数字进行的所有可能转换,并选择其中一个。
类型安全还可以提高机器学习工作流程每个阶段预期输入和输出的透明度,这反过来又大大减少了部落知识的数量,这些知识不可避免地在足够复杂的机器学习工作流程中积累起来。
最后,特征类型对于下游的处理(特别是自动化特征工程和特征验证)而言至关重要。
可定制性和可扩展性:开发人员可以利用自动 Estimator 快速获得高性能模型,而对于需要更多控制的用户,每个开箱即用的 Estimator 都可以被参数化,并可以直接设置和调整这些参数。此外,用户也可以指定要在管道中使用的自定义 Transformer 和 Estimator。指定自定义 Transformer 就像定义 lambda 表达式一样简单,TransmogrifAI 负责处理所有用于序列化和反序列化 Transformer 的样板代码。
val lowerCaseText = textFeature.map[Text](_.value.map(_.toLowerCase).toText)
通过自动化特征工程,数据科学家很容易就让特征空间膨胀,最终得到 Spark 都难以处理的 DataFrame。TransmogrifAI 工作流通过推断实现特征所需的整个转换 DAG 来解决这个问题。另外,因为 TransmogrifAI 是建立在 Spark 之上,所以可以直接从 Spark DataFrame 的优化改进中获益。
结果是,我们可以将自动化机器学习技术应用于具有数百万行和数百列的数据上,将特征空间扩展到数万个列。
TransmogrifAI 为每一个人赋能
对我们来说,TransmogrifAI 就像一场巨变,让我们的数据科学家能够以最少的手动调整生成数千种模型,并将训练高性能模型的平均时间从几周缩短到几个小时。这种自动化水平对于我们为企业提供服务来说至关重要,我们也相信,如今的每个企业的机器学习场景一定多过他们的数据科学家的数量,而自动化是实现机器学习能力的关键。
Salesforce 一直是 Apache Spark 的用户和贡献者,我们很高兴继续与社区一起构建 TransmogrifAI。机器学习有可能改变企业的运营方式,我们认为只有通过公开交换思想和代码才能降低采用障碍。通过公开合作,我们可以将不同的观点汇集在一起,继续推动技术的发展,惠及每一个人。
英文原文:
https://engineering.salesforce.com/open-sourcing-transmogrifai-4e5d0e098da2
工业互联网
产业智能官 AI-CPS
加入知识星球“产业智能研究院”,践行新一代信息技术(云计算+大数据+物联网+区块链+人工智能)在场景中构建状态感知、实时分析、自主决策、精准执行和学习提升的机器智能认知系统,实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链。
版权声明:产业智能官(ID:AI-CPS)推荐的文章,除非确实无法确认,我们都会注明作者和来源。涉权烦请联系协商解决。联系、投稿邮箱:erp_vip@hotmail.com