这是2016年度机器学习和深度学习技术大盘点系列文章的第二篇。 第一篇 中,我们介绍了该领域的通用趋势。在本篇中,我们将介绍机器学习和深度学习领域开源项目在一整年里的发展。第三篇将介绍商业化的机器学习和深度学习软件及服务。
目前市场上有上千种开源项目,本文无法一一涉及。我们会通过对数据科学家进行的调查结果,以及 OpenHub 公布的开发活跃度,根据使用率选择最主要的项目来介绍。本文仅介绍非盈利机构提供的,以及虽然获得了商业投资,但并不提供软件许可的项目。第三篇将介绍提供开源“社区”版产品,以及商业化软件许可的产品。
R和Python依然是开放式数据科学领域最主要的工具。Python与R之间的争议虽然还在 继续 ,但也在不断达成新的 共识 ,因此数据科学家可能需要考虑同时学习 这两者 。R在统计库方面更有优势,所提供的机器学习技术在配合小规模数据使用时更为灵活。Python更适合于应用程序的开发,并且Python的开源许可对商业化应用程序开发工作的限制更少。
毫无疑问,深度学习框架领域充满了活力,TensorFlow、Microsoft Cognitive以及MXNet远远领先于Caffe和Torch等更加成熟的产品。值得注意的是,2014年发布的深度学习工具现在看来已经显得老迈了。
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发行版的完善贡献力量,我们将在第三篇文章中详细介绍。
在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项目共有十个。当然其中Spark的用户数、活跃贡献者人数、提交数,以及增加的代码行数最多。在开发活跃度方面Flink紧随其后位居第二,不过大部分Flink粉丝最关注的是其基于事件的流功能,而非机器学习能力。
具备机器学习能力的顶级Apache项目共有四个:Spark、Flink、Mahout,以及OpenNLP。
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为数据科学家提供的增值托管式服务。
dataArtisans的Mike Winters 回顾了 Flink在2016年取得的成就,但并未使用“机器学习”这个词。这是因为Flink的机器学习库依然非常 有限 ,很明显,Flick最吸引用户的依然是流运行时。
虽然使用预测模型对数据流进行评分已经出现不少用例,但现实世界中很少有通过数据流对预测模型进行训练的用例。机器学习模型只有在用户量大到一定程度后才会显得有用,但只有当创建数据的过程处于稳定状态后才可能获得更多用户。如果某个过程已经处于稳定状态,到底是使用一批静态数据或使用流式数据进行训练将显得无关紧要,此时归于同一数学领域的最新事件将成为“上一条”事件。如果最新事件导致模型产生较大改动,那么这样的过程并不算处于稳定状态,因而我们无法依赖这样的模型对未来事件进行预测。
Flink目前尚不支持导入PMML模型,而这样一个相对简单的改进将使得用户能够使用其他地方建立的模型通过流式数据进行预测。目前大部分流引擎均已支持这样的能力。
有些用例中Flink基于事件的流更胜过Spark的微批。然而对我来说,大部分情况下面对所要解决的问题,Flink都是一个优雅的解决方案。
Mahout团队 发布了 四个Double-dot版本。重要改进包括 Samsara 数学环境以及支持使用Flink作为后端。大部分单机和MapReduce算法已被弃用,仅剩针对Spark、H2O和Flink提供的矩阵运算 库 。
OpenNLP是一种处理自然语言文本的机器学习工具包。该工具还没死,只不过正在 休眠 。
2016年,有两个机器学习项目进入了Apache孵化器,目前尚未“毕业”,因而截止年底孵化器中还留有六个进行中的项目:SystemML、PredictionIO、MADLib、SINGA、Hivemall,以及SAMOA。SystemML和Hivemall是最有希望在2017年“结业”的选手。
SystemML 是一种可以运行在Spark和MapReduce上的机器学习算法库,最初由IBM研究院在2010年 开发 。IBM在2015年将该项目的代码贡献给Apache,随后IBM还提供了继续开发该项目所需的资源。该项目所有的重要贡献者均为IBM员工,这就引发了一个问题:如果无法吸引社区参与贡献,软件开源的意义何在?
该团队在2016年提供了三个 版本 ,增添了算法和其他功能,包括深度学习和对GPU的支持。借助来自IBM的支持,该项目有望在今年发布1.0版,并“晋级”为顶级状态。
在IBM员工之外的用户群体中,该项目的用户数依然很少。目前还找不到什么“由SystemML驱动”的页面,意味着这东西别人几乎没人用。IBM今年还将SystemML加入了BigInsights,预计可以吸引IBM的忠实企业用户来使用,假设还有这样的用户的话。此外IBM有可能会在自己的其他产品中使用该软件。
PredictionIO 是一个在开源栈,包括Spark、Hbase、Spray,以及Elasticsearch的基础上构建的机器学习服务器。一家与该项目同名的初创公司从2013年 开始 从事项目的相关工作,Salesforce于2016年初 收购 了这家公司,并将其资产 捐献给 Apache。Apache PredictionIO在5月 进入 Apache孵化器。
Apache PredictionIO为使用机器学习技术的应用程序提供了很多“预配置”模板,其中包括不同类型的推荐系统、销售机会计分、流失预测、电力负荷预测、情绪分析等。
自从进入孵化器后,该团队发布了多个小型版本。然而开发工作很不活跃,也许Salesforce没再过多涉足这个项目。
SINGA 是一种分布式深度学习项目,最初由新加坡国立大学开发,并于2015年捐献给Apache。该平台目前支持前馈式(Feed-forward)模型、卷积神经网络、有限波尔兹曼机(Restricted Boltzmann machine),以及递归神经网络。该项目还提供了一种用于训练模型的随机梯度下降算法。
该团队2016年发布了三个版本,并 最终 在九月发布了1.0.0版。从版本号可知该团队认为这个项目很快将进入“顶级”梯队,然而文档工作最好能快速跟进,因为他们已经有八个月没有向Apache提供 状态报告 了。
MADLib 是一种运行于PostgreSQL、Greenplum Database以及Apache HAWQ(正在孵化)的机器学习函数库。该项目始于2010年,最初由UC-Berkeley的研究人员和EMC Greenplum(现已更名为Pivotal Software)的数据科学家合作建立。Pivotal在2015年将软件资产捐献给Apache软件基金会,随后该项目进入了Apache孵化器。
2016年,该团队发布了三个小型版本。项目的活跃贡献者人数很少,每月平均仅三位。
根据该团队进行的 调查 ,大部分用户将该软件部署在Greenplum数据库上。由于Greenplum目前在数据库引擎流行度排行榜 位居 第35位,并且还在快速下滑,除非能将该项目移植到更广阔的平台,否则该项目前景堪忧。
最初由 Treasure Data 开发并捐献给Apache软件基金会的 Hivemall 是一种可缩放的机器学习库,以Hive UDF集合的形式实现,按照设计可运行在Hive、Pig、Spark SQL+MapReduce、Tez或Spark之上。该团队成立于2016年9月,预计将在2017年1季度首次发布。
考虑到代码相对已成熟,大部分部署运行在Hive之上,Spark的提交者在PMC上表现活跃,Hivemall很有可能在2017年晋级“顶级”状态。
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.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年增加了超过一倍。
华盛顿大学分布式机器学习平台(DMLC)下的 XGBoost 项目是一种优化的分布式梯度提升库,主要被对缩放能力和精确度有极高要求的顶尖数据科学家所 使用 。2016年上半年,Tianqi Chen和Carlos Guestrin 发布了 论文介绍了该算法。机器学习领域初创公司 DataRobot 和 Dataiku 在2016年将XGBoost加入了自己的平台。
Weka 是一系列由Java编写的机器学习算法,由新西兰怀卡托大学开发,通过GPU许可发布。Pentaho和RapidMiner在自己的商业化产品中包含了该软件。
本篇谈及Weka是因为该技术依然被少数重量级数据科学家使用着,在Kdnuggets的年度 投票 中,11%被调查者称他们在使用该软件,然而统计发现过去几年来,该软件的用户数正在飞速减少,开发工作也几乎 停摆 ,也许该项目如其名称一般,将步那只不能飞翔的 鸟类 后尘。
本节主要介绍深度学习方面的软件。很多常规用途的机器学习程序包也支持深度学习,本节主要介绍专门为深度学习开发的程序包。
在2015年底面世后,谷歌的TensorFlow和微软的Cognitive Toolkit从零开始一举跃升为该领域的领军产品。虽然在亚马逊和其他厂商的支持下,MXNet也取得了强劲的增长,但Theano和Keras主要活跃在Python的世界中。与此同时,其他更老也更成熟的框架,例如Caffe、DL4J和Torch已逐渐被后浪拍死在沙滩上。
有钱能使鬼推磨,商业化支持很重要。得到谷歌、微软、亚马逊支持的项目无疑能在2017年取得更大的进展。
无论从用户数量或开发活跃度来看,TensorFlow都是领先的深度学习框架。谷歌在2015年发布的这一深度学习平台以创纪录的速度从默默无闻发展为领军产品。
四月,谷歌 发布了 TensorFlow 0.8,该版本开始支持分布式处理。开发团队在2016年还发布了另外四个 版本 ,其中包含诸多改进,例如:
同样是在四月,谷歌的人工智能研究部门DeepMind 宣布 计划从Torch切换至TensorFlow。
谷歌于九月在TensorFlow中 发布了 自己的首个图像字幕模型。Google Brain团队 称 该模型在ImageNet 2012评测中准确识别出94%的图像。
12月,Constellation Research 评选了 TensorFlow获得企业软件领域2016年度创新奖,并赞赏了该技术在谷歌服务中的广泛运用和强有力的开发者社区。
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 是蒙特利尔大学 Montreal Institute for Learning Algorithms 旗下的项目,这是一种适用于计算密集型科学调查的Python库。该项目可供用户使用多维数组有效地定义、优化、评估数学表达式(参见 这里 )。与CNTK和TensorFlow类似,Theano已成为神经网络的代表性符号。
该团队于3月发布了Theano 0.8,该版本为多种GPU提供了支持。2016年还发布了另外两个Double-dot版本,增加了对CuDNN v.5的支持并修复了多个Bug。
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 是一种运行在TensorFlow或Theano之上的高级神经网络库。该项目最初由谷歌的 Francois Chollet 创建,2016年Keras有超过200个活跃的 贡献者 。
在赫芬顿邮报中,Chollet 介绍了 Keras与其他深度学习框架的不同之处。简单来说:Keras可以将深度学习架构从计算后端中抽象出来,因此可以轻松地从Theano移植到TensorFlow。
本节内容根据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 是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 )关注我们。