Scala 替换 Python、GPU 加速数据科学模型、新建 AutoML 库,一个超越 Google AutoML 的自动建模系统该怎么设计?自动数据清理、自动特征工程、自动建模与评估,刚入行的人也能玩转的 AutoML 平台该怎样搞定真实业务?本文满足你对极速建模的一切幻想。
昨日,机器之心联合 MoBagel(行动贝果) 举行了 AutoML 线下技术分享会,我们很荣幸邀请到两位来自硅谷的技术大咖,MoBagel 钟哲民与郭安哲,他们向我们介绍了全流程 AutoML 技术到底是什么,它能干什么,能做哪些极致优化。
在短短的半天中,可能并来不及探讨最深层次的技术问题,但分享会能告诉我们在 ML 的发展路径中,到底 AutoML 的哪些研究方向是令人振奋的、哪些工程技术是必不可少的、哪些应用领域是非常有前景的。
线下分享会同时还举行了实战工作坊,数十位成功报名的体验者将现场尝试用 Decanter AI 快速做一个强力的机器学习模型。
极速与准确,超越 Google AutoML
MoBagel 在一些 Kaggle 挑战赛上公平对比了 Google AutoML 系统,包括回归分析、聚类分析与时间序列分析等等。简单而言,Google AutoML 与 Decanter AI 会使用相同的数据源,并且在数据都不进行手动处理的情况下,观察两个系统的运行结果与时间。
「在准确度上,Decanter AI 在多个业务场景平均要高 10+百分点」,MoBagel CEO 钟哲民 表示准确度并不是最为显著的方面,训练速度会有较大的差异。他说:「在相同输入数据下,Decanter AI 的训练速度是该系统的 110 倍左右。」
Decanter AI 与 Google AutoML 的效果对比,其中 R-Squared 为模型的确定系数,它越接近 1,模型对预测值的解释能力就越强。CPU-Hour 为模型的效率,拟合同样的数据,CPU-Hour 越低,系统的效率就越高。
根据 Google 官方数据,其 AutoML 系统背后的服务器池达到了 2208 块 CPU,但测试结果仍然比 Decanter AI 慢了 110 倍。对于机器学习模型来说,能越早看到结果,就能更早判断数据的好坏,从而加速模型迭代过程。
既然在效果和效率上能做到超越 Google AutoML 的性能,那么下面我们可以具体看看全流程 AutoML 以及 Decanter AI 到底有哪些令人惊艳的特性。
现场分享,从设计思路到体验
在一个多小时的分享中,我们能了解到全流程 AutoML 系统的设计思路及主要机制,也能了解到遗传算法在 AutoML 中的应用。MoBagel CEO 钟哲民说:「我发现大部分 AI 进展都以研究为导向,这些很厉害的算法都非常有优势,也非常复杂。但当它们具有这样的特性时,要把科研算法应用在正确的业务场景就会变的很困难。因此,我们做的自动机器学习技术希望帮助更快速与准确地完成 AI 应用。」
这是 Decanter AI 初衷之一,也是 AutoML 技术的目标。从最开始基于开源框架做一系列的整合与优化,重点关注自动化的模型搭建,到现在 Decanter AI 采用 Scala 语言重构整个系统,完善全流程的自动机器学习系统,MoBagel 在加速模型成熟为产品这个方向已经做出了很多工作。
MoBagel CEO 钟哲民:让机器学习普及到每一张办公桌。
钟哲民在分享会上首次介绍了全流程 AutoML 系统的设计思路与历程,他表示最开始团队也是采用 Python 等开源工具与算法构建整个系统,当初的想法是集成更多好用的开源工具,让它们变得更简单与自动化,这是第一代产品。
后来与软银等公司合作的时候,钟哲民发现当前系统要应用到商业,会遇到一个瓶颈,系统需要更快速、稳定和准确。为此,MoBagel 开始使用 Scala 语言开发自己的 AutoML 套件,并最终将整个系统都用 Scala 改写了一遍。当这些改进与优化累积到一定程度后,MoBagel 就形成了自己完整的一套 AutoML 库,现在也正在尝试开放它。
就是这样一条优化路径,钟哲民说:「目前 Decanter AI 应用于销售预测、 精准营销、人事表现预测等领域皆有許多企业实时在生产环境使用中,不论是有没有数据科学背景,用户都能靠自己的能力落地,AI 的应用不再是无法掌控的黑盒子」
当然,在设计 Decanter AI 的过程中,也是有理论和工程两方面的考量。「在工程方面,我们希望最快地训练一个模型,而在理论方面,我们希望只用最少的尝试找到一个足够好的模型。」,MoBagel ML 总监郭安哲说。在工程上,除了前面采用 Scala 语言,郭安哲表示大规模并行训练、多模型联合搜索、多线程数据运算等都需要考虑。
MoBagel ML 总监郭安哲:使用演化算法解决贝叶斯问题,突破异质性超参数空间的限制性。
郭安哲后面重点介绍了 Actor 理论,它以比较正规的方式讨论了并行化。该理论主要提出了四种方法:第一是资源不要共享;第二是非同步信息;第三个是 location indepentent;第四是适当的隔离的机制。虽然它本身不是为自动机器学习设计的,但它对 AutoML 的系统设计非常重要。
在分享会的最后,味全的营业与财务主管李征也介绍了她的使用经验。「因为市场需求变化很快,且产品保质期不到一个月,味全面临着产销协调问题,过多生产造成库存水位高以致资源浪费,过少生产意味着缺货。」,李征说,「我们拿了一年的数据来训练,并期待通过 Decanter AI 精进产销问题。我发现随着特征数量的增加(影响变数的重要特征),预测准确率逐步提升达 90% 以上,对产销协调非常有帮助。」
李征表示,她本来是机械工程背景,但是也能快速地上手建模平台。所以,这就是全流程自动建模的优势,用户不需要统计或机器学习知识就能快速建模真实数据。「Decanter AI 真的能让人人都能成为数据科学家。」
Decanter AI 全流程自动建模
对于标准的数据科学处理流程来说,从预处理到建模,再到调参,中间涉及的处理过程非常繁杂。我们要小心翼翼地处理数据,从而构建干净的样本;我们需要仔细选择模型算法,从而获得不错的基本效果;同时,我们也要依据经验调调参,从而找到能接受的超参组合。所有这些,都要求数据科学家手动完成。
但是全流程的 AutoML 不一样,给定数据,我们坐等训练结果就行了。中间从数据清理到模型评估都可以自动完成,数据科学家可以着重在分析与决策,不用手动建立数十个实验来验证一个简单的假设。
MoBagel CEO 钟哲民称:「全流程 AutoML 本身不需要编程,全部通过可视化界面完成,Decanter AI 在底层会自动完成这一切。传统的方法论要经历 3 个月的过程,而现在只要 3 天,数据科学家就可以交出以往花 3 个月才能取得的成果。」
如上图所示,全流程 AutoML 主要分为四个模块。首先对于自动数据清理,Decanter AI 会完成一些数值填补、异常值查找或者数值的自动化统计处理。这些都是数据科学非常麻烦的地方,以往我们必须先理解数据然后才一点点提升数据状况。现在,交给自动数据预处理就好了,Decanter AI 会从统计和机器学习两个角度自动填补和处理异常值。
其次对于自动特征工程,Decanter AI 会自动选择重要的特征,并创建一些新的特征。不同的模型对于他的输入分布有不同的假设,例如深度学习对于其特征有线性假设,所以再处理类别型特征时,和 Tree-Based 模型就会不同。Decanter AI 可以针对数据集的特性,与不同模型自动建构合适的统计特征,如 One hot encoding/Label encoding,也会随机进行一些搜寻,自动产生新的特征,例如使用时间相关特征,或者组合特征。
现在输入数据已经确定了,第三步就需要自动建模数据了。这一部分承担了最为核心的运算,也是研究最多的领域。Decanter AI 能自动组合包含回归、聚类、分类、时间序列等共 60 多类机器学习算法,并使用交叉验证(Cross-validation),hold-out 以找到模型最合适的超参数建模方法。
「除了常规的自动建模,初版模型会不断迭代而叠加不同的模型——Ensemble-stacking Model。例如浅层模型擅长某方面,深度模型擅长另一方面,那么我们会找到最好的权重叠加这两种模型。」钟哲民说。
确定模型与超参的选择策略,再加上合适的损失函数,模型以及模型效果就会一轮轮迭代,直到评估出一个最优结果,自动化的建模与评估就差不多完成了。
目前很多 AutoML 系统都比较关注最后的自动建模,但前面的数据预处理与特征工程却是手动建模最麻烦的过程,忽略两者会带来不够友好的用户体验。因此只有全流程 AutoML,才能让绝大部分用户从采集数据到部署模型都不会「卡壳」。
当然,这四大自动化流程的背后还有很多底层支持。钟哲民表示,在 Decanter AI 全自动流程的背后,怎样自动分散计算资源、怎样设计分布式系统、怎样完成 GPU 加速、怎样配置训练预选都是需要考虑的,这些工程方面的稳定流畅是我们从超过 100 个海内外项目不断累积的成果。
Decanter AI 亮点新特性
Decanter AI 的目标在于构建快速、简单、准确、可解释的自动机器学习平台,它有很多引人注目的新特性。比如说首个自动化的 AutoML 时序建模及交叉验证方案、采用 Scala 代替 Python 作为底层语言及分布式计算、实现 100 倍率以上的算力加速、在处理海量数据的稳定度远胜于 Python 集群、采用伯克利团队参与共同研发的 AutoML Library 及自动数据清理、自动特征工程等数据分析模块。
这里主要介绍 Decanter AI 的时序建模、Scala 语言与 AutoML 库,其它更多的新特性可以查阅平台官网 mobagel.com。
新颖的自动时序建模
对于数据分析领域,大部分开源算法很少针对时间序列数据,即使支持时序建模,其在可用性或稳定性上也都会存在一些问题。这很大一部分原因在于时序数据,尤其是业务上的时序数据还需要很多处理过程,直接用 ARIMA 这样的统计方法建模效果并不好。
针对这些问题,钟哲民表示:「我们会结合统计算法与机器学习算法,并加上时序数据该有的一些特性,从而优化自动数据建模过程。除此之外,针对前面的数据预处理过程、特征工程,Decanter AI 也会自动构建合适的时序特征。」
时序建模示意图。
注意,我们可不能小看了前面的时间序自动预处理和特征工程,目前对于时序特征的开源及商用软件选择并不多,包括 Google AutoML 工具也没有时序预测分析。钟哲民举了个例子介绍什么是时序特征,假设我们要完成纸巾回购预测,即如果当前购买了一次纸巾,那么需要预测下一次购买纸巾的时间是什么。
这里非常重要的是模型需要考虑之前数据的区段,到底是三个星期前能知道下次购买时间,还是三个月、三年,以及下次回购的时间区段以及频次(日期时间特征、lag 特征、window 特征、趋势特征等等)。要确定这样的时序跨度通常都需要人工手动确认,但 Decanter AI 的自动特征工程能自动切分合适的时间区间,从而准确地预测后续行为。
Scala 的强悍模型训练速度
机器学习算法绝大多数模型都是用 Python 编写,一般开发者采用 NumPy 与 Scikit-Learn 这样的工具包完成整个模型的搭建。以这种方式做原型及内部项目是没问题的,但要用于对外公开的业务中常常遇到稳定度、可靠度、可用性的问题,还需要更多的工程优化及经验累积。
如果是全流程 AutoML,那么我们肯定希望做出来的模型能直接用于实际业务。换而言之,AutoML 系统应该将这些工程优化都隐藏到底层。通过采用 Scala 语言,Decanter AI 相比以 R 或 Python 语言为主的系统,在模型训练速度上能有 10~100 倍以上的提升,并且在大数据计算中更加稳定。
「在 15 年的时候,我们第一版系统是基于 Python 完成的,当时遇到的问题在于,当数据体量非常大时,Python 的处理速度非常慢且不稳定,时常报错。」,钟哲民接着说,「因此我们用 Scala 重写了整个系统,并在算法层面、并行计算等架构层面做了非常多的优化,因此 Decanter AI 才有现在这么快的速度。」
当然 Python 也有很多开源的底层库,但钟哲民表示,这些开源算法会出现不稳定的情况,出错后要花大量的时间修正数据或开源库的问题。因此在做实际业务时,Decanter AI 的整个架构都用 Scala 改写,并获得更强的稳定性和数据场景的兼容性。总的来说,因为开源库维护成本高的特性比较适合用于內部一次性项目而非产长期生生产环境,Decanter AI 的 AutoML 库重点关注在追求稳定、准确、快速 这三大目标,对于实际商业场景上更加适用,毕竟沒有企业用戶想要为了新的 AI 应用每天陷入加班除錯的窘境。
AutoML 库
之前从 Python 转向 Scala 主要是架构层面的尝试,最近 MoBagel 从更细的角度优化 Scala,并开放了基于 Scala 的 AutoML 库。该软件库在使用上是开放的,用户都能申请调用 API。
钟哲民说:「我们发现越来越多的用户使用 Decanter AI 做系统上的串接,例如串接到 ERP 系统或 CRM 系统等等。所以,如果我们以库的方式提供一系列 API,那么整个流程的对接会更流畅一些,应用也更加快速。」此外,值得注意的是,在发布新版的 AutoML 库之后,Decanter AI 的训练速度可以快一倍,准确率也显著提升。
总的来说,因为开源库扩展性不够好,Decanter AI 的 AutoML 库重点关注在追求稳定、准确、快速的实际商业场景需求上更为适合。