
机器学习的生态圈里,工具和平台的选择往往决定了研发效率的上限。从底层的分布式系统到上层的便捷接口,每个组件都有自己的定位。下面先梳理几个代表性的平台与系统。
1. 平台和系统
TensorFlow 是谷歌的第二代机器学习系统,深度学习的扩展支持内置其中,任何能用计算流图形来表达的计算都可以借助它完成。百度研发的 PaddlePaddle 则强调易用、高效、灵活与可伸缩,为百度内部多项产品提供了深度学习算法支撑。Apache 旗下的 SINGA 是一个基于大型数据集训练的常规分布式学习平台,支持各种流行的深度学习模块。Scikit Flow 是 TensorFlow 的简化接口,模仿 Scikit-learn 的风格,方便用户在预测分析和数据挖掘中快速上手。VELES 来自三星,定位为分布式深度学习应用系统,用户只需提供参数,剩下的交给它就好。另外还有为通用硬件设计的 SpeeDO,它不需要特殊的 I/O 硬件,支持 CPU/GPU 集群,能很方便地在 AWS、Google GCE、Microsoft Azure 等云端环境部署。
框架
框架层面,Facebook 开源的 Torchnet 目标很明确——加快 AI 研究。微软的 LightGBM 则聚焦 GBDT 算法的高效并行训练,专门解决海量数据下的工业应用难题。PayPal 的 Guagua 是 Hadoop 上的迭代式计算框架,主要处理模型训练的分布式问题。Chainer 在深度学习理论算法和实际应用之间架起了一座桥梁,灵活度很高。同样基于 Hadoop 的 Shifu 追求快速和可伸缩;KeystoneML 用 Scala 编写,基于 Apache Spark 构建,旨在简化大规模端到端机器学习管道的构造。LightNet 是一个轻量级、全基于 Matlab 的深度学习框架,目标就是让研究人员容易理解、容易使用,且计算高效。移动端方面,DeepLearningKit 专门针对 iOS、OS X 和 tvOS 设计。Go 语言生态中有 GoLearn,而 iOS/macOS 开发者还可以关注 YCML——它用 Objective-C 编写,也支持 Swift。
工具包和库
工具包和库的选择更加丰富。微软开源了 DMTK(分布式机器学习工具包),包含分布式框架、主题模型训练工具 LightLDA 以及分布式词向量;同时还有用于语音识别的 CNTK,借助 GPU 能力效率相当高。亚马逊的 DSSTNE 能同时支持两个 GPU 参与运算,主要用于智能搜索和推荐。
Python 生态中,Scikit-learn 是绕不开的名字,简洁高效,覆盖了监督学习与非监督学习的主流算法,适合数据挖掘和分析。Deeplearning4j 则是为 Ja va 和 Scala 打造的首个商业级开源分布式深度学习库,以即插即用为目标,通过预设避免过多配置,让非研究人员也能快速做原型。轻量级的 MXNet 兼具灵活与高效,支持混合符号编程和命令式编程。雅虎开源的 CaffeOnSpark 基于 Hadoop/Spark,而英特尔开源的 BigDL 同样是基于 Apache Spark 的分布式深度学习库,面向高性能大数据分析。
Swift 开发者可以看看 Swift AI,它是一套人工智能和机器学习的通用工具,完全用 Swift 编写,支持 iOS 和 OS X。Go 语言方面,Gorgonia 用于撰写和评估多维数组的数学公式,理念与 Theano、TensorFlow 相似,支持 GPU/CUDA 和分布式计算。C++ 领域有快速模块化的 Shark,提供线性/非线性优化、基于内核的学习算法、神经网络等;还有 MLPACK,以扩展性、高速性和易用性著称,适合专业用户也照顾新手。Ja va 方面,smile 包含各种现有机器学习算法,比如邻接表和矩阵图算法,以及基于 Swing 的可视化库。
此外还有 PredictionIO,这是一个开源的机器学习服务器,开发工程师和数据分析师可以用它构建智能应用,实现个性化推荐、内容发现等预测功能。Airbnb 定价建议系统背后的引擎是 Aerosolve。Vowpal Wabbit 则利用在线学习、哈希、约简、搜索、主动和交互式学习等技术不断推动机器学习前沿。最后,Apache SystemML 是一个灵活、可伸缩的机器学习语言,用 Ja va 编写,能根据数据和集群特性自动优化,保证高效和可伸缩,可在 MapReduce 或 Spark 环境中运行。
