大规模机器学习流程的构建与部署

现在有许多的机器学习算法实现是可以扩展到大数据集上的(其中包括矩阵分解、SVM、逻辑回归、LASSO 等等)。实际上,机器学习专家们很乐于指出的一点是:如果你能把机器学习问题转化为一个简单的数值优化问题,你就几近成功了。

当然,现实的问题是,很多机器学习项目是没法简化成一个简单的优化问题的。因此数据科学家们不得不去管理和维护复杂的数据项目,加之他们所要分析的问题经常也需要特定的机器学习流程。上游流程中每个阶段的决策影响下游流程的结果,因此流程中模块的连接与交互成为了一个研究的热点。

在Strata+Hadoop World New York的报告上,伯克利教授Ben Recht描述了他们新的伯克利 AMPLab项目,该项目旨在提供一种构建和管理大规模机器学习的通用流程。鉴于AMPLab与Spark项目的紧密联系,该项目的一些想法已在Apache Spark中初现端倪。

基元辨识与构建

第一步就是创建基础部件(基石).机器学习流程往往用图来描述和表达,AMPLab研究人员一直专注于针对大数据集的图节点(机器学习流程基础元件,简称基元)的扩展和优化。其中一些基元可能针对于特定领域和数据类型(例如文本,图像,声音,时空数据),一些则是针对于更加通用场景的领域(例如统计学,机器学习).最近的一个例子是ml-matrix矩阵库,该库是一个运行于Apach Spark上的分布式矩阵计算库。

机器学习模块以基元的形式来构成机器学习系统,使得机器学习系统更易于理解。由于流程中的模块几乎都可解释,因此相对于那些依赖于黑盒子的机器学习方法,这样构建的机器学习系统更具透明性,易于解释。

让机器学习更具模块化:简化流程融合

尽管基元可以作为基础部件,但是用户还是需要工具来完成整个流程的构建。现如今,工作流工具已经变得越来越普遍,而且诸如此类的工具已经有很多可供数据工程师,数据科学家,甚至商业分析师等使用(例如Alteryx, RapidMiner, Alpine Data, Dataiku)。

正如上篇博文我提到的,我们将会看到越来越多的数据分析工具,这些工具一方面为程序员提供了优雅的接口设计,一方面为提供了简单的DSL(领域特定语言)使得非专业程序员可以进行编辑。某种程度上说,通过DSL对机器学习流程(或者说对表达该流程的图结构)进行封装会变得越来越普遍。最新版本的Apache Spark (版本 1.2)提供了构建机器学习流程的API接口(如果你仔细看的话,我们已经利用DSL来实现机器学习流程构建了)。

做一些误差分析

“我们正在试图将机器学习系统植入自动驾驶汽车,电力系统网络等等。如果我们想让机器学习真正影响到我们的日常生活,那么我们最好能够保证机器学习系统能如那些复杂系统(就如飞行器设计系统)般稳定。”-Ben Recht

我们是否能够去限定这种层次式流程的近似误差和收敛率呢?假定我们能够计算每个节点的误差,下一步就得有一种机制去提取整个流程的误差。实际上,我们需要在产品实际部署的时候提供工具来保证流程能正常工作,同时可以期望提供一些测量误差的方法。

为此,Laurent Lessard、Ben Recht 和 Andrew Packard一直利用从控制理论中的技术自动地对机器学习流程生成验证证书。该方法已经能够分析大数据集上大多数流行的机器学习技术。他们更长远的目标则是能够直接通过那些复杂的,分布式软件系统的伪代码,分别推导和分析出系统的性能特征和鲁棒性。(与AMPLab相关的Velox项目提供了产品中模型的管理框架)。

随着机器学习算法日益渗透入各个领域,我们需要更好的工具来构建复杂的,健壮性强,稳定度高的机器学习系统。虽然诸如scikit-learn 和 GraphLab已经提供了对机器学习流程构建的支持,但是像Apache Spark这种常用的分布式框架则把这种思想发挥到了极致,以使其能偶适应于更大的数据集,更广泛的人们受益。目前,AMPLab前期的一些结果还是很令人振奋的,研究者们已经构建了大规模的机器学习系统,并且在视觉,语音以及文本处理方面取得了与各自领域最好成绩都不相上下的结果。

在Ben Recht的诸多头衔中, 也是”Hardcore Data Science day at Strata+Hadoop World”的协作方。加入我们吧,我们将和Ben将在2015年1月在San Jose举办另一场数据科学盛宴。