梦晨 发自 凹非寺
量子位 报道 | 公众号 QbitAI

n阶矩阵乘法最优解的时间复杂度再次被突破,达到了

按定义直接算的话,时间复杂度是O(n³)。

光这么说可能不太直观,从图上可以看出,n足够大时优化后的算法就开始表现出明显优势。

矩阵乘法在深度学习中有着广泛的应用,像卷积神经网络(CNN)中最耗时间的卷积计算,就经常被映射成矩阵乘法。

图源:DOI 10.3390/electronics8010065

虽然在具体实现上还有很多障碍,但矩阵相乘底层算法的优化,至少在理论上为深度学习节省时间提供了可能性。

而科学家们努力的目标,是使n阶矩阵乘法的时间复杂度尽可能接近理论上的最快速度O(n²)。

本次研究共同作者是一对师徒。

左:Alman 右:Vassilevska Williams

Josh Alman目前是哈佛大学的博士后研究员,主要研究方向是算法设计和复杂度理论。

Virginia Vassilevska Williams是他在MIT读博士期间的导师,研究方向是组合数学和图论在计算领域的应用。

Strassen:用加法替代乘法

矩阵乘法的时间复杂度直到1969年才第一次被Volker Strassen降至O(n³)以下。

看过《算法导论》的同学应该很熟悉Strassen算法。

以2阶矩阵相乘为例,总共需要进行2³=8次乘法,而2ⁿ的高阶矩阵相乘可以用分块法不断迭代细分解成若干个2阶子矩阵相乘。

Strassen巧妙的通过构造7个中间变量,用增加14次加法为代价省去了一次乘法。

对于

定义

则有

像这样,在M₁-M₇的计算中只有7次乘法操作。
由于矩阵乘法计算中乘法的复杂度是O(n³),而加法的复杂度只有O(n²),n越大时此方法的收益就越大。

且分块后每个子矩阵相乘都可以省去一次乘法操作,最终把时间复杂度降低到

这么绕的算法到底怎么想出来的?可惜Strassen在论文中并没有说明这一点。

Strassen算法在实际应用时受到很大限制,如运行时会创建大量的临时变量,在n不够大时反倒更耗费时间。

还有只适用于稠密矩阵,针对稀疏矩阵有更快的专门算法。

但最重要的是,Strassen的办法让学界意识到,原来矩阵乘法问题还有优化空间啊!

激光法:用张量替代矩阵

20世纪70年代末期,科学家们找到了解决问题的新思路,将矩阵计算转换为张量计算。

1981年,Schonhage将此方法优化到后,Strassen把这个方法命名为“激光法(Laser Method)”,因为和正交偏振激光有相似之处。

在后来的几十年中,矩阵乘法的每次优化都来自激光法的优化,即如何更有效的把矩阵问题转换成张量问题。

Alman和Williams的优化算法只比14年LeGall的减少了

从历次优化的幅度来看,似乎已逼近激光法的极限。

能算得更快了吗?

激光法很少在实际中应用,因为它只在n足够大,大到现代计算机硬件几乎无法处理的时候才能提供优势。

这样的算法被称作“银河算法(Galatic Algorithm)”。

在业界使用最多的还是通过分块法和并行处理控制矩阵的规模。当n不大时,再通过循环展开,内存布局优化等办法针对直觉算法的优化。

还有一点,现实中由于浮点数精度的限制,Strassen法和激光法在计算大规模矩阵时都会产生不小的误差。

图源:DOI 10.1109/ICPADS.2011.130

矩阵乘法的加速,看来还没那么容易。

论文链接
https://arxiv.org/abs/2010.05846

参考链接:
[1]https://www.quantamagazine.org/mathematicians-inch-closer-to-matrix-multiplication-goal-20210323
[2]https://en.wikipedia.org/wiki/Matrix_multiplication_algorithm
[3]https://www.researchgate.net/publication/330315719_A_Uniform_Architecture_Design_for_Accelerating_2D_and_3D_CNNs_on_FPGAs
[4]http://www.theoryofcomputing.org/articles/gs005/gs005.pdf
[5]https://www.youtube.com/watch?v=J5LK1SChxGs
[6]http://www.cs.toronto.edu/~yuvalf/AmbFilLeG14.pdf

—  —

本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。

点这里????关注我,记得标星,么么哒~

加入AI社群,拓展你的AI行业人脉

量子位「AI社群」招募中!欢迎AI从业者、关注AI行业的小伙伴们扫码加入,与50000+名好友共同关注人工智能行业发展&技术进展

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见~

矩阵乘法计算速度再次突破极限,我炼丹能更快了吗?| 哈佛、MIT相关推荐

  1. c++中大矩阵乘法计算的效率问题

    假设两个大小相同的方阵需要计算乘法:按照矩阵乘法的规则: 先写一段矩阵初始化代码: #include <iostream> #include <cstdlib> #includ ...

  2. c语言 乘法计算速度,C++ 基本计算的速度

    前言 ACM 时,曾经测试过 Lutece 的速度并记录在这篇博客,毕竟 OJ 运算速度直接关系到了每一次写的代码的复杂度. 脱坑 ACM 以后,在编程珠玑里面看到了自己的电脑的运算速度应该作为常识记 ...

  3. matlab指针矩阵乘法,为什么MATLAB在矩阵乘法中速度这么快?

    这类问题是反复出现的,应该比"Matlab使用高度优化的库"或"Matlab使用MKL"一次更清楚地回答堆栈溢出. 历史: 矩阵乘法(与矩阵向量.向量乘法和许多 ...

  4. HJ70 矩阵乘法计算量估算 ——

    一.题目 二.代码 import java.util.*; public class Main {public static void main(String[] args) {Scanner in ...

  5. CUDA加速计算矩阵乘法进阶玩法(共享内存)

    CUDA加速计算矩阵乘法&进阶玩法~共享内存 一.基础版矩阵乘法 二.为什么可以利用共享内存加速矩阵乘法 1.CUDA内存读写速度比较 2.申请共享内存 三.改进版矩阵乘法(利用共享内存) 一 ...

  6. 矩阵乘法和逆矩阵-线性代数课时3(MIT Linear Algebra , Gilbert Strang)

    这是Strang教授的第三讲,讲解的内容是矩阵乘法和矩阵的逆.矩阵乘法在前面已经使用过,本节课教授只是集中细致的讲解矩阵乘法满足的定律和几种计算矩阵乘法的方法,矩阵的逆是本节课的重要内容. 矩阵乘法 ...

  7. 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )

    文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...

  8. c++矩阵作为函数输入变量_C++实现矩阵乘法

    最近学习C++,做了一个矩阵乘法的练习.先说一下功能,输入两个矩阵A,B,大小自己定,换行用:表示(matlab的习惯).然后输出A*B的矩阵. 1.思路 首先,由于输入的矩阵维数是随机的,因此,我们 ...

  9. jzoj5223-B【矩阵乘法】

    正题 题目大意 3∗33*33∗3的矩阵上每个格子都有机器人,每次可以向相邻格子移动或不动(一个格子上可以有多个机器人),求移动nnn次后每个格子上都有机器人的移动方案数. 解题思路 用矩阵乘法计算出 ...

最新文章

  1. SAP云服务新订购量增长103%
  2. ‘UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xff in position 0: invalid start byte‘成功解决
  3. Windows8.1下安装NoSQL-- mongodb安装使用
  4. YouSwap将于4月16日新增HGT/USDT、HGT/YOU流动性挖矿
  5. php 检测移动设备,Github项目Mobile-Detect-检测移动设备的php类
  6. Drools 规则引擎的使用
  7. 大学python教材课后答案_大学慕课2020年Python编程基础课后答案
  8. 摄影——相机的成像原理
  9. 山大计算机学院教务处,山东大学本科生院教务系统
  10. 电工电子技术计算机用学吗,电工电子技术是学什么
  11. 高效工作的7种方法,可以让你的工作效率提高一倍,很实用
  12. 新能源车企骗补终结:实力说话淘汰赛开启
  13. C语言中指针与取地址符详解
  14. 解决undefined reference to `WinMain'
  15. 一位十万粉博主的运营之路
  16. Android 弥散阴影的ImageView
  17. Spring Security源码分析七:Spring Security 记住我
  18. 计算机CPU国产替代,国产CPU终于投入民用!网友:国产系统呢?啥时候能用上国产电脑...
  19. uniapp中开发模拟拼多多sku轮播选择器
  20. 地表反射率影响因素_地理:影响因素及特征总结

热门文章

  1. 为什么静态方法在Java中不能是抽象的
  2. 如何在Bash中的分隔符上拆分字符串?
  3. 如果想成为一名顶尖的前端,这份书单你一定要收藏!
  4. 推荐一个当前互联网很火的技术
  5. TCP/UDP网络编程调试助手下载
  6. Swift 4.1增强了泛型、编译器和包管理器
  7. Cassandra 处理客户端请求
  8. jenkins 中 Poll SCM 和 Build periodically 的区别
  9. PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数详解
  10. 人人出售56不亏:三方得利