快速矩阵乘法的研究——下

快速矩阵乘法的研究

本文我们只看一个算法,就是 Coppersmith 和 Winograd 提出的 O ( 2.37 ) O(2.37) O(2.37)的矩阵乘法。请确保前两篇内容已经掌握理解。
https://blog.csdn.net/jxt1234and2010/article/details/88588208
https://blog.csdn.net/jxt1234and2010/article/details/88599629

Salem-Spencer 集

Salem-Spencer 集是一个整数集 B B B,且对任意的 a , b , c ∈ B a, b, c \in B a,b,cB ,有如下性质:
a + b = 2 c → a = b = c a+b=2c \rightarrow a = b = c a+b=2ca=b=c
简言之,就是这个集合不存在“中间数”,任意两数的平均值都不在集合中。

对于 Salem-Spencer 集合,有Salem-Spencer定理:

对任意的 ϵ \epsilon ϵ > 0,存在一个下界 M ϵ ≈ 2 c ϵ 2 M_{\epsilon}\approx 2^{\frac{c}{\epsilon ^2}} Mϵ2ϵ2c;对任意的 M > M ϵ M > M_{\epsilon} M>Mϵ,存在一个Salem-Spencer 集 B,B中有 M ′ M' M( M ′ > M 1 − ϵ M' > M^{1-\epsilon} M>M1ϵ)个互不相同的元素,且
0 < b 1 < b 2 < b 3 < . . . < b M ′ < M 2 0 < b_1 < b_2 < b_3 < ... < b_{M'} < \frac{M}{2} 0<b1<b2<b3<...<bM<2M

该定理可以作如下应用:

不相交集合划分引理

假设我们有一个大小为 3 N 3N 3N的集合 S S S,并且希望把它分成3个互不相交且大小都为 N N N的集合 A , B , C A, B, C A,B,C:
∣ A ∣ = ∣ B ∣ = ∣ C ∣ = N , A ∩ B = A ∩ C = B ∩ C = ∅ |A| = |B| = |C| = N, A\cap B = A\cap C = B\cap C = \empty A=B=C=N,AB=AC=BC=
所有这样的分割方法成为一个集合 S p a r t S_{part} Spart
给定一个 ϵ \epsilon ϵ ,我们可以找到一个下界 N 0 N_0 N0,对任意的 N > N 0 N>N_0 N>N0 存在一个子集 △ = { { A 1 , B 1 , C 1 } , . . . , { A ∣ △ ∣ , B ∣ △ ∣ , C ∣ △ ∣ } } ⊂ S p a r t \triangle = \{\{A_1, B_1, C_1\}, ..., \{A_{|\triangle|}, B_{|\triangle|}, C_{|\triangle|}\}\} \subset S_{part} ={{A1,B1,C1},...,{A,B,C}}Spart,对于其中的元素,满足如下性质:
1、对集合内任意两个不同元素: { A , B , C } \{A, B, C\} {A,B,C} { A ′ , B ′ , C ′ } \{A', B', C'\} {A,B,C} A , A ′ A, A' A,A, B , B ′ B, B' B,B, C , C ′ C, C' C,C互不相同
2、对集合内某一元素 { A i , B i , C i } \{A_i, B_i, C_i\} {Ai,Bi,Ci},不存在来自其他元素的 B j B_j Bj, C k C_k Ck,使 A i ∪ B j ∪ C k = S A_i\cup B_j \cup C_k = S AiBjCk=S
∣ △ ∣ ≥ ( 27 4 ) N ( 1 − ϵ ) |\triangle| \geq (\frac{27}{4})^{N(1-\epsilon)} (427)N(1ϵ)

该引理需要结合一些均匀分布的性质去证明,是后面CW算法的核心。虽然很重要,为了尽快奔入主题,这里先不证了,后续再补充。

C-W的"简单"算法

构造公式

我们从如下构造公式出发:
∑ i = 1 q λ − 2 ( x 0 [ 0 ] + λ x i [ 1 ] ) ( y 0 [ 0 ] + λ y i [ 1 ] ) ( z 0 [ 0 ] + λ z i [ 1 ] ) − λ − 3 ( x 0 [ 0 ] + λ 2 ∑ x i [ 1 ] ) ( y 0 [ 0 ] + λ 2 ∑ y i [ 1 ] ) ( z 0 [ 0 ] + λ 2 ∑ z i [ 1 ] ) + ( λ − 3 − q λ − 2 ) ( x 0 [ 0 ] ) ( y 0 [ 0 ] ) ( z 0 [ 0 ] ) = ∑ i = 1 q ( x 0 [ 0 ] y i [ 1 ] z i [ 1 ] ) + ( x i [ 1 ] y 0 [ 0 ] z i [ 1 ] ) + ( x i [ 1 ] y i [ 1 ] z 0 [ 0 ] ) + O ( λ ) \sum_{i=1}^q \lambda ^{-2}(x_0^{[0]}+\lambda x_i^{[1]})(y_0^{[0]}+\lambda y_i^{[1]})(z_0^{[0]}+\lambda z_i^{[1]}) \\- \lambda ^{-3}(x_0^{[0]}+\lambda ^2\sum x_i^{[1]})(y_0^{[0]}+\lambda ^2\sum y_i^{[1]})(z_0^{[0]}+\lambda ^2\sum z_i^{[1]}) \\ +(\lambda ^{-3} -q\lambda ^{-2})(x_0^{[0]})(y_0^{[0]})(z_0^{[0]}) \\ = \sum_{i=1}^q(x_0^{[0]}y_i^{[1]}z_i^{[1]})+(x_i^{[1]}y_0^{[0]}z_i^{[1]})+(x_i^{[1]}y_i^{[1]}z_0^{[0]}) + O(\lambda) i=1qλ2(x0[0]+λxi[1])(y0[0]+λyi[1])(z0[0]+λzi[1])λ3(x0[0]+λ2xi[1])(y0[0]+λ2yi[1])(z0[0]+λ2zi[1])+(λ3qλ2)(x0[0])(y0[0])(z0[0])=i=1q(x0[0]yi[1]zi[1])+(xi[1]y0[0]zi[1])+(xi[1]yi[1]z0[0])+O(λ)

这个构造公式用 q + 2 q+2 q+2个乘数近似计算了 3 q 3q 3q个乘数,类似于Strassen构造的式子,上标表示分组,比如 x 0 x_0 x0 [ 0 ] [0] [0]组, { x 1 , . . . , x q } \{x_1, ..., x_q\} {x1,...,xq} [ 1 ] [1] [1]组。等式右边既不是矩阵乘,也不是按分组意义上的“矩阵乘”,不过每个块是一个矩阵乘法,比如 ∑ i = 1 q ( x 0 [ 0 ] y i [ 1 ] z i [ 1 ] ) \sum_{i=1}^q(x_0^{[0]}y_i^{[1]}z_i^{[1]}) i=1q(x0[0]yi[1]zi[1])是一个 ( 1 , 1 , q ) (1, 1, q) (1,1,q)的矩阵乘法。

接下来,我们需要对其作 3 N 3^N 3N的张量幂,并利用Salem-Spencer相关定理把一些项设成0,保留下一系列独立的矩阵乘,这样便可以应用上一篇所述的渐近和定理,得到更优的矩阵乘算法。

张量幂与矩阵乘法阶数

设定一个 ϵ > 0 \epsilon >0 ϵ>0,按Salem-Spencer定理,有一个下界 M ϵ M_{\epsilon} Mϵ,取 N > M ϵ N > M_{\epsilon} N>Mϵ,对构造式作 3 N 3^N 3N的张量幂。

在这个复杂的张量幂中,对于 x i [ v ] x_i^{[v]} xi[v]这个元素,其下标 i i i变成了一个3N长度的向量 { a , b , c , . . . } \{a, b, c,...\} {a,b,c,...},里面元素均属于 { 0 , . . . , q } \{0, ..., q\} {0,...,q};而上标 v v v,变成了由 { 0 , 1 } \{0, 1\} {0,1}元素组成的一个 3 N 3N 3N长度的向量 I ∈ { 0 , 1 } 3 N I \in \{0, 1\}^{3N} I{0,1}3N。类似地, y , z y, z y,z相关的上标组成两个 3 N 3N 3N长度的向量 J , K J,K J,K

我们希望在这个张量幂中,仅留下一系列互相独立的 ( q N , q N , q N ) (q^{N}, q^{N}, q^{N}) (qN,qN,qN)的矩阵乘法表示,这要求我们按如下条件选择不为零的 x , y , z x, y, z x,y,z
x , y , z x, y, z x,y,z的上标向量 I I I各有 N N N 0 0 0,并且 I i + J i + K i = 2 I_i+J_i+K_i=2 Ii+Ji+Ki=2

这样我们可以得到 ( 3 N N ) ( 2 N N ) \binom{3N}{N}\binom{2N}{N} (N3N)(N2N)项,下面我们需要在这里面进一步挑选出一个子集 △ \triangle
1、对于 △ \triangle 中的两个元素, { I , J , K } \{I, J, K\} {I,J,K} { I ′ , J ′ , K ′ } \{I', J', K'\} {I,J,K} I , I ′ I, I' I,I, J , J ′ J, J' J,J, K , K ′ K, K' K,K互不相同 —— 这样可以保证我们得到的是相互独立的矩阵乘法。
2、若 I , J , K , I ′ , J ′ , K ′ , I ′ ′ , J ′ ′ , K ′ ′ I, J, K, I',J',K',I'',J'',K'' I,J,K,I,J,K,I,J,K都是 △ \triangle 中的元素且 I , J ′ , K ′ ′ I, J', K'' I,J,K也是 △ \triangle 的元素,则 I = I ′ = I ′ ′ , J = J ′ = J ′ ′ , K = K ′ = K ′ ′ I=I'=I'', J=J'=J'',K=K'=K'' I=I=I,J=J=J,K=K=K

应用前面的定理,这样的元素在 N N N足够大时有 ( 27 4 ) N ( 1 − ϵ ) (\frac{27}{4})^{N(1-\epsilon)} (427)N(1ϵ)个,这样,我们可以用不大于 ( q + 2 ) 3 N (q+2)^{3N} (q+2)3N个乘法去近似计算 ( 27 4 ) N ( 1 − ϵ ) (\frac{27}{4})^{N(1-\epsilon)} (427)N(1ϵ) { q N , q N , q N } \{q^N, q^N, q^N\} {qN,qN,qN}矩阵乘法,因此由渐近和定理,我们有:
( q + 2 ) 3 N ≥ ( 27 4 ) N ( 1 − ϵ ) q 3 N τ (q+2)^{3N} \geq (\frac{27}{4})^{N(1-\epsilon)}q^{3N\tau} (q+2)3N(427)N(1ϵ)q3Nτ
3 τ 3\tau 3τ为矩阵乘法的秩,当 ϵ \epsilon ϵ足够小, N N N足够大时,等效于:
( q + 2 ) 3 N ≥ ( 27 4 ) N q 3 N τ (q+2)^{3N} \geq (\frac{27}{4})^Nq^{3N\tau} (q+2)3N(427)Nq3Nτ
N N N次方:
( q + 2 ) 3 ≥ ( 27 4 ) q 3 τ (q+2)^{3} \geq (\frac{27}{4})q^{3\tau} (q+2)3(427)q3τ
q = 8 q=8 q=8时可得: 3 τ ≤ 2.40364 3\tau \leq 2.40364 3τ2.40364,相比Strassen构造往前进了一步。

C-W的“复杂”算法

新构造

∑ i = 1 q λ − 2 ( x 0 [ 0 ] + λ x i [ 1 ] ) ( y 0 [ 0 ] + λ y i [ 1 ] ) ( z 0 [ 0 ] + λ z i [ 1 ] ) − λ − 3 ( x 0 [ 0 ] + λ 2 ∑ x i [ 1 ] ) ( y 0 [ 0 ] + λ 2 ∑ y i [ 1 ] ) ( z 0 [ 0 ] + λ 2 ∑ z i [ 1 ] ) + ( λ − 3 − q λ − 2 ) ( x 0 [ 0 ] + λ 3 x q + 1 [ 2 ] ) ( y 0 [ 0 ] + λ 3 y q + 1 [ 2 ] ) ( z 0 [ 0 ] + λ 3 z q + 1 [ 2 ] ) = ∑ i = 1 q ( x 0 [ 0 ] y i [ 1 ] z i [ 1 ] + x i [ 1 ] y 0 [ 0 ] z i [ 1 ] + x i [ 1 ] y i [ 1 ] z 0 [ 0 ] ) + x 0 [ 0 ] y 0 [ 0 ] z q + 1 [ 2 ] + x 0 [ 0 ] y q + 1 [ 2 ] z 0 [ 0 ] + x q + 1 [ 2 ] y 0 [ 0 ] z 0 [ 0 ] + O ( λ ) \sum_{i=1}^{q}\lambda^{-2}(x_0^{[0]}+\lambda x_i^{[1]})(y_0^{[0]}+\lambda y_i^{[1]})(z_0^{[0]}+\lambda z_i^{[1]}) \\ -\lambda^{-3}(x_0^{[0]}+\lambda^2 \sum x_i^{[1]})(y_0^{[0]}+\lambda^2 \sum y_i^{[1]})(z_0^{[0]}+\lambda^2 \sum z_i^{[1]}) \\ +(\lambda^{-3}-q\lambda^{-2})(x_0^{[0]}+\lambda^3x_{q+1}^{[2]})(y_0^{[0]}+\lambda^3y_{q+1}^{[2]})(z_0^{[0]}+\lambda^3z_{q+1}^{[2]}) \\ = \sum_{i=1}^{q}(x_0^{[0]}y_i^{[1]}z_i^{[1]} + x_i^{[1]}y_0^{[0]}z_i^{[1]} + x_i^{[1]}y_i^{[1]}z_0^{[0]}) \\ +x_0^{[0]}y_0^{[0]}z_{q+1}^{[2]}+x_0^{[0]}y_{q+1}^{[2]}z_0^{[0]}+x_{q+1}^{[2]}y_0^{[0]}z_0^{[0]} + O(\lambda) i=1qλ2(x0[0]+λxi[1])(y0[0]+λyi[1])(z0[0]+λzi[1])λ3(x0[0]+λ2xi[1])(y0[0]+λ2yi[1])(z0[0]+λ2zi[1])+(λ3qλ2)(x0[0]+λ3xq+1[2])(y0[0]+λ3yq+1[2])(z0[0]+λ3zq+1[2])=i=1q(x0[0]yi[1]zi[1]+xi[1]y0[0]zi[1]+xi[1]yi[1]z0[0])+x0[0]y0[0]zq+1[2]+x0[0]yq+1[2]z0[0]+xq+1[2]y0[0]z0[0]+O(λ)

该构造用 q + 2 q+2 q+2个乘数近似计算了 3 q + 3 3q+3 3q+3个乘数,较上一个构造式多了3个。

对此构造执行 3 N 3N 3N的张量幂,令 L = [ β N ] L=[\beta N] L=[βN] β ∈ [ 0 , 1 ] \beta \in [0, 1] β[0,1]后续会确定)。只保留上标如下的块: N + L N+L N+L个0, 2 N + 2 L 2N+2L 2N+2L个1, L L L个2。

( 3 N L , N + L , 2 N − 2 L ) ( N + L L , L , N − L ) ( 2 N − 2 L N − L , N − L ) \binom{3N}{L, N+L, 2N-2L}\binom{N+L}{L, L, N-L}\binom{2N-2L}{N-L, N-L} (L,N+L,2N2L3N)(L,L,NLN+L)(NL,NL2N2L)

这些块都是 ( q N − L , q N − L , q N − L ) (q^{N-L}, q^{N-L}, q^{N-L}) (qNL,qNL,qNL)的矩阵乘,但并不是互相独立的,然后按类似"不相交集合划分引理"的证明方法,可以证明,取出互相独立的个数至少有 ( 27 β β ( 1 + β ) 1 + β ( 2 − 2 β ) 2 − 2 β ) N q 3 N ( 1 − β ) τ (\frac{27}{\beta^\beta (1+\beta)^{1+\beta}(2-2\beta)^{2-2\beta}})^N q^{3N(1-\beta)\tau} (ββ(1+β)1+β(22β)22β27)Nq3N(1β)τ个。

q = 6 , β = 0.048 q=6, \beta = 0.048 q=6,β=0.048时,可证 3 τ ≤ 2.38719 3\tau \leq 2.38719 3τ2.38719

进一步优化

(待续)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值