机器之心编辑部编译

手把手教你将矩阵画成张量网络图

在之前的一篇文章中,我们介绍过如何将矩阵&概率画成图,读者表示妙不可言。最近,该文作者又动手实现了新的想法:将矩阵画成张量网络图。

今天,我想分享一种不同的方法来描绘矩阵,它不仅用于数学,也用于物理、化学和机器学习。基本想法是:一个带有实数项的 m×n 矩阵 M 可以表示从 R^n→R^m 的线性映射。这样的映射可以被描绘成具有两条边的节点。一条边表示输入空间,另一条边表示输出空间。

我们可以用这个简单的想法做很多事情。但首先,要指定 m×n 的矩阵 M,必须指定所有 mn 项 M_ij。索引 i 的范围从 1 到 m,表示输出空间的维数;j 的范围从 1 到 n,表示输入空间的维数。换言之,i 表示 M 的行数,j 表示其列数。如果我们愿意,这些符号可以包括在图中:

这个想法很容易概括。矩阵是一个二维的数组,而一个 n 维的数组被称为一个 n 阶张量或一个 n-张量。像矩阵一样,一个 n 张量可以用一个节点来表示,每个维度有一个边。

例如,一个数字可以被认为是一个零维数组,即一个点。因此,它是一个 0-张量,可以绘制为一个边为零的节点。同样地,一个向量可以被认为是一个一维的数组,因此是一个 1-张量。它由一个具有一条边的节点表示。矩阵是二维数组,因此是 2-张量。它由一个有两条边的节点表示。三维张量是一个三维数组,因此是一个有三条边的节点……。

矩阵乘法是张量的缩并

将两个矩阵相乘就相当于「粘合」它们的图。这叫做张量的缩并(tensor contraction)。

在上图中,具有相同索引 j 的边是缩并的边。这与两个矩阵只有在输入/输出维度匹配时才能相乘的事实是一致的。你还会注意到结果图片有两个自由索引,即 i 和 k,它们确实定义了一个矩阵。

顺便说一下,画出这些图的一个关键特征是我们不必携带索引。

速查:矩阵被描述为一个单节点,每个向量空间有一个边,但是上面的图片有两个节点。我们仍然希望它表示一个矩阵。我可以断言,它还是一个矩阵!有一个很好的方法可以让我们看出来:将蓝色和绿色节点碰在一起。

这让我想起雨水从窗户滴下来:当两个雨滴接触时,它们融合成更大的雨滴。这是矩阵乘法。对于矩阵向量乘法,也有类似的情况:一个矩阵 M 乘以一个向量 v,得到另一个向量 Mv,它是一个具有一个自由边的节点。

更通俗地说,两个或更多张量的乘积由一组节点和边表示,其中具有相同索引的边发生缩并。

节点形状可以表示不同的属性

以上的节点都是用圆表示的,但这只是其中一种选择。没有人规定必须使用哪种形状。这意味着我们可以发挥创造力!例如,我们可能只想为对称矩阵保留一个圆形或其他对称形状,如正方形。

然后矩阵的转置可以通过反转其图像来表示:

所以对称矩阵的对称性保留在图中!

我也喜欢将等距嵌入(isometric embedding)绘制为三角形的想法:

等距嵌入 U 是从空间 V 到更大维度空间 W 的线性映射,它保留了向量的长度。这样的图满足 U^⊤U=id_v,但 UU^⊤≠id_w。换句话说,你可以将小空间 V 嵌入到大空间,然后再投影回 V 中,而不扭曲 V 中的向量(与拓扑中的回缩映射(retraction map)不同)。但是将所有的 W 都压缩到小 V 上后,你不能指望在将 V 转回 W 的过程中修复损坏。三角形暗示了这种大与小的特征。(三角形的底边比它的尖端大!)一般来说,如下图所示,单位线性算子被画成直线:

矩阵分解也可以画出很好的图

在讨论矩阵乘法,即矩阵合成的时候,我们不要忘记矩阵分解!例如,每个矩阵都有一个奇异值分解。这是一张与之相关的很棒的图片:

这里,U 和 V 是一元矩阵,所以是等距矩阵,也是三角形。矩阵 D 是一个对角矩阵,我喜欢用一个菱形来表示。总之,矩阵分解是将一个节点分解为多个节点;矩阵乘法是将多个节点融合为一个节点。

上图说明了这些图的另一个特点:节点的空间位置并不重要。我可以画黄色、蓝色、绿色和粉色的节点,在水平线、垂直线或之字形等任何我想画的形状上。唯一重要的是图有两个自由边。矩阵的乘积是另一个矩阵!

混乱的证明简化为图的证明。

关于这个图形符号,我们还有更多想说的,但我将用另一个值得注意的特性来总结:证明过程可以变得非常简单!以矩阵的迹为例。矩阵的迹图很简单。它被定义为一个共同索引的总和:

这串图没有自由边。这是一个循环。这与迹是一个数字的事实是一致的,它是一个 0 张量,所以它没有自由索引。这里有一个证明,在循环排列下,迹是不变的:

把珠子沿着项链滑。好简洁!

命名之争

文章中讨论的图起源于 Penrose 的图形符号,被称为张量网络图和/或字符串图(string diagram),也许有一些微小的区别。「和/或」取决于你是谁。也就是说,在物理/机器学习社区(在那里它们被称为张量网络图)和范畴论社区(在那里它们被称为字符串图),将向量空间的图可视化地表示为带边的节点。我认为这只是一个不同领域的例子,使用几乎相同的符号来实现不同的目的。

范畴论研究者使用字符串图来证明事物。此外,字符串图用于表示大多数类型的映射,而不仅仅是向量空间之间的映射。更正式地说,字符串图可能出现在讨论任何一类幺半范畴时。为了文雅地介绍这些范畴思想,请看 Fong 和 Spivak 的「Seven Sketches」以及 Coecke 和 Kissinger 的「Picturing Quantum Processes」。

另一方面,一些物理学家和机器学习研究者使用张量网络来计算事物。一个典型的情况可能是这样的。你有一个量子系统。你想找到一个特殊的线性算子的主特征向量,称为哈密顿量。这个特征向量存在于一个大得不可思议的希尔伯特空间中,所以你需要一种技术来以压缩的方式找到这个向量。输入:Tensor Networks。

我所说的「大得不可思议」并不是夸张。如果你有一个阿伏伽德罗数的量子粒子,每个粒子只占据两个状态,那么你需要一个维数为的向量空间。现在想象在这个空间上有一个线性算子。这是一个包含个项的矩阵。这比可见宇宙中原子的数目还要多,后者只有 10^80 个!要想把这个矩阵存在电脑上,那么只能祝你好运。总之,张量网络有助于我们以一种原则性的、易于处理的方式处理大量参数。

张量网络也与图模型、自动机等有很多重叠。当前研究的一个脉络是识别并充分利用这些重叠。所以这里有很多东西需要探索。可以从这些地方开始探索:

  • Miles Stoudemire 的 iTensor 库 (http://itensor.org/):http://itensor.org/

  • Roman Orus 的「A Practical Introduction to Tensor Networks (https://arxiv.org/abs/1306.2164)」:https://arxiv.org/abs/1306.2164

  • Jacob Biamante 和 Ville Bergholm 的「Tensor Networks in a Nutshell」:https://arxiv.org/abs/1708.00006 (https://arxiv.org/abs/1708.00006%E4%BB%A5%E5%8F%8AGoogle%E7%9A%84)

  • Google 的 TensorNetwork 库:https://github.com/google/TensorNetwork

我一直在做一个项目,在一个更具计算性/物理性的环境中使用这些图。因此,我倾向于把它们看作张量网络图,而不是字符串图。

这个项目以一种特殊的张量网络为特色,有一些非常好的数学知识,我很高兴与大家分享。它还使用了之前在博客上讨论过的将矩阵看作图的思想。我计划今年晚些时候在博客上讨论这个问题。

入门张量矩阵乘法矩阵
3
暂无评论
暂无评论~