线性代数的鸟瞰-为什么矩阵乘法是这样的-

线性代数的鸟瞰:为什么矩阵乘法是这样的?

原文:towardsdatascience.com/a-birds-eye-view-of-linear-algebra-why-is-matrix-multiplication-like-that/

这是正在进行的关于线性代数的书籍“线性代数的鸟瞰”的第三章节。到目前为止的目录如下:

请期待未来章节的更新。

在这里,我们将描述我们可以用两个矩阵进行的操作,但请记住,它们只是线性映射的表示。

I) 为什么关心矩阵乘法?

几乎任何信息都可以嵌入到向量空间中。图像、视频、语言、语音、生物识别信息以及你能想象到的任何其他东西。而且,机器学习和人工智能(如最近的聊天机器人、文本到图像等)的应用都是建立在这些向量嵌入之上的。由于线性代学是处理高维向量空间的科学,因此它是不可或缺的构建块。

图片

来自我们现实世界的复杂概念,如图像、文本、语音等,可以嵌入到高维向量空间中。向量空间的维度越高,它可以编码的信息就越复杂。使用 midjourney 创建的图像。

许多技术涉及从一个空间中取一些输入向量并将它们映射到另一个空间中的其他向量。

但为什么关注“线性”,而大多数有趣的功能都是非线性的呢?这是因为使我们的模型高维和使它们非线性(足够通用以捕捉各种复杂关系)的问题最终是正交的。许多神经网络架构通过使用线性层并在它们之间加入简单的一维非线性来实现。而且有一个定理说这种架构可以模拟任何函数。

由于我们操作高维向量的主要方式是矩阵乘法,所以说它是现代人工智能革命的基石并不夸张。

图片

深度神经网络具有每层都有向量,并且连续层之间的连接以矩阵的形式编码的层。层之间的转换是通过线性代数和矩阵乘法实现的。使用 midjourney 创建的图像。

II) 映射上的代数

第二章中,我们学习了如何用行列式来量化线性映射。现在,让我们对这些线性映射做一些代数运算。我们需要两个线性映射和一个基。

线性映射的代数运算。图片由 midjourney 提供。

II-A) 加法

如果我们可以加矩阵,我们也可以加线性映射,因为矩阵是线性映射的表示。如果你知道标量加法,矩阵加法并不很有趣。就像向量一样,它只在两个矩阵大小相同(行和列相同)时定义,并涉及将它们对齐并逐元素相加。

矩阵加法逐元素。图片由作者提供。

因此,我们只是在做一系列标量加法。这意味着标量加法的性质在逻辑上可以扩展。

交换律:如果你交换,结果不会跳动

A+B = B+A

但是通勤可能不是交换的,因为从 A 到 B 可能比从 B 到 A 花费的时间更长。

结合律:在链中,不要犹豫,取任意两个并继续

A+(B+C) = (A+B)+C

单位元:而且我就在这里,我开始了!这样对待一个人是不公平的!

存在一个特殊元素,当它被加到任何东西上时,结果仍然是相同的东西。在标量的情况下,它是数字0。在矩阵的情况下,它是一个全为零的矩阵。

A + 0 = A 或 0 + A = A

此外,也可以从任何元素开始,通过加法到达任何其他元素。所以,必须可以从A开始,最终到达加法单位元A。必须加到A上以实现这一点的是A的加法逆元,它被称为-A

A + (-A) = 0

对于矩阵,你只需逐个替换矩阵中的每个标量元素,用其加法逆元(如果标量是数字,则改变符号)来得到矩阵的加法逆元。

II-B) 减法

减法就是用第二个矩阵的加法逆元来代替加法。

A-B = A+(-B)

II-C) 乘法

我们本可以像定义矩阵加法一样定义矩阵乘法。只需取两个相同大小的矩阵(行和列),然后逐元素相乘。这种操作有一个名字,叫做Hadamard 积

但是,我们定义矩阵乘法为一个更复杂的操作,比加法更“奇异”。它并不是为了复杂而复杂。它是线性代数中最重要的运算。

它享有这种特殊地位,因为它是通过线性映射应用于向量,在点积的基础上构建的。

它实际工作的方式需要专门的章节来解释,所以我们将这部分内容放在第 III 节中。在这里,我们列出一些它的性质。

交换律

与加法不同,矩阵乘法并不总是交换的。这意味着你应用于输入向量的线性映射的顺序很重要。

A.B != B.A

结合律

它仍然是结合的

A.B.C = A.(B.C) = (A.B).C

这个属性有很多深度,我们将在第 IV 节中看到。

单位

就像加法一样,矩阵乘法也有一个单位元素,I,一个元素,当任何矩阵与之相乘时,结果仍然是相同的矩阵。最大的问题是,这个元素只存在于方阵中,并且它本身也是方阵。

现在,由于矩阵乘法的重要性,“单位矩阵”在一般意义上被定义为矩阵乘法的单位元素(而不是加法或哈达玛积的单位元素,例如)。

加法的单位矩阵由 0 组成,而哈达玛积的单位矩阵由 1 组成。矩阵乘法的单位元素是:

矩阵乘法和线性代数的单位矩阵。图由作者提供。

因此,主对角线上的 1 和其他地方的全 0。什么样的矩阵乘法定义会导致这样的单位元素?我们需要描述它是如何工作的,但首先让我们转到最后的操作。

II-D) 除法

就像加法一样,存在单位矩阵暗示任何矩阵 A 都可以与另一个矩阵 A^-1 相乘并取为单位矩阵。这被称为逆矩阵。由于矩阵乘法不是交换的,有两种方式可以达到这一点。幸运的是,两者都导致单位矩阵。

A.(A^-1) = (A^-1).A = I

因此,“除以”一个矩阵就是用第二个矩阵的逆相乘,A.B^-1。如果矩阵乘法非常重要,那么这个操作也是如此,因为它是逆矩阵。这也与我们历史上如何发展(或可能偶然发现)线性代数有关。但更多内容将在下一章(4)中介绍。

我们将使用的一个结合性质是加法和乘法的分配律。它适用于所有类型的矩阵乘法,从传统的到哈达玛积:

A.(B+C) = A.B + A.C

III) 为什么矩阵乘法是这样定义的?

我们最终到达了这一节,我们将回答标题中的问题,这是本章的主要内容。

矩阵乘法是线性映射作用于向量的方式。因此,我们以这种方式来激发它。

III-A) 线性映射在实际中是如何应用的?

考虑一个线性映射,它接受 m 维向量(来自 R^m)作为输入,并将它们映射到 n 维向量(在 R^n 中)。让我们称 m 维输入向量为 v

在这一点上,可能有助于想象自己实际上在某种编程语言中编写这个线性映射。它应该是一个函数,它接受 m 维向量 v 作为输入,并返回 n 维向量 u

线性映射必须以某种方式将这个向量转换成一个 n 维向量。在上面的函数中,你会注意到我们只是随机生成了一些向量。但这完全忽略了输入向量 v,这是不合理的,v 应该有一些发言权。现在,v 只是一个由 m 个标量组成的有序列表 v = [v1, v2, v3, …, vm]。标量做什么?它们缩放向量。而我们需要的输出向量应该是 n 维的。我们怎么不取一些(固定的)m 个向量(从空中拉出来,每个 n 维),w1, w2, …, wm。然后,将 w1 缩放为 v1,将 w2 缩放为 v2,依此类推,将它们全部加起来。这导致了一个线性映射的方程(输出在左边)。

图片

Eq (1) 一个由 m 个向量的线性组合激发的线性映射。图由作者提供。

注意上面的方程 (1),因为我们还会再次使用它。

由于 w1, w2,… 都是 n 维的,因此 u 也是 n 维的。而 v=[v1, v2, …, vm] 的所有元素都会影响输出 u。方程 (1) 中的想法如下实现。我们为 w 选取了一些随机生成的向量,但使用固定的种子(确保每次函数调用时向量都相同)。

我们现在有了一种将 m 维向量 (v) 映射到 n 维向量 (u) 的方法。但这种“映射”是否满足线性映射的性质?回想一下第一章第 II 节中线性映射的性质 f(这里,ab 是向量,c 是一个标量):

f(a+b) = f(a) + f(b)

f(c.a) = c.f(a)

很明显,方程 (1) 中指定的映射满足上述两个线性映射的性质。

图片

方程 (1) 中定义的函数满足性质:函数的和等于函数的和。图由作者提供。

图片

方程 (1) 中定义的函数满足性质:一个标量乘以传递给函数的向量等于标量乘以传递给函数的向量。图由作者提供。

m 向量,w1, w2, …, wm 是任意的,无论我们选择什么,方程 (1) 中定义的函数 f 都是一个线性映射。因此,对那些 w 向量的不同选择会导致不同的线性映射。此外,对于你可以想象到的任何线性映射,都存在一些向量 w1, w2,…,可以与方程 (1) 结合使用来表示它。

现在,对于给定的线性映射,我们可以将向量 w1, w2,… 收集到矩阵的列中。这样的矩阵将有 n 行和 m 列。这个矩阵表示线性映射 f 以及它与输入向量 v 的乘积,这表示线性映射 fv 的应用。而这个应用就是矩阵乘法定义的来源。

图片

动画 (1):矩阵向量乘法。图由作者提供。

我们现在可以理解为什么矩阵乘法的单位元素是这样的:

动画(2)为什么乘法的单位矩阵是这样的?图由作者提供。

我们从一个列向量 *v *开始,并以一个列向量 *u *结束(所以每个都是一列)。由于 v 的元素必须与表示线性映射的矩阵的列向量对齐,矩阵的列数必须等于 v 中的元素数。更多内容请参阅第三部分 C 节。

III-B) 矩阵乘法作为线性映射的组合

现在我们描述了如何将矩阵乘以向量,我们可以继续将矩阵与另一个矩阵相乘。

当我们将矩阵视为线性映射的表示时,矩阵乘法的定义要自然得多。

线性映射是输入一个向量并产生一个向量的函数。假设对应于两个矩阵的线性映射分别是 f 和 g。你会如何考虑这两个映射的加法 (f+g)

(f+g)(v) = f(v)+g(v)

这让人想起了加法的分配律,其中参数进入括号并应用于两个函数,然后我们加结果。如果我们固定一个基,这对应于将两个线性映射应用于输入向量并加结果。根据矩阵和向量乘法的分配律,这等同于将表示线性映射的矩阵相加,并将结果应用于向量。

现在,让我们考虑乘法 (f.g)

(f.g)(v) = f(g(v))

由于线性映射是函数,乘法最自然的解释是将它们组合(依次应用它们到输入向量上)。

当两个矩阵相乘时,结果矩阵表示对应线性映射的组合。考虑矩阵 A 和 B;乘积 AB 体现了首先应用由 B 表示的线性映射到输入向量上,然后应用由 A 表示的线性映射所实现的变换。

因此,我们有一个对应于矩阵 A 的线性映射和一个对应于矩阵 B 的线性映射。我们想知道对应于这两个线性映射组合的矩阵 C。所以,首先应用 B 到任何向量上,然后应用 A 到结果,应该等同于只应用 C

A.(B.v) = C.v = (A.B).v

在上一节中,我们学习了如何乘以一个矩阵和一个向量。让我们对 *A.(B.v) *做两次。假设 B 的列是列向量, *b1, b2, …, bm. *从上一节方程(1)中,

证明矩阵乘法只是依次应用线性映射。图由作者提供。

如果我们直接将对应于 *C=A.B *的线性映射应用到向量 *v. *上,矩阵 *C *的列向量是 c1, c2, …, ck

与动画(2)相同的结果,乘以一个矩阵。图片由作者提供。

比较上面的两个方程,我们得到,

图片

公式(2):矩阵 C = AB 的列向量,其中 b1, b2,…是 B 的列向量。图片由作者提供。

因此,乘积矩阵C=AB的列是通过将矩阵A对应的线性映射应用于矩阵B的每一列,并将这些结果向量收集到一个矩阵中得到的C

我们已经将上一节中的矩阵-向量乘积结果扩展到两个矩阵的乘积。我们只是将第二个矩阵分解成一系列向量,将第一个矩阵与所有这些向量相乘,并将结果向量收集到结果矩阵的列中。

图片

公式(3):C 矩阵的列向量(C=A.B)。图片由作者提供。

因此,结果矩阵C的第一行和第一列是B的第一列与A的第一行的点积。一般来说,Cij列是A的第i行与B的第j列的点积。这是我们大多数人首先学习的矩阵乘法定义。

图片

动画(3):作为点积的矩阵乘法。图片由作者提供。

结合性证明

我们还可以证明矩阵乘法是结合的。不是使用单个向量v,而是将乘积 C=AB分别应用于向量组w1, w2, …, wl。假设这些向量作为列向量的矩阵是W。我们可以使用上面提到的方法来证明:

(A.B).W = A.(B.W)

因为(A.B).w1 = A.(B.w1),对于所有其他w向量也是如此。

外积之和

假设我们在乘以两个矩阵AB

图片

两个矩阵的乘法。图片由作者提供。

公式(3)可以推广来显示结果矩阵Ci,j元素是:

图片

公式(4):公式(3)的推广。图片由作者提供。

我们对k项进行求和。如果我们把每一项都取出来,并从中创建k个单独的矩阵会怎样呢?例如,第一个矩阵的i,j项将是:b_{i,1}. a_{1,j}. 这些k个矩阵及其与C:的关系:

图片

矩阵乘法是 k 个子矩阵的和。图片由作者提供。

这个对k个矩阵求和的过程可以如下可视化(类似于第 III-A 节中可视化矩阵乘以向量的动画):

图片

动画(4):通过扩展到 3 维进行矩阵乘法。图片由作者提供。

在这里,我们看到的是所有大小相同(nxm)的 k 个矩阵的总和,其大小与结果矩阵 C 相同。注意在方程(4)中,对于第一个矩阵 A,列索引保持不变,而对于第二个矩阵 B,行索引保持不变。因此,我们得到的 k 个矩阵是 A 的第 i 列和 B 的第 i 的矩阵乘积。

图片

矩阵乘法作为外积的和。图由作者提供。

在求和内部,两个向量相乘以产生矩阵。当应用于向量(矩阵的特殊情况)时,这是一种特殊的矩阵乘法,称为“外积”。这里还有另一个动画来展示这个外积和的过程:

图片

动画(5):矩阵乘法作为外积的和。图由作者提供。

这告诉我们为什么 B 中的行向量数应该与 A 中的列向量数相同。因为它们必须映射在一起以得到单个矩阵。

我们已经看到了很多可视化和一些数学,现在让我们通过代码来看相同的东西,对于 AB 是方阵的特殊情况。这是基于《算法导论》第 4.2 节的内容,[2]。

III-C) 矩阵乘法:结构选择

图片

使用 midjourney 创建的图像

矩阵乘法似乎结构很奇怪。很明显,我们需要进行大量的点积。所以,其中一个维度必须匹配。但为什么第一个矩阵的列数要等于第二个矩阵的行数呢?

如果我们以两种矩阵的行数(或列数)相同的方式来重新定义它,事情不会变得更简单吗?这将使确定两个矩阵是否可以相乘变得容易得多。

传统的定义要求第一个矩阵的行与第二个矩阵的列对齐,这有多个优点。让我们首先看看矩阵-向量乘法。第 III-A 节中的动画(1)展示了传统版本的工作方式。现在让我们可视化一下,如果我们要求矩阵的行与向量的元素数量对齐会是什么样子。现在,矩阵的 n 行将需要与向量的 n 个元素对齐。

图片

动画(6):矩阵乘法的另一种设置看起来会是什么样子?图由作者提供。

我们看到,我们不得不从一个列向量开始,即具有n行和一列的v,最终得到一个行向量,即具有1行和m列的u。这很尴尬,因为输入和输出向量永远不会具有相同的形状,这使得为矩阵乘法定义一个单位元素变得具有挑战性。按照传统定义,这不是问题,因为输入是一个列向量,输出也是一个列向量(见动画(1))。

另一个考虑因素是矩阵链的乘法。在传统方法中,首先很容易看出下面的矩阵链可以根据它们的维度相乘。

图片

使用传统接受的方法,矩阵链乘法看起来是什么样子。图由作者提供。

此外,我们可以判断输出矩阵将有l行和p列。

在两个矩阵的行应该对齐的框架中,这很快就会变得混乱。对于前两个矩阵,我们可以判断行应该对齐,结果将具有n行和l列。但是,可视化结果将有多少行和列,然后推理它是否与C等兼容,变成了一场噩梦。

图片

如果我们修改了矩阵乘法的定义,矩阵链乘法可能看起来是什么样子。图由作者提供。

正因如此,我们要求第一个矩阵的行与第二个矩阵的列对齐。但也许我遗漏了什么。也许有一个“更干净”的定义,可以绕过这两个挑战。很乐意在评论中听到想法 🙂

III-D) 矩阵乘法作为基变换

到目前为止,我们一直将矩阵乘法与向量的关系视为一个线性映射,它以一个向量作为输入并返回另一个向量作为输出。但还有另一种思考矩阵乘法的方式——作为一种改变视角的方式。

让我们考虑二维空间,即。我们用两个数字来表示这个空间中的任何向量。这些数字代表什么?x 轴和 y 轴上的坐标。沿着 x 轴指向的单位向量是[1,0],沿着 y 轴指向的单位向量是[0,1]。这些是我们的空间基。现在每个向量都有一个地址。例如,向量[2,3]表示我们将第一个基向量按2倍缩放,第二个基向量按3倍缩放。

但这并不是空间的基础的唯一选择。其他人(比如说,那个不应该被提及的人)可能想用另外两个向量作为他们的基础。例如,向量e1=[3,2]e2=[1,1]。空间中的任何向量也可以用它们的基来表示。相同的向量在我们的基和它们的基中会有不同的表示。就像同一所房子的不同地址(也许基于不同的邮政系统)。

当我们处于“不能被提及的人”的基时,向量e1 = [1,0]和向量e2 = [0,1](根据基向量的定义,这是他的视角下的基向量)。将向量从我们的基系统转换为“不能被提及的人”的基以及相反的函数是线性映射。因此,这些转换可以用矩阵乘法表示。让我们称将向量从我们这里到“不能被提及的人”的向量的矩阵为M1,而执行相反操作的矩阵为M2*。我们如何找到这些矩阵?

图片

转变你看待世界的方式。图片由 midjourney 提供。图片由作者提供。

我们知道我们称之为e1=[3,2]e2=[1,1],而“不能被提及的人”称之为e1=[1,0]e2=[0,1]。让我们将我们的向量版本收集到矩阵的列中。

图片

由两个列向量组成的基本 2x2 矩阵。图片由作者提供。

还收集了“不能被提及的人”的向量e1e2,将它们放入另一个矩阵的列中。这只是一个单位矩阵。

图片

我们希望将 2x2 矩阵转换为单位矩阵以改变基。图片由作者提供。

由于矩阵乘法独立于第二矩阵的列操作,

图片

将矩阵移动到单位矩阵的方程。图片由作者提供。

在两边适当矩阵前乘以适当的矩阵,我们得到M1:

图片

使用矩阵改变基。图片由作者提供。

以相反的方式做同样的事情,给我们带来M2:

图片

反向映射到基。图片由作者提供。

这都可以概括为以下陈述:具有列向量;w1, w2, …, wn将基于w1, w2, …, wn是基向量的基中的向量转换为我们的基。

那个矩阵的逆矩阵将向量从我们的基转换为w1, w2, …, wn是基的那个基。

因此,所有方阵都可以被视为“基变换器”。

注意:在正交矩阵的特殊情况下(其中每一列都是一个单位向量,并且与每一列都正交),逆矩阵与转置矩阵相同。因此,将此类矩阵的列基转换为等价于将向量与每一行进行点积。

更多关于这个问题的信息,请参阅3B1B 视频,[1]

结论

矩阵乘法可以说是现代计算中最重要的操作之一,也是几乎所有数据科学领域的操作。深入理解其工作原理对于任何数据科学家来说都很重要。大多数线性代数教科书描述了“是什么”,但没有解释为什么它以这种方式结构化。希望这篇博客填补了这一空白。

参考文献

[1] 3B1B 关于基变换的视频:www.youtube.com/watch?v=P2LTAUO1TdA&t=2s

[2] Cormen 等人著的《算法导论》第三版

[3] 矩阵乘法作为外积之和:math.stackexchange.com/questions/2335457/matrix-at-a-as-sum-of-outer-products

[4] 哈密顿数维基百科文章 en.wikipedia.org/wiki/Catalan_number

posted @ 2026-03-28 10:14  布客飞龙IV  阅读(3)  评论(0)    收藏  举报