50年后,矩阵乘法迎来全新突破!拉森算法加法乘积神经网络

数千年来,算法一直在帮助数学家进行基本运算。

古埃及人发明了一种不需要乘法表就能得出两个数字的乘积的算法;欧几里得描述了一种沿用至今的计算最大公约数的算法;在伊斯兰的黄金时代,花拉子米设计出了求解线性方程和二次方程的新算法。尽管现如今我们对算法已经非常熟悉,但发现新算法的过程仍是非常困难的。

在一篇于近期发表在《自然》杂志上的论文中,DeepMind团队介绍了第一个用于发现新的、高效的、可证明正确的基本算法(如矩阵乘法)的人工智能系统——AlphaTensor。它打破了一个保持了50多年的记录,发现了一种能更快地计算两个矩阵之间的乘法的算法。

核心运算:矩阵乘法

矩阵乘法是我们非常熟悉,也是代数中最基本的运算之一。这个看似简单的数学运算,对当代数字世界有着巨大的影响。

两个3×3矩阵相乘的例子。(图/DeepMind)

矩阵乘法是许多不同应用程序的核心计算类型,从处理智能手机中的图像到识别语音指令,从为电脑游戏生成图像到模拟复杂的物理学……可以说,在我们的日常生活中,矩阵乘法无处不在。

但在1969年,德国数学家沃尔克·施特拉森(VolkerStrassen)证明,还有更好的算法存在。通过研究2x2矩阵,他发现了一种只需要7次就能将2x2矩阵相乘的方法。

施特拉森算法

这种算法被称为施特拉森算法,这种算法需要进行多一些的加法,但这是可以接受的,因为计算机在计算加法时要比计算乘法快得多。

标准算法与施特拉森算法的对比:当两个2×2的矩阵相乘时,标准算法需要经过8次乘法运算,而施特拉森算法只需要进行7次乘法运算。对整体效率来说,乘法的影响比加法更大。(图/DeepMind)

在施特拉森做出突破后,数学家又进行了几十年的研究,尽管发现了一些不适用于计算机代码的微小改进,但对更大的矩阵来说问题仍然没有得到解决——在某种程度上,他们甚至不知道用这种方法计算两个大小仅为3x3的矩阵相乘的效率如何。

在新研究中,DeepMind团队探索了现代人工智能技术如何推动新的矩阵相乘算法的自动发现,并发现了一种可以在当前硬件上完美运作的更快的算法。

一个困难的棋盘游戏

首先,研究人员将寻找矩阵乘法的有效算法的问题,转化为一个名为TensorGame的三维棋盘游戏。在这个游戏中,棋盘是一个三维张量,代表要解决的乘法问题;每一步棋都代表解决问题的下一步,因此游戏中所采取的一系列的移动就代表一种算法。

玩家的目标是,通过允许的移动来修改张量,从而用最少的步骤让张量中的所有数字都归零。这是一项极具挑战性的游戏,因为每一步都可能需要从万亿步棋中进行选择。两个矩阵相乘的方法比宇宙中原子数量还要多。在一些例子中,这个游戏每一步可能的走法数量,是10的33次方(1033)。

为了解决这一与传统游戏截然不同的挑战,研究人员开发了多个关键组件,包括一个包含特定问题归纳偏倚的新的神经网络架构,一个生成有用合成数据的程序,以及一个能充分利用问题对称性的配方。

由AlphaTensor进行的三维棋盘游戏,其目标是找到一个正确的矩阵乘法算法。游戏状态是一个由数字组成的立方数组(灰色表示0、蓝色表示1、绿色表示-1),代表着剩余要做的工作。(图/DeepMind)

有效的计算

计算一个4x5的矩阵乘以一个5x5的矩阵,传统算法需要进行100次乘法运算;而用在此之前的最佳算法来计算,这个数字可以减少到80次;现在,AlphaTensor发现的算法只需76次乘法就能完成运算。

总的来说,AlphaTensor在超过70种大小各异的矩阵上击败了现有的最佳算法。比如它将两个9×9的矩阵相乘所需的步数从511减少到498,将两个11×11的矩阵相乘所需的步数从919减少到896。在其他许多情况下,AlphaTensor重新发现了那些现有的最佳算法。

不仅如此,AlphaTensor还在有限域内改进了施特拉森的二阶算法,这是施特拉森算法自50年前发现以来迎来的首个改进。这些用于小矩阵相乘的算法,可作为用来乘任意大小的更大矩阵的原语。

另外,AlphaTensor还发现了一组具有最先进复杂性的多样化算法,每种大小都有多达数千个矩阵乘法算法,这表明矩阵乘法算法的空间比以前想象的更为丰富。

在这个丰富的空间中,算法具有不同的数学特性和实用特性。利用这种多样性,研究人员将AlphaTensor调整为专门寻找能在一些特定硬件上快速运行的算法。用这些算法来计算大矩阵相乘的速度比在相同硬件上的常用算法快10-20%,这展示了AlphaTensor在优化任意目标方面的灵活性。

未来研究与应用

从数学的角度来看,新的结果可以指导复杂性理论(旨在确定解决计算问题的最快算法)的进一步研究。可以说,AlphaTensor提升了我们对矩阵乘法算法的丰富性的理解,而这种理解或许会为我们带来新的惊喜,比如帮助我们确定计算机科学中最基本的开放问题之一——矩阵乘法的渐近复杂性。

正如前文所提到的,矩阵乘法是计算机图形学、数字通信、神经网络训练和科学计算等许多计算任务的核心组成部分,因此AlphaTenor的发现可以大大提高这些领域的计算效率。AlphaTensor在考虑任何类型的目标上所拥有的灵活性,也可以激发设计不同算法的新应用。

DeepMind团队也希望,在这次工作的基础上,未来能够有更多的人开始应用人工智能来帮助解决数学和科学领域的一些最重要的挑战。

THE END
1.3D数学基础(矩阵详解)方形矩阵M的行列式表示为|M|。 2 x 2矩阵的行列式如下: 更容易记住的方式,沿对角线和反对角线分别让元素相乘,然后使用对角线元素相乘的结果减去反对角线元素相乘的结果即可。 3 x 3矩阵的行列式如下: 使用容易记录的方式:先并排编写矩阵M的两个副本,然后沿对角线和反对角线分别让元素相乘,最后使用对角线元素相乘https://zhuanlan.zhihu.com/p/434655226
2.Java矩阵连乘问题(动态规划)算法实例分析java本文实例讲述了Java矩阵连乘问题(动态规划)算法。分享给大家供大家参考,具体如下: 问题描述:给定n个矩阵:A1,A2,,An,其中Ai与Ai+1是可乘的,i=1,2,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的https://www.jb51.net/article/128975.htm
3.矩阵连乘动态规划悠乐萧子?问题的最优子结构性质是该问题可用动态规划算法 求解的显著特征 矩阵连乘算法数据结构 形参中应有矩阵个数n和存储矩阵行数的一维数组p[n]。因为要使矩阵可乘,Ai的列数必须与Ai+1的行数一致,所以只需用p[0]存储A1的行数,其他矩阵只存储列数即可 https://www.cnblogs.com/LieYanAnYing/p/11708906.html
4.秒懂算法矩阵连乘问题算法秒懂算法 | 矩阵连乘问题 01、问题分析——递归关系 1●问题 给定n个矩阵{A1,A2,A3,…,An},其中Ai与Ai+1(i=1,2,3,…,n-1)是可乘的。用加括号的方法表示矩阵连乘的次序,不同加括号的方法所对应的计算次序是不同的。 【例4-2】三个矩阵A1A2A3连乘,用加括号的方法表示其计算次序。https://download.csdn.net/blog/column/11702032/124419099
5.算法:矩阵连乘求的最小乘法次数今天来讨论一道算法题,这道算法题我在做的时候真的是没什么思路,甚至看到解法之后依然想了好久才想明白,好久没看过算法了,本来对动态规划这块就不是很熟,这里记录一下。 题目 给定一个 n 的矩阵序列,我们希望计算它们的乘积: 其中, 是 矩阵 注意,这里不是要计算乘积,而是希望找到一个明确的计算次序,使得这个矩https://www.jianshu.com/p/02b3b1b81bee
6.规模为5矩阵连乘问题,计算次序有()种规模为5矩阵连乘问题,计算次序有5种。因为乘法是满足结合律的,所以计算的顺序不同,最终结果是一样的。但是每种顺序所需的乘法次数可能不同。根据矩阵连乘算法的动态规划思想,得到的计算次序如下:((A1A2)(A3A4))A5,共需计算次数:260 (A1((A2A3)(A4A5))),共需计算次数:270 (https://zhidao.baidu.com/question/1905518827368601580.html
7.动态规划(矩阵连乘)讲解.ppt动态规划 (矩阵连乘)讲解.ppt,* 实验三 动态规划算法 ——矩阵连乘问题 * 动态规划的应用:矩阵连乘 例:A1A2相乘,设这2个矩阵的维数分别为10*5,5*3运算次数10*5*3=150。 问题:给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积https://max.book118.com/html/2017/0314/95383848.shtm
8.矩阵连乘问题给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 Input 输入包含多组测试数据。第一行为一个整数C,表示有C组测试数据,接下来有2*C行数据,每组测试数据占2行,每组测试数据第一行是1个整数n,表示有n个矩阵连乘,接下来一行有n+1个数,表示是n个矩阵的行及第n个https://www.coder100.com/index/index/content/id/1006557
9.矩阵连乘问题python代码矩阵连乘问题算法矩阵连乘问题python代码 矩阵连乘问题算法 矩阵连乘优化 前言 从旭东的博客 看到一篇博文:矩阵连乘最优结合 动态规划求解,挺有意思的,这里做个转载【略改动】。 问题 矩阵乘法是这样的,比如\[ A_{ab} B_{bc} = C_{ac} \] 两个矩阵,一个a行,一个c列,行列乘法次数为a*c。一行乘以一列得到C中的一个https://blog.51cto.com/u_13250/8284001
10.动态规划算法的基本思路是()。在动态规划算法中,处理重叠子问题的方法是() 点击查看答案进入小程序搜题 ()哪个不是我们解决台湾问题的最大底气。 点击查看答案进入小程序搜题 在动态规划算法中,处理多阶段决策过程的方法是() 点击查看答案进入小程序搜题 矩阵连乘问题的算法可由()设计实现时时间性能较好。 点击查看答案进入小程序搜题赞https://m.ppkao.com/wangke/daan/cd18c0e524a4480db9daa0811dfe23f8
11.动态规划DP算法详解动态规划(dynamic programing)和分治法类似,都是通过组合子问题的解来求解原问题的解。(在经典排序算法中的二路归并排序和快速排序都用到了分而治之的思想-分治法)。 分治法是将原问题划分为没有交集,相互独立的子问题,并分别求解后再进行合并,求出原问题的解。 https://removeif.github.io/algorithm/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92DP%E7%AE%97%E6%B3%95%E8%AF%A6%E8%A7%A3.html
12.精选算法设计与分析(第六章分支限界法)归纳起来,与回溯法相比,分枝限界法算法的优点是可以更快地找到一个解或者最优解,其缺点是要存储结点的限界值等信息,占用的内存空间较多。另外,求解效率基本上由限界函数决定,若限界估计不好,在极端情况下将与穷举搜索没多大区别。 结语 第六章分支限界法结束,下一章——第七章贪心法https://cloud.tencent.com/developer/article/2399051