1.Theano & Ecosystem
2.Torch
#机器学习框架
1.sci-kit learn
2.Apache Mahout
3.SystemML
4.Microsoft DMTK
#Theano 与生态系统
深度学习领域内的很多学术研究人员依赖于 Theano,这个用 Python 编写的框架可谓是深度学习框架的老祖宗。Theano 像 Numpy 一样,是一个处理多维数组的库。与其他库一起使用,Theano 很适合于数据探索和进行研究。
在 Theano 之上,已经有很多的开源的深度库建立起来,包括 Keras、Lasagne 和 Blocks。这些库的建立是为了在 Theano 偶尔的非直觉界面上更简单地使用 API。(截止到 2016 年 3 月,另一个与 Theano 相关的库 Pylearn2 可能即将死亡。)
相反,Deeplearning4j 能在 JVM 语言(比如,Java 和 Scala)下将深度学习带入生产环境中,创造出解决方案。Deeplearning4j 意在以一种可拓展的方式在并行 GPU 或 CPU 上将尽可能多的环节自动化,并能在需要的时候与 Hadoop 和 Spark 进行整合。
#优缺点
(+)Python+Numpy
(+)计算图是很好的抽象
(+)RNN 完美适配计算图
(-)原始 Theano 在某种程度上有些低水平
(+)高层次 wrappers(Keras,Lasange)减轻了这种痛苦
(-)错误信息没有帮助
(-)大型模型有较长的编译时间
(-)比 Torch 更「臃肿」
(-)对预训练模型支持不佳
(-)在 AWS 上有很多 bug
Torch 是一个用 Lua 编写的支持机器学习算法的计算框架。其中的一些版本被 Facebook、Twitter 这样的大型科技公司使用,为内部团队专门化其深度学习平台。Lua 是一种在上世纪 90 年代早期在巴西开发出来的多范式的脚本语言。
Torch 7 虽然强大,却并未被基于 Python 的学术社区和通用语言为 Java 的企业软件工程师普遍使用。Deeplearning4j 使用 Java 编写,这反映了我们对产业和易用性的关注。我们相信可用性的限制给深度学习的广泛使用带来了阻碍。我们认为 Hadoop 和 Spark 这样的开源分布式应该自动具备可扩展性。我们相信一个商业化支撑下的开源框架是保证工具有效并建立一个社区的合适解决方案。
#优缺点
(+)很多容易结合的模块碎片
(+)易于编写自己的层类型和在 GPU 上运行
(+)Lua(大部分库代码是 Lua 语言,易于读取)
(+)大量的预训练模型
(-)Lua(小众)
(-)你总是需要编写自己的训练代码(更不能即插即用)
(-)对循环神经网络不太好
(-)没有商业化支持
(-)糟糕的文档支持
#TensorFlow
谷歌创造 TensorFlow 取代 Theano,其实这两个库相当类似。Theano 的一些创造者,比如 Ian Goodfellow 在去 OpenAI 之前就是在谷歌打造 TensorFlow。
目前,TensorFlow 还不支持所谓的「inline」矩阵运算,但会强迫你按序 copy 一个矩阵,并在其上进行运算。copy 大型矩阵非常耗费成本,相比于其他先进的深度学习工具 TensorFlow 要花费 4 倍的时间。谷歌说他们正在解决这个问题。
像大部分深度学习框架一样,TensorFlow 在 C/C++ 引擎之上使用 Python API 编写,从而加速其运行。对 Java 和 Scala 社区而言,它并非一个合适的解决方案。
TensorFlow 不只是面向深度学习,也有支持强化学习和其它算法的工具。
谷歌开放 TensorFlow 的目标看起来是想吸引更多的人,共享他们研究人员的代码,标准化软件工程师进行深度学习的方式,并吸引他人对谷歌云服务的兴趣——TensorFlow 针对谷歌云服务进行了优化。
TensorFlow 并非商业支持下的,而且看起来谷歌也不可能成为支持开源企业软件的企业。它只为研究者提供新工具。
如同 Theano,TensorFlow 生成一个计算图(比如一系列矩阵运算,像 z=Simoid(x), 其中 x 和 z 都是矩阵)并进行自动微分。自动微分很重要,因为每次实验一个新的神经网络的时候,你肯定不想手动编写一个反向传播新变体的代码。在谷歌的生态系统中,计算图后来被 Google Brain 使用进行一些繁重工作,但谷歌还未开源其中一些工具。TensorFlow 只是谷歌内部的深度学习解决方案的一半。
从企业的角度来看,一些公司需要考虑的是他们是否想依赖谷歌的这些工具。
Caveat:在 TensorFlow 中的所有运算并不都像在 Numpy 中一样。
#优缺点
(+)Python+Numpy
(+)计算图抽象,如同 Theano
(+)比 Theano 更快的编译速度
(+)进行可视化的 TensorBoard
(+)数据和模型并行
(-)比其它框架慢
(-)比 Torch 更「臃肿」;更神奇;
(-)预训练模型不多
(-)计算图是纯 Python 的,因此更慢
(-)无商业化支持
(-)需要退出到 Python 才能加载每个新的训练 batch
(-)不能进行太大的调整
(-)在大型软件项目上,动态键入易出错
Caffe 是一个知名的、被普遍使用的机器视觉库,其将 Matlab 的快速卷积网接口迁移到了 C 和 C++ 中。Caffe 不面向其他深度学习应用,比如文本、声音或时序数据。如同其他框架一样,Caffe 选择 Python 作为 API。
Deeplearning4j 和 Caffe 都能用卷积网络进行图像分类,都展现出了顶尖水平。相比于 Caffe,Deeplearning4j 还提供了任意数量芯片的并行 GPU 支持,以及许多可使得深度学习在多个并行 GPU 集群上运行得更平滑的看起来琐碎的特征。Caffe 主要被用于作为一个托管在其 Model Zoo 网站上的预训练模型的源。Deeplearning4j 正在开发一个能将 Caffe 模型导入到 Spark 的解析器。
#优缺点:
(+)在前馈网络和图像处理上较好
(+)在微调已有网络上较好
(+)不写任何代码就可训练模型
(+)Python 接口相当有用
(-)需要为新的 GPU 层编写 C++/CUDA
(-)不擅长循环网络
(-)面对大型网络有点吃力(GoogLeNet,ResNet)
(-)不可扩展
(-)无商业化支持
#CNTK
CNTK 是微软的开源深度学习框架,是「Computational Network Toolkit(计算网络工具包)」的缩写。这个库包括前馈 DNN、卷积网络和循环网络。CNTK 提供一个 C++ 代码上的 Python API。虽然 CNTK 有一个许可证,但它还未有更多的传统许可,比如 ASF2.0,BSD,或 MIT。
#DSSTNE
亚马逊的 Deep Scalable Sparse Tensor Network Engine(DSSTNE)是一个为机器学习、深度学习构建模型的库。它是最近才开源的一个深度学习库,在 TensorFlow 和 CNTK 之后才开源。大部分使用 C++ 编写,DSSTNE 似乎很快,尽管它如今没有其它库那样吸引大量关注。
#优缺点
(+) 处理稀疏的编码
(-) 亚马逊可能不会共享要得到其样本的最好结果所必需的所有信息
#Speed
Deeplearning4j 使用 ND4J 执行的线性代数计算展现出了在大型矩阵相乘上的至少比 Numpy 快两倍的速度。这也是为什么我们的 Deeplearning4j 被 NASA 喷气推进实验室里的团队采用的原因之一。此外,Deeplearning4j 在多种芯片上的运行已经被优化,包括 x86、CUDA C 的 GPU。
尽管 Torch7 和 DL4J 都可并行,但 DL4J 的并行是自动化的。也就是说,我们对工作节点和连接进行了自动化,在 Spark、Hadoop 或者与 Akka 和 AWS 上建立大规模并行的时候,能让用户对库进行分流。Deeplearning4j 最适合于解决特定问题,而且速度很快。
#机器学习框架
上面列出的机器学习框架更多是专用框架,而非通用机器学习框架,当然,通用机器学习框架也有很多,下面列出几个主要的:
#sci-kit learn:
Python 的默认开源机器学习框架
#Apache Mahout:
]Apache 上的旗舰机器学习框架。Mahout 可用来进行分类、聚类和推荐。
#SystemML:
IBM 的机器学习框架,可用来执行描述性统计、分类、聚类、回归、矩阵分解和生存分析(Survival Analysis),而且也包含支持向量机。
#Microsoft DMTK:
微软的分布式机器学习工具包。分布式词嵌入和 LDA。