深度学习框架介绍

在深度学习初始阶段,每个深度学习研究者都需要写大量的重复代码。当然,对于学习数据科学的同学来说,从头开始实现神经网络,会让你理解很多有趣的东西。但是,在真实数据集上构建深度学习模型并不算是个明智的做法,除非你有数天或数周的时间来等待模型的构建。

为了提高工作效率,这些研究者就将这些代码写成了一个框架放到网上让所有研究者一起使用,当我们使用这种开源深度学习框架,我们可以立即实现如卷积神经网络这样的复杂模型。接着,网上就出现了不同的框架。随着时间的推移,最为好用的几个框架被大量的人使用从而流行了起来。目前,全世界最为流行的深度学习框架有PaddlePaddle、Tensorflow、Caffe、Theano、MXNet、Torch、DeepLearning4j和PyTorch。

0 什么是深度学习框架

让我们用一个例子来理解这个概念。考虑下面的图像集合:

此图像中有各种类别,猫、骆驼、鹿、大象等。我们的任务是将这些图像分类到相应的类(或类别)中。Google搜索告诉我们,卷积神经网络(CNN)对于此类图像分类任务非常有效。所以我们需要去实现这个模型,但是如果你开始从头开始编写CNN,那么获得工作模型将是几天后(甚至是几周),而这就是深度学习框架真正改变了这尴尬的局面。

无须写上百行代码,我们仅仅需要使用一个适合的框架就可以帮助我们快速建立这样的模型。以下是良好深度学习框架的一些主要特征:

1.   针对性能进行了优化

2.   易于理解和编码

3.   良好的社区支持

4.   并行化进程以减少计算

5.   自动计算渐变

1 Theano

Theano由LISA集团(现MILA)在加拿大魁北克的蒙特利尔大学开发,是在BSD许可证下发布的开源项目,它是用一位希腊数学家的名字命名的。 Theano是一个Python库,可用于定义、优化和计算数学表达式,特别是多维数组(numpy.ndarray)。在解决包含大量数据问题的时候,使用Theano编程可实现比C语言编程更快的运行速度。通过GPU加速,Theano甚至可以比基于CPU计算的C语言快好几个数量级。

Theano结合 CAS(Computer Algebra System,计算机代数系统)和优化编译器,还可以为多种数学运算生成定制的C语言代码。对于处理包含重复计算的复杂数学表达式任务,计算速度很重要,因此这种CAS和优化编译器的组合非常有用。对于需要将每种不同的数学表达式都计算一遍的情况,Theano可以最小化编译/解析计算量,但仍会给出如自动微分那样的符号特征。 在过去很长一段时间里,Theano是深度学习开发与研究的行业标准。出身学界的Theano最初是为学术研究而设计的,这使得深度学习领域的许多学者至今仍在使用Theano。

但随着TensorFlow在谷歌的支持下强势崛起,Theano日渐式微,使用的人越来越少。其中标志性事件是Theano的创始者之一Ian GoodFellow放弃Theano转去谷歌开发TensorFlow了。 2017年9月28日,在Theano 1.0正式版发布前夕,LISA实验室负责人、深度学习三巨头之一的Yoshua Bengio宣布Theano将停止开发:“Theano is Dead.”

尽管Theano将退出历史舞台,但作为第一个Python深度学习框架,它很好地完成了自己的使命—为深度学习研究人员早期拓荒提供了极大的帮助,同时也为之后深度学习框架的开发奠定了基本设计方向:以计算图为框架的核心,采用GPU加速计算。 对于深度学习新手,可以使用Theano做入门练习,但对于职业开发者,建议使用 TensorFlow。

2 TensorFlow

TensorFlow是Google Brain团队基于Google在2011年开发的深度学习基础架构DistBelief构建的。Google在其所有的应用程序中都使用TensorFlow实现机器学习,例如使用Google照相机和Google语音搜索功能,就间接使用了TensorFlow模型。

TensorFlow在很大程度上可以看作Theano的后继者,这不仅因为它们有很大一批共同的开发者,还因为它们拥有相近的设计理念,都基于计算图实现自动微分系统。TensorFlow 使用数据流图进行数值计算,图中的节点代表数学运算,图中的边代表在这些节点之间传递的多维数组。

Tensorflow是一款使用C++语言开发的开源数学计算软件,使用数据流图(Data Flow Graph)的形式进行计算。图中的节点代表数学运算,而图中的线条表示多维数据数组(tensor)之间的交互。Tensorflow灵活的架构可以部署在一个或多个CPU、GPU的台式及服务器中,或者使用单一的API应用在移动设备中。

Tensorflow是全世界使用人数最多、社区最为庞大的一个框架,因为Google公司出品,所以维护与更新比较频繁,并且有着Python和C++的接口,教程也非常完善,同时很多论文复现的第一个版本都是基于Tensorflow写的,所以是深度学习界框架默认的老大。

TensorFlow如此受欢迎的最大原因是,它支持多种语言来创建深度学习模型。比如Python,C++和R语言,它有适当的文档的演练指导。制作TensorFlow有很多组件,其中比较突出的两个是:

1.   TensorBoard:使用数据流图帮助实现有效的数据可视化

2.   TensorFlow:用于快速部署新算法/实验

3 MXNet

MXNet是亚马逊首席科学家李沐带领团队开发的深度学习框架,拥有类似Theano和TensorFlow的数据流图,为多GPU架构提供了良好的配置,拥有类似Lasagne和Blocks的高级别模型构建块,可以在我们需要的任何硬件上运行(包括手机)。除了支持Python,MXNet同样提供了对 R、Julia、C++、Scala、Matlab、Go和Java的接口。

MXNet因其超强的分布式、内存/显存优化能力受到开发者的欢迎。同样的模型,MXNet往往占用的内存和显存更小,在分布式环境下,MXNet展现出了明显优于其他框架的扩展性能。

MXNet的缺点是推广力度不够、接口文档不完善。虽然MXNet版本快速迭代,但官方API文档却长时间未更新,导致新用户难以掌握新版本的MXNet,而老用户又需要查阅源码才能真正理解MXNet接口的用法。MXNet文档比较混乱,不太适合新手入门,但其分布性能强大,语言支持比较多,比较适合在云平台使用。

4 Keras

Keras是一个高层神经网络API,使用Python编写,并将TensorFlow、Theano及CNTK作为后端。Keras为支持快速实验而生,能够快速实现开发者的想法。Keras目前是最容易上手的深度学习框架,它提供了一致且简洁的API,能够极大减少一般应用下用户的工作量。

相比于深度学习框架,Keras更像是一个深度学习接口,它构建于第三方框架之上。Keras的缺点很明显:过度封装导致丧失了灵活性。Keras最初作为Theano的高级API,后来增加了TensorFlow和CNTK作为后端。

为了屏蔽后端的差异性,Keras提供了一致的用户接口并做了层层封装,导致用户在新增操作或是获取底层的数据信息时过于困难。同时,过度封装也使得Keras的程序运行十分缓慢,许多Bug都隐藏于封装之中。在绝大多数场景下,Keras是本文介绍的所有框架中运行最慢的。

学习Keras十分容易,但是很快就会遇到瓶颈,因为它不够灵活。另外,在使用Keras的大多数时间里,用户主要是在调用接口,很难真正学习到深度学习的内容。

Keras的过度封装使其并不适合新手学习(无法理解深度学习的真正内涵),故不推荐。

5 PyTorch

PyTorch是一个Python优先的深度学习框架,能够在强大的GPU加速基础上实现张量和动态神经网络。

PyTorch提供了完整的使用文档、循序渐进的用户指南,作者亲自维护PyTorch论坛,方便用户交流和解决问题。

Facebook人工智能研究院FAIR对PyTorch的推广提供了大力支持。作为当今排名前三的深度学习研究机构,FAIR的支持足以确保PyTorch获得持续开发、更新的保障,不至于像一些个人开发的框架那样昙花一现。如有需要,我们也可以使用Python软件包(如NumPy、SciPy和Cython)来扩展 PyTorch。

相对于TensorFlow,PyTorch的一大优点是它的图是动态的,而TensorFlow框架是静态图,不利于扩展。同时,PyTorch非常简洁,方便使用。

如果说TensorFlow的设计是“Make it complicated”,Keras的设计是“Make it complicated and hide it”,那么PyTorch的设计则真正做到了“Keep it simple,stupid”。

6 Caffe

Caffe是基于C++编写的深度学习框架,作者是贾扬清,源码开放(具有Licensed BSD)并提供了命令行工具以及Matlab和Python接口。

Caffe一直是深度学习研究者使用的框架,很多研究人员在上面进行开发和优化,因而有了不少沉淀,因此Caffe也是流行的深度学习框架之一。尽管如此,Caffe也存在不支持多机、跨平台、可扩展性差等问题。初学使用Caffe还需要注意下面两个问题。

  • Caffe的安装过程需要大量的依赖库,因此涉及很多安装版本问题,初学者须多加注意。
  • 当用户要实现一个新的层,就需要用C++实现它的前向传播和反向传播代码,而如果想要新层运行在GPU上,则需要同时使用CUDA实现这一层的前向传播和反向传播。

Caffe2出自Facebook人工智能实验室与应用机器学习团队,贾杨清仍是主要贡献者之一。Caffe2在工程上做了很多优化,比如运行速度、跨平台、可扩展性等,它可以看作Caffe更细粒度的重构,但在设计上,Caffe2其实和TensorFlow更像。目前Caffe2代码已开源。

在工业界和学术界仍有很多人使用Caffe,而Caffe2的出现给我们提供了更多的选择。

7 Paddle Paddle 

PaddlePaddle是由百度自主开发的开源深度学习框架,中文名字飞桨。

官网截图也很有意思,很多小人在划桨。飞桨刚发布的时候,并不被看好,感觉更像是Google有,百度也要有的腔调。功能上,飞桨同时支持动态图和静态图,能方便的调试模型,方便的部署,非常适合业务应用的落地实现。飞桨也已经支持数百个节点的高效并行训练。可以说在过去几年的时间里,深度学习领域在大规模的落地应用,各家框架也都在快速的发展,但是百度的PaddlePaddle看来是这个阶段发展更快的框架,甚至是发展更快的AI开发生态。

截至2022年12月,飞桨已汇聚535万开发者,服务20万家企事业单位,基于飞桨开源深度学习平台构建了67万个模型。开源开放的飞桨已经成为中国深度学习市场应用规模第一的深度学习框架和赋能平台。飞桨助力开发者快速实现AI想法,快速上线AI业务。帮助越来越多的行业完成AI赋能,实现产业智能化升级。

8 DeepLearning4j

对于Java程序员,这是理想的深度学习框架。DeepLearning4j在java中实现,因此与Python相比更高效,它使用称为ND4J的张量库,提供了处理n维数组的能力。这个框架还支持GPU和CPU。

DeepLearning4j将加载数据和训练算法的任务视为单独的过程,这种功能分离提供了很大的灵活性。它同时也适用于不同的数据类型:

1.   图片

2.   CSV

3.   纯文本等

你可以使用DeepLearning4j构建的深度学习模型是:

1.   卷积神经网络(CNN)

2.   递归神经网络(RNN)

3.   长短记忆(LSTM)和许多其他架构

9 总结

深度学习框架的出现降低了入门的门槛,你不需要从复杂的神经网络开始编代码,你可以根据需要选择已有的模型,通过训练得到模型参数,你也可以在已有模型的基础上增加自己的layer,或者是在顶端选择自己需要的分类器和优化算法(比如常用的梯度下降法)。当然也正因如此,没有什么框架是完美的,就像一套积木里可能没有你需要的那一种积木,所以不同的框架适用的领域不完全一致。 总的来说深度学习框架提供了一系列的深度学习的组件(对于通用的算法,里面会有实现),当需要使用新的算法的时候就需要用户自己去定义,然后调用深度学习框架的函数接口使用用户自定义的新算法。

10 参考

1、百度百科-深度学习框架

2、陶嘟嘟-干货 | 5个常用的深度学习框架

3、腾讯云-详解 6 大主流深度学习框架

4、[人工智能-综述-4]:主流深度学习框架比较、排名


关于明柳梦少

坚守自己的原则,不随波逐流。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注