快速矩阵乘法的研究
本文我们只看一个算法,就是 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,c∈B ,有如下性质:
a
+
b
=
2
c
→
a
=
b
=
c
a+b=2c \rightarrow a = b = c
a+b=2c→a=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,A∩B=A∩C=B∩C=∅
所有这样的分割方法成为一个集合
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
Ai∪Bj∪Ck=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=1∑qλ−2(x0[0]+λxi[1])(y0[0]+λyi[1])(z0[0]+λzi[1])−λ−3(x0[0]+λ2∑xi[1])(y0[0]+λ2∑yi[1])(z0[0]+λ2∑zi[1])+(λ−3−qλ−2)(x0[0])(y0[0])(z0[0])=i=1∑q(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=1∑qλ−2(x0[0]+λxi[1])(y0[0]+λyi[1])(z0[0]+λzi[1])−λ−3(x0[0]+λ2∑xi[1])(y0[0]+λ2∑yi[1])(z0[0]+λ2∑zi[1])+(λ−3−qλ−2)(x0[0]+λ3xq+1[2])(y0[0]+λ3yq+1[2])(z0[0]+λ3zq+1[2])=i=1∑q(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,2N−2L3N)(L,L,N−LN+L)(N−L,N−L2N−2L)
这些块都是 ( q N − L , q N − L , q N − L ) (q^{N-L}, q^{N-L}, q^{N-L}) (qN−L,qN−L,qN−L)的矩阵乘,但并不是互相独立的,然后按类似"不相交集合划分引理"的证明方法,可以证明,取出互相独立的个数至少有 ( 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+β(2−2β)2−2β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
进一步优化
(待续)