这是 2016 年度机器学习和深度学习技术大盘点系列文章的第二篇。第一篇中,我们介绍了该领域的通用趋势。在本篇中,我们将介绍机器学习和深度学习领域开源项目在一整年里的发展。第三篇将介绍商业化的机器学习和深度学习软件及服务。
目前市场上有上千种开源项目,本文无法一一涉及。我们会通过对数据科学家进行的调查结果,以及 OpenHub 公布的开发活跃度,根据使用率选择最主要的项目来介绍。本文仅介绍非盈利机构提供的,以及虽然获得了商业投资,但并不提供软件许可的项目。第三篇将介绍提供开源“社区”版产品,以及商业化软件许可的产品。
R 和 Python 依然是开放式数据科学领域最主要的工具。Python 与 R 之间的争议虽然还在继续,但也在不断达成新的共识,因此数据科学家可能需要考虑同时学习这两者。R 在统计库方面更有优势,所提供的机器学习技术在配合小规模数据使用时更为灵活。Python 更适合于应用程序的开发,并且Python 的开源许可对商业化应用程序开发工作的限制更少。
毫无疑问,深度学习框架领域充满了活力,TensorFlow、Microsoft Cognitive 以及MXNet 远远领先于Caffe 和Torch 等更加成熟的产品。值得注意的是,2014 年发布的深度学习工具现在看来已经显得老迈了。
R 项目
2016 年,R 用户社区还在扩张。R 在 O’Reilly 2016 年度数据科学家薪资调查中仅次于 SQL 位居第二,在 KDNuggets 投票中位居第一,在 Rexer 调查中也居首位。R 在 IEEE Spectrum 评价中位居第五。
R 的功能也在飞速增加。4 月,微软的 Andrie de Vries称作为R 的最主要程序包仓库,CRAN 中已包含超过8,000 个程序包。到12 月中旬,程序包总数已达到 9,737 个。CRAN 中机器学习程序包的数量和功能均在显著增长。
Linux 基金会的合作项目: R Consortium 在 2016 年也取得了一些进展。随着 IBM 和 ESRI 的加入,该项目的成员现已包括 Alteryx、Avant、DataCamp、谷歌、Ketchum Trading、Mango Solutions、微软、Oracle、Rstudio,以及 TIBCO。目前共有三个工作组和八个已获注资的项目。
Hadley Wickham 今年过得不错。作为 R 项目最主要的贡献者之一,Wickham 与人合著了《 R for Data Science 》并于 9 月发布了 tidyverse 1.0.0。在 The tidy tools manifesto 中,Wickham介绍了 tidy API 的四大基本原则。
《 Applied Predictive Modeling 》一书的作者兼机器学习 caret 程序包的开发者 Max Kuhn 于 11 月加入了 Rstudio。Rstudio 还曾从微软挖角聘请了 Joseph Rickert 。
AT&T Labs 用 R 完成了一些让人印象深刻的成果,包括使用 Hadoop 和其他数据平台为堆外(Out-of-core)处理开发的分布式后端。在 UseR! 大会上,Simon Urbanek进行了简单的总结。
今年在R 领域进行的各种有趣分析无法一一列举。David Robinson 对唐纳德·特朗普推文的分析令很多人产生了共鸣,通过使用tidyverse、 tidytext 和 twitteR ,Robinson 已经能够区分推文内容到底是特朗普自己发布的,还是手下员工用他的账号发布的。
在 Revolutions 博客上,微软的 David Smith调查了 R 社区内女性角色的增长。
微软和 Oracle 依然在对 R 发行版的完善贡献力量,我们将在第三篇文章中详细介绍。
Python
在 2016 年度 KDNuggets 投票中,被调查的数据科学家中 46%称自己在过去 12 个月里曾将 Python 用于分析、数据挖掘、数据科学,或机器学习项目。而这一比例在 2015 年为 **30%,当时仅次于 R。在 2016 年度 O’Reilly 数据科学家薪资调查中,Python 位居第三,仅次于 SQL 和 R。
Python 软件基金会(PSF)扩大了资助的范围和金额。PSF 为全球推广Python 教育和培训的组织提供了大量小额资助,并为Python in Education 网站设计、改进程序包生态(见下文)、Python 3.6 Beta 1 发布、重要的Python 会议等项目提供了大额资助。
Python Packaging Authority发布了 Warehouse 项目,并以此取代原有的 Python Packaging Index(PyPI)。该项目的目标包括更新视觉识别系统、提高程序包的可发现性,以及改进对程序包用户和维护者的支持。
PSF 在 12 月发布了 Python 3.6.0 和 Python 2.7.13。Scikit-learn 团队发布的 0.18 版本中包含大量改进和 Bug 修复,在这之后很快他们还发布了维护发布版本的0.18.1。
机器学习领域很多重要的Python 开发者均通过Python API 的形式对外提供程序包,例如Spark、TensorFlow、H2O 以及Theano。下文将分别进行介绍。
Continuum Analytics 预计今年将针对 Python 提供商业支持,并提供商业性的软件许可扩展,这些将在第三篇文章中介绍。
Apache 软件基金会
具备机器学习能力的 Apache 项目共有十个。当然其中 Spark 的用户数、活跃贡献者人数、提交数,以及增加的代码行数最多。在开发活跃度方面 Flink 紧随其后位居第二,不过大部分 Flink 粉丝最关注的是其基于事件的流功能,而非机器学习能力。
顶级项目
具备机器学习能力的顶级 Apache 项目共有四个:Spark、Flink、Mahout,以及 OpenNLP。
Apache Spark
Spark 团队提供了主要发行版Spark 2.0 以及六个维护版本。这些版本中有关Spark 机器学习能力的重要改进包括通过DataFrames API、PySpark 和SparkR 提供的更多算法,以及保存和加载机器学习模型与管道的能力。基于DataFrames 的API 现已成为Spark 中主要的机器学习接口,不过该团队还将继续支持基于RDD 的API。
Spark 的图形引擎 GraphX 没什么变化。Spark 2.0 包含了对 Spark 的 SQL 以及流能力的很多其他改进。
2016 年,第三方为 Spark Packages 增加了 24 个机器学习程序包。
Spark 用户社区还在继续扩张。Databricks报告称 Spark Summit 与会者人数增加了 30%,Spark Meetup 成员数增加了 240%。Databricks 的年度用户报告称在生产环境中使用 Spark 机器学习库的受访者人数增加了 18%,而 2015 年这一比例为 13%。2016 年度 KDNuggets 投票中接受调查的数据科学家中有22% 称他们在使用Spark, 2016 年度 O’Reilly 数据科学家薪资调查称,21% 的受访者在使用 Spark。
从 Databricks 的调查中还可以发现,61% 的用户在公有云中使用 Spark,这一比例在 2015 年为 51%。截止 2016 年 12 月,各大主要公有云供应商(AWS、微软、IBM、谷歌)均提供了 Spark 服务,此外还有 Databricks、Qubole、Altiscale,以及 Domino Data 为数据科学家提供的增值托管式服务。
Apache Flink
dataArtisans 的 Mike Winters回顾了 Flink 在 2016 年取得的成就,但并未使用“机器学习”这个词。这是因为 Flink 的机器学习库依然非常有限,很明显,Flick 最吸引用户的依然是流运行时。
虽然使用预测模型对数据流进行评分已经出现不少用例,但现实世界中很少有通过数据流对预测模型进行训练的用例。机器学习模型只有在用户量大到一定程度后才会显得有用,但只有当创建数据的过程处于稳定状态后才可能获得更多用户。如果某个过程已经处于稳定状态,到底是使用一批静态数据或使用流式数据进行训练将显得无关紧要,此时归于同一数学领域的最新事件将成为“上一条”事件。如果最新事件导致模型产生较大改动,那么这样的过程并不算处于稳定状态,因而我们无法依赖这样的模型对未来事件进行预测。
Flink 目前尚不支持导入 PMML 模型,而这样一个相对简单的改进将使得用户能够使用其他地方建立的模型通过流式数据进行预测。目前大部分流引擎均已支持这样的能力。
有些用例中 Flink 基于事件的流更胜过 Spark 的微批。然而对我来说,大部分情况下面对所要解决的问题,Flink 都是一个优雅的解决方案。
Apache Mahout
Mahout 团队发布了四个Double-dot 版本。重要改进包括 Samsara 数学环境以及支持使用 Flink 作为后端。大部分单机和 MapReduce 算法已被弃用,仅剩针对 Spark、H2O 和 Flink 提供的矩阵运算库。
Apache OpenNLP
OpenNLP 是一种处理自然语言文本的机器学习工具包。该工具还没死,只不过正在休眠。
孵化器项目
2016 年,有两个机器学习项目进入了 Apache 孵化器,目前尚未“毕业”,因而截止年底孵化器中还留有六个进行中的项目:SystemML、PredictionIO、MADLib、SINGA、Hivemall,以及 SAMOA。SystemML 和 Hivemall 是最有希望在 2017 年“结业”的选手。
Apache SystemML
SystemML 是一种可以运行在 Spark 和 MapReduce 上的机器学习算法库,最初由 IBM 研究院在 2010 年开发。IBM 在2015 年将该项目的代码贡献给Apache,随后IBM 还提供了继续开发该项目所需的资源。该项目所有的重要贡献者均为IBM 员工,这就引发了一个问题:如果无法吸引社区参与贡献,软件开源的意义何在?
该团队在2016 年提供了三个版本,增添了算法和其他功能,包括深度学习和对GPU 的支持。借助来自IBM 的支持,该项目有望在今年发布1.0 版,并“晋级”为顶级状态。
在IBM 员工之外的用户群体中,该项目的用户数依然很少。目前还找不到什么“由SystemML 驱动”的页面,意味着这东西别人几乎没人用。IBM 今年还将SystemML 加入了BigInsights,预计可以吸引IBM 的忠实企业用户来使用,假设还有这样的用户的话。此外IBM 有可能会在自己的其他产品中使用该软件。
Apache PredictionIO
PredictionIO 是一个在开源栈,包括 Spark、Hbase、Spray,以及 Elasticsearch 的基础上构建的机器学习服务器。一家与该项目同名的初创公司从 2013 年开始从事项目的相关工作,Salesforce 于2016 年初收购了这家公司,并将其资产捐献给 Apache。Apache PredictionIO 在 5 月进入 Apache 孵化器。
Apache PredictionIO 为使用机器学习技术的应用程序提供了很多“预配置”模板,其中包括不同类型的推荐系统、销售机会计分、流失预测、电力负荷预测、情绪分析等。
自从进入孵化器后,该团队发布了多个小型版本。然而开发工作很不活跃,也许 Salesforce 没再过多涉足这个项目。
Apache SINGA
SINGA 是一种分布式深度学习项目,最初由新加坡国立大学开发,并于 2015 年捐献给 Apache。该平台目前支持前馈式(Feed-forward)模型、卷积神经网络、有限波尔兹曼机(Restricted Boltzmann machine),以及递归神经网络。该项目还提供了一种用于训练模型的随机梯度下降算法。
该团队 2016 年发布了三个版本,并最终在九月发布了1.0.0 版。从版本号可知该团队认为这个项目很快将进入“顶级”梯队,然而文档工作最好能快速跟进,因为他们已经有八个月没有向Apache 提供状态报告了。
Apache MADLib
MADLib 是一种运行于 PostgreSQL、Greenplum Database 以及 Apache HAWQ(正在孵化)的机器学习函数库。该项目始于 2010 年,最初由 UC-Berkeley 的研究人员和 EMC Greenplum(现已更名为 Pivotal Software)的数据科学家合作建立。Pivotal 在 2015 年将软件资产捐献给 Apache 软件基金会,随后该项目进入了 Apache 孵化器。
2016 年,该团队发布了三个小型版本。项目的活跃贡献者人数很少,每月平均仅三位。
根据该团队进行的调查,大部分用户将该软件部署在Greenplum 数据库上。由于Greenplum 目前在数据库引擎流行度排行榜位居第35 位,并且还在快速下滑,除非能将该项目移植到更广阔的平台,否则该项目前景堪忧。
Apache Hivemall
最初由 Treasure Data 开发并捐献给 Apache 软件基金会的 Hivemall 是一种可缩放的机器学习库,以 Hive UDF 集合的形式实现,按照设计可运行在 Hive、Pig、Spark SQL+MapReduce、Tez 或 Spark 之上。该团队成立于 2016 年 9 月,预计将在 2017 年 1 季度首次发布。
考虑到代码相对已成熟,大部分部署运行在 Hive 之上,Spark 的提交者在 PMC 上表现活跃,Hivemall 很有可能在 2017 年晋级“顶级”状态。
Apache SAMOA
SAMOA 两年前进入 Apache 孵化器,目前已死。这是一套分布式流机器学习算法,可运行于 S4、Storm、Samza 之上。
如上文所述,有了 Flink 后,对流式机器学习的需求并不那么大。S4 处在弥留之际,Storm 是昨日黄花,Samza 走投无路,那么你就把 SAMOA 看作用 Edsel 车体打造的 Estate Wagon 休旅车吧(译注:Edsel 是福特在 1958-1960 年间赤巨资推出并寄予厚望的一款车型,由于“太丑”、“太贵”未被市场接受而惨败。随后 Edsel 成为描述“商业上惨败”的代名词。详见: https://en.wikipedia.org/wiki/Edsel 。原文此处另一个双关为:福特推出该车型是为了与通用和克莱斯勒竞争,而 Estate Wagon 是通用旗下别克品牌的休旅车)。除非移植到 Spark 或 Flink,否则这项目就完了。
机器学习项目
本节将介绍能支持各类算法,如分类、回归、聚类以及关联的常规用途机器学习平台。根据使用量和开发活跃度,下文将涉及 H2O、XGBoost 以及 Weka。
还有另外三个项目值得一提,它们提供了图形用户界面,因而对业务用户更有吸引力。 KNIME 和 RapidMiner 除了提供商业许可版本,还提供了开源版软件;我们会在这一系列文章的第三篇进行介绍。 Orange 是源自斯洛文尼亚卢布尔雅那大学生物信息学实验室、计算机与信息科学学院的一个项目。
Vowpal Wabbit 尤为值得一提。Kaggleists 以快速高效的学习算法而知名,VW 目前的用户体量太小,无法实现全面的覆盖。该项目目前已被并入微软研究院,很期待看到微软能通过该项目发展出什么有趣的东西。
H2O
H2O 是商业化风投公司 H2O.ai 的开源机器学习项目(我们将在第三篇介绍 H2O.ai 的业务成果)。
2016 年,H2O 团队更新了 Sparkling Water ,借此改善与 Spark 2.0 的兼容性。Sparkling Water 可以帮助数据科学家将 Spark 的数据摄入和 ETL 能力与 H2O 机器学习算法结合在一起。该团队还发布了首版 Steam ,该组件可支持大规模模型管理和部署,此外还发布了用于深度学习的 Deep Water 预览版。
2017 年,H2O.ai 计划提供自动化机器学习能力,并发布生产用版本的 Deep Water,届时将支持 TensorFlow、MXNet 以及 Caffe 作为后端。
根据 H2O.ai 的介绍,H2O 的用户数量在 2016 年增加了超过一倍。
XGBoost
华盛顿大学分布式机器学习平台(DMLC)下的 XGBoost 项目是一种优化的分布式梯度提升库,主要被对缩放能力和精确度有极高要求的顶尖数据科学家所使用。2016 年上半年,Tianqi Chen 和Carlos Guestrin发布了论文介绍了该算法。机器学习领域初创公司 DataRobot 和 Dataiku 在 2016 年将 XGBoost 加入了自己的平台。
Weka
Weka 是一系列由 Java 编写的机器学习算法,由新西兰怀卡托大学开发,通过 GPU 许可发布。Pentaho 和 RapidMiner 在自己的商业化产品中包含了该软件。
本篇谈及 Weka 是因为该技术依然被少数重量级数据科学家使用着,在 Kdnuggets 的年度投票中,11% 被调查者称他们在使用该软件,然而统计发现过去几年来,该软件的用户数正在飞速减少,开发工作也几乎停摆,也许该项目如其名称一般,将步那只不能飞翔的鸟类后尘。
深度学习框架
本节主要介绍深度学习方面的软件。很多常规用途的机器学习程序包也支持深度学习,本节主要介绍专门为深度学习开发的程序包。
在2015 年底面世后,谷歌的TensorFlow 和微软的Cognitive Toolkit 从零开始一举跃升为该领域的领军产品。虽然在亚马逊和其他厂商的支持下,MXNet 也取得了强劲的增长,但Theano 和Keras 主要活跃在Python 的世界中。与此同时,其他更老也更成熟的框架,例如Caffe、DL4J 和Torch 已逐渐被后浪拍死在沙滩上。
有钱能使鬼推磨,商业化支持很重要。得到谷歌、微软、亚马逊支持的项目无疑能在2017 年取得更大的进展。
TensorFlow
无论从用户数量或开发活跃度来看,TensorFlow 都是领先的深度学习框架。谷歌在 2015 年发布的这一深度学习平台以创纪录的速度从默默无闻发展为领军产品。
四月,谷歌发布了 TensorFlow 0.8,该版本开始支持分布式处理。开发团队在 2016 年还发布了另外四个版本,其中包含诸多改进,例如:
- 支持 Python 3.5
- 支持 iOS
- 支持 Microsoft Windows(部分功能)
- 支持 CUDA 8
- 支持 HDFS
- k-Means 聚类
- WALS 矩阵因子分解
- 迭代求解线性方程组,线性最小二乘法,特征值(Eigenvalue)和奇异值(Singular value)
同样是在四月,谷歌的人工智能研究部门 DeepMind宣布计划从Torch 切换至TensorFlow。
谷歌于九月在TensorFlow 中发布了自己的首个图像字幕模型。Google Brain 团队称该模型在ImageNet 2012 评测中准确识别出94% 的图像。
12 月,Constellation Research评选了 TensorFlow 获得企业软件领域 2016 年度创新奖,并赞赏了该技术在谷歌服务中的广泛运用和强有力的开发者社区。
Microsoft Cognitive Toolkit
2016 年,微软将自己的深度学习框架更名为 Microsoft Cognitive Toolkit (MCT),并发布了 2.0 Beta 版,根据 VentureBeat 的 Jordan Novet报道,新版本支持全新Python API 并包含大量其他改进。
在12 月初举行的神经信息处理系统(NIPS)大会上,Cray宣布已在包含超过1,000 个NVIDIA Tesla P100 GPU 加速器的Cray XC50 超级计算机上成功运行了MCT。
此外微软和NVIDIA 也宣布将通过合作支持在Azure 或用户本地环境的Tesla GPU 上运行MCT,并将支持在使用Pascal GPU 的NVIDIA DGX-1 超级计算机上运行。
Theano
Theano 是蒙特利尔大学 Montreal Institute for Learning Algorithms 旗下的项目,这是一种适用于计算密集型科学调查的 Python 库。该项目可供用户使用多维数组有效地定义、优化、评估数学表达式(参见这里)。与CNTK 和TensorFlow 类似,Theano 已成为神经网络的代表性符号。
该团队于3 月发布了Theano 0.8,该版本为多种GPU 提供了支持。2016 年还发布了另外两个Double-dot 版本,增加了对CuDNN v.5 的支持并修复了多个Bug。
MXNet
MXNet 是一种可缩放的深度学习库,也是华盛顿大学分布式机器学习平台(DMLC)下的另一个项目。该产品可运行于 CPU、GPU、群集、桌面,以及手机上,可支持 Python、R、Scala、Julia、Matlab 以及 Javascript API。
对 MXNet 来说,2016 年的第一大新闻是被 Amazon Web Services 选用。Craig Matsumoto 对此有报道,Serdar Yegulalp 对此进行了介绍,Eric David 进行了深入解读,Martin Heller 给出了评论。
Keras
Keras 是一种运行在 TensorFlow 或 Theano 之上的高级神经网络库。该项目最初由谷歌的 Francois Chollet 创建,2016 年 Keras 有超过 200 个活跃的贡献者。
在赫芬顿邮报中,Chollet介绍了 Keras 与其他深度学习框架的不同之处。简单来说:Keras 可以将深度学习架构从计算后端中抽象出来,因此可以轻松地从 Theano 移植到 TensorFlow。
DL4J
本节内容根据 Skymind CEO Chris Nicholson 的评论有所更新。
Deeplearning4j(DL4J)是商业风投公司 Skymind 的项目。这是一种开源的分布式深度学习库,使用 Java 和 Scala 编写。通过与 Hadoop 和 Spark 的集成,DL4J 可运行在分布式 GPU 和 CPU 上。Skymind 的评测结果远远胜过Caffe、TensorFlow 和Torch。
虽然亚马逊、谷歌和微软都在自己的云平台上推广深度学习技术,Skymind 的目标是将深度学习技术带到标准企业架构中,为希望在本地训练模型的企业提供帮助。对此我将信将疑,但这无疑是一种可靠的战略。Skymind 在9 月接受了一大笔种子轮投资,应该足够他们撑过这段时间了。对于在Xeon 服务器上运行的深度学习框架,英特尔肯定是喜闻乐见的,也许这也是一种可能的出路。
Skymind 提出将使用 Keras 作为 Python API,这样他们的项目才能更容易被数据科学家使用。
Caffe
Caffe 是 Berkeley Vision and Learning Center(BVLC)的一个项目,这是一种以开源 BSD 许可方式发布的深度学习框架。以 BVLC 在视觉和图像识别领域的成果为基础,Caffe 的核心优势在于能够对卷积神经网络(CNN)建模。Caffe 使用 C++ 编写,用户可通过 Python API 或命令行接口与 Caffe 交互。Caffe 中训练的深度学习模型可通过编译在大部分设备,包括 Windows 上运行。
但是 Caffe 在 2016 年似乎没搞出什么大新闻。
作者: Thomas W. Dinsmore ,阅读英文原文: THE YEAR IN MACHINE LEARNING
感谢杜小芳对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论