码迷,mamicode.com
首页 > 其他好文 > 详细

我们可以推测矩阵乘法最优解的时间复杂度么?

时间:2015-01-31 21:55:47      阅读:4201      评论:0      收藏:0      [点我收藏+]

标签:算法   矩阵乘法   预测   娱乐   

矩阵乘法的定义为:

技术分享


按照定义,一个简单的方阵乘法伪代码如下:

int A[48,48],B[48,48],C[48,48]  
    for i in 1 to 48  
        for j in 1 to 48  
            for k in 1 to 48  
                C[i,j]+=B[i,k]*A[k,j]

三层嵌套,时间复杂度为O(n3),n为方阵的边长。


由于矩阵乘法的广泛运用,如何优化矩阵乘法运算,有重要的意义。在不考虑矩阵的疏密程度下,如何有效减少矩阵乘法中算术乘法的使用次数是一个主要的优化方向。


最早的矩阵乘法优化算法,是由德国数学家Volker Strassen于1969年提出并以其名字命名的Strassen算法。该算法堪称经典,能在大多算法,运算优化的教科书中找到该算法的介绍。这里也有算法的基本介绍。它的主要思路是通过拼凑一些间接的项,并利用这些间接的项的加减法相消掉一部分项得到最终答案的。简单说来,是以加减法代替了乘法。对于一个二阶的方阵,原来需要8(23)次的乘法运算,被缩减到了7(2log7))次。这个算法的重要意义有两方面,首先是它将矩阵乘法的时间复杂度,由O(n3)降为O(nlog7),log7约为2.807355.即原来的立方运算被降维了(O(n2.807355)),然而更为重要的是,这个算法让数学家意识到,这个问题不是单纯的三维问题,而是很有可能更低维度的问题,也就是说,可能有很大的优化空间。


在此之后,不少更好的算法被相继提出。这里列举一些我能够找到对应文献的:1981年Pan的算法(O(n2.494)),1987年的Coppersmith–Winograd算法(O(n2.376)),和该算法于1990发布的改进算法(O(n2.375477)),此处存疑,未找到对应文献)。在1990年后,相关研究进入了长达20年的冬眠期。直到爱丁堡大学数学系博士生Andrew Stothers在2010年于其博士论文里面,提出了一个新的算法,使时间复杂度进一步降维(O(n2.374),但他本人并没有在期刊或学术会议发表这一成果!),这也让沉寂20年的矩阵乘法优化重新火热起来。2011年底,斯坦福大学的Virginia Vassilevska Williams在基于Andrew Stothers的基础上,把时间复杂度降至O(n2.3728642)。而目前最为优化的解法,是2014年秋由Fran?ois Le Gall简化的斯坦福方法,能够达到时间复杂度O(n2.3728639)。


纵观这数十年的发展,每一丁点的优化都可谓得之不易,而且愈发困难,可以说如果现在能够把维度艰难地降低0.0000001,都是很了不起的学术成果。在寻找最优解的同时,一个问题也很自然地进入研究人员的视线:矩阵乘法最优解的时间复杂度是什么?是否可能从数学理论角度证明该最优解的时间复杂度?即使我们暂时无法知道最优解的具体办法?

换言之,也就是该问题的真实维度是多少。若假设真实维度为D,那么,自然地:

技术分享

由于现在最好的算法已经降维到2.3728642,我们可以进一步收缩这个范围:

技术分享

为什么2是一个简单(naive)的下限?因为对于一个N阶方阵而言,完全的一次访问(写入答案)就需要N的2次方操作,所以2是一个简单的下限。很多人相信D的真实值就是2,实际上,D很可能是远大于2的,因为若D为2,意味着没有运算操作(仅有读写),所以我倾向于进一步收缩这个范围:

技术分享


有不少人尝试证明D是某一个确定值,但目前没有太多决定性的进展。

我并没有尝试从数学理论角度去找出D值,但是在将年份和降维作画在一张图上,可以看到:

技术分享

这个看起来像是可以拟合到负指数函数上。但是考虑到我们有两个明确的上下限(两条渐近线,Degree=3和Degree=D,D值未知,但小于等于2.3728642,大于2。)为了求出D,我们可以把这7个点(7次算法改进)拟合到有上下渐近线的函数,根据下渐近线的表达式,我们可以推测D的真实值。

一个比较好的候选函数是玻尔兹曼函数(Bolztman function):

技术分享


我自己构造了一个类似的函数:

技术分享


其中D就是最优解法的维度,x0用于消除算法研究开始年份和公元年份零点对拟合的影响,p算是一个衡量算法研究进展的指标。明显地,这个模型有两条渐近线,符合上面的描述。


拟合结果:R方为0.9914, D为2.366!

整个曲线为:

技术分享


所以说,如果用这个模型去预测矩阵乘法最优解的时间复杂度是2.366

利用这个模型,我们可以做很多有意思的东西,例如预测何时能够到达2.36。还可以更进一步,例如说,假设我们已知2150年,会有一个算法大突破,将问题维度降到2.1。那么我们将这个点添入,重新拟合,发现模型无法收敛,也就是说,按照这个模型,2150年不太可能有这样的突破。


注意,这只是一个预测模型,所有预测都有可能遭遇黑天鹅的。

实际上,我对这个模型的准确度也没抱有很大信心,因为首先这个模型把算法的研究发展看成是一个指数过程(越接近极限越难),这当然在一定程度上有合理性,但这本身是个复杂的问题,最优解的时间复杂度,是一个确定的值(D),它本身并不由我们已知算法的时间复杂度决定。

另外一方面,如果我们看下图(维基百科整理的年份与维度图,其中一些点我找不到文献出处,所以我的模型是基于以上7个点):

技术分享


实际上,在整个发展过程,我们已经数次目睹了黑天鹅(相对竖直的线就是算法大的突破,相当于黑天鹅)。如果我们截取,例如说1980年前的成果来进行预测,我们很可能得到在2.8左右的D,从今天来看,我们知道这个是个错误的答案。


出乎意料地,按照原来的办法来进行拟合,如果只有前面4个点(1990年前的成果),我们得到的曲线(R方0.9968)是:

技术分享

也就是说,如果我们现在还在1990年,按照这个方法预测,D值比在2015年的预测值(2.366)更低(2.32)!

技术分享


所以,按照这个模型,新的进展,除了降低了D的上限,也会提升D的下限!也算有意思的预测。

所以总的来说,如果矩阵乘法运算算法的发展符合这个模型的话,我们可以作以下预测:

  1. 矩阵乘法是一个(约)2.366维问题;
  2. 当前已经非常接近矩阵乘法的最优解了,大概只有0.05左右的提升空间。
但是,怎么知道运算算法的发展符合这个模型?答案是,我不知道,并且这个模型很有可能是错误的。

不过,从这个角度去考虑问题,也许会让数学家找到证明D下限的出发点(很有可能是2.366,而不是2)。正如爱因斯坦所言:"Problems cannot be solved with the same mind set that created them." 未来会告诉我们答案的。



References:

1.Strassen, Volker. "Gaussian elimination is not optimal." Numerische Mathematik13.4 (1969): 354-356.

2.Pan, V. Ya. "New combinations of methods for the acceleration of matrix multiplications." Computers & Mathematics with Applications 7.1 (1981): 73-125.

3.Coppersmith, Don, and Shmuel Winograd. "Matrix multiplication via arithmetic progressions." Proceedings of the nineteenth annual ACM symposium on Theory of computing. ACM, 1987.

4.Stothers, Andrew James. "On the complexity of matrix multiplication." (2010).

5.Williams, V. Vassilevska. "Breaking the coppersmith-winograd barrier." E-mail address: jml@ math. tamu. edu (2011).

6.Gall, Fran?ois Le. "Powers of tensors and fast matrix multiplication." arXiv preprint arXiv:1401.7714 (2014).

我们可以推测矩阵乘法最优解的时间复杂度么?

标签:算法   矩阵乘法   预测   娱乐   

原文地址:http://blog.csdn.net/raym0ndkwan/article/details/43337447

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!