深度学习:21天实战Caffe
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第3天 深度学习工具汇总

深度学习是一个发展迅速的领域,除了众多学术界专家在理论方面的贡献之外,工业界的贡献也不可忽视。后者将深度学习理论迅速转化为代码,应用到实际系统中,进一步结合业务优化改进,形成一股合力,推动深度学习不断进步。

今天介绍当前流行的几大深度学习工具,读者可以从中了解到每个工具的设计思路、优点和适用场景。

3.1 Caffe

Caffe(Convolutional Architecture for Fast Feature Embedding)是由伯克利视觉和学习中心(Berkeley Vision and Learning Center, BVLC)开发的基于C++/CUDA/Python实现的卷积神经网络框架,提供了面向命令行、Matlab和Python的绑定接口,项目主页见参考资料[1]。Caffe前身为DeCAF[2],作者均为贾扬清。

Caffe标志如图3-1所示。

图3-1 Caffe标志

从Caffe的全称可以获得如下信息:

它实现了前馈卷积神经网络架构(CNN),而不是递归网络架构(RNN)。

它速度快,因为利用了MKL、OpenBLAS、cuBLAS等计算库,支持GPU加速。

它适合做特征提取,实际上适合做二维图像数据的特征提取。

除此之外,Caffe还具有如下特性。

Caffe完全开源,遵循BSD-2协议。

Caffe提供了一整套工具集,可用于模型训练、预测、微调、发布、数据预处理,以及良好的自动测试。

Caffe带有一系列参考模型和快速上手例程。

Caffe在国内外有比较活跃的社区,有很多衍生项目,如Caffe for Windows、Caffe with OpenCL、NVIDIA DIGITS2、R-CNN等。

Caffe代码组织良好,可读性强,通过掌握Caffe代码可以很容易学习其他框架。

以上因素使Caffe成为深度学习初学者入坑的首选。本书将以Caffe作为入口带领读者步入深度学习的大门。

3.2 Torch & OverFeat

Torch[3]是一个出现较早的支持大部分机器学习算法的科学计算框架,从2000年第一个版本开始,目前已经发布了4个版本(Torch 1、Torch 3、Torch 5、Torch 7)。Torch使用轻量脚本语言Lua及其C/CUDA扩展模块实现,底层数值计算通过高效的OpenMP/SSE/CUDA加速,同时具备灵活性和速度优势。得益于Lua的轻量接口,Torch可以很容易接入第三方软件。

Torch标志如图3-2所示。

图3-2 Torch标志

Torch为机器学习提供了类似于Matlab的环境,目前纽约大学(NYU)、Facebook AI实验室和Google DeepMind Torch均使用该框架做深度学习研究。Torch不仅支持CPU/GPU上运行,甚至支持嵌入式设备如iOS、Android、FPGA。

Torch完全开源,遵循BSD协议。目前Torch 7带有8个内置包:

torch——Torch 7的主包,提供Tensors基本数据类型和操作、简单的序列化接口和其他基本功能。

lab & plot——提供标准的类似于Matlab的函数,用于创建、变换、打印Tensors。

qt——Qt和Lua的完全绑定,实现Torch 7 Tensors和QImages之间的透明转换,美观的图形界面非常适合快速开发交互式演示程序。

nn——提供一组标准神经网络模块,以及一组容器模块,可用于定义任意有向(无环或有环)图。显式描述图结构,使用可插入模块,避免了复杂的图解析器,或者其他中间件编译器。下面的例子用Torch.nn实现了MLP:

    // mlp_test.lua
    require 'nn'
    mlp = nn.Sequential()
    mlp:add(nn.Linear(100, 1000))
    mlp:add(nn.Tanh())
    mlp:add(nn.Linear(1000, 10))
    mlp:add(nn.SoftMax())
    print(mlp)

image——图像处理包,提供了所有标准图像处理函数(如载入/保存图像、缩放/旋转、色彩空间变换、卷积、高斯核等)。

optim——提供最陡下降法、共轭梯度法和有限内存下BFGS等优化算法包。

unsup——包括几个非监督学习算法,如K-means、稀疏编码、自动编码器。

third-party——在上述包的基础上进一步封装不断增加的便捷软件包。

OverFeat[4]是一个在ImageNet数据集中使用Torch 7训练的特征提取器,实现了图像识别、定位和检测三位一体的集成系统,取得了ILSVRC 2013定位任务冠军,同时在分类和检测任务中也取得了不错的成绩。

3.3 MxNet

MxNet[5]是一个面向效率和灵活性设计的深度学习框架,吸收了多种不同框架(Minerva/Torch 7/Theano)的优点,加入了更多新的功能,如更加方便的多卡和多机分布式运行,目前MxNet比cxxnet快40%,而且GPU显存使用少了一半。

MxNet标志如图3-3所示。

图3-3 MxNet标志

MxNet提供了两种编程接口:

N维数组(ndarray)接口,类似于Matlab或Python中的numpy.ndarray或torch.tensor。它独有的优势在于通过背后的engine可以在性能和内存使用上优于其他框架;

符号(symbolic)接口,可以快速构建一个神经网络,实现自动求导功能。

目前MxNet还在快速发展中,以后目标是更多的语言绑定(目前支持比较好的是Python,马上会有Julia和R)、更好的文档和更多的应用(语言建模、语音、机器翻译、视频)发展。

3.4 TensorFlow

Google于 2011 年推出了人工深度学习系统——DistBelief[6]。通过DistBelief, Google能够扫描数据中心数以千计的核心,并建立更大的神经网络。这个系统将Google应用中的语音识别率提高了25%,以及在Google Photos中建立了图片搜索,并驱动了Google的图片字幕匹配实验。DistBelief还存在不少不足和限制。它很难被设置,和Google内部的基础设施联系也过于紧密,这导致研究代码几乎不可能分享。

针对以上问题,Google在2015 Google Research Blog宣布推出新一代人工智能学习系统——TensorFlow[7]。TensorFlow标志如图3-4所示。

图3-4 TensorFlow标志

TensorFlow是一个异构分布式系统上的大规模机器学习框架,移植性好(小到移动设备如手机,大到大规模集群,都能支持),支持多种深度学习模型。根据Google的说法,TensorFlow是综合的、灵活的、可移植的、易用的,更为关键的是,它是开源的。与此同时,TensorFlow的速度相比前代的DistBelief有了不小的提升,在一些跑分测试中,TensorFlow的得分是第一代系统的两倍。尽管如此,但从3.6节的对比结果来看,TensorFlow的效率仍然比不过其他大部分开源框架。不过,随着TensorFlow源码逐步开放,对新硬件、新设备、新的加速库如cuDNN的支持力度不断提升,其成为目前极具潜力的深度学习框架,读者可以在掌握Caffe后继续深入研究TensorFlow。

TensorFlow计算流如图3-5所示。

图3-5 TensorFlow计算流

3.5 Theano

Theano[8]是由LISA开发的基于Python的深度学习框架,可以定义数学表达式并高效地优化、求值。

Theano标志如图3-6所示。

图3-6 Theano标志

Theano支持机器学习中的逻辑回归(Logistic Regression, LR)、多层感知器(MultiLayer Perceptron, MLP)、深度卷积网络等监督学习方法,以及自编码器(Auto Encoder, AE)、降噪自编码器、限制玻尔兹曼机(Restricted Bolzman Machine, RBM)、深度置信网络(Deep Belief Network, DBN)等非监督/半监督学习方法,在国外教育领域非常受欢迎,一些机器学习课程都是采用Theano教学的。但是Theano有个致命短板,就是计算速度慢,虽然有GPU加速,但仍然不如其他框架高效,所以只适合研究人员使用,不适合在线上环境部署。

3.6 CNTK

CNTK(Computational Network Toolkit)[9]是微软推出的开源深度学习框架,通过一系列计算步骤构成有向图来表达网络。

CNTK标志如图3-7所示。

图3-7 CNTK标志

CNTK的优点是高性能、高灵活性、可扩展性好。CNTK支持CNN、LSTM、RNN等流行网络结构,支持分布式训练。在纯CPU、单GPU、多GPU、多机多GPU硬件平台下都具有较高的性能。

从图3-8中看到,CNTK支持双机8 GPU并行处理,而其他框架只支持单GPU(Theano)或单机多GPU(TensorFlow、Torch 7、Caffe)。从单GPU对比性能来看,Theano是性能最低的,而CNTK、Torch 7、Caffe相差不大。单机4 GPU的性能对比结果显示了CNTK具有极高的效率。GitHub上也有对常见的深度学习框架卷积计算性能的对比情况[10]

图3-8 CNTK提供的性能数据

虽然CNTK有上述优点,但同时要看到微软对自家Windows支持不遗余力,导致CNTK对Windows平台支持最好,不推荐作为深度学习初学者入门工具,而是选择拥有更大社区的Caffe。

除了上述深度学习工具,还有一些特殊的工具作为选择,具体情况可参见附录A。

掌握了今天的内容并深入研究、仔细评测、对比不同框架,理解内在的设计理念,深入对比各自的优势和不足,你会成长为优秀的深度学习平台工程师。

3.7 练习题

1.到上述工具的主页查看最新动态。

2.思考:深度学习工具为什么总是发源于国外?

3.如果将来你想写一个深度学习框架,需要考虑哪些因素?

3.8 参考资料

[1] BVLC Caffe项目主页http://caffe.berkeleyvision.org/

[2] DeCAF: A Deep Convolutional Activation Feature for Generic Visual Recognition, http://arxiv.org/abs/1310.1531

[3] Torch主页http://torch.ch/

[4] OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks, http://arxiv.org/abs/1312.6229v4

[5] MxNet, https://github.com/dmlc/mxnet

[6] Large Scale Distributed Deep Networks, NIPS 2012

[7] TensorFlow, http://tensorflow.org/

[8] Theano, http: //www.deeplearning.net/software/theano/

[9] CNTK主页http://www.cntk.ai/

[10] https://github.com/soumith/convnet-benchmarks