打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一文弄清深度学习、TensorFlow和张量之间的关系

播放GIF

图:pixabay

「机器人圈导览」关于深度学习系统,大家或多或少都有一些了解,可是你知道吗?我们今天所用的许多深度学习系统都是基于张量代数的,比如谷歌TensorFlow,但是张量代数与深度学习的关系到底如何?本文作者是Ted DunningMapR 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 DunningMapR Technologies的首席应用架构师。目前担任Apache基金会董事会成员,担任大量项目的导师。他开发了用于估计极限分位数的t-digest算法。

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
教程 | 深度学习初学者必读:张量究竟是什么?
深度学习必备数学知识之线性代数篇(附代码实现)
深度学习中所需的线性代数知识
暑期追剧学AI (三) | 10分钟搞定机器学习数学思维:向量和它的朋友们
更好编程的 50 个数学概念 | 张量、标量、向量和矩阵
程序观点下的线性代数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服