原文:13 frameworks for mastering machine
learning
作者:Serdar Yegulalp
译者:夜风轻扬
译者注:作为人工智能的重要分支,机器学习得到越来越多的应用,如何更快地掌握这门技术,这篇文章也许会给你打开一扇大门,下面是译文:
在过去的一年里,机器学习炙手可热。机器学习的“突然”降临,并不单纯因为廉价的云环境和更强有力的GPU硬件。也是因为开放源码框架的爆炸式增长,这些框架将机器学习中最难的部分抽象出来,并将这项技术提供给更广大范围的开发者。
这里有十来个新鲜出炉的机器学习框架,既有初次露面的,也有重新修改过的。这些工具被大众所注意,或是因为其出处,或是因为以新颖的简单方法处理问题,或是解决了机器学习中的某个特定难题,或者是上述的所有原因。
Apache Spark MLlibApache Spark 最为人所知的是它是Hadoop家族的一员,但是这个内存数据处理框架却是脱胎于Hadoop之外,也正在Hadoop生态系统以外为自己获得了名声。Hadoop 已经成为可供使用的机器学习工具,这得益于其不断增长的算法库,这些算法可以高速度应用于内存中的数据。。
早期版本的Spark 增强了对MLib的支持,MLib是主要面向数学和统计用户的平台,它允许 通过持久化管道特性将Spark机器学习工作挂起和恢复。2016年发布的Spark2.0,对Tungsten高速内存管理系统和新的DataFrames流媒体API 进行了改进,这两点都会提升机器学习应用的性能。
在机器学习问题中投入更多的机器,会取得更好的效果-但是开发在大量计算机都能运行良好的机器学习应用却是挺伤脑筋的事。
微软的DMTK(分布式机器学习工具集)框架解决了在系统集群中分布多种机器学习任务的问题。
DMTK被认为是一个框架而不是一个完全成熟、随去随用的解决方案,因此包含算法的数量是很小的。然而,你还是会找到一些关键的机器学习库,例如梯度增强框架(LightGBM),以及对于一些像Torch和Theano这样深度学习框架的支持。
DMTK的设计使用户可以利用有限的资源构建最大的群集。例如,群集中的每个节点都会有本地缓存,从而减少了与中央服务器节点的通信流量,该节点为任务提供参数。
微软的计算网络工具集在发布DMTK之后,微软又推出了另一款机器学习工具集,即计算网络工具包,简称CNTK。
CNTK与Google TensorFlow类似,它允许用户通过一个有向图来创建神经网络。微软也认为CNTK可以与诸如Caffe、Theano和 Torch这样的项目相媲美,-此外CNTK还能通过利用多CPU和GPU进行并行处理而获得更快的速度。微软声称在Azure上的GPU群集上运行CNTK,可以将为Cortana的语音识别训练速度提高一个数量级。
最新版的CNTK 2.0通过提高精确性提高了TensorFlow的热度,添加了一个Java API,用于Spark兼容性,并支持kera框架(通常用于TensorFlow)的代码。
在Spark占据主流地位之前很久,Mahout就已经开发出来,用于在Hadoop上进行可扩展机器学习。但经过一段长时间的相对沉默之后,Mahout又重新焕发了活力,例如一个用于数学的新环境,称为Samsara,允许多种算法可以跨越分布式Spark群集上运行。并且支持CPU和GPU运行。
Mahout框架长期以来一直与Hadoop绑定,但它的许多算法也可以在Hadoop之外运行。这对于那些最终迁移到Hadoop的独立应用或者是从Hadoop中剥离出来成为单独的应用都很有用。
Veles (Samsung)
[Veles])是一个用于深度学习应用的分布式平台,就像TensorFlow和DMTK一样,它是用C++编写的,尽管它使用Python来执行节点之间的自动化和协调。在被传输进群集之前,要对数据集分析并且进行自动的归一化,然后调用REST API来即刻使用已训练的模型(假定你的硬件满足这项任务的需要)
Veles不仅仅是使用Python作为粘合代码,因为基于Python的Jupyter Notebook 可以用来可视化和发布由一个Veles集群产生的结果。Samsung希望,通过将Veles 开源将会刺激进一步的开发,作为通往Windows和MacOS的途径。
mlpack 2
作为一个基于C++的机器学习库,mlpack最初产生于2011年,按照库的创立者想法,设计mlpack是为了“可扩展性,速度和易于使用。”mlpack既可以通过由若干行命令行可执行程序组成的“黑盒”进行操作,也可以利用C++ API来完成复杂的工作。
mlpack的第二版包含了许多新的算法,以及现有算法的重构,以提高它们的速度或使它们瘦身。例如,它舍弃了Boost库的随机数生成器,转而采用C++ 11的原生随机数功能。
mlpack的一个痼疾是缺少对于C++以为语言的支持。这就意味着其他语言的用户需要第三方库的支持,如这样的一个Pyhton库。还有完成了一些工作来增加对MATLAB的支持,但是像mlpack这样的项目,在机器学习的主要环境中直接发挥作用时,往往会获得更大的应用。
NeonNervana,一家建立自己的深度学习硬件和软件平台的公司(现在是英特尔的一部分),已经提供了一个名为“Neon”的深度学习的框架,它是一个开源项目。Neon使用可插拔的模块,以实现在CPU、GPU或者Nervana自己开发的芯片上完成繁重的任务。
Neon主要是用Python编写,也有一部分是用C++和汇编以提高速度。这使得该框架可以为使用Python或者其他任何与Python绑定框架进行数据科学工作的人所用。
许多标准的深度学习模型,如LSTM、AlexNet和GoogLeNet,都可以作为Neon的预训练模型。最新版本Neon 2.0,增加了英特尔数学内核库来提高CPU的性能。
另一个相对近期的产品——Marvin神经网络框架,是普林斯顿视觉集团的产物。Marvin“生来就是被黑的”,正如其创建者在该项目文档中解释的那样,该项目只依赖于一些用C++编写的文件和CUDA GPU框架。虽然该项目的代码很少,但是还是提供了大量的预训练模型,这些模型可以像项目本身代码一样,能够在合适的场合复用或者根据用户的需要共享。
联系客服