跳转至

P2-3.3 矩阵乘法(matrix multiplication)到底在复用什么

Section ID: P2-3.3 Version: v2026.07.20

在 P2-3.1 里,我们从数据形状(shape)的角度看了标量(scalar)、向量(vector)、矩阵(matrix)。在 P2-3.2 里,我们建立了把向量读成空间中位置(position)、并比较远近的直觉。现在开始看矩阵乘法(matrix multiplication)。

矩阵乘法一开始看上去像一种单纯的乘法规则,但实际上,它更接近于 把同一种加权求和(weighted sum)结构反复复用的计算

  1. 把输入值和权重绑在一起再相加。
  2. 先做出一个新值。
  3. 把同样的计算重复到多个输出上。
  4. 再一次性应用到多个输入上。

这里的重点,是建立这样一种阅读感觉:当 AI 文档说 把输入向量乘上权重矩阵 时,到底是在说什么。

这里重新整理 matrix multiplicationweighted sumweight matrixlinear transformationinput/output dimension。如果 3.1 是在读数据形状,3.2 是在把向量读成位置,那么这一节就是在整理“怎样把那个输入变成新表示”的计算结构。

这里不追求把矩阵计算公式全部练熟,而是聚焦于读懂 AI 模型怎样把输入变成新表示。只要加权求和、shape、线性变换(linear transformation)的直觉先稳住,后面在读神经网络层(layer)或分类器(classifier)时,就更容易从结构上理解 为什么要乘矩阵

这一节现在先抓住什么 紧接着会连到的问题 后面再次出现的位置
“矩阵乘法不是逐位置相乘”这个区分 在 P2-3.6 里会直接用 NumPy 检查数组 shape 和乘法。 它会在 Part 3 里读特征矩阵 X,以及在 Part 4、Part 5 里读权重和分数计算时再次出现。
“同一种加权求和结构会被复用于多个输出”这一直觉 在后续小节里,会用代码检查 shape 错误和计算结果。 它会继续连到 Part 5 里的线性层(linear layer)、attention 计算、表示变换说明。
输入维度与输出维度会体现在 shape 里 它会继续连到 P2-6.1P2-6.2P2-6.3 里权重与损失是怎样连接的。 它会在 Part 5 里读 embedding 投影、logit、输出向量时再次出现。

核心判断标准:矩阵乘法(matrix multiplication)到底在复用什么

  • 能说明矩阵乘法不是逐位置乘法(element-wise multiplication)。
  • 能理解向量与权重相乘后,会通过加权求和产生新值。
  • 能把矩阵乘法读成“一次性计算多个加权求和”的方式。
  • 能说明输入维度与输出维度会体现在矩阵的形状(shape)上。
  • 能把线性变换理解成“把向量移到另一个表示空间”的计算。
  • 能说明这种计算为什么会在神经网络层、embedding、classification 里再次出现。

三个基准

基准 为什么重要 本节所需的理解水平
矩阵乘法是在复用加权求和 因为它是一次不只生成一个输出,而是能同时生成多个输出的基础计算。 理解“输入乘权重再相加”的计算会按列不断重复。
shape 决定计算是否成立 因为如果内侧维度对不上,就无法知道哪个值该和哪个权重配对。 理解输入长度必须和权重矩阵输入侧的大小一致。
线性变换是在改变表示 因为神经网络层和分类器的说明,最终都会连到“把输入变成新表示”的计算。 理解矩阵乘法能把一个向量变成长度和意义都不同的另一个向量。

逐位置相乘和矩阵乘法不是一回事

在 P2-3.1 里,我们说过 shape 相同的向量或矩阵可以逐位置相加。乘法也可以写成逐位置乘法。

\[ [1,\ 2,\ 3] \odot [4,\ 5,\ 6] = [4,\ 10,\ 18] \]

这里的 \(\odot\) 表示相同位置上的值直接相乘。这种计算会把每个位置分别处理。

矩阵乘法则不同。矩阵乘法并不是只把相同位置的值拿来相乘,而是通过一边的行(row)与另一边的列(column)相组合,生成新值。

  1. 逐位置乘法只会把对应位置直接相乘。
  2. 矩阵乘法会按行和列去“乘并相加”。

这两件事必须先分开。只要把矩阵乘法误读成逐位置乘法,就会同时看错 shape 错误和计算意义。

一个输出是怎样由加权求和做出来的

先看一个向量和一组权重。

\[ \mathbf{x} = [2,\ 3] \]
\[ \mathbf{w} = [4,\ 5] \]

如果把相同位置的值相乘之后再相加,就会得到一个数字。

\[ 2 \times 4 + 3 \times 5 = 8 + 15 = 23 \]

这个计算可以这样读。

  1. 把第一个输入值乘上第一个权重。
  2. 把第二个输入值乘上第二个权重。
  3. 把结果相加。
  4. 做出一个输出值。

这就是加权求和(weighted sum)的基本形状。

\[ y = x_1w_1 + x_2w_2 \]

在 AI 模型里,输入值不一定具有相同的重要性。有些值可以被强调,有些值可以被弱化,也有些值会朝负方向产生影响。权重(weight)就是把这种影响程度写成数字。

这里不处理权重是如何学出来的。训练(training)和优化(optimization)的基本流程会在 P2-6.1 到 P2-6.3 再出现,深度学习语境里的反向传播(backpropagation)和优化器(optimizer)会在 P5-5.1、P5-7.1、P5-7.2 再出现。这里先只看 输入乘权重再相加就会产生一个新值 这种计算形式。

矩阵乘法会把同一种加权求和复用很多次

要做出一个输出时,我们需要一组权重向量。如果想做出两个输出,就需要两组权重向量。

\[ \mathbf{x} = [2,\ 3] \]
\[ W = \begin{bmatrix} 4 & 1 \\ 5 & 2 \end{bmatrix} \]

这里的 \(W\) 是权重矩阵(weight matrix)。第一列可以读成生成第一个输出值的权重,第二列可以读成生成第二个输出值的权重。

\[ \mathbf{y} = \mathbf{x}W \]

计算后会变成:

\[ \mathbf{y} = [2,\ 3] \begin{bmatrix} 4 & 1 \\ 5 & 2 \end{bmatrix} \]
\[ = [2 \times 4 + 3 \times 5,\ 2 \times 1 + 3 \times 2] \]
\[ = [23,\ 8] \]

这个计算实际上就是把加权求和复用了两次。

第一个输出: 2 x 4 + 3 x 5 = 23
第二个输出: 2 x 1 + 3 x 2 = 8

矩阵乘法把“乘并相加”这个小计算反复应用到多个输出上。所以,矩阵乘法会成为把一个输入向量改造成另一种形状输出向量的工具。这里,输入向量 shape 是 2,权重矩阵 shape 是 2 x 2,输出向量 shape 也是 2。

Shape 决定这个计算能不能成立

在矩阵乘法里,shape 非常重要。输入向量的值的个数,必须和权重矩阵的行(row)数相匹配。

\[ [2,\ 3] \begin{bmatrix} 4 & 1 \\ 5 & 2 \end{bmatrix} \]

在这个计算里,输入向量长度是 2,矩阵也有 2 行。因此每个输入值都能与每一行中的权重发生对应。

反过来,下面这个计算就不能直接对上。

\[ [2,\ 3,\ 4] \begin{bmatrix} 4 & 1 \\ 5 & 2 \end{bmatrix} \]

输入有 3 个值,但权重矩阵只能接收 2 个输入。

  1. 输入长度和权重矩阵输入侧的大小必须一致。
  2. 如果不一致,就无法决定哪个值该和哪个权重相乘。

这正是 AI 代码里 shape 错误经常出现的原因之一。矩阵乘法不管在数学上还是代码里,都是一种 只有形状对得上才能执行 的计算。

矩阵乘法可以一次处理多条数据

矩阵乘法的力量不只在于处理一个输入。我们还可以把多个输入收集成一个矩阵,一次性计算。

例如,假设有两个输入向量。

\[ X = \begin{bmatrix} 2 & 3 \\ 1 & 4 \end{bmatrix} \]

每一行(row)都是一个输入样本(sample)。

第一个样本: [2, 3]
第二个样本: [1, 4]

再乘上同一个权重矩阵 \(W\)

\[ W = \begin{bmatrix} 4 & 1 \\ 5 & 2 \end{bmatrix} \]
\[ Y = XW \]

计算结果会变成:

\[ Y = \begin{bmatrix} 23 & 8 \\ 24 & 9 \end{bmatrix} \]

第一行是第一个样本的输出,第二行是第二个样本的输出。

  1. 先把多个输入样本收集成矩阵。
  2. 再乘上同一个权重矩阵。
  3. 一次得到多个输出样本。

这会直接连到 batch 计算的基础直觉。模型当然可以一个一个地处理输入,但如果把多个输入打包一起算,就能反复复用同一种计算结构。

线性变换是把一种表示移到另一种空间里的计算

线性变换(linear transformation)可以先理解成:通过矩阵乘法,把一个向量变成另一个向量。

  1. 先准备输入向量。
  2. 再应用权重矩阵。
  3. 得到输出向量。

例如,如果输入有 2 个值,输出要有 3 个值,那么权重矩阵就必须具有“接收 2 个输入、生成 3 个输出”的形状。

\[ \mathbf{x} \in \mathbb{R}^{2} \]
\[ W \in \mathbb{R}^{2 \times 3} \]
\[ \mathbf{y} = \mathbf{x}W,\quad \mathbf{y} \in \mathbb{R}^{3} \]

这可以读成下面这样。

  1. 接收一个由 2 个值表示的输入。
  2. 把它变成一个由 3 个值表示的输出。

在二维里,这种变化还能画成图。下面这个例子展示了:输入向量 \(\mathbf{x} = [2,\ 3]\) 乘上一个简单的矩阵 \(W\),被移动到 \(\mathbf{y} = [2,\ 4]\)

矩阵乘法改变向量位置的例子

这个图里重要的不是具体数值本身,而是视角。向量可以被读成空间里的位置,而矩阵乘法可以被读成“把这个位置移到另一个位置”的计算。

1
2
3
输入位置: [2, 3]
应用矩阵 W。
输出位置: [2, 4]

在真实 AI 模型里,这类变换发生在远比二维图更高的空间里。人当然很难直接画出来,但基础思路不变:输入表示会经过权重矩阵,被移动到另一个表示。

这个视角在 AI 里很重要。模型不会把输入表示原封不动地留下,而是通过多步计算,把它不断变成新的表示。

  1. 先有原始输入表示。
  2. 经过第一层变换。
  3. 得到中间表示。
  4. 再经过下一层变换。
  5. 朝着更接近最终输出的表示移动。

神经网络(neural network)的层(layer)就可以看成是把这种变换不断叠起来的结构。当然,真实神经网络并不只由线性变换组成。像 activation function、normalization、attention 这样的其他计算也会一起出现。这里只先抓住一点:在线性变换是这些基本模块里很重要的一块。

矩阵乘法到底复用了什么

这一节标题问的是:矩阵乘法到底在复用什么? 可以整理成三个答案。

第一,它在复用同一种加权求和结构。

  1. 先乘。
  2. 再加。
  3. 生成一个输出值。

第二,它把同一个权重矩阵复用到多个输入样本上。

  1. 对样本 A 应用同一个 W
  2. 对样本 B 应用同一个 W
  3. 对样本 C 也应用同一个 W

第三,它会在多层结构里反复复用同样的变换方式。

  1. 先改变一次表示。
  2. 再改变一次表示。
  3. 朝着更适合任务的表示移动。

这样看,矩阵乘法就不只是一个公式,而是模型用来反复改变、压缩、重新表示数据的基础装置。

通过案例来看

案例 1. 用两个特征生成两个新分数的计算

学习者第一次看到矩阵乘法时,常常会把它当成一套把数字排好再去相乘的规则。但在真实模型计算里,更重要的视角是:把输入特征用多组不同权重重新组合,做出新的分数

例如,假设一个商品被表示成两个值:价格档位购买频率。如果对这两个输入特征应用两组不同的权重组合,就可以得到两个新的输出值,比如 价格影响分数购买倾向分数。这种 对同一输入反复计算多个加权求和 的结构,就是矩阵乘法。

这个案例也说明了为什么矩阵乘法不是简单的逐位置相乘。我们并不是只把相同位置的值相乘,而是把一个输入向量里的值,与为每个输出准备的权重组合起来,做出新的表示。

所以,与其把矩阵乘法读成需要死记的规则,不如把它读成 把输入变成另一个表示空间的可复用计算。这种直觉会直接连到神经网络层、线性变换、权重矩阵的说明。

检查清单

  • 能区分矩阵乘法和逐位置乘法吗?
  • 能说明加权求和是“输入值乘权重再相加”的计算吗?
  • 能把矩阵乘法读成“一次同时计算多个加权求和”的方式吗?
  • 能说明输入向量长度必须和权重矩阵输入侧大小一致吗?
  • 能解释把多个样本打包成矩阵、再应用同一个权重矩阵的 batch 计算直觉吗?
  • 能把线性变换解释成“把输入表示变成另一种输出表示”的计算吗?
  • 能说明为什么矩阵乘法会在神经网络层、embedding、classification 里再次出现吗?
  • 能把矩阵乘法解释成 输入 -> 权重矩阵 -> 输出 的加权求和复用结构吗?

来源与参考资料

  • Marc Peter Deisenroth, A. Aldo Faisal, Cheng Soon Ong, Mathematics for Machine Learning, Cambridge University Press, 2020, 确认日期: 2026-07-19.
  • Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, MIT Press, 2016, 确认日期: 2026-07-19.
  • Charles R. Harris et al., Array Programming with NumPy, Nature, 2020, 确认日期: 2026-07-19.
  • NumPy Developers, numpy.matmul, NumPy User Guide, 确认日期:2026-07-19. 这个官方参考资料支持矩阵乘法的 shape 条件和 @ 运算符的含义。
  • Google for Developers, Neural networks: Nodes and hidden layers, Machine Learning Crash Course, 确认日期:2026-07-19. 这个官方教育资料说明神经网络节点值由输入与权重的乘积求和计算而来。