1.首先

本文介绍了 2022 年 10 月发表在 Nature 上的 AlphaTensor[1] 以及相关领域。 AlphaTensor 在“AI 发现了一种新的矩阵乘法算法”的标语下成为了主要在 SNS 上的大话题。具体来说,AI 在 [1] 中“发现”的算法之一可以计算 4x4 矩阵对二进制数的 47 次乘法的乘积,这是 [1] 之前最快的,它超过了 49 倍(Strassen 算法)。请注意,从发现到 [1],Strassen 算法的 49 次在大约 50 年内没有被破解。

“人工智能发现了一种新算法”,但实际上“我使用强化学习为某个张量寻找了一种好的分解方法”是正确的。这个``某个张量''自然对应其分解方法和``矩阵乘法算法''众所周知因此,为张量寻找“好的”分解等同于寻找“快速矩阵乘法算法”。顺便说一句,AlphaTensor 并不是第一次尝试通过使用计算机搜索“对某个张量的良好分解方法”来寻找矩阵乘法的高速算法,迄今为止已经进行了各种研究。

本文的结构如下。在第 2 章中,我将解释 [1] 中使用的“特定 3D 张量的分解与矩阵乘法算法之间的对应关系”。我们从矩阵乘法算法的概述开始,解释将 3D 张量分解为基本张量对应于矩阵乘法算法。我们还介绍了张量的秩与矩阵乘法算法复杂度之间的关系。虽然 3 维“张量”是主角,但我试图解释它,以便在没有张量积等线性代数知识的情况下也能阅读它。对第 2 章内容的更数学组织的描述已变成附录。在第 3 章中,我将具体解释我是如何“发现”[1] 中的新算法的。我们介绍了强化学习搜索的框架,AlphaTensor 使用的称为 AlphaZero 的强化学习模型,以及论文的实验结果。在第 4 章中,我总结了 AlphaTensor 的成果以及我对相关领域的思考。

2.张量分解和矩阵乘法的算法

本章描述了矩阵乘法算法和 3D 张量分解之间的对应关系。为了简单起见,我将 3D 张量视为“3D 矩阵 = 带有数字的长方体网格”,并试图在不需要线性代数(例如张量积)知识的情况下对其进行解释。 (本章的数学组织内容见附录。)

2.1. 矩阵乘法算法

本节介绍矩阵乘法的计算。

  • 常用算法
  • 存在更快的算法
  • 仅计算次数的理论限制

我将简要解释一下。

A=
egin{pmatrix}
a_{1}^1 & a_{2}^1 \
a_{1}^2 & a_{2}^2 
end{pmatrix},
B= egin{pmatrix}
b_{1}^1 & b_{2}^1 \
b_{1}^2 & b_{2}^2 
end{pmatrix},
C = egin{pmatrix}
c_{1}^1 & c_{2}^1 \
c_{1}^2 & c_{2}^2 
end{pmatrix}
egin{pmatrix}
c_{1}^1 & c_{2}^1 \
c_{1}^2 & c_{2}^2 
end{pmatrix} =
egin{pmatrix}
a_{1}^1 & a_{2}^1 \
a_{1}^2 & a_{2}^2 
end{pmatrix}
egin{pmatrix}
b_{1}^1 & b_{2}^1 \
b_{1}^2 & b_{2}^2 
end{pmatrix}

会做。

此时,2×2矩阵$C=AB$的乘法通常如下进行。

c^1_1 = a^1_1 b^1_1 + a^1_2b^2_1 \
c^1_2 = a^1_1 b^1_2 + a^1_2b^2_2 \
c^2_1 = a^2_1 b^1_1 + a^2_2b^2_1 \
c^2_2 = a^2_1 b^1_2 + a^2_2b^2_2 \

在这种计算方法的情况下,将执行 8 次乘法运算。类似地,在像这样的普通矩阵乘法中,一般大小为 n 的方阵乘积将执行 $n^3$ 次乘法。
事实上,2×2矩阵乘法的“8倍”和一般矩阵乘法中的$n^3$次乘法是可以减少的! !

在 [2] 中,Strassen 提出了以下算法来计算 7 次乘法的 2×2 矩阵乘积。 ($X_1,dots,X_7$ 的计算每次相乘一次。)

egin{align*}
X_1 &=& (a^1_1+a^2_2)(b^1_1+b^2_2) \
X_2 &=& (a^2_1+a^2_2)b^1_1 \
X_3 &=& a^1_1(b^1_2-b^2_2) \
X_4 &=& a^2_2(-b^1_1+b^2_1) \
X_5 &=& (a^1_1+a^1_2)b^2_2 \
X_6 &=& (-a^1_1+a^2_1)(b^1_1+b^1_2) \
X_7 &=& (a^1_2-a^2_2)(b^2_1+b^2_2)
end{align*}
egin{align*}
c^1_1 &=& X_1 + X_4-X_5+X_7 \
c^2_1 &=& X_2+X_4 \
c^1_2 &=& X_3 + X_5 \
c^2_2 &=& X_1 + X_3 -X_2+X_6
end{align*}

Strassen 算法可以通过将矩阵除以四递归地应用于一般矩阵乘法。例如,当乘以 4x4 矩阵时,矩阵被分解为 2x2 块 x 4,每个块都被视为矩阵的一个元素并应用 Strassen 算法。此时$X_1、dots、X_7$对应的运算各执行一次2×2矩阵乘法,故再次应用Strassen算法。在这种情况下,矩阵乘积可以通过将元素乘以 $7^2=49$ 次来计算。类似地,大小为 $2^k$ 的方阵乘积可以在 $7^k$ 乘法中完成。因此,大小为 n 的一般矩阵乘积可以通过大约 $n^{log_2(7)}simeq n^{2.81}<n^3$ 次乘法来计算。 (如果 size 不是 $2^k$,则添加 0 行和列)

现在,Strassen 的算法已被证明对于 2×2 矩阵乘法是“最快的”,这意味着乘法的次数不能减少到 7 以下 [3]。另一方面,对于其他大小的矩阵乘积,似乎不知道最小乘法次数(截至 2017 年;尚未调查 2018 年之后的进展)[4]。然而,对于大小为 n 的一般矩阵,乘积 $omega$(exponent) 的最小复杂度为

omega = inf{hin R | サイズnの行列積がO(n^h)で計算可能}

那么,在2017年的阶段

2leqomega < 2.373

[4][5],表明存在比递归 Strassen 算法性能更高的算法。 (估计 $omega$ 上限的论文通常不会提出具体的算法。)

在社区

omega = 2

(也就是说,矩阵乘法的计算顺序与矩阵加法几乎相同!),并且已经进行了各种尝试来找到这样的算法 [4]。

2.2 张量分解与矩阵乘法算法的对应关系

在本节中,我将解释与张量分解的对应关系,这是搜索矩阵乘法算法时的指导原则之一。作为结论将“某个张量”分解为 R 个“rank-1 张量”对应于矩阵乘法算法,其计算复杂度随着 R 的减小而降低。所以,寻找尽可能快的矩阵乘法算法,相当于寻找如何将“某个张量”分解为尽可能少的“rank-1 张量”之和。这就是它的意思。

下面,为简单起见,我们处理大小为 n 的方阵的乘积。类似的论点适用于一般大小的矩阵乘法。 .

2.2.1 ``一些张量$M_n$''

第一的,

A=
egin{pmatrix}
a_{1}^1 & a_{2}^1 \
a_{1}^2 & a_{2}^2 
end{pmatrix},
B= egin{pmatrix}
b_{1}^1 & b_{2}^1 \
b_{1}^2 & b_{2}^2 
end{pmatrix},
C = egin{pmatrix}
c_{1}^1 & c_{2}^1 \
c_{1}^2 & c_{2}^2 
end{pmatrix}

会做。 $a=(a_1,a_2,dots), b=(b_1,b_2,dots),a=(c_1,c_2) 通过将序列号下标为 $a^i_j, b^i_j, c^i_j$ ,dots)$ .当$C=AB$时,

c_k = sum_{i,j}t^{i,j}_ka_ib_j

应该写成这个$t^{i,j}_k$由一个三维张量表示,它的i分量是水平的,j分量是垂直的,k分量是深度的。例如,如果矩阵的大小为 2x2,它将如下所示: (彩色单元格为 1,否则为 0)

egin{pmatrix}
c_{1} & c_{2} \
c_3 & c_4 
end{pmatrix} =
egin{pmatrix}
a_{1} & a_{2} \
a_3 & a_4 
end{pmatrix}
egin{pmatrix}
b_{1} & b_{2} \
b_3 & b_4 
end{pmatrix}

AlphaTensor :強化学習を利用した高速な行列積演算アルゴリズムの発見

从,对于大小为 n 的矩阵,具有 $t^{i,j}_{k}$ 的张量是这样排列的假设我们写成 $M_{n}$。

2.2.2. $M_n$的分解

另一方面,观察通常的矩阵乘法方法和 Strassen 算法,$C=AB$ 的计算为

c_i = sum_{r=1}^R w^r_i (sum_ku^r_ka_k)(sum_lv^r_lb_l) 	ag{*}

你可以看到它的形状是通过改变总和的顺序,

c_i = sum_{k,l} (sum_{r=1}^R w^r_i u^r_kv^r_l)a_kb_l

因此,与$t^{i,j}_k(M_n)$的定义相比,

t^{i,j}_k=(sum_{r=1}^R w^r_k u^r_iv^r_j)

变成。
其中 $w^r=(w^r_1,w^r_2,dots),u^r=(u^r_1,u^r_2,dots),v^r=(v^r_1,v^r_2,dots )$和
将 $w^r_k u^r_iv^r_j$ 排列在一个 3D 张量中,其中 i 分量是水平的,j 分量是垂直的,k 分量是深度的。

u^rotimes v^rotimes w^r

我会写这个1 阶张量我叫它。 $t^{i,j}_{k}$ 被定义为 $M_{n}$,但 $t^{i,j}_{k}= $M_{n}$ 是来自sum_{r=1}^{R} w^{r}_{k} u^{r}_{i} v^{r}_{j}$ 与

M_n=sum_{r=1}^R u^rotimes v^rotimes w^r

(见下面的例子)。所以给出 (*) 形式的矩阵乘法算法等价于将 $M_n$ 分解为秩为 1 的张量的总和这将是。

示例 1:大小为 2 的矩阵的普通矩阵算法

AlphaTensor :強化学習を利用した高速な行列積演算アルゴリズムの発見

示例 2:大小为 2 的矩阵的 Strassen 算法

对应蓝色=1,橙色=-1

AlphaTensor :強化学習を利用した高速な行列積演算アルゴリズムの発見

2.2.3.$M_n$的分解和矩阵乘法算法和张量秩

总结到目前为止的讨论,给定 $M_n$ 的 rank-1 张量分解,$M_n=sum_{r=1}^R u^rotimes v^rotimes w^r$,将确定矩阵乘积计算算法。

矩阵乘法算法
egin{align*}
& parameter: quad
 {u^r,v^r,w^r} quad s.t. quad M_n=sum_{r=1}^R u^rotimes v^rotimes w^r \
& input : quad A,B quad サイズnの行列 ({a_i},{b_j}:A,Bの要素)\
& output : quad C=AB \
& (1) for ~ r ~ in ~ {1dots R}: \
& (2) quad X_r =  (sum_k^{n^2}u^r_ka_k)(sum^{n^2}_lv^r_lb_l) \
& (3) for~i~in~{1dots n^2}: \
& (4) quad c_i = sum_r^R w^r_i X_r \
& return ~C
end{align*}

$u_k^r$和$a_k$的乘法($v^r_l$和$b_l$的乘法)可以在矩阵定义时预先进行,在(2)中真正的R次进行乘法运算。在 (4) 中,可以发生 $Rn^2$ 次乘法,但不会发生乘法运算。如果我们能找到 R 尽可能小的 $M_n$ 的分解,我们将得到一个更快的矩阵乘法算法。

从上一节的例子可以看出,对于大小为 2 的矩阵乘法,通常的矩阵乘法算法对应于将 $M_2$ 分解为 8 个 rank-1 张量,而 Strassen 的算法对应于 $M_2$ 对应于分解成 7 个 rank-1 张量。因此,一般张量 $T$ 也可以分解为 rank-1 张量的总和,但分解不是唯一的。在这些分解中,rank-1 张量数量最少的分解的 rank-1 张量数量是原始的张量的秩打电话$R(T)$我会写$R(T)$ 对于基的变换是不变的,是矩阵秩的自然扩展。

定义。
R(T) = inf{R|T=sum_{r=1}^R u^rotimes v^rotimes w^r}

简而言之,找到大小为 n 的矩阵乘法复杂度的理论界限,并找到一个算法来实现它,就是计算 $R(M_n)$,​​并将 $M_n$ 转换为 $R(M_n)$ 秩约等于找到一个分解成张量 1 的方法这就是它的意思。事实上,以下成立[2]。

钍。
inf{	auin R|R(M_n)=O(n^	au)} = inf{hin R | サイズnの行列積がO(n^h)で計算可能}

众所周知,有一些算法可以计算矩阵的秩,但是找到将一般张量分解为 $R(T)$ rank-1 张量的算法是 NP 难的。此外,$R(M_2)$=7(Strassen 算法)是已知的,但似乎连 $R(M_3)$ 都不知道其他尺寸(截至 2017 年的描述 [4]。2018 年之后的进展还没有完全调查)。

3. 使用强化学习探索矩阵乘法算法

在第 2 章中,我们解释了寻找矩阵乘法的快速算法等价于寻找将 $M_n$ 分解为尽可能少的 rank-1 张量和的方法。 AlphaTensor 使用这个事实来探索强化学习中 $M_n$ 的分解。在本章中,我将具体解释我是如何探索这种分解并“发现”算法的。 *虽然 AlphaTensor 不是第一次尝试使用计算机搜索 $M_n$ 的分解,但现有的研究还没有找到特定大小的有用分解。 [1]

3.1. 强化学习搜索

首先,强化学习模型的架构是一个黑匣子,说明了通过强化学习寻找$M_n$的分解方法的概要。

AlphaTensor 将 $M_n$ 的分解视为一种称为 Tensor Game 的游戏,并试图通过多次玩 Tensor Game 让强化学习代理学习获胜方法 = $M_n$ 的分解。

张量博弈
egin{align*}
& input:M_n quad 分解したいテンソル \
& agent:ゲームのプレイヤー。環境S_rを入力としてランク1のテンソルを返す\
& reword:報酬\
& (1) init ~ S_0=M_n, quad reword_0=0\
& (2) for~r~in~{1dots R_{max}}: \
& (3) quad u^r otimes v^r otimes w^r = agent(S_{r-1}) \
& (4) quad S_r = S_{r-1}-u^r otimes v^r otimes w^r \
& (5) quad reword_r = reword_{r-1}-1 \
& (6) quad if~M_n=S_r: \
& (7) quad quad break \
& (8)if~r=R_{max}: \
& (9) quad reword_r = reword_r - gamma(S_{R_{max}}) \
& (10)return~ {S_r}, {reword_r}, {u^r otimes v^r otimes w^r}
end{align*}

在张量博弈中,玩家提出用于分解目标张量 (4) 的候选元素。由于目标是尽可能少地分解,我们对每个提议 (5) 采取 -1 惩罚。当分解与目标张量完全匹配或达到最大建议数时,游戏结束。如果游戏以达到最大提案数结束,则额外的惩罚 $gamma(S_{R_{max}})$ 取决于提案的总和和目标张量 $S_{R_{max}}$ 的剩余张量(9)。 $gamma(S)$ 是张量 $S$ 等级的上限,由 $S$ 的每个矩阵“切片”的等级之和给出。注意$u,v,r$的元素仅限于离散值${-2,-1,0,1,2}$因为目的是为了得到严格的分解。

虽然强化学习代理多次玩这个张量游戏,但通过在 (6) 的条件下检查游戏结束时的输出,使用少量 $M_n$ rank 1 张量进行分解(= 快速矩阵乘法算法)。

3.2. AlphaTensor 架构

在本节中,我们将简要介绍 AlphaTensor 作为强化学习模型的架构。
AlphaTensor 将基于样本的 AlphaZero[6] 应用于张量游戏。

关于 AlphaZero,下面博文中的解释很容易理解。

从任何角度清除 AlphaZero | Mendako
https://horomary.hatenablog.com/entry/2021/06/21/000500

AlphaZero 在此仅作简要介绍。
AlphaZero 基本上是一种在执行 MCTS(蒙特卡洛树搜索)的同时在搜索时学习状态值函数(未来奖励的预期值)和策略(要采取的行动的分布)的方法。

MCTS 是一种前瞻性的方法,同时估计游戏状态有多好,如果采取某个动作,状态会改善多少,某个动作有多少值得尝试等。此时,数据存储在树形结构中,表示该节点处的游戏状态以及从该节点延伸的边缘处该状态下的动作。

AlphaTensor 的神经网络 (NN) 将 TensorGame 中的状态 ${S_1,dots , S_{t}}$ 和到目前为止的动作 ${a_1=(u_1,v_1,w_1),dots, a_t}$ 作为输入,并且state 输出价值函数和policy$pi(.|S)$的价值分布,用于MCTS。

AlphaTensor :強化学習を利用した高速な行列積演算アルゴリズムの発見

AlphaTensor中使用的NN示意图:引自[1]

MCTS的概要如下。

  1. 在搜索树的边缘保持$N(s,a), Q(s,a), hat pi(s,a)$(一对状态$s$和动作$a$)。然而
    $N(s,a)$:探索期间的访问次数
    $Q(s,a)$:动作值函数值(由NN计算)
    $hatpi(s,a)$:通过 NN 从策略输出 $pi(.,s)$ 中采样 K 个动作创建的动作的经验分布(直方图)
  2. 在搜索树中,确定某个状态$s$中的动作$a$以最大化以下值。
    argmax_a Q(s,a) + chat pi(s,a)rac {sqrt{sum_b N(s,b)}}{1+N(s,a)}
    

    c 是平衡利用(第一项)和搜索(第二项)的参数。

    MCTS玩TmsorGame后“平滑”行为的经验分布$pi(s,a)=N^{1/ au(s)}(s,a)/sum_b N^{1/ au(s) }(s, b)$和实际奖励的分配直接作为训练值来更新NN。

    AlphaTensor :強化学習を利用した高速な行列積演算アルゴリズムの発見

    将 AlphaZero 应用于 TensorGame 的图像:引自 [1]

    其他小巧思
    • 动作元素$a=(u,v,r)$仅限于离散值${-2,-1,0,1,2}$。
      因为目标是获得精确的张量分解而不是近似值。
    • 在学习时,不仅要给出 $M_n$,还要给 Tensor Game 的输入一个通用的 3D 张量。
      这似乎是多余的,但可以预期与以下设备相关的性能改进。
    • 人工数据的监督学习和混合。
      与分解类似,很难从一般张量$T$得到它的分解,但是从${u^r,v^r,w^r}$, $T=sum_{r=1}^R u^计算 rotimes v^rotimes w^r$ 很容易。因此,可以生成大量的${u^r,v^r,w^r},T$对(虽然不一定是给出排名的分解)并进行模型的监督学习.
    • “数据论证”通过在学习期间替换目标张量的基础
    • 训练时给定的张量大小为n×m×p。 $n,m,pleq 5$。相当于将一个 n×m 矩阵乘以一个 m×p 矩阵
    • 在用$n,m,pleq 5$搜索算法之后,它们也被组合起来搜索更大矩阵的算法。

    3.3. 与现有研究相比的优势

    现有的许多寻找$M_n$分解的尝试似乎都是通过对连续值优化得到的分解“四舍五入”得到精确的分解[1]。 AlphaTensor 使用强化学习框架,通过张量有效地探索离散值的分解(相比之下,AlphaZero 不适合探索连续值的动作空间)。另外,由于可以搜索离散值的分解,所以有一个优点是可以搜索除实数环以外的环上的$M_n$的分解。事实上,AlphaTensor 不仅搜索 $M_n$ 在整数环 $mathbb{Z}$ 上的分解,还搜索二进制数 $mathbb{Z}/2mathbb{Z}$ 上的分解。此外,现在可以通过使用设计强化学习中的“奖励”的自由度来搜索具有各种属性的分解。例如,通过将算法的“实际执行时间”添加到奖励中,我们也在特定硬件上高速运行算法的搜索。

    3.4. 结果-实际发现算法的排名和速度-

    AlphaTensor 找到的分解等级

    对于许多尺寸$n、m、pleq 5$(左图:左图“Modular” = 二进制数,“Standard” = 整数),获得了等于或优于现有最佳排名的结果。通过结合它们,我们在计算更大的矩阵乘积方面优于现有算法(右图)。
    AlphaTensor :強化学習を利用した高速な行列積演算アルゴリズムの発見

    特定硬件上发现算法的速度

    运行 AlphaTensor 时,通过将算法在相应硬件上的执行速度添加到奖励中的搜索结果。 “执行速度”是一个不可微分的指标,但它可以作为奖励纳入强化学习框架。我们为每个硬件调整了算法。

    AlphaTensor :強化学習を利用した高速な行列積演算アルゴリズムの発見

    4。讨论

    关于本文

    虽然标榜“AI发现了一种人类不知道的新算法”,但实际上它在做的是寻找$M_n$的分解,这已经研究了一段时间。然而,在现有研究无法找到实用分解的情况下,我们能够发现实用快速的算法,这是一个重大突破。本实验)。

    此外,作为矩阵分解算法的搜索,

    • 动作搜索范围从${-2,-1,0,1,2}$扩展时的验证
    • 验证使用连续值的搜索是否真的不起作用(排名高于 $M_n$ 的 $mathbb{Z}$ = 排名高于 $mathbb{R}$ 或 $mathbb{C}$ 的 $M_n$) ?)

    我很担心那个。

    另一方面,作为使用强化学习的搜索,

    • 在众多强化学习方法中,AlphaZero 是真正有效解决这个问题的搜索方法吗?

    还有一个问题。

    关于通过强化学习进行搜索

    正如人们经常谈论的那样,矩阵乘法算法和游戏并不是强化学习在搜索中取得成功的唯一领域。 MolGAN [7] 结合 GAN 和强化学习来生成具有特定属性的分子。在[8]中,强化学习被用在芯片的设计中,实际上也被用在了TPU的设计中。

    这样,在“搜索”具有特殊属性的东西的过程中,经常会报告强化学习的成功例子。这种成功表明强化学习比贝叶斯优化等其他搜索方法更有效。

    • 可以自由设计奖励作为探索的指标
    • 通过学习状态值函数等了解搜索空间的结构,可以执行有效的搜索。 (不要搜索与之前尝试失败的状态相似的状态)

    我想是因为优点。
    另一方面,每小时的试验次数应该远低于随机搜索,因为它包括神经网络的预测。此外,由于搜索的效率取决于状态值函数和奖励的准确性,

    • 当状态信息不足以学习状态值函数时
    • 当大多数操作产生好的结果时

    这种搜索预计不如随机搜索等其他技术。

    在任何情况下,如果可以设置诸如“$M_n$ 分解”之类的显式搜索空间和适当的奖励,那么强化学习就有可能做出现有方法无法实现的“发现”。通过在日常工作中了解这些情况并收集信息,您也许能够找到新发现的种子。

    5. 参考文献

    [1] Fawzi, Alhussein 等人,“使用强化学习发现更快的矩阵乘法算法。” Nature 610.7930 (2022): 47-53。
    [2] Volker Strassen,高斯消除不是最优的,Numer. Math. 13 (1969), 354–356. MR 40 #2223
    [3] S. Winograd,关于 2×2 矩阵的乘法,线性代数和应用 4 (1971), 381–388. MR 45 #6173
    [4] Landsberg, J. M. Geometry and Complexity Theory 169(剑桥大学出版社,2017 年)。
    [5] Virginia Williams,打破 Coppersimith-winograd 障碍,预印本
    [6] Silver, David, et al. “Mastering chess and shogi by self-play with a general enhancement learning algorithm.” arXiv preprint arXiv:1712.01815 (2017)。
    [7] De Cao、Nicola 和 Thomas Kipf.“MolGAN:小分子图的隐式生成模型。”arXiv 预印本 arXiv:1805.11973 (2018)。
    [8] Mirhoseini, Azalia 等人,“用于快速芯片设计的图形放置方法。” Nature 594.7862 (2021): 207-212。

    附录:张量分解和矩阵乘法算法

    第 2 章将“张量”简单地视为数字的多维数组。本附录以更数学的方式总结了第 2 章的内容。

    • 张量积的定义
    • $M_n$ 的定义
    • $M_n$分解与矩阵乘法算法的对应关系

    按顺序重新排列。下面的所有线性空间都是 $mathbb{C}$ 上的有限维空间。

    张量本质上是一个多线性映射,我们做一些准备来准确定义张量积。

    默认双空间

    令$V$ 为线性空间。然后线性映射 $f:V 由所有 ightarrow mathbb{C}$ 组成的空间称为 $V$ 的对偶空间,写作 $V^*$。
    另外,当$V$的基是${e_i}$时,V^*$中的$e^i定义为$e^i(e_j)=delta_{i,j}$。 ${e^i}$ 是$V^*$ 的基,称为${e_i}$ 的对偶基。
    $平方$

    特别是$V^* cong V$。

    Def. 多线性映射

    令$A_1,dots, A_n, B$ 为线性空间。然后 $f:A_1 imes 点 imes A_{n} 如果对于 A_i 中的任何 $a_i,a_i',mathbb{C}$ 中的 x,y,则 ightarrow B$ 被称为多线性映射

    f(a_1,dots,xa_i+ya_i',dots,a_n)=xf(a_1, dots,a_i, dots, a_n) + yf(a_1, dots,a_i', dots, a_n)
    

    满足的意思$A_1 imes dots imes 为从 A_{n}$ 到 $B$ 的多线性映射集写 $L(A_1,dots,A_n;B)$。 $平方$

    $L(A_1,dots,A_n;B)$ 是一个线性空间。特别是当$n=1$时,它是一个简单的线性映射形成的空间。另外,${a_i^{s_i}|1 leq s_i leq dim(A_i)}$ 是 $A_i$ 的基础,${b_i}$ 是 $B$ 的基础,$E_{m_1,dots,m_n ;j } 在 L(A_1,dots,A_n;B)$

    E_{m_1,dots,m_n;j}(a_1^{s_1},dots,a_n^{s_n})=prod_idelta_{m_i,s_i}b_j
    

    然后 ${E_{m_1,dots,m_n;j}}$ 成为 $L(A_1,dots,A_n;B)$ 基础。特别是 $dim(L(A_1,dots,A_n;B))=dim(B)prod dim(A_i)$。

    最后,我们有了张量积的定义。

    默认张量积

    令 ${A_i}$ 为线性空间。此时

    A_1 otimes dots otimes A_n :=  L(A_1^*,dots,A_n^*;mathbb{C})
    

    并称其为$A_1、dots和A_n$的张量积。此外,当 $a_i 在 A_i$ 中时,$a_1 otimes dots otimes a_nin A_1 otimes dots otimes A_n$

    a_1 otimes dots otimes a_n(lpha^1,dots,lpha^n):=lpha^1(a_1)dotslpha^n(a_n)
    

    取决于$平方$

    如果 ${a_i^{s_i}|1 leq s_i leq dim(A_i)}$ 是 $A_i$ 的基础,则 ${a_1^{s_1} otimes dots otimes a_n^{s_n} |1leq s_i leq dim(A_i) } $是$A_1 otimes dots otimes A_n$的基础。特别是 $dim(A_1 otimes dots otimes A_n)=prod dim(A_i)$。

    同样在 $a_1^{s_1} 点点点点点点点点点点 a_n^{s_n} 点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点 A_n$

    (a_1^{s_1} otimes dots otimes a_n^{s_n})(lpha^1,dots,lpha^{n-1}):=lpha^1(a_1^{s_1})dotslpha^n(a_n^{s_{n-1}})a_n^{s_n}in A_n
    

    通过关联 $L(A_1^*,dots,A_{n-1}^*;A_n)$ 的元素,由

    支柱。
    A_1 otimes dots otimes A_n cong L(A_1^*,dots,A_{n-1}^*;A_n) square
    

    从现在开始 $A_1​​ otimes dots otimes A_n$ 将改为 $L(A_1^*,dots,A_n^*;mathbb{C})$ 或 $L(A_1^*,dots,A_{n-1 }^*;A_n)$ 等于

    a_1 otimes dots otimes a_n(lpha^1,dots,lpha^n)=dots in mathbb{C}
    

    和写

    a_1 otimes dots otimes a_n(lpha^1,dots,lpha^{n-1})=dots in A_n
    

    和写。

    例子。

    从 $V$ 到 $W$ 的线性映射的空间 $L(V;W)$ 可以用 $V^* otimes W$ 来识别。实际上 $votimes win V^* otimes W$ 从上述对应关系中定义了线性映射 $(votimes w )(x)=v(x)w$。 $平方$

    现在,令 $C^{nm}$ 为所有 n 行 m 列矩阵的线性空间。此时,$C^{nm}$的元素与$C^{ml}$的元素的乘积的运算为$C^{nm}次C^{ml}$到$C^ {nl}$ 可以看作 的双线性映射。由此,我们可以定义矩阵乘积对应的张量如下。

    默认 $M_n$

    $M_{l,m,n}in L(C^{nm}, C^{ml};C^{nl}) cong C^{nm*}otimes C^{ml*}otimes C^{nl}美元

    M_{l,m,n}(A,B)=AB
    

    定义为将 $M_{n,n,n}$ 写为 $M_n$。 $平方$

    备注.$M_n$与矩阵乘法算法的对应关系

    $M_{l,m,n}=sum_{r=1}^R u^rotimes v^rotimes w^r$ 是 $u^rotimes v^rotimes w^rin C^{nm*}otimes C^{ml给定*}otimes C^{nl}$,确定以下矩阵运算算法。

    egin{align*}
    & parameter: quad
     {u^r,v^r,w^r} quad s.t. quad M_{l,m,n}=sum_{r=1}^R u^rotimes v^rotimes w^r \
    & input : quad A,B quad サイズnの行列 \
    & output : quad C=AB \
    & (0) init quad C=0 \
    & (1) for ~ r ~ in ~ {1dots R}: \
    & (2) quad X_r =  u^r(A)v^r(B) \
    & (3) quad C = C + X_r w^r \
    & return ~C
    end{align*}
    
    Prop. 普通矩阵乘法算法

    $x_{i,j}in C^{nm},y_{i,j}in C^{ml},z_{i,j} in C^{nl}$ with $i,j$ components of 1 Let否则矩阵为0。这些是 $C^{nm}、C^{ml}、C^{nl}$ 的基础。令 $x^{i,j},y^{i,j},z^{i,j}$ 为各自的对偶基。

    此时

    M_{l,m,n}=sum_{i=1}^n sum_{j=1}^m sum_{k=1}^l x^{i,j}otimes y^{j,k}otimes z_{i,k} 
    

    $平方$

    证明。

    令 $a_{i,j},b_{i,j}$ 表示矩阵 $A,B$ 的元素(即 $a_{i,j}=x^{i,j}(A), b_{ i,j}=y^{i,j}(B)$)。此时

    egin{align*}
    M_{l,m,n}(A,B) &= sum_{i,k}(sum_j a_{i,j}b_{j,k})z_{i,k} \
    &= sum_{i,j,k} x^{i,j}(A)y^{j,k}(B)z_{i,k} \
    & = sum_{i,j,k}x^{i,j}otimes y^{j,k}otimes z_{i,k} (A,B)
    end{align*}
    

    $平方$

    道具 Strassen 算法

    用$x^{i,j}$和$y^{i,j}$识别$x_{i,j}$和$y_{i,j}$,在同一个矩阵形式$C^中表示{nm*}$ 的元素。 (注意矩阵是从[4]中的描述转置而来)

    M_2 = 
    egin{pmatrix}
    1 & 0 \
    0 & 1 
    end{pmatrix} otimes
    egin{pmatrix}
    1 & 0 \
    0 & 1 
    end{pmatrix} otimes
    egin{pmatrix}
    1 & 0 \
    0 & 1 
    end{pmatrix} 
    + 
    egin{pmatrix}
    0 & 0 \
    1 & 1 
    end{pmatrix} otimes
    egin{pmatrix}
    1 & 0 \
    0 & 0
    end{pmatrix} otimes
    egin{pmatrix}
    0 & 0 \
    1 & -1 
    end{pmatrix} \
    + 
    egin{pmatrix}
    1 & 0 \
    0 & 0 
    end{pmatrix} otimes
    egin{pmatrix}
    0 & 1 \
    0 & -1 
    end{pmatrix} otimes
    egin{pmatrix}
    -1 & 1 \
    0 & 0
    end{pmatrix} 
    + 
    egin{pmatrix}
    0 & 0 \
    0 & 1 
    end{pmatrix} otimes
    egin{pmatrix}
    -1 & 0 \
    1 & 0 
    end{pmatrix} otimes
    egin{pmatrix}
    1 & 0 \
    1 & 0 
    end{pmatrix} \
    + 
    egin{pmatrix}
    1 & 1 \
    0 & 0 
    end{pmatrix} otimes
    egin{pmatrix}
    0 & 0 \
    0 & 1 
    end{pmatrix} otimes
    egin{pmatrix}
    -1 & 1 \
    0 & 0 
    end{pmatrix} 
    + 
    egin{pmatrix}
    -1 & 0 \
    1 & 0 
    end{pmatrix} otimes
    egin{pmatrix}
    1 & 1 \
    0 & 0 
    end{pmatrix} otimes
    egin{pmatrix}
    0 & 0 \
    0 & 1 
    end{pmatrix} \
    + 
    egin{pmatrix}
    0 & -1 \
    0 & 1 
    end{pmatrix} otimes
    egin{pmatrix}
    0 & 1 \
    1 & 0 
    end{pmatrix} otimes
    egin{pmatrix}
    1 & 0 \
    0 & 0 
    end{pmatrix} 
    
    Def.张量的秩

    设张量 $T$ 的秩 $R(T)$ 为

    R(T)=inf{R|exists a_i^jin A_i quad s.t. quad T=sum_{i=1}^Ra_1^iotimes dots otimes a_n^i}
    

    特别地,对于$Tin A_1otimes dots otimes A_n$ 存在$a_iin A_i$,并且当写成$T=a_1otimes dots otimes a_n$ 时$R(T)=1$。 $平方$

    从$M_{l,m,n}$的分解形式和对应的矩阵乘法算法可以看出,分解得到$R(M_{l,m,n})$对应的算法是most for statement. 变得更短。我们从通常的矩阵乘法算法中知道 $R(M_{l,m,n})leq lmn$。我们也从 Strassen 的算法中知道 $R(M_2)leq 7$,但是 [3] 表明 $R(M_2)=7$。根据 [4],$R(M_3)$ 截至 2017 年是未知的。 (2018年以后的进展情况暂未调查。)


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308632437.html

相关文章: