什么是 施特拉森算法(Strassen Algorithm)?
在 1969 年前,全球数学家都坚信计算 $2 \times 2$ 矩阵必须做 8 次乘法(复杂度 $O(N^3)$);而德国数学家施特拉森施展了数学魔法:用 7 次极其精巧的乘法换掉了 1 次 —— 第一次向全人类证明矩阵乘法可以比想象中更快($O(N^{2.807})$)!
硬碰硬算 8 次乘法
计算一个 $2 \times 2$ 矩阵,4 个输出元素每个都需要 2 次乘法,共计 $2 \times 4 = 8$ 次乘法。分治递归下去,时间复杂度是死板的 $O(N^3)$。
- ❌ 乘法开销极高:在计算机硬件中,乘法器的耗电和延迟远高于加减法
- ❌ 矩阵一旦变大:计算量随维度立方爆炸增长
用加减法组合,省下 1 次昂贵乘法
构造 7 个巧妙的中间乘积 $M_1 \sim M_7$,虽然多做了几次便宜的加减法,但硬生生省掉了 1 次高昂的大矩阵乘法!递归复杂度降为 $O(N^{\log_2 7}) \approx O(N^{2.807})$!
- ✨ 打破思想禁锢:人类第一次证明 $O(N^3)$ 不是矩阵乘法的绝对下限
- ✨ 超大矩阵优势显著:在维度上千时,理论总计算量大幅低于传统算法
拆解施特拉森算法的 4 大核心精髓
从分块分治到现代实用边界,读懂算法之美
1. 矩阵 4 等分块
把大矩阵 $A, B$ 各自切成 4 个 $N/2 \times N/2$ 的子矩阵块:$A_{11}, A_{12}, A_{21}, A_{22}$,将大问题转化为子问题。
2. 构造 7 个神奇乘积 $M_1 \sim M_7$
施特拉森通过精妙配凑,用加减法预先组合子块,仅用 7 个矩阵乘积 就捕获了所有交叉项信息。
3. 主定理与 $\log_2 7$ 指数
根据递归主定理(Master Theorem),时间复杂度由 $\log_2(\text{乘法次数})$ 决定:$\log_2 7 \approx 2.807 < 3.0$!
4. 现实工程混合阈值
由于加减法增加了内存读写开销,现实工业界常采用混合策略:大维度用 Strassen,递归到小维度(如 $N \le 64$)切回原生 GEMM。
🕹️ 施特拉森 7 个神奇中间乘积显微镜
点击查看每一个中间乘积 $M_i$ 是如何用子块构造并在右侧组装出最终矩阵 $C$ 的:
1969 年震撼数学界的论文
Volker Strassen 发表了仅有两页纸的简短论文《Gaussian Elimination is not Optimal》。
不仅打破了高斯消元法与矩阵乘法的最优性神话,更开启了理论计算机科学长达半个世纪的“矩阵复杂度竞速赛”。
Coppersmith-Winograd 与 AlphaTensor
施特拉森之后,数学家们一路将理论复杂度推进至 $O(N^{2.371})$。
2022 年 DeepMind 推出 AlphaTensor,利用强化学习在无人类干预下自主搜索出了比施特拉森更快的实用矩阵乘法矩阵!
为什么没有完全取代普通 GEMM?
Strassen 算法虽然减少了乘法,但引入了较多的加法和临时子矩阵内存分配,且数值稳定性(浮点精度误差)稍弱。
因此现代 AI 算力库(如 cuBLAS)通常在极大规模或特定维度下才触发 Strassen 混合加速。