TensorFlow教程01 诞生和发展

2015年11月的一天,Google发布了Tensorflow的白皮书并很快将Tensorflow开源。以Google的技术影响力,这个新闻在技术圈很快扩散,大家听着这个陌生的名词兴奋而又没有太多头绪。Tensor到底是什么,Tensorflow什么定位,Google为什么要将它开源...

 

在技术圈之外,这条消息其实并没有引起非常大的轰动,因为这个世界的消息真的太多了。那一年我还在攻读博士学位,在傍晚的周例会上,草草讲完我的控制课题进展后,我激情洋溢的给实验室的师兄弟介绍了Tensorflow,可是应者寥寥,并没有太引起大家的兴趣,有位师弟问我,这个和Matlab相比有什么优势呢。

 

后来事情的发展成了现象级,2016年3月AlphaGo以总比分4:1战胜韩国棋手李世石,彻底引爆了普通大众对人工智能的热情,AI技术也在加速向各行各业渗透。Tensorflow则成为一个现象级的技术名词,被普通大众所熟知。

 

Tensorflow的起源


在2011年,Google Brain内部孵化出一个项目叫做DistBelief,它是为深度神经网络构建的一个机器学习系统。它是一个著名的系统,虽然没有开源,但是Google研究者有大量关于它设计的论文被大家所熟知。它也被广泛应用于Google内部的科研和商业产品中。这个项目最早可以追溯到2009年,由Geoffery Hinton带领的团队开发的一个实现了广义反向传播算法的框架,基于这个框架,Google内部可以快速试验新的深度学习算法并提高算法精度。比如在使用这套框架后,Google内部语音识别的错误率降低了25%。

 

后来,Google决定将DistBelief打造成更加稳健、快速、通用的机器学习框架,调动了相当多的工程师和科学家投入到对DistBelief的改造,这其中就包括大名鼎鼎的Jeff Dean。有了这样的豪华开发阵容,DistBelief迅速成熟蜕变,成为一个高鲁棒和工业级的机器学习框架,这就是后来的Tensorflow。

Jeff Dean:Google Brain

作为Google内部的第二代机器学习框架,Tensorflow有了更加有趣的灵魂。它是基于DataFlow的计算模型,算子相组合形成一个计算图,计算的过程就是数据在这个计算图的节点进行计算并流动。同时,这个计算图可以被切成不同的子图,并分配到不同的Device上,包括CPU、GPU和其他的计算设备,这样天然的对分布式友好。此外,Tensorflow从一开始就被设计成运行在多个平台上,如inference可以运行在IOS和Android设备上,训练则可以运行在不同的硬件设备上。

 

再后来的故事就广为人知了,2015年11月9日,Google以Apache Licence 2.0的开源协议发布了Tensorflow。在这个时间点开源这样通用的机器学习框架是一个很明智的选择,可以鼓励社区和工业界围绕Tensorflow构建深度学习的整个生态。此外,社区已经开源的Caffe、Mxnet等一批优秀的机器学习框架,Google也不可以再等下去了。

 

Tensorflow的发展


Tensorflow在2017年2月发布了1.0.0版本,也标志着稳定版的诞生。而截至目前(2019年6月16日),Tensorflow 2.0 Beta版本也已经发布,在不久后2.0的正式版也将面世。

 

早期的Tensorflow也有很多被人诟病的地方,比如API的稳定性、效率和基于静态计算图的编程上的复杂性等等。然而经过这两年的优化和迭代,并吸收来自其它框架的营养(如Pytorch),Tensorflow已经某种程度上甩掉了扣在它头上的这些帽子。

 

易用性目前Tensorflow已经提供不同层次的编程抽象。对于大部分深度学习算法,都可以调用Tensorflow的Keras接口或Tensorflow Estimator等高级API接口进行编程。此外,Eager模式可以让Tensorflow享受类似于Pytorch的动态图编程体验。

 

性能:Tensorflow经过几年的优化,在性能上已经在主流框架上处于领先的地位,其静态图的本质也能够让Tensorflow享受更多的编译优化。此外,Tensorflow的XLA编译技术能够让Tensorflow享受JIT的编译优化,极大提升其性能上升空间。Tensorflow与多种硬件加速芯片和Device的集成程度是最高的,除了主流的Nvidia GPU,还支持包括Google TPU,AMD的GPU等等。

 

移动端:Tensorflow在2017年5月发布了Tensorflow Lite替代原来的Tensorflow Mobile,给与移动端原生的支持。目前已经支持IOS和Android的移动端模型发布,使得AI深度学习模型能够简单、高效地部署在移动端。

 

WEB端:在2018年6月,Google发布了tensorflow.js,它提供与Python相近的API,用来支持深度学习模型在WEB端的发布。

 

可视化:Tensorflow推出通用的数据渲染服务Tensorboard,它可以生动展示训练过程状态和结果。并且它被设计成一个通用的数据层展示服务,任何框架都可以生成与Tensorboard兼容的数据格式并用Tensorboard进行展示。

 

分布式训练:Tensorflow从刚开始就被设计成支持分布式的训练架构,所以在出版发布不久,就退出了以参数服务器的数据并行的分布式训练架构。并且这几年在RDMA节点通信等方面做了大量优化,极大提升了分布式训练性能.

 

 KDnuggets网站对2018年的机器学习框架的使用做过一个调查,如下图:

可以发现Tensorflow和Keras的使用率遥遥领先。另外值得注意的是,Keras是一个更上层的框架,在底层它通常也是用Tensorflow作为底层机器学习库。而且目前Tensorflow也包含了Keras的高级API接口。

 

Tensorflow的启示


Tensorflow在短短几年间建立了庞大的生态和影响力,非常令人吃惊。尽管这两年有一些新兴的AI框架的兴起,其中最为引人注目的就是Pytorch,可是并没有真正挑战到Tensorflow的地位。最大的原因是Tensorflow的生态非常强大,并且能提供全生命周期的深度学习服务,包括数据的预处理、训练、可视化、分布式训练、模型部署到移动端等等。它能够提供真正生产级别的模型服务,这是大部分其它的AI框架做不到的。

 

不过Tensorflow也有很多不完善的地方,比如API的稳定性一直被用户诟病,另外设计上的复杂性也让人对于后续的发展有一丝担心。但是办法总比困难多,相信未来Tensorflow能够很好解决这些先天和后天的问题。

 

posted @ 2019-06-16 23:25  Dittoyi  阅读(971)  评论(0编辑  收藏  举报