1.写在前面
5G可以说是2019年上半年十分闪耀的那颗“星”了,美方还不惜代价地试图封锁中国的5G技术出海。5G之所以重要,是因为其将和AI技术,大数据技术一道颠覆我们现有的生活模式,让智能化成为现实。
在智能化的世界,5G技术提供高速率(>1 Gbps),低延时(1ms)的基础网络服务,组建物联网(IoT,Internet of Things),大数据技术提供对万物互联产生的海量数据的整合能力,而AI技术则提供整个智能生态的计算与决策能力,深度学习技术是非常高效的实现方式,在过去10年,已被学术界和工业界反复证实,能够依靠各种模型算法达成比人类判断更精准,更快速的“灵丹妙药”。
Figure 1 智能时代
技术需要高效的实现模式来进行应用,深度学习框架就是那个实现“灵药“的“炼丹炉”,能够通过深度学习算法模块化的封装,快速搭建模型,输入数据,进行各种模型的训练,调优,测试和部署,为整个智能生态提供预测,决策等核心推断能力。
2.深度学习框架排行榜
得益于深度学习框架发展初期各家为更好的推动技术发展而造就的开源生态模式,如今,各式各样的框架百花齐放,百家争鸣,快速推动了深度技术在工业界的落地应用。当然,好“药”也得有好“炉”炼,下面我们就介绍下目前主流的深度学习框架的发展状况,各自的特点以及适合的场景等,找到合适的“炉“。
从业界影响、资源投入、开发生态、文档体系、模型全面性、工业实践和开源热度(github)等七个方面评估各框架的发展状况,结果如下图(供参考)。
Figure 2 十大深度学习框架发展程度(caffe,caffe2分开统计)
再来看一下GitHub对应的一些数据情况,Pytorch,TensorFlow,PaddlePaddle过去两年保持了较快的发展速度,尤其Pytorch的星数有3倍增长,博得了众多人的眼球。而Caffe&Caffe2,Theano,CNTK等,虽然已经停止迭代,但在AI启航的时间点仍然有一定的增长。
Figure 3 十大深度学习框架github概览(caffe,caffe2分开统计)
Figure 4 十大深度学习框架增长率(caffe,caffe2分开统计)
上图中,前三个(Pytorch,TensorFlow,PaddlePaddle)是个人认为目前发展快,并且比较完善的框架,末端的四个是已经官宣不再更新的,而其他的是发展到平稳期或资源有限的一些框架。
3.十大深度学习框架详解
Google的TensorFlow,可以说是当今十分流行的深度学习框架。Airbnb, DeepMind,Intel,Nvidia,Twitter以及许多其他著名公司都在使用它。
Google自开源TensorFlow起,投入大量的人力,物力,财力逐步构建了一个AI生态,从基础研究、AI教育、再到应用实现,而这个生态的核心就是TensorFlow。如前所说,深度学习是AIoT时代的基石,毫无疑问,Google依然走在时代转折点的前列。
TensorFlow提供全面的服务,无论是Python,C++,JAVA,Go,甚至是Javascript,Julia,C#,几乎所有开发者都可以从熟悉的语言入手开始深度学习的旅程。TensorFlow构建了活跃的社区,完善的文档体系,大大降低了我们的学习成本,不过社区和文档主要以英文为主,中文支持有待加强。另外,TensorFlow有很直观的计算图可视化呈现。模型能够快速的部署在各种硬件机器上,从高性能的计算机到移动设备,再到更小的更轻量的智能终端。
TensorFlow的缺点已经被诟病多年,相比Pytorch,Caffe等框架,TensorFlow的计算速度可以说是“牛拉车“。而且通过它构建一个深度学习框架需要更复杂的代码,还要忍受重复的多次构建静态图。
综合来说,对于英文阅读和英文交流毫无障碍的同学,TensorFlow依然是深度学习框架的优选方案,毕竟可以和人流畅交流是学习和工作的重点。
Pytorch是基于用Lua编写的Torch库的Python实现的深度学习库,它由Facebook创建,目前被广泛应用于学术界和工业界,随着Caffe2项目并入Pytorch,也稳固了Pytorch紧追并迫近TensorFlow在深度学习应用框架领域的地位。
Pytorch官网的标题语简明的描述了目前Pytorch的特点以及将要发力的方向。Pytorch在学术界优势很大,关于用到深度学习模型的文章,除了Google家的,其他大部分都是通过Pytorch进行实验的,究其原因一是Pytorch库足够简单,跟NumPy,SciPy等可以无缝连接,而且基于tensor的GPU加速非常给力,二是训练网络迭代的核心-梯度的计算,Autograd架构(借鉴于Chainer),在Pytorch,我们可以动态的设计网络,而无需笨拙的定义静态网络图,才能去进行计算,想要对网络有任务修改,都要从头开始构建静态图。基于简单,灵活的设计,Pytorch快速成为了学术界的主流深度学习框架。
Pytorch的劣势在于模型部署,由于对其部署难度早有耳闻,我没尝试过部署Pytorch的模型,一般是在Pytorch快速的试验新的模型,确认好的效果再去找“现成的”的TensorFlow模型做简单的优化。
不过现在,如果稍微深入的了解TensorFlow和Pytorch,就会发现他们越来越像,TF加入了动态图架构,Pytorch致力于其在工业界更加易用。打开各自的官网,你也会发现文档风格也越发的相似。
PaddlePaddle是由百度自主开发的开源深度学习框架,近期发现有了中文名字,飞桨。官网截图也很有意思,很多小人在划桨。飞桨刚发布的时候,并不被看好,感觉更像是Google有,百度也要有的腔调,但是近来在做一个关于语义识别的项目,其他框架支持中文的模型实在是少的可怜,时间紧张也没有时间大规模训练,于是就来试试飞桨,其中基于BERT的ERNIE模型取得了较好的效果,部署也不折腾。个人认为可以将模型库中的经典模型套在自己的问题上,作为baseline模型快速试验,而后慢慢调优追求更好的效果。
从模型库找到适合自己的模型,按照实践教程一步步进行就行了,过程还是比较简单的,遇到的问题在github的issues中都有找到,虽然不像TF那么活跃,但是支持也是很及时的。我是从官网找模型,发现官网又更新了,盗张图过来感受下支持的模型。
Figure 5 PaddlePaddle模型库
功能上,飞桨同时支持动态图和静态图,能方便的调试模型,方便的部署,非常适合业务应用的落地实现。飞桨也已经支持数百个节点的高效并行训练。可以说在过去2年的时间里,深度学习领域在大规模的落地应用,各家框架也都在快速的发展,但是百度的PaddlePaddle看来是这个阶段发展更快的框架,甚至是发展更快的AI开发生态。
以上三个框架可以说是目前发展比较快的,并且在稳定更新,维护的。功能上来说,各框架已经“越长越像”了,三个框架还是会有各自的特点,如何选择还是要根据自己的目标来看。
下面来简单介绍下其他的一些主要框架。
4.如何选择?
那么如何在众多的框架中选择呢,我的建议有3个框架:TensorFlow,Pytorch,飞桨。其他的不是投入资源有限,就是已经不再维护了。实际上,我们或多或少应该都了解下这3个框架,针对不同的目的可以快速选型。
如果是刚刚接触深度学习,以学习为目的的,我建议从TensorFlow和飞桨开始,至少目前来看,Google和百度是倾全力打造这两个平台的,他们已经不只是一个深度学习框架了,更是一个AI开发的生态,从基础的视频课程,完善的文档体系到项目的开放落地提供的是统一的服务。多说一句,百度飞桨的基础文档相当详细,不只有代码实现,数据流过程的教程,同时也包含了详细的算法原理,这点对于还不是那么了解相应模型的同学来说是极大的方便。对于学有余力的同学,还是建议对这3个框架都了解下。
如果是出于学术目的的,建议从Pytorch开始,毕竟学术研究要紧盯着前沿,看文章,复现文章中模型的效果,选大家都用的可以节省不必要的时间成本,把重点放在优化模型提升模型效果上。
如果是想要开箱即用,想即刻将深度学习技术应用到自己的场景中尝试,我会建议选择飞桨,飞桨中有大量的实战案例,基本套到相应的场景就能迭代起来了。而且在NLP领域,需要对各种语言进行预处理,毫无疑问对中文支持更好的是飞桨,比如ERNIE,其挖掘海量的中文数据,对先验语义知识进行建模,增强了语义表达能力,可以作为NLP,NLU应用的基础服务不同的场景。
随手贴几个招聘网站上的JD,也可以帮大家明确一下方向,供参考。
5.未来
我们处在更好的时代。
感谢互联网文化,感谢开源文化,让技术可以以指数级的速度发展,我们更要感谢在时代转折点的那些引路人,没有Google,百度等企业不遗余力地尝试将新技术应用于各产业,就没有技术的飞速发展,就没有美好的生活模式的变迁。
AI技术的平民化是智能时代发展的催化剂,我们应用深度学习技术,从原理到框架,再到应用平台化工具将其落地到所有的场景,这是未来的发展趋势。得益于5G技术的发展,相信在不久的将来,我们将实现万物互联。深度学习是AIoT时代的关键,各平台已有的实践落地项目给我们提供了产业落地的实现路径。可谓星星之火,已成燎原之势,另外,发展我国自己的AI开发生态也同样重要,考虑到近期的“华为事件”,有备无患。
结尾想说,框架、平台都只是为我们提供了工具,明确我们的目标并找到合适的场景,推进应用在业务上的落地,实现商业价值才是核心竞争力。