2.1 机器学习主流框架简介
机器学习属于二进制创新的范畴,在各个阶段都有许多优秀的框架,它们虽然目标都是通过代码发现并反映数据本身的规律,通过训练的模型对于发生的事件进行有效的预测,但是不同框架的侧重点并不相同。有的框架来源于大学实验室,而且创立较早,因此主要针对模型构造的过程,对效率和并行计算等的支持十分有限;有的框架发端于同平台的云服务,针对自己的平台有着不错的优化;有的框架来源于同开源基金会的大数据分析需求,虽然天然对平行计算等有很好的支持,但是使用时却需要机器部署很多依赖框架和服务。
下面就来介绍目前流行的15个机器学习框架。
1. Apache Singa
Apache Singa是一个用于在大型数据集上训练深度学习的通用分布式深度学习平台,它是基于分层抽象的简单开发模型设计的。它还支持各种当前流行的深度学习模型,有前馈模型(卷积神经网络)和能量模型(受限玻尔兹曼机和循环神经网络),还为用户提供了许多内嵌层。
Apache Singa的软件核心架构包含3个主要的组成部分,分别是计算核心(Core)、输入输出(IO)和模型(Model)。图2.1中给出了Apache Singa的整体软件架构的组成关系以及3大组件的主要功能。计算核心提供张量的计算操作以及为了能够提升机器学习模型代码在生产环境下的各种硬件优化(CPU、GPU、内存等)。输入输出主要处理的是从本地或者服务器中读取和写回数据的过程。模型组件致力于提供机器学习特别是复杂机器学习模型构建的基础组件。比如要构建卷积神经网络,我们需要层(Layer)来部署网络,训练中使用Optimizers/Initializer/Metric/Loss等组件。
图2.1 Apache Singa的整体软件架构
2. Amazon Machine Learning
亚马逊机器学习框架(Amazon Machine Learning, AML)是一种让各种级别使用机器学习技术的开发人员都能够轻松掌握的服务,提供了视觉工具和向导,可以指导开发人员在不必学习复杂的机器学习算法和技术的情况下建立机器学习。其中重要的组成部分是Amazon SageMaker。Amazon SageMaker可以帮助开发人员和数据科学家快速轻松地构建、训练和部署任何规模的机器学习模型。从运行实时欺诈检测模型、虚拟分析潜在药物的生物影响到预测棒球比赛中的盗垒成功率,它消除了成功实现机器学习的复杂性。
3. Azure ML Studio
Azure ML Studio允许微软Azure的用户创建和训练模型,随后将这些模型转化为能被其他服务使用的API。尽管你可以将自己的Azure存储链接到更大模型的服务,但是每个账户模型数据的存储容量最多不超过10GB。在Azure中有大量的算法可供使用,这要感谢微软和一些第三方公司。甚至不需要注册账号就可以匿名登录,使用Azure ML Studio服务长达8小时。
4. Caffe
Caffe是由伯克利视觉学习中心(Brian Leonard Visual Communications, BLVC)和社区贡献者基于BSD-2-协议开发的一个深度学习框架,它秉承“表示、效率和模块化”的开发理念。模型和组合优化通过配置而不是硬编码实现,并且用户可根据需要在CPU处理和GPU处理之间进行切换。Caffe的高效性使其在实验研究和产业部署中的表现很完美,使用单个NVIDIA K40 GPU处理器每天即可处理超过6000万张图像。但是由于Caffe创立时间较早,数据挖掘工程师一直对它有一些设计上的抵触情绪。因此,Caffe的作者又重新构建了新的机器学习框架—Caffe 2。
Caffe 2中的基本单元被称作操作子(Operators)。每一个操作子包含完成机器学习基本的参数输入(w和b)、数据输入和计算完成的数据输出。在新一代Caffe中,计算参数作为输入值而不是配置项,使用起来编程体验更好。比如我们设计一个全连接的神经元,权重w、偏置b和输入数据X是必须全部提供的,在这些输入完成后,操作子会计算出输出值Y。
图2.2所示为Caffe与Caffe 2架构的对比。
图2.2 Caffe与Caffe 2架构的对比
5. H2O
H2O可以轻松地应用数学和预测分析来解决当今极具挑战性的商业问题,它巧妙地结合了目前在其他机器学习平台还未被使用的独有特点—最佳开源技术,易于使用的WebUI和熟悉的界面,支持常见的数据库和不同文件类型。使用H2O时,你可以使用现有的语言和工具,此外,还可以无缝扩展到Hadoop环境中。H2O与Hadoop系统整合架构如图2.3所示。
图2.3 H2O与Hadoop系统整合架构
6. Massive Online Analysis
大规模在线分析框架(Massive Online Analysis, MOA)是目前最受欢迎的数据流挖掘开源框架,拥有一个非常活跃的社区。它包含一系列的机器学习算法(分类、回归、聚类、离群检测、概念漂移检测和推荐系统)和评价工具。和WEKA项目一样,MOA也是用Java编写的,但扩展性更好。
7. MLlib(Spark)
MLlib(Spark)是Apache Spark的机器学习库,目的是让机器学习实现可伸缩性和易操作性,它由常见的学习算法和实用程序组成,包括分类、回归、聚类,协同过滤、降维,同时包括底层优化原生语言和高层管道API。
8. Mlpack
Mlpack是一个基于C++的基础学习库,最早于2011年推出,数据库的开发者声称,它是秉承“可扩展性、高效性和易用性”的理念来设计的。执行Mlpack有两种方法:通过快速处理简易的“黑盒”操作命令行执行缓存,或者借助C++ API处理较为复杂的工作。Mlpack可提供简单的能被整合到大型的机器学习解决方案中的命令行程序和C++的类。
9. Pattern
Pattern是Python编程语言的Web挖掘组件,有数据挖掘工具(Google、Twitter、Wikipedia API、网络爬虫、HTML DOM解析器)、自然语言处理(词性标注、N-Gram搜索、情感分析、WordNet接口)、机器学习(向量空间模型、聚类、支持向量机)、网络分析和可视化。
10. Scikit-Learn
Scikit-Learn用于数学和科学工作,基于现有的几个Python包(NumPy、SciPy和Matplotlib)拓展了Python的使用范围。最终生成的库既可用于交互式工作台应用程序,又可嵌入其他软件中进行复用。该工具包基于BSD协议,是完全免费开源的,可重复利用。Scikit-Learn中含有多种用于机器学习任务的工具,如聚类、分类、回归等。Scikit-Learn是由拥有众多开发者和机器学习专家的大型社区开发的,因此Scikit-Learn中前沿的技术往往会在很短时间内被开发出来。
11. Shogun
Shogun是最早的机器学习库之一,创建于1999年,用C++开发,但并不局限于C++环境。借助SWIG库,Shogun适用于各种语言环境,如Java、Python、C#、Ruby、R、Lua、Octave和Matlab。Shogun旨在面向广泛的特定类型和学习配置环境进行统一的大规模学习,如分类、回归或探索性数据分析。
12. TensorFlow
TensorFlow是Google第二代深度学习系统,是完全开源的框架产品。TensorFlow是一种编写机器学习算法的界面,也可以编译执行机器学习算法的代码。使用TensorFlow编写的运算几乎不用更改就能运行在多种异质系统上,从移动设备(例如手机和平板电脑)到拥有几百台机器和几千个GPU之类的运算设备的大规模分布式系统。TensorFlow降低了深度学习的使用门槛,让从业人员能够更简单和方便地开发新产品。作为Google发布的“平台级产品”,很多人认为它将改变人工智能产业。
13. Theano
Theano是一个基于BSD协议发布的可定义、可优化和可数值计算的Python库。使用Theano可以与使用C实现大数据处理的速度相媲美,是支持高效机器学习的算法。
14. Torch
Torch是一种广泛支持把GPU放在首位的机器学习算法的科学计算框架。由于使用了简单快速的脚本语言LuaJIT和底层的C/CUDA来实现,使得该框架易于使用且高效。Torch的目标是让用户通过极其简单的过程、最大的灵活性和速度建立自己的科学算法。Torch是基于Lua开发的,拥有一个庞大的生态社区,能够找到许多功能独特的驱动库,包括设计机器学习、计算机视觉、信号处理、并行处理、图像、视频、音频和网络等。
15. Veles
Veles是一套用C++开发的面向深层学习应用程序的分布式平台,不过它利用Python在节点间自动操作与协作任务。在相关数据集中到该集群之前,可对数据进行分析与自动标准化调整,且REST API允许将各种训练模型立即添加到生产环境中,侧重于性能和灵活性。Veles几乎没有硬编码,可对所有广泛认可的网络拓扑结构进行训练,如全卷积神经网络、卷积神经网络、循环神经网络等。