一句话总结:矩阵乘法不只是“行乘列”。它可以批量完成线性变换和点积;点积又能从夹角与投影来理解。理解这一点,Attention 就不再神秘了。


8.1 为什么要学矩阵?

章节标题

在进入 Attention 机制之前,我们需要先搞清楚一个数学基础:矩阵乘法。

你可能会问:我又不是要当数学家,为什么要学这个?

答案很简单:Transformer 里到处都是矩阵乘法。

沿着 Transformer 走一遍,你会在这些地方遇到矩阵:

  1. Embedding 表把 token ID 查成 d_model 维向量。实现上通常是索引查表;把 token 写成 one-hot 时,也可以等价地看成一次矩阵乘法
  2. Attention 的 W_Q、W_K、W_V 和输出投影
  3. FFN 的扩宽与缩回
  4. 最后的 LM Head,把隐藏向量投影到词表 logits

矩阵乘法排在第一位,因为后面的 Q、K、V、Attention 分数和 FFN 都离不开它。LayerNorm 和 Softmax 是另外两类运算,不能都塞进“矩阵乘法”这个盒子里。

这一章,我们会用最直观的方式,让你"看懂"矩阵乘法在做什么。


8.2 基础概念:标量、向量、矩阵

基础概念

在开始之前,让我们统一一下术语。

8.2.1 标量(Scalar)

标量就是一个数字。

5

就这么简单。温度、价格、年龄,都是标量。

8.2.2 向量(Vector)

向量是一组有序的数字。

[3, 2, 9, 84]

向量可以表示很多东西:

  • 位置:[x, y, z] = [3, 5, 2]
  • 颜色:[R, G, B] = [255, 128, 0]
  • 词向量:一个词的语义表示

8.2.3 矩阵(Matrix)

矩阵是二维的数字表格。

3 × 4 的矩阵:
┌─────────────┐
│ □ □ □ □ │
│ □ □ □ □ │
│ □ □ □ □ │
└─────────────┘

矩阵可以看作是"多个向量的堆叠":

  • 3×4 的矩阵 = 3 个长度为 4 的行向量
  • 或者 = 4 个长度为 3 的列向量

8.2.4 在 Transformer 中

  • 标量:学习率、温度参数
  • 向量:一个 token 的 embedding
  • 矩阵:一批 token 的 embedding、权重矩阵

8.3 矩阵乘法:计算过程

8.3.1 维度规则

矩阵乘法的维度规则:

[A, B] × [B, C] = [A, C]

中间的维度必须相同(都是 B),结果取两边的维度。

8.3.2 手算示例

点积计算

让我们看一个具体例子:

[4,3] × [3,4] = [4,4]

计算过程(以结果矩阵的第一个元素 4.3 为例):

第一行 × 第一列:
[0.2, 0.4, 0.5] · [2, 1, 7]ᵀ
= 0.2×2 + 0.4×1 + 0.5×7
= 0.4 + 0.4 + 3.5
= 4.3

核心操作就是"点积"(Dot Product):对应位置相乘,然后求和。

8.3.3 为什么叫"点积"?

因为数学上用一个点(·)来表示这个操作:

A · B = a₁b₁ + a₂b₂ + a₃b₃ + ...

在 Python/NumPy 中用 @ 符号:

C = A @ B  # 矩阵乘法

8.4 矩阵乘法 vs 线性变换

矩阵乘法vs线性变换

8.4.1 两种视角

同样的矩阵乘法,可以从两个角度理解:

视角一:矩阵相乘(Dot Product)

[4,3] × [3,4] = [4,4]

两个矩阵相乘,得到一个新矩阵。

视角二:线性变换(Linear Transformation)

[4,3] × [3,1] = [4,1]

用一个矩阵"变换"一个向量,得到一个新向量。

8.4.2 线性变换的直觉

"线性变换"这个名字听起来很数学,但本质很简单:

用矩阵乘以向量,把向量从一个空间"变换"到另一个空间。

比如,一般的线性变换可以:

  • 输入:3 维向量
  • 权重矩阵:[4,3]
  • 输出:4 维向量

向量的维度从 3 变成了 4——这就是"变换"。

在 Transformer 中:

  • Embedding 通常是查表;若把 token ID 写成 one-hot 向量,查表等价于 one-hot 向量乘 Embedding 矩阵
  • Attention 的 W_Q、W_K、W_V 把输入表示投影成不同用途的向量
  • FFN 先把向量扩宽,再经过非线性,最后缩回 d_model

到处都是线性变换!


8.5 几何意义:向量空间可视化

现在让我们进入最精彩的部分——理解矩阵乘法的几何意义。

8.5.1 词向量的3D可视化

四个三维玩具向量及其两两点积矩阵

假设我们手工造一个 3 维玩具空间,用四个向量演示几何关系:

猫 = [7, 7, 6]
鱼 = [6, 4, 5]
爱 = [-4, -2, 1]
吃 = [6, 5, 7]

把它们画在 3D 坐标系中,猫和鱼大致同向,爱指向另一侧。

这里的数字只是为了画图方便,并不是从某个真实模型里测出来的。真实模型的 token 表示会随上下文和层数变化;“方向接近”可能承载语义结构,但不能只凭一张玩具图就断言两个词在模型里一定相似。

8.5.2 矩阵乘法批量计算点积

如果把 n 个向量按行堆成矩阵 X,一次矩阵乘法就能算出所有两两点积:

X [n,d] @ Xᵀ [d,n] = S [n,n]

结果 S[i,j] 就是第 i 个向量和第 j 个向量的点积。用上面的玩具数字:

  • 猫 · 鱼 = 7×6 + 7×4 + 6×5 = 100
  • 爱 · 鱼 = -4×6 + -2×4 + 1×5 = -27
  • 吃 · 鱼 = 6×6 + 5×4 + 7×5 = 91

但要记住:点积既受方向影响,也受向量长度影响。它可以作为学出来的匹配分数,却不等于纯粹的余弦相似度。Attention 正是用 QKᵀ 一次算出所有 Query-Key 的匹配分数。

8.5.3 d_model 的含义

在上图中,我们标注了 d_model = 3:

  • 每个词用 3 维向量表示
  • 矩阵的列数 = d_model

在真实的 Transformer 中:

  • GPT-2 Small:d_model = 768
  • GPT-3:d_model = 12288
  • Llama 2 7B:d_model = 4096

维度越高,通常能提供更大的表示容量,但不保证模型自动更好;权重矩阵和计算量也会随之增大。


8.6 点积与余弦相似度

8.6.1 两个向量的夹角

两个玩具向量的点积、长度与余弦相似度

当两个向量做点积时,结果和它们的夹角有关:

cos(θ) = (A · B) / (|A| × |B|)

也就是说:

A · B = |A| × |B| × cos(θ)

其中:

  • |A| 是向量 A 的长度
  • |B| 是向量 B 的长度
  • θ 是两个向量的夹角

8.6.2 几何直觉

看一个纯数学的玩具例子:

A = [3, 5]
B = [1, 4]

它们的余弦相似度约为 0.96。这两个数字不代表任何词的实测 embedding,只是用来演示公式。

  • 夹角小(cos(θ) 接近 1)→ 在长度相近时,点积更大
  • 垂直(cos(θ) = 0)→ 点积为 0
  • 相反方向(cos(θ) = -1)→ 点积为负

这些是几何关系,不是语言标签的硬规则。垂直不自动等于“语义完全无关”,反向也不自动等于“反义词”。

8.6.3 这就是 Attention 的核心!

在 Attention 机制中:

  • Query 向量和 Key 向量做点积
  • 点积给出一个学出来的匹配分数,不是经过长度归一化的余弦相似度
  • 对同一个 Query 来说,某个未被 mask 的 Key 分数相对越高,经过缩放和 Softmax 后得到的注意力权重通常越高

Attention 的核心,是用点积批量计算 Query-Key 的匹配分数。


8.7 投影:另一种几何解释

8.7.1 投影的概念

向量 B 在向量 A 方向上的标量投影与投影向量

点积还有另一种几何解释:投影。

A · B = |A| × (B 在 A 方向上的有符号投影长度)

或者写成:

A · B = len(A) × (B projects on A)

8.7.2 可视化

看图中的示意:

  • 向量 A(红色)
  • 向量 B(蓝色)
  • B 在 A 方向上的投影(虚线)

点积的结果 = A 的长度 × 有符号投影长度。如果要的是投影向量本身:

proj_A(B) = (A · B / |A|²) A

8.7.3 投影的直觉

"投影"可以理解为:"B 有多少成分在 A 的方向上"。

在模型里,Q 和 K 的投影是训练出来的。某个方向可能对当前任务有用,但通常不会有一根清楚写着“皇室”或“抽象度”的坐标轴。这里的投影是帮助理解公式的几何直觉,不是对单个神经元或维度的命名。


8.8 总结:为什么这对 Attention 很重要

8.8.1 Attention 的核心计算

Attention 的公式:

Attention(Q, K, V) = softmax(QKᵀ / √d_k + M) × V

其中 QKᵀ 是 Query 和 Key 的矩阵乘法,M 是 causal/padding mask(允许的位置加 0,不允许的位置加负无穷)。

现在你知道了:

  • 这个矩阵乘法批量计算 Query 和 Key 的点积匹配分数
  • 分数先除以 √d_k 控制尺度,再加 mask,最后由 Softmax 变成归一化权重
  • 点积可以从夹角和投影来理解,但它不是余弦相似度,因为 Q、K 并没有在公式里除以各自长度

8.8.2 核心洞察

数学操作几何意义在 Attention 中的作用
点积 A·B方向与长度共同决定的匹配分数 / 投影计算 Q 和 K 的匹配程度
矩阵乘法批量点积一次计算所有位置对的分数
Softmax指数归一化把每行分数变成总和为 1 的权重

8.8.3 记住这句话

不要把两件事混在一起:矩阵乘法可以表示一般的线性变换,也可以批量计算点积;点积才有夹角与投影的解释。Attention 用后者给所有 Query-Key 对打分。


8.9 本章总结

8.9.1 核心概念

概念解释
标量单个数字
向量一组有序的数字
矩阵二维数字表格
点积对应相乘再求和
线性变换用矩阵旋转、伸缩、剪切或改变向量维度
余弦相似度两向量夹角的余弦值
投影一个向量在另一个方向上的分量

8.9.2 关键公式

点积:

A · B = a₁b₁ + a₂b₂ + ... + aₙbₙ

余弦相似度:

cos(θ) = (A · B) / (|A| × |B|)

投影:

A · B = |A| × |B| × cos(θ)

8.9.3 核心认知

矩阵乘法不是抽象的符号游戏:它既能表示线性变换,也能批量算点积。Attention 用 Q 和 K 的点积得到匹配分数,再经过缩放、mask 和 Softmax 变成权重。理解这条链路,就够了。


本章交付物

学完这一章,你应该能够:

  • 说出矩阵乘法的维度规则 [A,B] × [B,C] = [A,C]
  • 手算简单的点积(对应相乘再求和)
  • 解释点积和余弦相似度的区别,以及点积的投影解释
  • 理解为什么 Attention 用矩阵乘法批量计算 Query-Key 匹配分数

下一章预告

有了矩阵乘法的几何直觉,下一章我们正式进入 Attention 机制。

我们会回答这些问题:

  • 为什么要用点积计算注意力?
  • Query、Key、Value 到底是什么?
  • Attention 的计算流程是怎样的?

准备好了吗?让我们揭开 Transformer 最核心部分的面纱!

引用本文 / Cite
Zhang, Wayland (2026). 矩阵乘法的几何本质:从线性变换到 Attention 机制. In Transformer 架构:从直觉到实现. https://waylandz.com/llm-transformer-book/%E7%AC%AC08%E7%AB%A0-%E7%BA%BF%E6%80%A7%E5%8F%98%E6%8D%A2%E7%9A%84%E5%87%A0%E4%BD%95%E6%84%8F%E4%B9%89-%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95%E7%9A%84%E6%9C%AC%E8%B4%A8/
@incollection{zhang2026transformer_08_-_-,
  author = {Zhang, Wayland},
  title = {矩阵乘法的几何本质:从线性变换到 Attention 机制},
  booktitle = {Transformer 架构:从直觉到实现},
  year = {2026},
  url = {https://waylandz.com/llm-transformer-book/%E7%AC%AC08%E7%AB%A0-%E7%BA%BF%E6%80%A7%E5%8F%98%E6%8D%A2%E7%9A%84%E5%87%A0%E4%BD%95%E6%84%8F%E4%B9%89-%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95%E7%9A%84%E6%9C%AC%E8%B4%A8/}
}