图:pixabay 「机器人圈导览」关于深度学习系统,大家或多或少都有一些了解,可是你知道吗?我们今天所用的许多深度学习系统都是基于张量代数的,比如谷歌的TensorFlow,但是张量代数与深度学习的关系到底如何?本文作者是Ted Dunning,MapR Technologies的首席应用架构师,atv,机器人圈将文章编译如下: 张量(Tensors)和诸如TensorFlow这样的机器学习新工具都是当代的热门话题,特别是在那些寻求深度学习方法的人之中,这都是非常受欢迎的。结果就是,当你浏览热词时,你会发现,真的有一些基础强大的、有用的并且可用的方法,它们能够充分利用张量所能提供的,而这不仅仅是针对深度学习而言的。这就是为什么张量为什么那么受欢迎。 如果说计算也是有传统特点的话,那么使用线性代数的数值计算就是最受欢迎的计算之一了。像LINPACK测试以及后来的种种LAPACK软件包,在现在看来都是很古老的了,但它们的功能还是很强大的。那么,其核心是,线性代数是由相当简单和非常有规律可循的操作组成的,包括对一维和二维数字数组(在本文中通常称之为向量和矩阵)的重复乘法和加法运算,并且它是极其普遍的,许多问题都可以通过线性方法求解或近似。这些范围涵盖的领域非常广阔,从计算机游戏中图像的渲染到核武器的设计,以及这些极端之间的其他大范围的应用都是可以利用线性代数来进行运算的。 关键线性代数运算 线性代数在计算机上可实现的完全基本操作是两个向量的点积。这个乘积只是两个向量中相应元素的乘积之和。矩阵和向量的(左)乘积可以被视为具有向量的矩阵行的重复点积,并且两个矩阵的乘积可以被视为矩阵的矩阵向量积和另一个矩阵的列的组合。通过单个值对所有元素进行逐元素加法和乘法,这些操作可以建立所有必需的线性代数机器。 部分原因是它们的规律性,以及它们可以通过大量的并行性操作得以实现,所以计算机可以以极高的速度评估使用线性代数编写的程序。就原始潜力表现方面来说,从Cray-1计算机系统到今天的GPU的演进,其表现能力已经显示出超过3万次的改进,而当你考虑具有大量GPU的集群时,其性能潜力大概是百万次,而这曾经是地球上最快的计算机,其成本只是总成本的一小部分 然而,历史模式已经宣誓了一切,那就是我们必须向越来越高的抽象层次迈进,以便更好地利用新的处理器。Cray-1及其面向向量的后来者需要重写程序以使用向量操作(如点积),从而实现全面的性能。而后来的机器已经要求在矩阵向量运算或甚至矩阵—矩阵运算方面来形成算法,以推动硬件以其最大的潜力运行。 而我们现在刚好处在门槛位置。不同之处在于,除了矩阵—矩阵运算之外,没有其他方面可以着手进行。也就是说,使用线性代数没有任何其他好途径。 但是我们也不必把自己局限在线性代数中。事实证明,我们是可以提高数学食物链的。长期以来,在数学抽象的海洋中有比矩阵更大的“鱼”存在的。而张量就是这样一位可以肩此重任的候选人。张量在广义相对论的数学基础中占据突出地位,同时它也是其他物理学科的基础。但正如矩阵和向量的数学概念可以简化为我们在计算机中使用的阵列一样,张量也可以被简化并表示为多维数组和一些相关的操作。不幸的是,事情并没有想象中容易,它并不像矩阵和向量那样简单,主要是因为没有一个明显且简单的操作集可以在张量执行,就像在矩阵和向量上那样执行。 虽然如此,不过还是有一些真正的好消息的。即使我们不能在张量上只写几个操作,我们可以写出一组在张量上的操作模式。然而,这还不够,因为根据这些模式编写的程序在写入时无法按照预期目标有效执行。其余的好消息是,虽然我们低效,但易于编写一些程序,这些程序可以(几乎)自动转换到执行得非常有效的程序中去。 更好的是,这种转换是可以轻松实现的,因此不必再建立另一种新的计算机语言。所做的就像是恶作剧一样:在TensorFlow中,当我们编写如下代码时: 真正发生的是,构建了一个如下图所示的数据结构: (责任编辑:本港台直播) |