这里有新鲜出炉的机器学习框架,既有初次露面的,也有重新修改过的。这些工具被大众所注意,或是因为其出处,或是因为以新颖的简单方法处理问题,或是解决了机器学习中的某个特定难题,或者是上述的所有原因。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037137179687505366828.png)
Apache Spark 广为人所知的是因为它是 Hadoop 家族的一员,但是这个内存数据处理框架却是脱胎于 Hadoop 之外,也正在 Hadoop 生态系统以外为自己获得了名声。Hadoop 已经成为可供使用的机器学习工具,这得益于其不断增长的算法库,这些算法可以高速度应用于内存中的数据。
早期版本的 Spark 增强了对 MLib 的支持,MLib 是主要面向数学和统计用户的平台,它允许 通过持久化管道特性将 Spark 机器学习工作挂起和恢复。2016 年发布的 Spark2.0,对 Tungsten 高速内存管理系统和新的 DataFrames 流媒体API 进行了改进,这两点都会提升机器学习应用的性能。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037138537500009785072.png)
H2O,现在已经发展到第三版,可以提供通过普通开发环境(Python, Java, Scala, R)、大数据系统(Hadoop, Spark)以及数据源(HDFS, S3, SQL, NoSQL)访问机器学习算法的途径。H2O 是用于数据收集、模型构建以及服务预测的端对端解决方案。例如,可以将模型导出为 Java 代码,这样就可以在很多平台和环境中进行预测。
H2O 可以作为原生 Python 库,或者是通过 Jupyter Notebook,或者是 R Studio中的 R 语言来工作。这个平台也包含一个开源的、基于 web 的、在 H2O 中称为Flow 的环境,它支持在训练过程中与数据集进行交互,而不只是在训练前或者训练后。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037139867187506989697.png)
“深度学习”框架增强了重任务类型机器学习的功能,如自然语言处理和图像识别。Singa 是一个 Apache 的孵化器项目,也是一个开源框架,作用是使在大规模数据集上训练深度学习模型变得更简单。
Singa 提供了一个简单的编程模型,用于在机器群集上训练深度学习网络,它支持很多普通类型的训练工作:卷积神经网络,受限玻尔兹曼机 以及循环神经网络。 模型可以同步训练(一个接一个)或者也异步(一起)训练,也可以允许在在 CPU 和 GPU 群集上,很快也会支持 FPGA 。Singa 也通过 Apache Zookeeper 简化了群集的设置。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037141228125008866432.png)
深度学习框架 Caffe 开发时秉承的理念是“表达、速度和模块化”,最初是源于2013 年的机器视觉项目,此后,Caffe 还得到扩展吸收了其他的应用,如语音和多媒体。
因为速度放在优先位置 ,所以 Caffe 完全用 C+ + 实现,并且支持 CUDA 加速,而且根据需要可以在 CPU 和 GPU 处理间进行切换。分发内容包括免费的用于普通分类任务的开源参考模型,以及其他由 Caffe 用户社区创造和分享的模型。
一个新的由 Facebook 支持的 Caffe 迭代版本称为 Caffe2,现在正在开发过程中,即将进行 1.0 发布。其目标是为了简化分布式训练和移动部署,提供对于诸如 FPGA 等新类型硬件的支持,并且利用先进的如16位浮点数训练的特性。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037142610937509741634.png)
与微软的 DMTK 很类似,Google TensorFlow 是一个机器学习框架,旨在跨多个节点进行扩展。 就像 Google 的 Kubernetes 一样,它是是为了解决 Google 内部的问题而设计的,Google 最终还是把它作为开源产品发布出来。
TensorFlow 实现了所谓的数据流图,其中的批量数据(“tensors”)可以通过图描述的一系列算法进行处理。系统中数据的移动称为“流”-其名也因此得来。这些图可以通过 C++ 或者 Python 实现并且可以在 CPU 和 GPU 上进行处理。
TensorFlow 近来的升级提高了与 Python 的兼容性,改进了 GPU 操作,也为TensorFlow 能够运行在更多种类的硬件上打开了方便之门,并且扩展了内置的分类和回归工具库。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037143818750008418137.png)
亚马逊对云服务的方法遵循一种模式:提供基本的内容,让核心受众关注,让他们在上面构建应用,找出他们真正需要的内容,然后交付给他们。
亚马逊在提供机器学习即服务-亚马逊机器学习方面也是如此。该服务可以连接到存储在亚马逊 S3、Redshift 或 RDS 上的数据,并且在这些数据上运行二进制分类、多级分类或者回归以构建一个模型。但是,值得注意的是生成的模型不能导入或导出,而训练模型的数据集不能超过 100GB。
但是,亚马逊机器学习展现了机器学习的实用性,而不只是奢侈品。对于那些想要更进一步,或者与亚马逊云保持不那么紧密联系的人来说,亚马逊的深度学习机器图景包含了许多主要的深度学习框架,包括 Caffe2、CNTK、MXNet 和 TensorFlow。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037145214062503021817.png)
考虑到执行机器学习所需的大量数据和计算能力,对于机器学习应用云是一种理想环境。微软已经为 Azure 配备了自己的即付即用的机器学习服务 Azure ML Studio,提供了按月、按小时和免费的版本。(该公司的 HowOldRobot 项目就是利用这个系统创立的)你甚至不需要一个账户来就可以试用这项服务;你可以匿名登录,免费使用 Azure ML Studio 最多8小时。
Azure ML Studio 允许用户创立和训练模型,然后把这些模型转成被其他服务所使用的 API。免费用户的每个账号可以试用多达 10GB 的模型数据,你也可以连接自己的 Azure 存储以获得更大的模型。有大范围的算法可供使用,这要感谢微软和第三方。
近来的改进包括通过 Azure 批处理服务、更好的部署管理控制和详细的 web 服务使用统计,对训练任务进行了批量管理。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037146614062502611405.png)
在机器学习问题中投入更多的机器,会取得更好的效果-但是开发在大量计算机都能运行良好的机器学习应用却是挺伤脑筋的事。
微软的 DMTK (分布式机器学习工具集)框架解决了在系统集群中分布多种机器学习任务的问题。
DMTK 被认为是一个框架而不是一个完全成熟、随去随用的解决方案,因此包含算法的数量是很小的。然而,你还是会找到一些关键的机器学习库,例如梯度增强框架(LightGBM),以及对于一些像 Torch 和 Theano 这样深度学习框架的支持。
DMTK 的设计使用户可以利用有限的资源构建最大的群集。例如,群集中的每个节点都会有本地缓存,从而减少了与中央服务器节点的通信流量,该节点为任务提供参数。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037148053125004615673.png)
在发布 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)的代码。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037149503125006119175.png)
在 Spark 占据主流地位之前很久,Mahout 就已经开发出来,用于在 Hadoop 上进行可扩展机器学习。但经过一段长时间的相对沉默之后,Mahout 又重新焕发了活力,例如一个用于数学的新环境,称为 Samsara,允许多种算法可以跨越分布式 Spark 群集上运行。并且支持 CPU 和 GPU 运行。
Mahout 框架长期以来一直与 Hadoop 绑定,但它的许多算法也可以在 Hadoop 之外运行。这对于那些最终迁移到 Hadoop 的独立应用或者是从 Hadoop 中剥离出来成为单独的应用都很有用。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037150737500008780052.png)
Veles(https://velesnet.ml/)是一个用于深度学习应用的分布式平台,就像 TensorFlow 和 DMTK 一样,它是用 C++ 编写的,尽管它使用 Python 来执行节点之间的自动化和协调。在被传输进群集之前,要对数据集分析并且进行自动的归一化,然后调用 REST API 来即刻使用已训练的模型(假定你的硬件满足这项任务的需要) 。
Veles 不仅仅是使用 Python 作为粘合代码,因为基于 Python 的 Jupyter Notebook 可以用来可视化和发布由一个 Veles 集群产生的结果。Samsung 希望,通过将 Veles 开源将会刺激进一步的开发,作为通往 Windows 和 MacOS 的途径。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037151979687504885328.png)
作为一个基于 C++ 的机器学习库,mlpack 最初产生于 2011 年,按照库的创立者想法,设计 mlpack 是为了“可扩展性,速度和易于使用。mlpack 既可以通过由若干行命令行可执行程序组成的“黑盒”进行操作,也可以利用 C++ API 来完成复杂的工作。
mlpack 的第二版包含了许多新的算法,以及现有算法的重构,以提高它们的速度或使它们瘦身。例如,它舍弃了 Boost 库的随机数生成器,转而采用 C++ 11 的原生随机数功能。
mlpack 的一个痼疾是缺少对于 C++ 以为语言的支持。这就意味着其他语言的用户需要第三方库的支持,如这样的一个 Pyhton 库。还有完成了一些工作来增加对 MATLAB 的支持,但是像 mlpack 这样的项目,在机器学习的主要环境中直接发挥作用时,往往会获得更大的应用。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037153356250002247204.png)
Nervana,一家建立自己的深度学习硬件和软件平台的公司(现在是英特尔的一部分),已经提供了一个名为“Neon”的深度学习的框架,它是一个开源项目。Neon使用可插拔的模块,以实现在 CPU、GPU 或者 Nervana 自己开发的芯片上完成繁重的任务。
Neon 主要是用 Python 编写,也有一部分是用 C++ 和汇编以提高速度。这使得该框架可以为使用 Python 或者其他任何与 Python 绑定框架进行数据科学工作的人所用。
许多标准的深度学习模型,如 LSTM、AlexNet 和 GoogLeNet,都可以作为 Neon 的预训练模型。最新版本 Neon 2.0,增加了英特尔数学内核库来提高 CPU 的性能。
![image.png image.png](https://data.CIOZJ.COM/UploadFiles/2017/6364037154706250008922878.png)
另一个相对近期的产品——Marvin 神经网络框架,是普林斯顿视觉集团的产物。Marvin“生来就是被黑的”,正如其创建者在该项目文档中解释的那样,该项目只依赖于一些用 C++ 编写的文件和 CUDA GPU 框架。虽然该项目的代码很少,但是还是提供了大量的预训练模型,这些模型可以像项目本身代码一样,能够在合适的场合复用或者根据用户的需要共享。
本文作者:Serdar Yegulalp 来源:人工智能头条
CIO之家 www.ciozj.com 微信公众号:imciow