TensorFlow 学习系列之一:TensorFlow 概述

在计算机相关的很多领域(如大数据、分布式计算、搜索等),Google公司都有着卓越的表现,贡献了很多划时代的产品。在人工智能领域,它也不例外。2011年,谷歌就开发了它的第一代分布式机器学习系统DistBelief[1]。其中计算机科学家杰夫·迪恩(Jeff Dean)和著名深度学习专家吴恩达(Andrew Y. Ng)都是这个项目的核心人员。

除了吴恩达先生声名赫赫之外,这位杰夫·迪恩也非常了得,在牛人辈出的谷歌公司,也可属“人中翘楚”。正所谓人牛轶事多。在著名问答网站Quora上,一则“杰夫·迪恩都有哪些奇闻轶事”[1]的问答中,就有人开玩笑说,“编译器从不会给杰夫·迪恩警告,杰夫·迪恩会警告编译器(Compilers don't warn JeffDean. Jeff Dean warns compilers)”。言外之意,他比编译器还厉害,其工程能力可见一斑(杰夫•迪恩正是美国工程院院士)。

通过杰夫·迪恩等人设计的DistBelief,Google可利用数据中心数以万计的CPU核(core),并以此建立深度神经网络。借助DistBelief,Google的语音识别正确率提升了25%。除此之外,DistBelief在图像识别上也大显神威。2012年6月25日,《纽约时报》报道了Google通过向DistBelief提供数百万份YouTube视频,来让该系统学习猫的关键特征(见图11-1)。

TensorFlow 学习系列之一:TensorFlow 概述

                                              图11-1  《纽约时报》对DistBelief的报道

DistBelief系统之所以引人注目,就是因为它在未事先获取“猫的特征描述”信息的情况下,自行总结出猫这个概念的特征。换句话说,DistBelief具备自学习能力。当然,这套系统的计算开销也不容小觑,它由1,000台机器组成,共包括16,000个内核,训练的神经网络参数高达1,000,000,000个。

作为一家商业公司,为了保证自己在技术的领先优势,谷歌对自己“独门绝技”的态度通常是,要创意(idea),可以!但延迟给;要具体实现(implementation),门都没有!比如说支撑Google分布式系统核心业务的老三驾马车: GFS(Google FileSystem,谷歌文件系统),MapReduce(映射-规约计算范式。顺便说一句,MapReduce也是杰夫·迪恩的大作之一)和BigTable(大表),都是在谷歌内部被用了多年之后,其核心思想才被允许以论文的形式公开发表出来。然后,开源社区才“照猫画虎”,整出来一系列对应的开源软件,如HDFS(Hadoop文件系统)、Hadoop及HBase等。

一开始,DistBelief作为谷歌X-实验室的“黑科技”,也是闭源的。可能是谷歌想由开源社区来维护DistBelief,群策群力力量大,所以在2015年11月,谷歌将它的升级版实现正式开源,开源协议遵循Apache 2.0。而这个升级版的DistBelief,也有了一个新的名称,它就是本章的主角——TensorFlow [2]。

TensorFlow 学习系列之一:TensorFlow 概述

图11-2 TensorFlow 的图标

为什么要取这么一个名字呢?这自然也是有讲究的。TensorFlow命名来源于本身的运行原理。“Tensor”的本意是“张量”,“张量”通常表示多维矩阵[1]。在深度学习项目中,数据大多都高于二维,所以利用深度学习处理的数据核心特征来命名,是有意义的。“Flow”的本意就是“流动”,它意味着基于数据流图的计算。合在一起,“TensorFlow”的蕴意就是,张量从流图的一端流动到另一端的计算过程。它生动形象地描述了复杂数据结构在人工神经网中的流动、传输、分析和处理模式(图11-3)。

TensorFlow 学习系列之一:TensorFlow 概述

图11-3  TensorFlow中的数据流图(图片来源:TensorFlow官网)

TensorFlow 是一个非常棒的深度学习框架,它在诸多方面都有着卓越的表现,比如设计神经网络结构的代码非常简洁,部署便利。特别是有技术实力雄厚的谷歌为其“站台”,拥趸者众多,也在很大程度保证了它的社区非常活跃,从而也导致TensorFlow在技术演化之路上迭代非常快速,基本上每周都有上万行代码的更新。

使用TensorFlow的优点主要表现在如下几个方面:

(1)TensorFlow有一个非常直观的构架,顾名思义,它有一个“张量流”。用户可以很容易地看到张量流动的每一个部分(借助TensorBoard,在后面的章节会有所提及)。

(2)TensorFlow可轻松地在CPU/GPU上部署,进行分布式计算。

(3)TensorFlow跨平台性高,灵活性强。TensorFlow不但可以在Linux、Mac和Windows系统下运行,甚至还可以在移动终端下工作。

当然,TensorFlow也有不足之处,主要表现在它的代码比较底层,需要用户编写大量的代码,而且很多相似的功能,用户还不得不“重造*”。但“瑕不掩瑜”,TensorFlow还是以雄厚技术积淀、稳定的性能,一骑红尘,“笑傲”于众多深度学习框架之巅。在本章的余下部分,我们主要讨论TensorFlow的基本用法[2]

-----------《待续》------------

 


[1] https://www.quora.com/Jeff-Dean/What-are-all-the-Jeff-Dean-facts

[1] 在机器学习中,数值通常由4种类型构成:

(1)标量(scalar):即一个数值,它是计算的最小单元,如“1”或“3.2”等。

(2)向量(vector):由一些标量构成的一维数组,如[1, 3.2, 4.6]等。

(3)矩阵(matrix):是由标量构成的二维数组。

(4)张量(tensor):由多维(通常)数组构成的数据集合,可理解为高维矩阵。

[2] 这里需要说明的是,如同本书并非专门介绍Python的书籍一样,本书亦不属于专门介绍TensorFlow用法的图书,本章所做工作的,更多属于抛砖引玉的性质,为读者铺垫一定的基础。有关更多TensorFlow实战方面的介绍,读者朋友可参阅相关书籍,如黄文坚先生编著的《TensorFlow实战》或喻俨先生主编的《深度学习原理与TensorFlow实战》等。

 

节选自 张玉宏《深度学习之美》章节,电子工业出版社,博文视点,2018年