人工智能从学术理论研究莅临盆运用的产品化开拓过程中常日会涉及到多个不同的步骤和工具,这使得人工智能开拓依赖的环境安装、支配、测试以及不断迭代改进准确性和性能调优的事情变得非常繁琐耗时也非常繁芜。为了简化、加速和优化这个过程,学界和业界都作了很多的努力,开拓并完善了多个根本的平台和通用工具,也被称会机器学习框架或深度学习框架。有了这些根本的平台和工具,我们就可以避免重复发明轮子,而专注于技能研究和产品创新。这些框架有早期从学术界走出的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一开始的定位便是工业界产品级别的一个轻量化的深度学习算法框架,更看重模块化,支持大规模的分布式打算,支持跨平台,犹如 TensorFlow,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 Farabet,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年11月被亚马逊选为官方开源平台,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认为除了TensorFlow,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。
微软的人工智能工具包是CNTK,CNTK 全名为Computational Network Toolkit,2016年1月26日宣告在GitHub上开源,10月份又更命名为微软认知工具包Microsoft Cognitive Toolkit。CNTK最初是面向语音识别的框架,早在2014年,黄学东博士和他的团队正在对打算机能够理解语音的能力进行改进,但是手上的工具却延缓了他们的进度,一组自发组成的团队构想设计了一个全新的方案,由此出身了CNTK,微软语音识别研究团队在语音识别上不断冲破天下记录并逼近人类水准,使得微软的技能受到广泛关注,在处理图像、手写字体和语音识别问题上,它都是很好的选择。Cognitive Toolkit工具包在微软内部被广泛利用,微软的人工智能工具包跟其他工具包最大的不同在于数据,Cognitive Toolkit的数据都来自于微软自己的大规模生产数据。包括Cortana、Bing以及Cognitive Services中的Emotion API,这些都是用Cognitive Toolkit创建出来的。
CNTK基于C++架构,Python或C++编程接口,CNTK 支持 64 位的 Linux 和 Windows 系统,在 MIT 容许证下发布。支持跨平台的CPU/GPU 支配。CNTK 在 Azure GPU Lab 上显示出最高效的分布式打算性能。但CNTK现在还不支持ARM 架构,使其在移动设备上的功能受到了限定。
Deeplearning4J,简称DL4J,是一个基于Java和Scala的开源的分布式深度学习库,开拓措辞是Java,由Skymind于2014年6月发布,DeepLearning4j的目标是供应一个即插即用的面向生产环境和商业运用的高成熟度深度学习开源库,可以方便的与Hadoop和Spark集成。DL4J选择Java作为其开拓措辞的缘故原由在于目前基于Java的分布式打算、云打算、大数据的生态和开拓者群体非常弘大。用户可能拥有大量的基于Hadoop和Spark的集群,因此在这类集群上搭建深度学习平台的需求便很随意马虎被DL4J知足。同时JVM的生态圈内还有很多的Library的支持,DL4J也创建了ND4J,依赖ND4J进行根本的线性代数运算,其处理大矩阵乘法的速率比NumPy更快,可以说是JVM中的NumPy,支持大规模的矩阵运算
Deeplearning4j为多芯片运行而优化,支持采取CUDA C的x86和GPU。DL4J的并走运行是自动化的,实现了从节点(worker nodes)和连接的自动化设置,可以与Hadoop及Spark自动整合,同时可以方便地在现有集群(包括但不限于AWS,Azure等)上进行扩展,同时DL4J的并行化是根据集群的节点和连接自动优化,不像其他深度学习库那样可能须要用户手动调度。DL4J也被NASA的喷气推进实验室所采取,埃森哲、雪弗兰、博斯咨询和IBM等都是DL4J的客户,DL4J与其它开源深度学习框架的一个明显差异是DL4J有商业版的支持,付用度户可以通过电话咨询寻求技能支持。
Chainer是由日本深度学习创业公司Preferred Networks于2015年6月发布的深度学习框架。最大的特点是支持动态图,曾经是动态打算图的首选框架,特殊适用于自然措辞处理。Chainer是用Python开拓的,支持多种前馈神经网络,包括卷积网络、循环网络、递归网络,支持运行中动态定义的网络(Define-by-Run)。前馈打算可以引入Python的各种掌握流,同时反向传播时不受滋扰,简化了调试缺点的难度。
深度学习框架的标准化ONNX
开放神经网络交流(ONNX,全称是“Open Neural Network Exchange”)格式的发布于2017年9月横空出世。ONNX最初由微软和Facebook联合发布,后来亚马逊也加入进来,并在12月发布了V1版本,宣告支持ONNX的公司还有AMD、ARM、华为、 IBM、英特尔、Qualcomm等。ONNX是一个表示深度学习模型的开放格式。它利用户可以更轻松地在不同框架之间转移模型。例如,它许可用户构建一个PyTorch模型,然后利用MXNet运行该模型来进行推理。ONNX从一开始就支持Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch,Google虽然目前还不在这个阵营中,但与其他开源项目一样,社区也已经为TensorFlow添加了一个转换器。
三、出身于中国本土的深度学习框架
下面要重点先容一下出身于中国本土深度学习框架,他们正在崛起:
1. 华为MindSpore
2018年10月10日,华为在上海全联接大会上首次发布华为AI计策与全栈全场景AI办理方案,包括Ascend(昇腾)系列AI芯片以及CANN算子库、MindSpore深度学习框架、AI开拓平台ModelArts。华为MindSpore支持端、边、云独立的和协同的统一演习和推理框架。但是目前仍旧在开拓中,以华为在中国科技界地位和研发投入,自然是最受大家期待的。华为云虽然可以支持其它所有主流的深度学习框架,但就犹如Amazon选择MXNet一样,这不是一个可以谈论的问题,为了不受制于人,是一定要有的。我相信为了与其它主流框架进行竞争,MindSpore将来也一定会开源的。
2. 百度PaddlePaddle
2016年8月尾百度开源了内部利用多年的深度学习平台PaddlePaddle,PaddlePaddle 100% 都在Github上公开,没有内部版本。PaddlePaddle能够运用于自然措辞处理、图像识别、推举引擎等多个领域,其上风在于开放的多个领先的预演习中文模型。PaddlePaddle的2013年版本是百度精彩科学家徐伟主导设计和开拓的,其设计思路是每一个模型的表示办法都是“一串Layers”, Caffe的作者贾扬清夸奖了百度的 PaddlePaddle,并说“整体的设计觉得和 Caffe 心有灵犀”。三年后,百度AI团队在徐伟的辅导下作了两次升级,2017年4月推出PaddlePaddle v2,v2参考TensorFlow增加了Operators的观点,把Layers打碎成更细粒度的Operators,同时支持更繁芜的网络拓扑图而不但是“串”。2017 年底推出PaddlePaddleFluid。Fluid类似PyTorch,供应自己的阐明器乃至编译器,以是不受限于 Python 的实行速率问题。
3. 阿里巴巴XDL (X-Deep Learning)
2018年11月,阿里巴巴宣告,其大数据营销平台阿里妈妈将把其运用于自身广告业务的算法框架XDL (X-Deep Learning)进行开源,正式加入开源学习框架的激烈竞争。XDL紧张是针对特定运用处景如广告的深度学习问题的办理方案,是上层高等API框架而不是底层框架。XDL须要采取桥接的办法合营利用 TensorFlow 和 MXNet 作为单节点的打算后端,XDL依赖于阿里供应特定的支配环境。
4. 小米MACE
2018年6月28日,小米首席架构师、人工智能与云平台副总裁崔宝秋宣告正式开源小米自研的移动端深度学习框架(MACE) Mobile AI Compute Engine。它针对移动芯片特性进行了大量优化,目前在小米手机上已广泛运用,如人像模式、场景识别等。该框架采取与 Caffe2 类似的描述文件定义模型,因此它能非常便捷地支配移动端运用。目前该框架为 TensorFlow 和 Caffe 模型供应转换工具,并且其它框架定义的模型很快也能得到支持。
四、如何做深度学习框架的选型
进入深度学习领域,根本是学习Python。可以说现在进入深度学习领域是相对随意马虎的,在5年前,研究深度学习须要用C++或Matlab来编写大量的低级算法,这须要研究生教诲乃至是博士的教诲。现在不一样了,你只须要学习Python,就很随意马虎上手,虽然深度学习正在支持越来越多的编程措辞,但Python最大略而且运用最广泛的一个,Python最厉害的地方在于其生态系统非常好,有社区的强大支持,比如要装Python,有方便的Anaconda;要用Python visualization,有Matplotlib可以用;要Numerical computation有NumPy和SciPy可以选择,要做图像处理,还有Scikit-image。有很多现成的工具可以利用,可以节省自己大量的韶光,这正是工程师所须要的。
在对所有主流深度学习框架有一个理解后,我想是时候舍弃开拓措辞(基本都支持Python和C++,Java和Lua面向特定社区)、接口大略单纯、文档完善、运算速率、性能、安装支配方便等方面的纯技能比较了,可能在这些框架出身的初期我们更看重这些方面,但是随着各个框架的不断的完善与大企业的支持与不断的投入,各个框架之间也在不断的相互借鉴,末了的结果便是大家都差不多,各有千秋,我们现在要进入深一层维度的比拼,该当至少考虑下面几个维度:
1. 深度学习框架是否支持分布式打算,是不是分布式框架?
分布式:TensorFlow、MXNet、PyTorch、CNTK、Caffe2、DL4J
不支持分布式:Caffe、Theano、Torch
2. 深度学习框架是否支持移动端支配?
支持:PyTorch、MXNet、TensorFlow、Caffe2
不支持:CNTK
3. 编程接口的设计是命令式编程(imperative programming)还是声明式措辞(declarative programing)?
命令式:大略易懂的编程接口PyTorch,NumPy和Torch、Theano
MXNet通过NDarray模块和Gluon高等接供词给了非常类似PyTorch的编程接口。
声明式:TensorFlow、Theano、Caffe
4. 深度学习框架是基于动态打算图还是静态打算图?
目前利用动态打算图的框架有PyTorch、MXNet、Chainer。
目前利用静态打算图框架有TensorFlow、Keras、CNTK、Caffe/Caffe2、Theano等,个中TensorFlow紧张利用了静态打算图,TensorFlow在2018年10月宣告了一个动态打算选项Eager Execution,但该特性还比较新颖可能并不是很成熟,并且 TensorFlow 的文档和项目依然以静态打算图为主。MXNet同时具有动态打算图和静态打算图两种机制。
5. 深度学习框架是否有强大的社区和生态支持?
重金打造的TensorFlow,多方押注的MXNet,正在崛起的PyTorh,技能端庄的CNTK,
这四大开源深度学习框架都知足这一点。
6. 深度学习框架背后是否有巨子支持?
Google领导的TensorFlow,Amazon选择的MXNet,Facebook倾力打造的PyTorch,Microsoft把内部核心技能开源的CNTK,这四大开源深度学习框架都知足这一点。
通过对上面六个维度的思考,我想大家该当知道该如何作选择了:首先,静态打算图很好,但是动态图是未来和趋势,对付大多数开拓者来说,Python是根本,Python的成熟可用的库、工具和生态与社区的支持太主要了;对付深度学习的商业运用而非纯粹的实验室研究来说,支持分布式和移动端运行平台是必选的,将来一定会用到的;前真个编程接口越灵巧超好,我们须要考虑不同的运用处景,因此前端编程接口的设计须要兼容大略高效的命令式和逻辑清晰的声明式;深度学习框架一定要有背后巨子的大力支持和强大的社区,有专业的团队不断的更新并完善代码库。这样来看,只有下面的四大顶级深度学习框架阵营才能够知足我们的哀求。
深度学习框架的四大阵营与其技能方向分别为:
(1)TensorFlow,前端框架Keras,背后巨子Google;
(2)PyTorch,前端框架FastAI,背后巨子Facebook;
(3)MXNet,前端框架Gluon,背后巨子Amazon;
(4)Cognitive Toolkit (CNTK),前端框架Keras或Gluon,背后巨子Microsoft。
那么在这四大阵营中又如何选择呢?这就要看详细项目的须要了,看重Google无与伦比的巨大影响力的开拓者并不须要太过纠结,TensorFlow会支持最广泛的开拓措辞与最多的运行平台,开拓者很难逃出Google的覆盖范围,更多的开拓者会被收编,AlphaGo已经帮助Google证明了Google在人工智能上技能领先地位,Keras+TensorFlow的方案已经被Google官方认可,Google的TensorFlow2.0将带来的新技能与打破;喜好学习新事物和追求完美的开拓者一定不能错过Facebook的PyTorch,PyTorch正在强势崛起,是动态图技能的最佳代表,是当前最生动最有生命力的深度学习框架,这一次Google碰着了真正的对手;Amazon在云打算和云做事上的领先地位带给开拓者更大的信心,选择Amazon人工智能背后的技能一定没有错;微软的技能正在不断寻衅人类语音识别和图像识别的极限,长期受益于微软阵营的开拓职员对付微软开源其核心技能是非常愉快的,Cognitive Toolkit (CNTK)可以被Keras和Gluon同时支持,这太棒了,确实带给开拓者更多的选择。
末了,我们会创造深度学习框架实在只是一个工具和平台,虽然分为四大阵营和四大技能路线,但是得益于这些主流框架之间的一直的比拼与相互借鉴,末了会创造实在大家都差不多,最棒的是这些主流的深度学习框架都是基于Python的,只要节制了Python和深度学习算法的设计思想,每一种框架都是一个可用的库或工具集,我们是工程师,工程师须要长于学习并长于选择利用最优的工具。初学者可以从上层高等API框架开始学习,如Keras、Gluon和FastAI,但是不能依赖这些层层封装高等API,不然是无法真正节制深度学习的技能实质的。深入学习并闇练节制一种顶级深度学习框架是非常主要的,比如PyTorch,然后再跑一跑TensorFlow和MXNet,我们可以在比拟中学习,在深度学习领域,可以深刻理解什么是“纸上得来终觉浅”,我以为学习深度学习及人工智能技能,一定要动手实践,只有动手做过了才是自己的,不然,统统都还是书本上的。
我还想再多谈一点的一个深度学习领域要面对的问题是“我们是否须要自己重新发明轮子?”我们须要自己重新设计并实现一个深度学习的框架吗?
我想这取决于你的兴趣和你的韶光,如果你立志成为一个大神级的专家,有充足的韶光和强烈的兴趣,那么根据自己对算法和数据构造的独特理解,在设计思想上融入自己的哲学和艺术的思考,自己从头开始设计并实现一个深度学习框架也未尝不可,发起一个开源项目并聚合一群志合道同的小伙伴一起奋斗,是一件十分有寻衅并且十分有趣的事情,我认为我们该当大力鼓励有这样志向的年轻人,哪怕只是为了更深入的学习研究也好呀。何况我们中国人已经有了业界最成功的榜样,前有UC伯克利的贾扬清开拓了Caffe,后有CMU卡耐基梅隆的李沐创造了MXNet,他们都是在读博士的时候创造了自己的深度学习框架并发起了开源项目,再看看他们本日在行业中的地位,都是Google、Facebook、Amazon、Apple等巨子必抢的顶级人才。对付中小企业来说,快速把商业运用做好并做事于消费者才是最主要的,因此选好一个顶级深度学习阵营和成熟的技能路线才是更主要的,确实没有必要重新发明轮子,但是对付一个严重依赖人工智能根本技能的超大型巨子企业来说,比如华为、阿里巴巴或百度,必须要拥有自己的深度学习框架和平台,这不是一个可以谈论的问题。犹如Amazon选择了MXNet,AWS虽然支持TensorFlow,但Amazon不会傻到去依赖于Google。










