驾驭机器学习的13种框架

想大胆尝试机器学习?这些工具可以为你处理繁重的任务。

驾驭机器学习的13种框架

在去年,机器学习以前所未有的势头进入主流。对这股潮流起到推波助澜的不单单是成本低廉的云环境和功能更强大的GPU硬件,还有如今面向机器学习的数量激增的框架。它们都是开源框架,而更重要的是,它们旨在化解机器学习最难的部分,将其技术或方法提供给广泛的开发人员。

本文介绍了13种机器学习框架,有的在去年刚出炉,有的刚修订。它们引起了我们的注意,因为都是在IT界具有重要影响力的产品,有的试图带来一种简化的解决办法,有的旨在攻克与机器学习有关的某个难题。

Apache Spark MLlib

Apache Spark最广为人知的角色就是它是Hadoop家族的一员,但这种内存数据处理框架脱胎于Hadoop之外,而且在Hadoop生态系统外面扬名立万。Spark已成为一款可靠的机器学习工具,这归功于其日益庞大的算法库,其算法可以高速运用于内存中数据。

Spark没有坐以待毙,因为Spark拥有的算法一直在不断增加和修订。去年的1.5版本增添了许多新的算法,改进了现有的算法,并进一步增强了Python中对MLlib的支持,而Python是面向数学运算和统计用户的一大平台。除了其他功能外,刚发布的Spark 1.6还让用户可以通过持久化流水线(persistent pipeline),暂停和恢复Spark ML任务。

Apache Singa

“深度学习”框架支持处理繁重任务的机器学习功能,比如自然语言处理和图像识别。Singa最近得到接受、进入Apache孵化器(Apache Incubator),这种开源框架旨在让用户很容易训练针对大量数据的深度学习模型。

Singa提供了一种简单的编程模型,用于训练跨机器集群的深度学习网络,它还支持许多常见类型的训练任务:卷积神经网络、受限玻尔兹曼机和递归神经网络。模型可以同步训练(逐个训练),也可以异步训练(并行训练),这取决于哪种方法最适用于某个问题。Singa还利用Apache Zookeeper简化了集群构建和设置。

Caffe

深度学习框架Caffe“在开发当初牢记表达、速度和模块化”。Caffe在2013年为机器视觉项目而开发,此后扩大到了其他应用领域,比如语音和多媒体。

速度是一大优先事项,于是Caffe完全用C++编写,并支持CUDA加速,不过它可以根据需要在CPU处理和GPU处理之间进行切换。发行版包括一套面向常见分类任务的免费开源参考模型,其他模型则由Caffe用户社区开发和捐献。

微软Azure ML Studio

考虑到执行机器学习需要大量的数据和强大的计算能力,云是机器学习应用的理想环境。微软为Azure配备了自己的按需付费的机器学习服务:Azure ML Studio,分为按月付费、按小时付费和免费套餐这三种版本。(该公司的HowOldRobot项目就是用这个系统构建的。)

Azure ML Studio让用户可以创建和训练模型,然后将它们变成可以被其他服务使用的API。用户可以为模型数据获得每个帐户最多10GB的存储空间,不过你也可以将自己的Azure存储空间连接到该服务,以处理更庞大的模型。一系列广泛的算法可供使用,这要感谢微软和第三方。你甚至不需要帐户就可以试用该服务;匿名登录后,就可以使用Azure ML Studio长达8个小时。

亚马逊机器学习

亚马逊对云服务采用的一般方法遵循这种模式:提供基本服务,培育关注它的核心受众,让他们在上面构建,然后找到他们真正需要的东西,并提供这种东西。

亚马逊首次尝试提供机器学习即服务:亚马逊机器学习(Amazon Machine Learning)也是如此。它连接到存储在亚马逊S、Redshift或RDS中的数据,可以对相关数据执行二元分类、多类分类或递归等操作。然而,这项服务完全以亚马逊为中心。除了依赖存储在亚马逊上的数据外,因而生成的模型无法导入或导出,训练模型的数据集不得大于100GB。不过,它仅仅是个开始,表明了它更注重机器学习的实用性,而不是便利性。

微软分布式机器学习工具包

用来处理任何机器学习问题的计算机部署得越多,效果越好,但是将机器结合起来、开发可以跨所有机器顺畅运行的机器学习应用程序可能很棘手。微软的DMTK(分布式机器学习工具包)框架就专门处理这个问题:跨系统集群分配各种各样的机器学习任务。

DMTK号称是一种框架,而不是一种完备的即开即用的解决方案,所以它自带的实际算法数量很少。不过DMTK的设计便于将来扩展,而且便于用户最充分地利用资源有限的集群。比如说,集群中的每个节点都有本地缓存,减少了与中央服务器节点之间的通信量,而中央服务器节点为相应任务规定了范围。

谷歌TensorFlow

谷歌TensorFlow酷似微软的DMTK,这种机器学习框架旨在跨多个节点灵活扩展。与谷歌的Kubernetes一样,它当初也是旨在解决谷歌内部的问题,谷歌最终决定将它作为一款开源产品来发布。

TensorFlow实施了所谓的数据流图(data flow graph),其中成批数据(“tensor”)可以由数据流图描述的一系列算法来加以处理。数据在系统中的移动被称为“流”(flow)――TensorFlow由此得名。数据流图可以用C++或Python来装配,可以在CPU或GPU上进行处理。谷歌的长期计划是,让第三方贡献者来完善TensorFlow。

微软计算网络工具包

微软发布DMTK不久,紧随其后发布了另一款机器学习工具包:计算网络工具包(Computational Network Toolkit,简称CNTK)。

CNTK类似谷歌TensorFlow,因为它让用户可以通过有向图来构建神经网络。微软还认为它与Caffe、Theano和Torch等项目相媲美。它声称相比那些框架的优点主要在于速度快,具体来说是能够同时充分利用多个CPU和多个GPU。微软声称,使用CNTK,并结合Azure上的GPU集群,将Cortana的语音识别训练的速度提升了一个数量级。

CNTK最初作为微软的语音识别研究项目的一部分而开发,早在2015年4月起初作为一个开源项目来提供,不过后来重新发布到GitHub上,采用了一种极其宽松的、类似MIT许可证的许可证。

Veles(三星)

Veles是一种面向深度学习应用的分布式平台;与TensorFlow和DMTK一样,它也用C++编写,不过使用Python来执行自动化和节点之间的协调。数据集加以分析、自动规范后被馈送到集群,REST API让受过训练的模型可以立即用在生产环境中(假设你的硬件足够好)。

Veles使用Python并不局限于仅仅将它用作粘合代码(glue code)。IPython(现在的Jupyter)这种数据可视化和分析工具,可以直观显示和发布来自Veles集群的结果。三星希望,发布开源Veles项目有望促进进一步的发展,比如移植到Windows和Mac OS X。

Brainstorm

Brainstorm由瑞士卢加诺的Dalle Molle人工智能研究所(IDSIA)的两名博士生Klaus Greff和Rupesh Srivastava开发而成,该项目的目的是“让深度神经网络快速、灵活而有趣”。已经包括了支持众多递归神经网络模型(比如LSTM)的功能。

Brainstorm使用Python提供两个“hander”,即数据管理API :一个用于Numpy的CPU运算,另一个通过CUDA利用GPU。大部分工作通过Python脚本来完成,所以别指望有一个丰富的前端GUI,只有你给自己提供的那个GUI。但长远计划是开发这种构架:可以运用“从早期开源项目汲取的经验”,并使用“与多种平台和计算后端兼容的新的设计元素”。

mlpack 2

我们之前汇总的机器学习资源提到了mlpack,这种基于C ++的机器学习库最早于2011年推出,设计当初着眼于“可扩展性、速度和易用性”,据库的开发者声称。实施mlpack有两种方法:通过处理简易的“黑盒子”操作的命令行执行文件缓存,或者借助处理较复杂工作的C ++ API。

2.0版本有很多重构和新功能,包括许多新类型的算法,并对现有算法做了改变,以便提速或简化。比如说,它丢弃了Boost库面向C++ 11的原生随机函数的随机数发生器。

一个长期存在的缺点是,缺少针对除C++之外的任何语言的绑定,这意味着使用从R到Python各种语言的用户无法使用mlpack,除非有人为上述语言推出了自己的包装器。已开展了工作,添加支持MATLAB的功能,但是像这样的项目在处理机器学习工作的主要环境下径直发挥作用,才往往会受到更大的追捧。

Marvin

Marvin神经网络框架是另一种比较新的框架,它是普林斯顿视觉小组(Princeton Vision Group)的杰作。它“生来就是为了被改动的”,开发者在项目的说明文档中这么解释,它只依赖用C++和CUDA GPU框架编写的几个文件。尽管代码本身有意很小,但项目确实随带许多预先训练的模型:只要适当引用,可以重复使用这些模型,使用合并请求(pull request)贡献给社区,就像该项目的自家代码那样。

Neon

Nervana这家公司开发了自己的深度学习硬件和软件平台,它提供了一种名为Neon的深度学习框架,将其作为一个开源项目。它使用可插入式模块,以便在CPU、GPU和Nervana自己的定制硬件上处理繁重任务。

Neon主要是用Python编写的,有几个组件用C++编写,以求速度。这样一来,用Python处理数据科学工作的其他人可以立即用它,拥有Python绑定的其他任何框架也可以立即用它。

end

原文发布于微信公众号 - CDA数据分析师(cdacdacda)

原文发表时间:2016-02-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数说工作室

懂点硬件 | AlphaGo、图像搜索、街景......背后都有它的影子:TPU

去年,谷歌曾在I/O开发者大会上透露了一款名为TPU的芯片,全称Tensor Processing Unit 张量处理器,是不是有点眼熟?(谷歌推出的机器学习框...

32250
来自专栏PPV课数据科学社区

数据仓库术语一览

数据仓库:数据仓库是一个支持管理决策的数据集合。数据是面向主题的、集成的、不易丢失的并且是时间变量。数据仓库是所有操作环境和外部数据源的快照集合。它并不需要非常...

46670
来自专栏星流全栈

【两分钟论文#161】AI创建用户界面,前端将失业?神器pix2code!

19240
来自专栏新智元

另一种开源:OpenAI 介绍深度学习基础设施

【新智元导读】OpenAI 昨天在博客发文,结合实例,介绍了 OpenAI 进行深度学习研究时采用的基础设施配置,并且提供了相关开源代码。文章激起了很多反响,其...

44050
来自专栏IT大咖说

两届黑客马拉松冠军:K8S深度学习平台实践经验分享

? 内容来源:2017年11月19日,饿了么资深后端工程师江骏在“11.19上海 | K8S Sail!系列技术沙龙”进行《饿了么Docker&K8S实践经验...

38490
来自专栏互联网研发闲思录

个性化推荐系统(二)---构建推荐引擎

  当下推荐系统包含的层级特别的多,整个线上推荐系统包含:最上层线上推荐服务、中层各个推荐数据召回集(数据主题、分类池子)、底层各种推荐模型。        ...

44800
来自专栏AI科技评论

开发 | PyTorch vs. TensorFlow月度使用体验总结

AI科技评论按:日前,英伟达深度学习项目实习生Dominic Monn在medium上发文总结了他使用PyTorch和TensorFlow的一些体会,在文章中,...

36680
来自专栏PHP在线

基于用户投票的排名算法(一):Delicious和Hacker News

互联网的出现,意味着"信息大爆炸"。 用户担心的,不再是信息太少,而是信息太多。如何从大量信息之中,快速有效地找出最重要的内容,成了互联网的一大核心问题。 各种...

34480
来自专栏程序员宝库

百度跨平台 AI 推理加速引擎 -- Anakin

AI技术包含训练和推理两个阶段。推理阶段的性能好坏既关系到用户体验,又关系到企业的服务成本,甚至在一些极端应用上(比如无人驾驶)直接关系到个人生命财产安全。目前...

22140
来自专栏SDNLAB

Edgecore和Adva联手开发白盒网关

Edgecore Networks和Adva周二宣布,他们正在开发移动蜂窝基站的白盒网关,作为Facebook电信基础设施项目(TIP)的一部分。

14910

扫码关注云+社区

领取腾讯云代金券