翻译: 简书, 斐波那契的数字
Part I. Getting started with TensorFlow
Charpter 1. Introduction(介绍)
数据无处不在(Data is everywhere)
我们确实是处在一个信息时代(The Information Age)。近期以来,数据流来自四面八方:智能手机、手表、自行车、停车场的计价表、家居应用程序等等----你可以使用任何一种现有的技术来构建数据用于传回数据到云端的数据库。通过访问看似无限的存储容量,开发人员选择“更好”的数据仓库方法,存储从他们的产品和客户收集的PB数据。
与此同时,计算机的计算能力也持续攀升。由于在并行化处理方面CPU运行速度的提升比较缓慢。而之前主要用于计算机游戏的图形图像处理器(GPU)开始用于通用计算,并且打开了机器学习的大门。
机器学习(Machine Learning),简称’ML’ 。机器学习是使用通用数学模型来解决使用数据的特定问题。以前,机器学习大多用于区分垃圾邮件、推荐产品给用户、预测商品的价值等等。而近几年来,一种特殊的机器学习取得了巨大的成功: 深度学习(deep learning)。
深度学习(deep learning)
“深度学习”现在已近成为了一种用于描述多层神经网络的的术语。多层神经网络有着令人难以置信灵活的模型,可以用使用多样的、不同的数学技术进行组合。神经网络十分的强大,不过神经网络出现在这巨大的效果却是最近几年才发生的。这是因为我们最近几年来有了足够的可用的数据和计算能力,使得神经网络的能力超过了其他的ML技术。
深度学习的强大在于给出了灵活的模型,并通过数据来做出最佳决策。从而代替人工随意参测设置的输入值,适当的调整深度学习模型可以得到有用的参数值,以及更高阶的组合。这或许可以是一个十分复杂的决策过程,使得计算机比任何时候更加的智能。在深度学习的帮助下,我们能够让汽车自己驾驶,让电话理解我们我们说的话。深度学习的出现,使得机器翻译(Machine translation)、人脸识别(facial recognition, 面部识别)、人脸分析(predictive analytics)、机器制作乐曲(machine music composition)等无数的人工智能工作(task 任务)变得有可能或者有所改善。
其实(while)在十几年前深度学习背后的数学概念已经出现,但是可以创建并且训练深度学习模型的可编程类库却是近几年才出现的。更加不幸的是,绝大多数的类库需要在灵活性和生产力之间做出很大的权衡。灵活的类库对于研究新型模型的结构几乎没有用处(invaluable),并且(but)这些类库要么太慢要么没法再生产中使用。从另一方面来看,我们有可以在分布式硬件上托管、快速且高效的库,但是他们通常是专门用于特定类型神经网络的,并且不适合研究型的或者是 更好的模型。这使得决策者陷入了两难的境地:我们是应该使用较为灵活的库去做研究,这样我们不必重新实现代码呢? 还是应该一个类库作研究使用,另一种类库作为生产使用。
P.S.: 我这部分翻译的不是太好,原文是“This leaves decision makers with a dilemma: should we attempt to do research with inflexible libraries so that we don’t have to reimplement code, or should we use one library for research and a completely different library for production”。
大致是在说:现在很多使用机器学习的类库很多,但是这些类库只能满足实际生活中的1~2点需求。有些类库适用于开发和编程,但不适用于科学研究(比如mathout提供的类库,适用于分布式计算但是做研究用这个不合适);但是有一些类库是有以利于科学与研究,但是并不适用于编程与实际生产开发(你比如说:matlab的toolbox, caffe)还有一些就是拥有和灵活的库但是算法的执行效率不高(你比如 theano, theano 构架一个神经网络模型是分分钟的事情,但是执行效率确实不高)。 这就导致很多人要么选择一个不太灵活却又有利于生产研发的类库,要么搞研究的时候使用一种类库(比如matlab的toolbox),在等到实际开发的时候载根据模型和算法再用一套类库以便我们提高执行效率。
如果我们选择前者,我们可能无法测试不同类型的神经网络模型,可是我们如果选择后者就必须维护可能有着完全不同API 的代码。我们有没有可以解决这些问题的资源呢?
Tensorflow 致力于解决这种困境(dilemma.)
Tensorflow : 一个现代的机器学习库
(TensorFlow: a modern machine learning library)
tensorflow 是2015年11月份google面向大众开源的。tensorflow 也是DistBelief从创建到使用的过程中无数经验和教训的结果。(DistBelief是tensorflow的前身)。
P.S.: 可能有一些人会觉得这些都是废话, 仔细的在网上查找一些相关的信息你会对tf有着更多的了解。
相关新闻与资源:
http://www.oschina.net/news/67913/open-source-tensorflow
http://36kr.com/p/207751.html
http://news.yesky.com/307/98615807.shtml
tensorflow致力于灵活、高效、可扩展、便捷(portable)。任何类型大小的计算机都可以运行tenorflow, 小到智能手机大到大型计算机集群。它配置有轻量级的软件,使得可以较快的创建训练模型,有效的解决了重新创建模型的需求。Tensorflow 拥抱(embraces)开源的创新和社区,而且背后有很多公司支持、指导。由于其有着如此多的优势,tensorflow适用于个人和企业,无论是初创公司还是像google这样的大公司。
如果你和你的同事们手里有数据、有要解决的问题以及一台计算机。那太好了,tensorflow可能就是你一直在苦苦追寻的所缺失一部分。
Tensorflow 技术总览
TensorFlow: a technical overview
在本节会提供更多有关Tensorflow类库的有用(high level)的信息,例如 tensorflow是什么、tensorflow的发展历史、使用案例以及tenorflow的竞争对手等等。决策者、利益相关者以及任何一个像要了解tensorflow背景的人会阅读本节的时候有所收获。
google的深度学习发展简史
(A brief history of deep learning at Google)
google最初的大规模深度学习工具是DistBelief 。它是谷歌大脑(Google Brain Team)团队的产品。自DistBelief 创建以来, 它已经被数十个团队用于有关深度神经网络的项目中去了。尽管如此,DistBelef 和很多的“第一类”工具一样,存在着很多设计缺陷,这就限制了DistBelif 的可用性和灵活性。在创建DistBelief 之后的一段时间里,Google开始着手设计DistBelief的下一代产品,其设计将会在使用原始DistBelief使用和限制中总结经验教训。该项目成为了后来的tensorflow,于2015年11月向大众公开发布。发布不久,tensorflow迅速的成为了流行的机器学习类库,该项目目前主要用与自然语言处理(natural language processing, NLP)、人工智能(artificial intelligence, AI)、机器视觉(computer vision ,CV)以及预测你分析(predictive analytics)。
tensorflow 是什么?
(What is TensorFlow?)
来让我们以一个较高的高度去查看tensorflow, 以便于去了解他试图解决什么样的问题。
Breaking down the one-sentence description
tensorflow的官网上让浏览者映入眼帘的第一句话就是:
TensorFlow is an open source software library for machine intelligence.
(尽管相当的模糊)于是,我们在“关于tensorflow”的第一段中,给出了一个可以替代的描述:
TensorFlow is an open source software library for numerical computation using data flow graphs.
tensorflow的第二定义更加的具体,但对于没有数学或者技术背景的人而言,可能不是太容易理解。
那么让我们把这句话分解成块,并描述每块背后的意义所在。
Open source:
tensorflow原本是google创造,作为为机器学习的工具,并在2015年11月的时候开始开源,遵守Apache2.o的协议(License)。作为开源软件,允许任何人下载、修改并且使用源代码。开源工程师可以在代码上添加、提升tensorfow的功能,并将提出的建议包含在下一个版本中。由于TensorFlow的受欢迎程度,Google和第三方开发人员每天都在对类库进行改进。
tensorflow原本是google创造,作为为机器学习的工具,并在2015年11月的时候开始开源,遵守Apache2.o的协议(License)。作为开源软件,允许任何人下载、修改并且使用源代码。开源工程师可以在代码上添加、提升tensorfow的功能,并将提出的建议包含在下一个版本中。由于TensorFlow的受欢迎程度,Google和第三方开发人员每天都在对类库进行改进。
注意:
Notice that we say “an implementation” and not “TensorFlow” was open sourced. Technically speaking, TensorFlow is an interface for numerical computation as described in the TensorFlow white paper, and Google still maintains its own internal implementation of it. However, the differences between the open source implementation and Google’s internal implementation are due to connections to other internal software, and not Google “hoarding the good stuff”. Google is constantly pushing internal improvements to the public repository, and for all intents and purposes the open source release contains the same capabilities as Google’s internal version.
For the rest of this book, when we say “TensorFlow”, we are referring to the open source implementation.
Library for numerical computation
实际上,我们不应该把tensorflow称之为“机器学习的类库(library for machine learning)”,而是应该用一个更加宽泛的术语“数值计算”。虽然Tensorflow确实也包含有一些类似于“学习(learn, AKA Scikit Flow)”的包。这个包是模仿了Scikit-Learning 的单行建模功能。但需要注意的是tensorflow的主要目的不是提供开箱即用的机器学习解决方案。实际上Tensorflow是提供了一系列可扩展的的函数(function)和类(class),并允许用户从数学的角度上定义模型。这就使得有相似技术背景的使用者可以快速且直观地创建出 定制、灵活的模型。除此之外,Tensorflow有着扩展ML特定函数的支持,同时他也非常适合复杂的数学计算。由于这本书关注于机器学习(特别是深度学习),所以我们会经常提到有关使用Tensorflow创建机器学习模型的话题。
Data flow graphs
Tensorflow的计算模型就像一个有向图。 其中图的节点(经常使用圆形来表示)代表函数和操作(computations),图的边(通常使用箭头或者直线来表示)代表数字或者矩阵or 张量(张量可以看做矩阵)。
有以下几个原因说明这种编程模型是有用的: 首先,很多的常用的机器学习模型已经可视化有向图(例如 神经网络)。这些有向图的对于从业人员来说更加自然。 其次,使用这种模型可以通过计算分割成一些小的、易于区分的快。tensorflow可以自动地计算相对于可能影响的第一个节点任何节点(在tensorflow中称作Operation 操作)的导数。特别是输出节点的导数/梯度对于建立机器学习模型至关重要。最后,由于使计算分离,容易在多个CPU,GPU和其他计算设备上分布工作。 这只需将整个较大的图形分成几个较小的图形,并为每个设备分别提供图形的一部分(通过逻辑来协调设备上的共享信息)。
Quick aside: what is a tensor?
简单的来说,tensor就是n维的矩阵。所以,二维的tensor和一个标准的矩阵一样。(标准矩阵是二维的)。在视觉上,m×m的矩阵可以看做一个数组(m 是数组的高,m 是数组的宽)。m×m×m的tensor是 可以看做一个宽高长为m的立方体。简而言之,可以把tensor看作为矩阵。
Beyond the one-sentence description
这句话的“open source software library for numerical computation using data flow graphs(使用数据流图的数字计算的开元类库)”包含了很多信息,但是这句话不能够描述Tensorflow成为机器学习库的原因。这里有几个组件,也有助于使TensorFlow是什么:
Distributed
正如之前在介绍数据流图(data flow graph)所提到的那样,Tensorflow被设计成一个可以伸缩的框架,既可以通过多个计算机进行扩展,也可以在一台机器上使用多个GPU或CPU的方式进行扩展。虽然在最初的开源时并没有分布式计算的能力,但是到了0.8.0版本的时候就已经将分布式的功能集成到Tensorflow内建类库中了。虽然初始分布式的运行环境(runtime)比较麻烦,但是会使得Tensorflow变得十分的强大。绝大多数的机器学习框架是没有这么牛逼的功能的。使用Tensorflow的时候一定要注意与本地正在运行(bing worked on)集群管理工具的兼容性。( it’s important to note that native compatibility with certain cluster managers (such as Kubernetes) are being worked on.)
A suite of software
(软件套装)
虽然“Tensorflow ” 主要是指的用于构建和训练机器学习模型的API,实际上Tensorflow是一套软件,用于以下方式的也可以称为tensorflow。
TensorFlow 是 用于 定义机器学习模型、并且使用这些模型训练数据 API(应用程序接口)。同时这些API对提供了对训练后输出的进一步使用方法。 这些API主要可以通过C++ 和 python语言调用,实际上Tensorflow API是由C++ 语言写的。 这使得 数据的科学计算可以在更加友好的Python环境中计算,通过C++代码编译运行。虽然也有C++ 的API 可以运行模型但是它(C++ 的API)有时候会受限, 对于绝大多数用户来说不建议使用。
TensorBoard 是一个可视化tensorflow图像的工具。当用户在tensorflow中包含有对tensorBoard的指定操作,那么tensorBoard 就可以阅读从Tensorflow中导出的文件,并且可视化Tensorflow的图以及模型的动作。这种可视化对于统计结果、分析模型、调试代码都很有帮助。早点接触tensorboard并且结合Tensorflow使用会使得更加有意义。
TensorFlow Serving 是一个有利于(促进)部署预先训练好的Tensorflow模型的软件。用户可以通过Tensorflow中的内建函数(BIF)导出模型到一个文件中。使用Tensorflow Serving 来本地的读取这个文件。可以从简单高可用性的服务(server)开始输入数据,并且传递(pass)给一个训练好的模型,然后返回模型的输出(output)。另外,Tensorflow可以无缝地在新旧模型之间进行切换,对于最终用户而言不会出现宕机时间。(这意味着在开发中,我们可以使用tfs来更换模型)。可能服务(server)会是Tensorflow生态系统中最不被认可的部分, 但是这或许是Tensorflow最具有竞争力的地方。将Server与生产环境结合,是的用户们可以避免重复的实现他们的模型,用户只需要传递Tensorflow导出的模型即可。Tensorflow Serving 完全是使用C++ 实现的,目前也只有C++ 的API。
我们相信,将Tensorflow用到极致的情况就是将以上三种互相结合。(using TensorFlow to its fullest means knowing how to use all of the above in conjunction with one another. )所以,本书将涵盖这三部分软件。
When to use TensorFlow(什么情况下使用Tensorflow?)
我们看看一些Tensorflow的用例(use case)。事实上,Tensorflow应该是大多数机器学习中最佳的选择。以下的使用列表可以指出了Tensorflow的目的:
使用机器学习来 研究、开发并且迭代 新的机器学习架构 由于tensoerflow 非常的灵活。可以用它来创建novel、少量测试的模型。而对于一些库来说,一些模型是预先构建好的,但是不能够被修改
-----------------------
未完待续,敬请期待
PAGE 32