1.2 深度学习框架
深度学习是目前人工智能的重要发展方向,在开始深度学习项目之前,选择一个合适的框架是非常重要的,因为选择一个合适的框架能起到事半功倍的效果。研究者使用各种不同的框架来达到研究目的,也从侧面印证了深度学习领域的百花齐放。
在深度学习初始阶段,每个深度学习研究者都需要写大量的重复代码,为了提高工作效率,研究者就将这些代码写成了一个框架放到网上让所有研究者一起使用,接着网上就出现了不同的框架。随着时间的推移,最为好用的几个框架被大量的人使用从而流行了起来,全世界最为流行的深度学习框架有PaddlePaddle、TensorFlow、Caffe、Theano、MXNet、Torch和PyTorch。
1.PaddlePaddle
PaddlePaddle(飞桨)以百度多年的深度学习技术研究和业务应用为基础,是中国首个自主研发、功能完备、开源开放的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体。
目前,PaddlePaddle已凝聚超过265万开发者,服务企业10万家,基于飞桨开源深度学习平台产生了34万个模型。PaddlePaddle可以助力开发者快速实现AI想法,快速上线AI业务,帮助越来越多的行业完成AI赋能,实现产业智能化升级。
PaddlePaddle在业内率先实现了动静统一的框架设计,兼顾灵活性与高性能,并提供一体化设计的高层API和基础API,确保用户可以同时享受开发的便捷性和灵活性。
在大规模分布式训练技术上,PaddlePaddle率先支持了千亿稀疏特征、万亿参数、数百节点并行训练的能力,并推出了业内首个通用异构参数服务器架构,已达到国际领先水平。
PaddlePaddle拥有强大的多端部署能力,支持云端服务器、移动端以及边缘端等不同平台设备的高速推理;PaddlePaddle推理引擎支持广泛的AI芯片,已经适配和正在适配的芯片或IP达到29款,处于业界领先地位。
PaddlePaddle还围绕企业实际研发流程量身定制打造了大规模的官方模型库,算法总数达到270多个,服务企业遍布能源、金融、工业、农业等多个领域。
2.TensorFlow
Google(谷歌)开源的TensorFlow是一款使用C++语言开发的开源数学计算软件,使用数据流图(Data Flow Graph)的形式进行计算。图中的节点代表数学运算,而图中的线条表示多维数据数组(Tensor,张量)之间的交互。
TensorFlow灵活的架构可以部署在一台或多台具有多个CPU、GPU的台式机及服务器中,或者使用单一的API应用于移动设备中。TensorFlow最初是由研究人员和Google Brain(谷歌大脑)团队针对机器学习和深度神经网络进行研究而开发的,开源之后几乎可以在各个领域使用。
TensorFlow是全世界使用人数最多、社区最为庞大的一个框架,因为是Google公司出品的,所以维护与更新比较频繁,并且有着Python和C++的接口,教程也非常完善,同时很多论文复现的第一个版本的设计都是基于TensorFlow编写的,所以是深度学习界设计框架默认的老大。
3.Caffe
和TensorFlow名气一样大的是深度学习框架Caffe,由加州大学伯克利分校计算机科学博士获得者的贾扬清开发,全称是Convolutional Architecture for Fast Feature Embedding,是一个清晰而高效的开源深度学习框架,由伯克利视觉中心(Berkeley Vision and Learning Center,BVLC)进行维护。
Caffe对于卷积网络的支持特别好,同时也是用C++写的,提供C++接口,也提供MATLAB接口和Python接口。
Caffe之所以流行,是因为之前很多ImageNet比赛里面使用的网络都是用Caffe编写的,所以如果想使用这些比赛的网络模型就只能使用Caffe,这也就导致很多人直接转到Caffe这个框架下面。
Caffe的缺点是不够灵活,同时内存占用高,Caffe的升级版本Caffe 2已经开源了,修复了一些问题,同时工程水平得到了进一步提高。
4.Theano
Theano于2008年诞生于蒙特利尔理工学院,其派生出了大量的深度学习Python软件包,最著名的包括Blocks和Keras。Theano的核心是一个数学表达式的编译器,它了解如何获取结构,并将其转化为高效代码,以便在CPU或GPU上尽可能快地运行NumPy高效的本地库,如BLAS和本地代码(C++)。它是为深度学习中处理大型神经网络算法所需的计算而专门设计的,是这类库的首创之一(发展始于2007年),被认为是深度学习研究和开发的行业标准。
但是开发Theano的研究人员大多去了Google参与TensorFlow的开发,所以某种程度来讲,TensorFlow就像Theano的孩子。
5.MXNet
MXNet的主要作者是李沐,最早就是几个人抱着纯粹对技术和开发的热情做起来的,如今成为亚马逊的官方框架,有着非常好的分布式支持,而且性能特别好,占用显存低,同时它开发的语言接口不仅有Python和C++,还有R、MATLAB、Scala、JavaScript等,可以说能够满足使用任何语言的人。
但是MXNet的缺点也很明显,教程不够完善,使用的人不多,导致社区不大,同时每年很少有比赛和论文是基于MXNet实现的,这就使得MXNet的推广力度和知名度不高。
6.Torch
Torch是一个有大量机器学习算法支持的科学计算框架,它已经存在了10年,但真正开始流行起来是因为Facebook开源了大量Torch的深度学习模块和扩展。Torch的特点在于非常灵活,但另一个特殊之处是采用了Lua编程语言。在深度学习大部分以Python为编程语言的环境下,一个以Lua为编程语言的框架处于不小的劣势,这使得使用Torch框架的学习成本更高。
7.PyTorch
PyTorch是2017年1月FAIR(Facebook AI Research)发布的一款深度学习框架,从名称可以看出,PyTorch是由Py和Torch构成的。
PyTorch提供了两个高级功能:一是具有强大的GPU加速的张量计算(如NumPy);二是包含自动求导系统的深度神经网络。
PyTorch的前身便是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。
除了Facebook外,PyTorch已经被Twitter、CMU和Salesforce等机构采用。
深度学习框架的出现降低了深度学习入门的门槛,不需要从复杂的神经网络开始编代码,可以根据需要选择已有的模型,通过训练得到模型参数,也可以在已有模型的基础上增加自己的神经网络层(Layer),或者是在顶端选择自己需要的分类器和优化算法(比如常用的梯度下降法)。当然正因如此,没有什么框架是完美的,就像一套积木里可能没有需要的那一种积木,所以不同的框架适用的领域不完全一致。总的来说,深度学习框架提供了一系列的深度学习组件(包括通用算法的实现),当需要使用新的算法时,用户需要自行定义并调用深度学习框架提供的函数接口来使用用户自定义的新算法。
经过这些年的发展,PyTorch受到越来越多从业者的使用和青睐,目前学术界大量使用该框架,参与这些学术研究的学生毕业之后将逐渐进入产业界,因此PyTorch必定在将来得到越来越广泛的应用。