深度学习框架的来龙去脉——史上最全⾯最新的深度学习框架
对⽐分析
⼀、深度学习框架概述与深度学习技术的四⼤阵营
python怎么读取桌面上的文件⼈⼯智能从学术理论研究到⽣产应⽤的产品化开发过程中通常会涉及到多个不同的步骤和⼯具,这使得⼈⼯智能开发依赖的环境安装、部署、测试以及不断迭代改进准确性和性能调优的⼯作变得⾮常繁琐耗时也⾮常复杂。为了简化、加速和优化这个过程,学界和业界都作了很多的努⼒,开发并完善了多个基础的平台和通⽤⼯具,也被称会机器学习框架或深度学习框架。有了这些基础的平台和⼯具,我们就可以避免重复发明轮⼦,⽽专注于技术研究和产品创新。这些框架有早期从学术界⾛出的Caffe、 Torch和Theano,到现在产业界由Google领导的TensorFlow,Amazon选择押注的MXNet,Facebook倾⼒打造的PyTorch,Microsoft内部开源的CNTK等等。
哪⼀个深度学习框架是最好⽤呢?哪⼀个深度学习框架更适合⾃⼰呢?这真是⼀个⼗分让⼈纠结的问题。不过,在你选择站队之前,不妨和我⼀起来了解⼀下各个框架的来龙去脉,先看⼀看哪⼀个框架更能激发起你的兴趣,有了兴趣,剩下的问题就变得简单了,我们能够透过浮躁的排名和对⽐,深⼊研究这些框架背后的设计思想与技术本质。让每⼀个框架的优点都能为我所⽤。
当前主流的深度学习框架列表:
1.    TensorFlow
2.    Keras
3.    PyTorch
4.    MXNet
5.    Caffe
6.    Caffe2
7.    Theano
8.    FastAI
9.    CNTK
10.  Gluon
11.  Torch
12.  Deeplearning4j
13.  Chainer
其它⼩众深度学习框架还有如亚马逊曾经使⽤的深度学习引擎DSSTNE,卡耐基梅隆⼤学的⼩众DyNet,Intel开源的基于Spark且只能运⾏在Intel CPU芯⽚之上的深度学习库BigDL,Nervana开发的基于Python的深度学习库Neon,简洁⽆依赖且符合C++11标准的tiny-dnn,基于Theano的轻量级的库Lasagne等。
这其中有⼏个框架曾经辉煌过,但是现在已经被更新的框架取代了,或者被新⼀代的版本收编了,我们称他们为没落的贵族,如Torch,基于Python的版本PyTorch已经取代了Torch。Caffe与Caffe2,Facebook已经把Caffe和Caffe2与PyTorch进⾏了整合,推出了全新的PyTorch 1.0,资历最⽼的框架之⼀Theano的创始⼈已经转投TensorFlow,已经停⽌更新维护⾛向没落了。
基于Java和Scala的开源的分布式深度学习库Deeplearning4J在深度学习领域缺少像Python这样强⼤的社区⽀持,⽇本公司Preferred Networks开源的Chainer曾经是动态计算图的⾸选框架,特别适⽤于⾃然语⾔处理,但后来MXNet,PyTorch等也⽀持了这个特性,其优势也不复存在了。由于没有巨头的⽀持,Deeplearning4J和Chainer都只能默默的发展。
看起来我们好像有很多很多选择,但其实如果我们进⼀步进⾏细分,就会发现我们的选择也并不是很多,没有巨头背书的框架就只能⾯临被淘汰和边缘化的命运了,其实顶级深度学习框架只有四⼤阵营,或者说是四⼤门派,Google领导的TensorFlow,Amazon选择的MXnet,Facebook倾⼒打造的PyTorch,Microsoft把内部核⼼技术开源的CNTK。虽然Keras等框架在深度学习框架中排名很⾼,但它却不是⼀个独⽴框架,⽽是作为前端对底层引擎进⾏上层封装的⾼级API层,提升易⽤性,此类深度学习框架的⽬标是只需⼏⾏代码就能让你构建⼀个神经⽹络,这类框架还有FastAI和Gluon。好在每⼀个前端上层轻量级框架⼜都对应⼀个最适合的基础底层框架,这样就出现了深度学习框架的四⼤技术⽅向,每⼀个技术⽅向背后⼜都有⼀个巨头在背书和推动。
深度学习框架的四⼤阵营与其技术⽅向分别为:
(1)TensorFlow,前端框架Keras,背后巨头Google;
(2)PyTorch,前端框架FastAI,背后巨头Facebook;
(3)MXNet,前端框架Gluon,背后巨头Amazon;
(4)Cognitive Toolkit (CNTK),前端框架Keras或Gluon,背后巨头Microsoft。
⼆、主流开源深度学习框架的来龙去脉
下⾯我们对每个主流框架的来龙去脉都来做⼀个详细的梳理与了解。
Google在2015年11⽉正式开源发布TensorFlow,TensorFlow由Google⼤脑团队开发,其命名来源于本⾝的运⾏原理。由于Google的巨⼤影响⼒和巨⼤⽀持,很快就成为深度学习领域占据绝对统治地位的框架。很多企业都在基于TensorFlow 开发⾃⼰的产品或将TensorFlow整合到⾃⼰的产品中去,如Airbnb、Uber、Twitter、英特尔、⾼通、⼩⽶、京东等。
Google⼤脑⼀开始是Google X的⼀个研究项⽬,2011年,Google⼤脑的雏形起源于⼀项斯坦福⼤学与⾕歌公司的联合研究项⽬,由Google Fellow杰夫·迪恩(Jeff Dean)、研究员格雷科拉多(Greg Corrado)与斯坦福⼤学⼈⼯智能教授吴恩达(Andrew Ng)共同发起,把深度学习技术带到了⼈⼯智能问题的解决中,并建⽴起了第⼀代⼤型深度学习软件系统DistBelief,这是⼀个运⾏在⾕歌云计算平台上的⼀个服务。随后,Google在其商业产品⼴泛应⽤部署了DistBelief的深度学习神经⽹络,包括搜索、YouTube、语⾳搜索、⼴告、相册、地图、街景和Google翻译等。
2013年3⽉,Google收购了DNNResearch,DNNResearch创始⼈Geoffrey Hinton也由此进⼊Google⼤脑团队⼯作。Google指派Geoffrey Hinton和Jeff Dean等开始简化和重构DistBelief的代码库,使其变成⼀个更快、更健壮的应⽤级别代码库,形成了TensorFlow。对DistBelief 进⾏了多⽅⾯的改进后,
使其可在⼩到⼀部⼿机,⼤到数千台数据中⼼服务器的各种设备上运
⾏,TensorFlow也成为了基于 DistBelief 进⾏研发的第⼆代⼈⼯智能学习系统,可被⽤于语⾳识别或图像识别等多想机器学习和深度学习领域。⼀个突破性的成果是在2012年6⽉Google⼤脑⽤16000台电脑模拟⼈类电脑的活动,并在学习1000万张图像后,成功在YouTube视频中出了“猫”,这可能意味着机器第⼀次有了猫的概念。
Google在2014年1⽉⼜收购了英国DeepMind,DeepMind成为⾕歌⼤脑之外另⼀个研究⼈⼯智能⽅向的团队。DeepMind在4年来的⾸要的⼈⼯智能研究平台是开源软件Torch7机器学习库,Torch7⾮常灵活和快速,能够快速建模。在Google的⼤⼒⽀持下,AlphaGo横空出世,使⼈⼯智能第⼀次战胜⼈类职业围棋⾼⼿,轰动世界,以⼀⼰之⼒推动⼈⼯智能应⽤到了⼀个新的⾼度。2016年4⽉,DeepMind 宣布将开始在将来所有的研究中开始使⽤TensorFlow。这样Google的两⼤⼈⼯智能团队也统⼀到了统⼀的深度学习框架TensorFlow上。
TensorFlow的编程接⼝⽀持C++和Python,Java、Go、R和Haskell API也将被⽀持,是所有深度学习框架中对开发语⾔⽀持的最全⾯的,TensorFlow可以在AWS和Google Cloud中运⾏,⽀持Windows 7、Windows 10、Windows Server 2016,TenserFlow使⽤
C++ Eigen库,可以在ARM架构上编译和优化,使其可以在各种服务器和移动设备上部署⾃⼰的训练
模型,也是在所有深度学习框架中⽀持运⾏平台最多的。TensorFlow基于计算图实现⾃动微分系统,使⽤数据流图进⾏数值计算,图中的节点代表数学运算,图中的线条则代表在这些节点之间传递的张量(多维数组)。TensorFlow追求对运⾏平台和开发语⾔最⼴泛的⽀持,⼒求统⼀深度学习领域,但是这也带来了过于复杂的系统设计,TensorFlow在GitHub上的总代码数已经超过100万⾏了,TensorFlow在接⼝设计中创造了很多新的抽象概念,如图、会话、命名空间和Place-Holder等,同⼀个功能⼜提供了多种实现,使⽤上可能有细微的区别,频繁的接⼝变动也导致了向后兼容性上的问题。由于直接使⽤TensorFlow过于复杂,包括Google官⽅在内的很多开发者尝试构建⼀个⾼级API作为TensorFlow更易⽤的接⼝,包括Keras、Sonnet、TFLearn、TensorLayer、Slim、Fold、PrettyLayer等,其中Keras在2017年成为第⼀个被Google添加到TensorFlow核⼼中的⾼级别框架,这让Keras变成TensorFlow的默认API,使Keras + TensorFlow的组合成为Google官⽅认可并⼤⼒⽀持的平台。TensorFlow仍在快速的发展中,是最具野⼼和最具统治⼒的深度学习框架,⼗分期待2019年即将发布的TensorFlow 2.0带来的新技术。
Keras是第⼆流⾏的深度学习框架,但并不是独⽴框架。Keras由纯Python编写⽽成,以TensorFlow、Theano或CNTK为底层引擎。Keras是在Tensorflow上层封装的⾼级API层,提升易⽤性。Keras的⽬标是只需⼏⾏代码就能让你构建⼀个神经⽹络。
Keras的创造者是⾕歌AI研究员Francois Chollet,也同时参与TensorFlow的开发,最初创建Keras是为了⾃⼰有⼀个好的⼯具来使⽤RNNs。在研究LSTM在⾃然语⾔处理中的应⽤时⽤Theano做了⼀个可重⽤的开源实现,逐渐变成了⼀个框架,并命名为Keras。Keras在2015年3⽉开源,最初因为同时⽀持CNN和RNN,可以通过Python代码⽽不是通过配置⽂件来定义模型等特点⽽逐渐流⾏起来。2017年,Keras成为第⼀个被Google添加到TensorFlow核⼼中的⾼级别框架,这让Keras变成Tensorflow的默认API,使Keras + TensorFlow的组合成为Google官⽅认可并⼤⼒⽀持的平台。
学习使⽤Keras很容易,但是⼤多数时间都在学习如何调⽤接⼝,难以真正学习到深度学习的内容,Keras层层封装让⽤户在新增操作或获取底层的数据信息时过于困难,存在过度封装导致缺乏灵活性的问题,性能也存在瓶颈。Keras有助于快速⼊门,但是不应该依赖它,需要进⼀步学习使⽤TensorFlow。
PyTorch是Facebook开发的⽤于训练神经⽹络的Python包,也是Facebook倾⼒打造的⾸选深度学习框架,在2017年1⽉⾸次推
出,Facebook⼈⼯智能研究院(FAIR)在GitHub上开源了PyTorch,迅速占领了GitHub热度榜榜⾸,Facebook⽤Python重写了基于Lua语⾔的深度学习库Torch,PyTorch不是简单的封装Torch提供Python接⼝,⽽是对Tensor上的全部模块进⾏了重构,新增了⾃动求导系统,使其成为最流⾏的动态
图框架,这使得PyTorch对于开发⼈员更为原⽣,与TensorFlow相⽐也更加年轻更有活⼒,PyTorch继承了Torch灵活、动态的编程环境和⽤户友好的界⾯,⽀持以快速和灵活的⽅式构建动态神经⽹络,还允许在训练过程中快速更改代码⽽不妨碍其性能,即⽀持动态图形等尖端AI模型的能⼒,是快速实验的理想选择。
PyTorch专注于快速原型设计和研究的灵活性,很快就成为AI研究⼈员的热门选择,流⾏度的增长⼗分迅猛,现在已经是第⼆流⾏的独⽴框架。PyTorch的社区迅速发展起来。PyTorch 现在是GitHub 上增长速度第⼆快的开源项⽬,在过去的12个⽉⾥,贡献者增加了2.8倍。这个增速是⼗分可怕的,意味着PyTorch成为现在最受关注的深度学习框架,能够挑战TensorFlow的霸主地位。
2018年12⽉08号,在 NeurIPS ⼤会上,Facebook 正式发布 PyTorch 1.0稳定版,⽬前领导PyTorch 1.0核⼼开发⼯作的是Facebook的AI基础设施技术负责⼈Dmytro Dzhulgakov。Caffe的作者贾扬清发⽂介绍PyTorch 1.0 = Caffe2 + PyTorch。现
在,PyTorch 1.0已经为⼤量Facebook产品和服务提供了⽀持,包括每天执⾏60亿次⽂本翻译。
根据贾扬清发⽂介绍,PyTorch 1.0拥有能在命令式执⾏模式和声明式执⾏模式之间⽆缝转换的混合前端,这样就不需要开发⼈员通过重写代码来优化性能或从Python迁移,能够⽆缝地共享⽤于原型设计的即时模式和⽤于⽣产环境的图执⾏模式之间的⼤部分代码。PyTorch 1.0将即时模式和图执⾏模式融
合在⼀起,既具备研究的灵活性,也具备⽣产所需的最优性能。
PyTorch 1.0重构和统⼀了Caffe2和PyTorch 0.4框架的代码库,删除了重复的组件并共享上层抽象,得到了⼀个统⼀的框架,⽀持⾼效的图模式执⾏、移动部署和⼴泛的供应商集成等。这让开发⼈员可以同时拥有PyTorch和Caffe2的优势,同时做到快速验证和优化性能。PyTorch的命令式前端通过其灵活⽽⾼效的编程模型实现了更快速的原型设计和实验,⼜吸取了Caffe2和ONNX的模块化以及⾯向⽣产的特点,使得深度学习项⽬能从研究原型快速⽆缝衔接到⽣产部署,在⼀个框架中统⼀实验研究和⽣产能⼒。
Theano最早始于2007,以⼀个希腊数学家的名字命名,早期开发者是蒙特利尔⼤学的Yoshua Bengio 和 Ian Goodfellow。Theano是最⽼牌和最稳定的库之⼀,是第⼀个有较⼤影响⼒的Python深度学习框架,早期的深度学习库的开不是Caffe就是Theano。
Theano是⼀个⽐较底层的Python库,这⼀点上和TensorFlow类似,专门⽤于定义、优化和求值数学表达式,效率⾼,⾮常适⽤于多维数组,所以特别适合做机器学习。Theano可以被理解为⼀个数学表达式的编译器,Theano框架会对⽤符号式语⾔定义的程序进⾏编译,来⾼效运⾏于 GPU 或 CPU上。但是Theano不⽀持分布式计算,这使其更适合于在实验室的学习⼊门,并不适⽤于⼤型的⼯业界的项⽬,这可能是其技术上落后的⼀个重要原因。
Theano来⾃学界,它最初是为学术研究⽽设计,这使得深度学习领域的许多学者⾄今仍在使⽤ Theano,但Theano在⼯程设计上有较⼤的缺陷,有难调试,构建图慢的缺点,开发⼈员在它的基础之上,开发了Lasagne、Blocks、PyLearn2和Keras上层接⼝封装框架。但随着Tensorflow 在⾕歌的⼤⼒⽀持下强势崛起,使⽤Theano的⼈已经越来越少了。标志性的事件就是创始者之⼀的 Ian Goodfellow 放弃Theano 转去⾕歌开发 Tensorflow了。⽽另⼀位创始⼈Yoshua Bengio 于 2017 年 09 ⽉宣布不再维护 Theano,所以这个项⽬事实上已经宣告死亡了。基于 Theano 的前端轻量级的神经⽹络库,如 Lasagne和Blocks也同样没落了。但我们可以说,Theano作为第⼀个主要的Python深度学习框架,已经完成了⾃⼰的使命,为早期的研究⼈员提供了强⼤的⼯具和很⼤的帮助,为后来的深度学习框架奠定了以计算图为框架核⼼ ,采⽤GPU加速计算的基本设计理念。
Caffe的全称是Convolutional Architecture for Fast Feature Embedding,意为“⽤于特征提取的卷积架构”,它是⼀个清晰、⾼效的深度学习框架,核⼼语⾔是C++。作者是贾扬清,贾扬清在清华⼤学获得本科和硕⼠学位。在UC Berkeley获得计算机科学博⼠学位。他曾在Google Brain⼯作,参与过TensorFlow的开发。贾扬清现在是Facebook AI架构总监,但据2019年3⽉的最新消息贾扬清可能加⼊阿⾥巴巴任VP。Caffe最初发起于2013年9⽉,从贾扬清⽤NVIDIA的学术捐赠的⼀块K20 GPU开始攒了⼀个机器开始,然后⽤⼤概两个多⽉的时间写了整个架构和ImageNet所需要的各个实现。12⽉份正
式在Github上发布开源。
Caffe是⼀款⼗分适合深度学习⼊门的开源框架,它的代码和框架都⽐较简单,代码易于扩展,运⾏速度快,也适合深⼊学习分析。正是由于Caffe有着更⼩的系统框架,使得⼀些探索性的实验更加容易⼀些。即使在Google⼯作时,贾扬清仍然会经常使⽤Caffe来做⼀些快速的prototype和实验,Google的研究⼈员通常使⽤各种⾃⼰熟悉的开源框架来进⾏⼩规模的研究,然后⽤DistBelief(Google Brain的⼤规模的机器学习框架)来作为⼀个通⽤的框架实现⼤规模产品级别的部署。
在Caffe之前,深度学习领域缺少⼀个完全公开所有的代码、算法和各种细节的框架,导致很多的研究⼈员和博⼠需要⼀次⼜⼀次重复实现相同的算法,所以说Caffe对于深度学习开源社区的贡献⾮常⼤,Caffe是学术界和业界公认的最⽼牌的框架之⼀,是很多⼈⼊门的基础。
Caffe不⽀持分布式,与其它更新的深度学习框架相⽐,Caffe确实不够灵活,⽂档也不够⽤,Caffe的安装也⽐较复杂,安装需要解决⼤量的依赖包。⼤家会发现套⽤原有模型很⽅便,但个性化就要读源代码,灵活性明显不⾜,为模型做调整常常需要⽤ C++ 和 CUDA编程,虽然使⽤Python 和Matlab 也能做⼀些⼩调整。与Keras过度封装导致缺乏灵活性不同,Caffe缺乏灵活性主要是由于其⾃⾝的设计,在Caffe中最主要的抽象对象是层,每实现⼀个新层,必须要利⽤C++实现其前向传播和反向传播代码,如果需要新层在GPU上运⾏,还需要同时⽤CUDA实现这⼀层的前向传播和反向传播,这让不
熟悉C++和CUDA的⽤户扩展Caffe⾮常困难。这也是由于Caffe最初定位在科研上⾯,并假设说⼤家都会有⼀定的时间和精⼒来读代码。
与Theano的没落与终结不同,随着贾扬清在2016年2⽉加⼊Facebook,2016年11⽉,贾扬清在 Facebook 官⽹发⽂,介绍了
Caffe2go,它使⽤Unix理念构建的轻量级、模块化框架,核⼼架构⾮常轻量化,可以附加多个模块,是⼀个在⼿机上也能运⾏神经⽹络模型,可以在移动平台上实时获取、分析、处理像素。Caffe2go规模更⼩、训练速度更快、对计算性能要求较低。Caffe2go是Facebook继Torch后的第⼆个AI平台,因为其⼤⼩、速度和灵活性上的优势,Facebook曾将Caffe2go推上了战略地位,和研究⼯具链Torch⼀起组成了Facebook 机器学习产品的核⼼。
2017年4 ⽉ 18 ⽇,Facebook 开源了 Caffe2,Facebook 的AI双平台定位已经清晰了,Caffe2 的开发重点是性能和跨平台部
署,PyTorch 则专注于快速原型设计和研究的灵活性。Caffe2⼀开始的定位就是⼯业界产品级别的⼀个轻量化的深度学习算法框架,更注重模块化,⽀持⼤规模的分布式计算,⽀持跨平台,如同 Tensor
Flow,Caffe2 使⽤ C++ Eigen 库,⽀持 ARM 架构。并且为移动端实时计算做了很多优化,⽀持移动端iOS, Android, 服务器端Linux, Mac, Windows, 甚⾄⼀些物联⽹设备如Raspberry Pi, NVIDIA Jetson TX2等平台部署。Caffe2将AI⽣产⼯具标准化,⽬前全球各地的Facebook服务器和超过10亿部⼿机通过Caffe2运⾏神经⽹络,其中包含了最新的iPhone和Android⼿机。
虽然Facebook的Caffe2和PyTorch两个团队⼀直在独⽴的发展,但是⼆者的组件已经被⼤量共享,双⽅也意识到将各⾃的优势特性整合到⼀个包中的重要性,实现从快速原型到快速部署执⾏的平稳过渡是有重要意义的,这样也可以轻松地使⽤共享⼯具提⾼开发效率。最终可以将 PyTorch 前端的灵活⽤户体验与 Caffe2 后端的扩展、部署和嵌⼊式功能相结合。在2018年12⽉的 NeurIPS ⼤会上,Facebook 正式发布 PyTorch 1.0稳定版,⽀持AWS、⾕歌云、微软Azure等云平台。贾扬清发⽂介绍PyTorch 1.0 = Caffe2 + PyTorch,⾄
此,Facebook的AI深度学习框架正式统⼀。Caffe, Caffe2, Torch, PyTorch的⽤户们都不⽤再纠结了,有了统⼀明确的技术架构与技术路线,就是PyTorch 1.0。
Torch在2002年诞⽣于纽约⼤学Torch,后续加⼊了深度学习的内容,是⼀个著名开源深度学习框架,是BSD3协议下的开源项⽬。由Facebook的Ronan Collobert和Soumith Chintala,Twitter的Clement F
arabet,DeepMind的Koray Kavukcuoglu共同开发和维护,所以Torch7⾃然也成为Facebook和DeepMind⼀开始使⽤的深度学习⼯具,Twitter和英伟达也都使⽤定制版的Torch⽤于⼈⼯智能研究,DeepMind在被Google收购后转向了TensorFlow。
Torch的编程语⾔为1990 年代诞⽣于巴西的 Lua,Lua相当于⼀个⼩型加强版的C,⽀持类和⾯向对象,运⾏效率极⾼,所以需要先学习Lua语⾔然后才能使⽤Torch,在开发⼈员没有熟练掌握Lua之前,使⽤Torch很难提⾼开发的整体⽣产⼒。其实Lua和Python都属于⽐较容易⼊门的语⾔,但Python很明显已经抢先统治了机器学习领域,⼤多数开发⼈员都不愿意为了使⽤⼀个框架⽽学习⼀门新语⾔,相反,⼀些开发⼈员在学习并掌握⼀门新语⾔后才会愿意使⽤基于这门语⾔的框架,这⼀点使Torch的进⼀步发展受到了限制,并导致Torch推⼴的困难。
Torch是命令式的,因此与TensorFlow和Theano相⽐,Torch的灵活度更⾼,⽽前两者是陈述式的(declarative),必须declare⼀个计算图。Torch ⾮常适⽤于卷积神经⽹络,Torch的原⽣交互界⾯⽐其他框架⽤起来更⾃然、更得⼼应⼿。第三⽅的扩展⼯具包提供了丰富的递归神经⽹络RNN模型。
FastAI不是⼀个独⽴的深度学习框架,⽽是⼀个基于PyTorch的上层封装的⾼级API层,提升PyTorch的易⽤性,⽬标是只需⼏⾏代码就能让你构建⼀个神经⽹络。FastAI并不是简单意义上的将PyTorch封
装了⼀遍,⽽是类似于Keras与TensorFlow的关系,充分借鉴了Keras,将PyTorch的强⼤性易⽤化。
FastAI的作者Jeremy Howard,Jeremy Howard也是Kaggle的主席,写过⼀篇Introducing Pytorch for fast.ai,讨论为何FastAI从使⽤Keras转向创建⾃⼰的框架。FastAI的出品⽅是fast.ai,提供⼤量免费机器学习课程,有业界有⼀定的影响⼒,fast.ai也是美国军⽅的合作伙伴,研究如何加速⼈⼯智能技术的发展。
FastAI最初的版本在2018年9⽉发布,FastAI 1.0版本在2018年10⽉Facebook开发者⼤会上和Facebook的PyTorch 1.0 rc1预览版⼀起发布,在实验和测试⽐拼中,⽤5⾏代码就可以完成Keras⽤31⾏才能解决的事情,因此,在Hacker News上关注度⽐PyTorch 1.0还⾼,FastAI基于PyTorch 1.0框架,也被Facebook官⽅重点宣传。
MXNet是⼀个轻量级、可移植、灵活的分布式的开源深度学习框架,也是Amazon官⽅主推的深度学习框架,MXNet ⽀持卷积神经⽹络(CNN)、循环神经⽹络(RNN)和长短时间记忆⽹络(LTSM),为图像、⼿写⽂字和语⾳的识别和预测以及⾃然语⾔处理提供了出⾊的⼯具。
MXNet项⽬诞⽣于2015年9⽉,作者是当时在卡耐基梅隆⼤学CMU读博⼠的李沐,MXNet 在2016年1
1⽉被亚马逊选为官⽅开源平
台,2017年1⽉23⽇,MXNet项⽬进⼊Apache基⾦会,成为Apache的孵化器项⽬。Amazon和Apache的双重认可使其⽣命⼒更加强⼤,成为能够与Google的TensorFlow,Facebook的PyTorch和微软的CNTK分庭抗礼的顶级深度学习框架。值得⼀提的是,其实MXNet 的很多作者都是中国⼈,其最⼤的贡献组织为百度。
Amazon的AWS虽然⽀持TensorFlow等主流深度学习框架,但是Amazon不会傻到为Google做嫁⾐⽽依赖Tensorflow,深度学习技术平台太重要了,Amazon不会受制于⼈。Amazon之所以选择MXNet作为⾸选开源深度学习框架与平台与李沐在 CMU 的两位博⼠导师之⼀的Alex Smola有很⼤的关系,2015 年Alex从CMU重返⼯业界,加⼊亚马逊AWS 担任机器学习 总监。
在2014年NIPS上,同为上海交⼤校友的陈天奇和李沐在讨论到各⾃在做深度学习Toolkits的项⽬时,发现他们都在做很多重复性的⼯作,如⽂件加载等,于是他们⼜拉来⼏个优秀的C++机器学习系统的开发⼈员共同成⽴了DMLC(Distributed (Deep) Machine Learning Community),⼀个⼩的机器学习爱好者圈⼦,号召⼤家发挥各⾃所长,⼀起合作开发,发起了通过配置来定义和训练神经⽹络的CXXNet和提供类似numpy⼀样的张量计算接⼝的Minerva两个深度学习项⽬,本意是更⽅便共享各⾃项⽬的代码,并给⽤户提供⼀致的体验。CXXNet擅长使⽤卷积神经⽹络进⾏图⽚分类,但它的灵活性
不⾜,⽤户只能通过配置来定义模型,⽽⽆法进⾏交互式的编程。Minerva则更灵活,但不够稳定,李沐想同时给两个项⽬做分布式的扩展,后来⾃然想到把两个项⽬合并起来,于是就有了MXNet,可以读作“mix net”,其名字来⾃Minerva的M和CXXNet的XNet。其中Symbol的想法来⾃CXXNet,⽽NDArray的想法来⾃Minerva。
⽬前主流的深度学习系统⼀般采⽤命令式编程(imperative programming,⽐如 Torch)或声明式编程(declarative programming,⽐如 Caffe,theano 和 TensorFlow)两种编程模式中的⼀种,⽽ MXNet 尝试将两种模式结合起来,在命令式编程上 MXNet 提供张量运算,⽽声明式编程中 MXNet ⽀持符号表达式。⽤户可以根据需要⾃由选择,同时,MXNet ⽀持多种语⾔的 API 接⼝,包括 Python、C++(并⽀持在 Android 和 iOS 上编译)、R、Scala、Julia、Matlab 和 JavaScript。
MXNet长期处于快速迭代的过程中,⽂档却长时间没有更新,导致新⽤户难以上⼿,⽼⽤户也需要查阅源码才能理解MXNet接⼝的⽤法,为了完善MXNet的⽣态圈并推⼴,MXNet先后推出了MinPy,Keras和Gluon等⾼级API封装接⼝,但⽬前前两个⾼级接⼝已经停⽌了开发,Gluon模仿了PyTorch的接⼝设计,成为李沐和Amazon主推的配套MXNet使⽤的上层API。
MXNet的优势是分布式⽀持和对内存、显存的明显优化,同样的模型,MXNet往往占⽤更⼩的内存和显存,在分布式环境下,MXNet的扩展性能也显⽰优于其他框架。Keras作Francois Chollet认为除了T
ensorFlow,MXNet和它的⾼级API接⼝Gluon也很有前景,与TensorFlow⼀样,MXNet是为数不多的具有实际⽣产级和可扩展性的框架。亚马逊有⼀个庞⼤的团队在很认真的⽀持MXNet,成为了MXNet背后强⼤的⼯程⼒量。
2017年10⽉20⽇,Amazon和 Microsoft 联合发布了Gluon,Gluon是⼀种新的动态计算图的开源深度学习框架的⾼级接⼝,简⽽⾔之,是⼀个基于MXNet深度学习框架的类似Keras和FastAI的上层API接⼝,但其最⼤的特点是Gluon同时⽀持灵活的动态图和⾼效的静态图,⽀持符号式和命令式编程的API,⽀持⾼度可扩展的训练,能够⾼效的评估模型,可帮助开发⼈员更轻松、更快速地构建机器学习模型,⽽不牺牲任何性能。Gluon现已在Apache MXNet 中可⽤,后续将⽀持Microsoft Cognitive Toolkit及其他架构。微软Azure的所有服务、⼯具和基础结构也将全⾯⽀持Gluon。