矩阵Strassen 算法

Strassen 算法

不要与多项式乘法的 Schönhage-Strassen 算法混淆。

在线性代数中,以 Volker Strassen 命名的 Strassen 算法是一种矩阵乘法算法。对于大型矩阵,它比标准矩阵乘法算法更快,具有更好的渐近复杂度,尽管朴素算法通常更适合较小的矩阵。对于极大矩阵,Strassen 算法比已知最快的算法慢,但这种银河算法在实践中没有用,因为它们对于实际大小的矩阵要慢得多。对于小矩阵,存在更快的算法。

Strassen 算法适用于任何环,例如加/乘,但不适用于所有半环,例如最小加或布尔代数,其中朴素算法仍然有效,以及所谓的组合矩阵乘法。

历史

Volker Strassen 在 1969 年首次发布了这个算法,从而证明了n3通用矩阵乘法算法不是最佳的。Strassen 算法的发布导致了对矩阵乘法的更多研究,这导致了渐近下界和改进的计算上限。

算法

让AB是环上的两个方形矩阵R,例如,其项为整数或实数的矩阵。矩阵乘法的目标是计算矩阵乘积C=AB。以下算法说明假定所有这些矩阵的大小都是 2 的幂

但这只是概念上必要的 --- 如果矩阵A,B不是类型2nX2n,"缺失的"行和列可以用零填充以获得大小为 2 的幂的矩阵 --- 尽管该算法的实际实现在实践中不会这样做。

Strassen 算法分区A,B和C转换为大小相等的块矩阵

。朴素的算法为:

这种构造不会减少乘法的次数:仍然需要 8 次矩阵块的乘法来计算Cij矩阵,则使用标准矩阵乘法时所需的乘法次数相同。

Strassen 算法定义了新值:

仅使用 7 次乘法(每次 1 次Mk) 而不是 8。我们现在可以将Cij在Mk:

我们递归迭代这个除法过程,直到子矩阵退化为数字(环的元素R). 如上所述,如果原始矩阵的大小不是 2 的幂,则生成的乘积将具有零行和零列,就像A和B,然后这些将在此时被剥离以获得(更小的)矩阵C我们真的很想要。

Strassen 算法的实际实现对于足够小的子矩阵切换到标准的矩阵乘法方法,这些算法的效率更高。Strassen 算法更有效的特定交叉点取决于特定的实现和硬件。早期的作者估计,Strassen 算法对于宽度为 32 到 128 的矩阵,可以优化实现。然而,据观察,这个交叉点近年来一直在增加,2010 年的一项研究发现,与高度优化的传统乘法相比,即使是 Strassen 算法的单个步骤在当前架构上通常也没有好处,直到矩阵大小超过 1000 或更多,即使对于几千个矩阵大小,好处通常充其量也是微不足道的(大约 10% 或更少)。最近的一项研究(2016 年)观察到,小至 512 的矩阵有好处,好处约为 20%。

对 Strassen 算法的改进

更多信息:矩阵乘法算法 § 次三次算法和矩阵乘法的计算复杂性

通过使用 Winograd 在 1971 年发现的以下形式,可以减少矩阵添加的数量:

这会将矩阵加法和减法的数量从 18 个减少到 15 个。矩阵乘法的个数仍然是 7,渐近复杂度是相同的。

该算法在 2017 年进一步优化, 将每步的矩阵加法次数减少到 12 次,同时保持矩阵乘法的次数,并在 2023 年再次优化:


最后推荐:一个GPU矩阵乘法运算工具-GPUMatrix1.26【Windows版本】
https://download.csdn.net/download/axecute/90266772

相关推荐
zhurui_xiaozhuzaizai1 分钟前
多向量检索:lanchain,dashvector,milvus,vestorsearch,MUVERA
人工智能·算法·机器学习·全文检索·milvus
星期天要睡觉5 分钟前
机器学习——决策树(DecisionTree)
人工智能·决策树·机器学习
WeiJingYu.9 分钟前
机器学习——决策树
人工智能·决策树·机器学习
大阳12313 分钟前
数据结构(概念及链表)
c语言·开发语言·数据结构·经验分享·笔记·算法·链表
m0_5587901433 分钟前
GPU算力平台评测
服务器·人工智能·python·深度学习·神经网络·目标检测·机器学习
2501_9247319941 分钟前
驾驶场景玩手机识别:陌讯行为特征融合算法误检率↓76% 实战解析
开发语言·人工智能·算法·目标检测·智能手机
paid槮1 小时前
机器学习——逻辑回归
人工智能·机器学习·逻辑回归
爱编程的鱼2 小时前
计算机(电脑)是什么?零基础硬件软件详解
java·开发语言·算法·c#·电脑·集合
洛生&2 小时前
【abc417】E - A Path in A Dictionary
算法
亮亮爱刷题2 小时前
算法提升之数学(快速幂+逆元求法)
算法