一文弄清深度学习.TensorFlow和张量之间的关系

播放GIF

图:pixabay

「机器人圈导览」关于深度学习系统,大家或多或少都有一些了解,可是你知道吗?我们今天所用的许多深度学习系统都是基于张量代数的,比如谷歌的TensorFlow,但是张量代数与深度学习的关系到底如何?本文作者是Ted Dunning,MapR Technologies的首席应用架构师,机器人圈将文章编译如下:

张量(Tensors)和诸如TensorFlow这样的机器学习新工具都是当代的热门话题,特别是在那些寻求深度学习方法的人之中,这都是非常受欢迎的。结果就是,当你浏览热词时,你会发现,真的有一些基础强大的、有用的并且可用的方法,它们能够充分利用张量所能提供的,而这不仅仅是针对深度学习而言的。这就是为什么张量为什么那么受欢迎。

如果说计算也是有传统特点的话,那么使用线性代数的数值计算就是最受欢迎的计算之一了。像LINPACK测试以及后来的种种LAPACK软件包,在现在看来都是很古老的了,但它们的功能还是很强大的。那么,其核心是,线性代数是由相当简单和非常有规律可循的操作组成的,包括对一维和二维数字数组(在本文中通常称之为向量和矩阵)的重复乘法和加法运算,并且它是极其普遍的,许多问题都可以通过线性方法求解或近似。这些范围涵盖的领域非常广阔,从计算机游戏中图像的渲染到核武器的设计,以及这些极端之间的其他大范围的应用都是可以利用线性代数来进行运算的。

关键线性代数运算

线性代数在计算机上可实现的完全基本操作是两个向量的点积。这个乘积只是两个向量中相应元素的乘积之和。矩阵和向量的(左)乘积可以被视为具有向量的矩阵行的重复点积,并且两个矩阵的乘积可以被视为矩阵的矩阵向量积和另一个矩阵的列的组合。通过单个值对所有元素进行逐元素加法和乘法,这些操作可以建立所有必需的线性代数机器。

部分原因是它们的规律性,以及它们可以通过大量的并行性操作得以实现,所以计算机可以以极高的速度评估使用线性代数编写的程序。就原始潜力表现方面来说,从Cray-1计算机系统到今天的GPU的演进,其表现能力已经显示出超过3万次的改进,而当你考虑具有大量GPU的集群时,其性能潜力大概是百万次,而这曾经是地球上最快的计算机,其成本只是总成本的一小部分

然而,历史模式已经宣誓了一切,那就是我们必须向越来越高的抽象层次迈进,以便更好地利用新的处理器。Cray-1及其面向向量的后来者需要重写程序以使用向量操作(如点积),从而实现全面的性能。而后来的机器已经要求在矩阵向量运算或甚至矩阵—矩阵运算方面来形成算法,以推动硬件以其最大的潜力运行。

而我们现在刚好处在门槛位置。不同之处在于,除了矩阵—矩阵运算之外,没有其他方面可以着手进行。也就是说,使用线性代数没有任何其他好途径。

但是我们也不必把自己局限在线性代数中。事实证明,我们是可以提高数学食物链的。长期以来,在数学抽象的海洋中有比矩阵更大的“鱼”存在的。而张量就是这样一位可以肩此重任的候选人。张量在广义相对论的数学基础中占据突出地位,同时它也是其他物理学科的基础。但正如矩阵和向量的数学概念可以简化为我们在计算机中使用的阵列一样,张量也可以被简化并表示为多维数组和一些相关的操作。不幸的是,事情并没有想象中容易,它并不像矩阵和向量那样简单,主要是因为没有一个明显且简单的操作集可以在张量执行,就像在矩阵和向量上那样执行。

虽然如此,不过还是有一些真正的好消息的。即使我们不能在张量上只写几个操作,我们可以写出一组在张量上的操作模式。然而,这还不够,因为根据这些模式编写的程序在写入时无法按照预期目标有效执行。其余的好消息是,虽然我们低效,但易于编写一些程序,这些程序可以(几乎)自动转换到执行得非常有效的程序中去。

更好的是,这种转换是可以轻松实现的,因此不必再建立另一种新的计算机语言。所做的就像是恶作剧一样:在TensorFlow中,当我们编写如下代码时:

真正发生的是,构建了一个如下图所示的数据结构:

上述代码被转换为可重构并转换为机器可执行形式的数据结构。将代码转换为用户可见的数据结构允许我们编写的程序被重写以便更有效的执行或允许计算导数,从而可以使用高级优化器。

这个数据结构实际上并没有在我们上面提到的程序中执行。因此,在我们实际尝试运行之前,TensorFlow有可能将数据结构重写成更高效的代码。这可能涉及到,我们认为的,要求电脑做的事情的小型或大型的结构化。它还可能涉及生成我们正在使用的机器的CPU的、或者我们正使用的集群的,或者我们已备好的任何GPU的实际可执行代码。

这个很酷的事情就是,我们可以编写非常简单的程序能够得到非常惊奇的结果。

但这仅仅是个开始。

做一些有用的东西(但要与众不同)

TensorFlow和系统类似之处在于,它们都是关于采用描述机器学习架构(如深度神经网络)的程序,并调整该架构的参数从而最小化某种误差值。它们不仅通过创建代表我们的程序的数据结构来实现,而且还产生一个数据结构,表示相对于我们模型的所有参数的误差值的梯度。而具有这样的梯度函数使得优化变得更加容易。

你可以使用TensorFlow也可以使用Caffe,或者使用其他任何具有基本相同效果的系统编写程序,但是你编写的程序不需要优化机器学习功能。你可以编写优化各种程序的程序,如果你编写的程序使用的是你选择的程序包提供的张量符号。自动差异化和最先进的优化器以及汇编到高效的GPU代码仍然会对你有所帮助。

作为一个简易有效的示例,下图显示了家庭能源使用情况的简单模型。

家庭(圆圈)使用的日常能源作为水平轴上温度函数图。能源使用的分段线性模型已经叠加在使用数据上。模型的参数通常是一个矩阵,但是当我们谈论一百万个模型时,我们可以使用张量。

这个图表显示了一个家庭的能源消耗和一个用量消耗模型。要得到一个单一的模型不是什么大不了的事情,但是要找到这个模型,我必须编写一些真正的代码,然后该代码必须运行在数以百万计的家庭中以获取每个模型。使用TensorFlow,我们可以立即为所有房屋创建模型,我们可以使用比我原来使用的更高效的优化器来获取此模型。结果是一万个模型被一次性优化,效率高于我原来的程序。理论上来说,我可以手工优化我的代码,并且可以手工导出一个派生函数,但是这么做需要时间,更重要的是,调试结果所需的时间使我在做模型时不可能完成。

这样的示例显示了基于张量的计算系统,如TensorFlow(或Caffe或Theano或Mxnet或任何你最喜欢的)是如何用于与深度学习非常不同的优化问题中的。

最好的机器学习软件(对你来说)最好是根本不要使用机器学习。

编译自:KDnuggets Home

作者:Ted Dunning,MapR Technologies的首席应用架构师。目前担任Apache基金会董事会成员,担任大量项目的导师。他开发了用于估计极限分位数的t-digest算法。

文章做了不改变原意的修改

播放GIF

图:pixabay

「机器人圈导览」关于深度学习系统,大家或多或少都有一些了解,可是你知道吗?我们今天所用的许多深度学习系统都是基于张量代数的,比如谷歌的TensorFlow,但是张量代数与深度学习的关系到底如何?本文作者是Ted Dunning,MapR Technologies的首席应用架构师,机器人圈将文章编译如下:

张量(Tensors)和诸如TensorFlow这样的机器学习新工具都是当代的热门话题,特别是在那些寻求深度学习方法的人之中,这都是非常受欢迎的。结果就是,当你浏览热词时,你会发现,真的有一些基础强大的、有用的并且可用的方法,它们能够充分利用张量所能提供的,而这不仅仅是针对深度学习而言的。这就是为什么张量为什么那么受欢迎。

如果说计算也是有传统特点的话,那么使用线性代数的数值计算就是最受欢迎的计算之一了。像LINPACK测试以及后来的种种LAPACK软件包,在现在看来都是很古老的了,但它们的功能还是很强大的。那么,其核心是,线性代数是由相当简单和非常有规律可循的操作组成的,包括对一维和二维数字数组(在本文中通常称之为向量和矩阵)的重复乘法和加法运算,并且它是极其普遍的,许多问题都可以通过线性方法求解或近似。这些范围涵盖的领域非常广阔,从计算机游戏中图像的渲染到核武器的设计,以及这些极端之间的其他大范围的应用都是可以利用线性代数来进行运算的。

关键线性代数运算

线性代数在计算机上可实现的完全基本操作是两个向量的点积。这个乘积只是两个向量中相应元素的乘积之和。矩阵和向量的(左)乘积可以被视为具有向量的矩阵行的重复点积,并且两个矩阵的乘积可以被视为矩阵的矩阵向量积和另一个矩阵的列的组合。通过单个值对所有元素进行逐元素加法和乘法,这些操作可以建立所有必需的线性代数机器。

部分原因是它们的规律性,以及它们可以通过大量的并行性操作得以实现,所以计算机可以以极高的速度评估使用线性代数编写的程序。就原始潜力表现方面来说,从Cray-1计算机系统到今天的GPU的演进,其表现能力已经显示出超过3万次的改进,而当你考虑具有大量GPU的集群时,其性能潜力大概是百万次,而这曾经是地球上最快的计算机,其成本只是总成本的一小部分

然而,历史模式已经宣誓了一切,那就是我们必须向越来越高的抽象层次迈进,以便更好地利用新的处理器。Cray-1及其面向向量的后来者需要重写程序以使用向量操作(如点积),从而实现全面的性能。而后来的机器已经要求在矩阵向量运算或甚至矩阵—矩阵运算方面来形成算法,以推动硬件以其最大的潜力运行。

而我们现在刚好处在门槛位置。不同之处在于,除了矩阵—矩阵运算之外,没有其他方面可以着手进行。也就是说,使用线性代数没有任何其他好途径。

但是我们也不必把自己局限在线性代数中。事实证明,我们是可以提高数学食物链的。长期以来,在数学抽象的海洋中有比矩阵更大的“鱼”存在的。而张量就是这样一位可以肩此重任的候选人。张量在广义相对论的数学基础中占据突出地位,同时它也是其他物理学科的基础。但正如矩阵和向量的数学概念可以简化为我们在计算机中使用的阵列一样,张量也可以被简化并表示为多维数组和一些相关的操作。不幸的是,事情并没有想象中容易,它并不像矩阵和向量那样简单,主要是因为没有一个明显且简单的操作集可以在张量执行,就像在矩阵和向量上那样执行。

虽然如此,不过还是有一些真正的好消息的。即使我们不能在张量上只写几个操作,我们可以写出一组在张量上的操作模式。然而,这还不够,因为根据这些模式编写的程序在写入时无法按照预期目标有效执行。其余的好消息是,虽然我们低效,但易于编写一些程序,这些程序可以(几乎)自动转换到执行得非常有效的程序中去。

更好的是,这种转换是可以轻松实现的,因此不必再建立另一种新的计算机语言。所做的就像是恶作剧一样:在TensorFlow中,当我们编写如下代码时:

真正发生的是,构建了一个如下图所示的数据结构:

上述代码被转换为可重构并转换为机器可执行形式的数据结构。将代码转换为用户可见的数据结构允许我们编写的程序被重写以便更有效的执行或允许计算导数,从而可以使用高级优化器。

这个数据结构实际上并没有在我们上面提到的程序中执行。因此,在我们实际尝试运行之前,TensorFlow有可能将数据结构重写成更高效的代码。这可能涉及到,我们认为的,要求电脑做的事情的小型或大型的结构化。它还可能涉及生成我们正在使用的机器的CPU的、或者我们正使用的集群的,或者我们已备好的任何GPU的实际可执行代码。

这个很酷的事情就是,我们可以编写非常简单的程序能够得到非常惊奇的结果。

但这仅仅是个开始。

做一些有用的东西(但要与众不同)

TensorFlow和系统类似之处在于,它们都是关于采用描述机器学习架构(如深度神经网络)的程序,并调整该架构的参数从而最小化某种误差值。它们不仅通过创建代表我们的程序的数据结构来实现,而且还产生一个数据结构,表示相对于我们模型的所有参数的误差值的梯度。而具有这样的梯度函数使得优化变得更加容易。

你可以使用TensorFlow也可以使用Caffe,或者使用其他任何具有基本相同效果的系统编写程序,但是你编写的程序不需要优化机器学习功能。你可以编写优化各种程序的程序,如果你编写的程序使用的是你选择的程序包提供的张量符号。自动差异化和最先进的优化器以及汇编到高效的GPU代码仍然会对你有所帮助。

作为一个简易有效的示例,下图显示了家庭能源使用情况的简单模型。

家庭(圆圈)使用的日常能源作为水平轴上温度函数图。能源使用的分段线性模型已经叠加在使用数据上。模型的参数通常是一个矩阵,但是当我们谈论一百万个模型时,我们可以使用张量。

这个图表显示了一个家庭的能源消耗和一个用量消耗模型。要得到一个单一的模型不是什么大不了的事情,但是要找到这个模型,我必须编写一些真正的代码,然后该代码必须运行在数以百万计的家庭中以获取每个模型。使用TensorFlow,我们可以立即为所有房屋创建模型,我们可以使用比我原来使用的更高效的优化器来获取此模型。结果是一万个模型被一次性优化,效率高于我原来的程序。理论上来说,我可以手工优化我的代码,并且可以手工导出一个派生函数,但是这么做需要时间,更重要的是,调试结果所需的时间使我在做模型时不可能完成。

这样的示例显示了基于张量的计算系统,如TensorFlow(或Caffe或Theano或Mxnet或任何你最喜欢的)是如何用于与深度学习非常不同的优化问题中的。

最好的机器学习软件(对你来说)最好是根本不要使用机器学习。

编译自:KDnuggets Home

作者:Ted Dunning,MapR Technologies的首席应用架构师。目前担任Apache基金会董事会成员,担任大量项目的导师。他开发了用于估计极限分位数的t-digest算法。

文章做了不改变原意的修改


相关内容

  • 从张量概念到张量分析57
  • 第25卷,第3期????????????????:从张量概念到张量分析:黄??勇,魏屹东:(山西大学科学技术哲学研究中心,山西太原0300:摘??要:张量分析是现代数学物理学的基础工具:关键词:张量;线性变换;协变微分;绝对微分:中图分类号:N09??????文献标识码:A??:????亚瑟??凯莱 ...

  • 大规模知识图谱的构建.推理及应用
  • 随着大数据的应用越来越广泛,人工智能也终于在几番沉浮后再次焕发出了活力.除了理论基础层面的发展以外,本轮发展最为瞩目的是大数据基础设施.存储和计算能力增长所带来的前所未有的数据红利. 人工智能的进展突出体现在以知识图谱为代表的知识工程以及以深度学习为代表的机器学习等相关领域. 未来伴随着深度学习对于 ...

  • 基于Tensorflow和TF-Slim图像分割示例
  • [日期:2016-12-05] 来源:CSDN  作者: [字体: ] 引言 在上一篇文章里(如何用TensorFlow和TF-Slim实现图像分类与分割),我们介绍了如何截取图片的中央区域,然后用标准的分类模型对图片的类别进行预测.随后,我们又介绍了如何将网络模型改为全卷积模式,对整张图片进行预测 ...

  • 人工智能行业研究报告
  • 概要 人工智能是信息时代的尖端技术.从人类建立起需要指导控制才能运行的计算机,到计算机拥有可以自己去学习的能力,这一飞跃对各行各业都产生了巨大的影响.虽然此时此刻可能是下一个 AI 冬季(图8)到来之前的「给予承诺又让人失望」的周期,但这些投资和新技术至少会给我们带来有形的机器学习生产力的经济利益. ...

  • 2 第二章 应力和应变
  • 第二章 应力和应变 地震波传播的任何定量的描述,都要求其能表述固体介质的内力和变形的特征.现在我们对后面几章所需要的应力.应变理论的有关部分作简要的复习.虽然我们把这章作为独立的分析,但不对许多方程进行推导,读者想进一步了解其细节,可查阅连续介质力学的教科书. 三维介质的变形称为应变,介质不同部分之 ...

  • 我所认识的应力与应变
  • 我所认识的应力应变 应力.应变都是用来描述物体受载后的反应.应力描述物体内部各点的受力状态,应变描述物体内微元体的变形. 一. 应力 1.应力的定义 可变形固体在外力等因素作用下,其内部各部分之间就要产生相互的作用.这种物体内的一部分与其相邻的另一部分之间相互作用的力,称为内力.我们采用截面法来研究 ...

  • 论文写作与投稿速成手册(编辑亲授)
  • 科技论文相对人文社科类论文而言具有准确.鲜明.生动的特点.作者应突出抓语言特点和结构特点.(1)语言特点.应多用主动句,少用被动句,因为主动句干净利落:应多用长句和复句,因为它准确.周密,也层次分明.结构紧凑:应平铺直叙,忌用更多的形容词修饰语和模糊的词语,比如,"这种会计电算化方法能极大 ...

  • 回归.分类与聚类:三大方向剖解机器学习算法的优缺点(附Python和R实现)
  • 选自EliteDataScience 机器之心编译 参与:蒋思源.晏奇 在本教程中,作者对现代机器学习算法进行一次简要的实战梳理.虽然类似的总结有很多,但是它们都没有真正解释清楚每个算法在实践中的好坏,而这正是本篇梳理希望完成的.因此本文力图基于实践中的经验,讨论每个算法的优缺点.而机器之心也在文末 ...

  • [转载]四论小学生要不要背加法口诀
  • <三论小学生要不要背加法口诀>在<中小学数学.小学版>发表后,反响很大.我在文中提出成立加法口诀研究共同体,不少教师纷纷通过电话.邮箱报名参加,我既高兴又敬佩. 高兴的是,我的建议得到了大家的认可和响应:敬佩的是,这批人的可贵精神.参加这个研究共同体,没有什么功利可言,不可能 ...