Ch03 AI数学修订于 二〇二六年七月六日

3.1 线性代数:向量和矩阵

向量:一串数字。[0.2, 0.8, -0.3]。你已经在 稠密检索(深挖) 里见过——Embedding 就是向量。向量的长度(模)代表”信号的强度”,两个向量的夹角(余弦距离)代表”含义的相似度”。

矩阵:很多个向量叠在一起。[[1,2,3], [4,5,6]]——2 行 3 列的矩阵。神经网络每一层都是一个矩阵乘法:输入向量 × 权重矩阵 = 输出向量。

矩阵乘法:这是 AI 里最核心的数学操作。一个 768 维的输入向量,乘一个 768×3072 的权重矩阵,得到 3072 维的输出向量。Transformer 的每一层都在做这件事。

你不需要手算。NumPy 一行搞定:output = input @ weight。但你需要知道它在做什么——每一层的输出都是输入的加权组合。

3.1.1 线性代数的四层抽象:标量、向量、矩阵、张量

理解线性代数,首先要理解这四个层层递进的抽象层次。每一层都是上一层”堆叠”的结果。

标量(Scalar):一个单独的数。比如 3.14、-2.5、0。在 AI 中,标量是最小的计算单位——一个损失值(loss)、一个学习率(learning rate)、一个偏置项(bias)、一个 logit 值。标量没有方向,只有大小。它的数学符号通常是斜体小写字母,如 x、y、α。

向量(Vector):一列数(或一行数),既有大小也有方向。比如 [0.2, 0.8, -0.3, 0.5]。在 AI 中,向量无处不在:

  • 一个词嵌入(Word Embedding)就是一个向量——768 维的数字阵列代表一个词的语义。vec("猫") 和 vec("狗") 的距离应该比 vec("猫") 和 vec("量子力学") 的距离近得多
  • 一张图片的某个像素的 RGB 值 [255, 128, 64] 是一个 3 维向量
  • 一个用户的行为特征 [年龄, 收入, 浏览时长, 点击次数] 是一个 4 维向量
  • GPT 模型内部,每个 token 在每一层都被表示为一个向量(hidden state),维度通常是 768、1024 或 4096

向量有两个关键属性:长度(L2 范数,即各分量平方和再开方) 和 方向。在语义搜索中,你关心的是方向(余弦相似度),而不是长度——“猫”和”猫咪”的向量方向应该接近,即使它们的长度不同。长度往往代表”信号强度”或”置信度”,方向代表”含义”。

矩阵(Matrix):很多向量叠在一起,形成一个二维数字网格。在 AI 中,矩阵代表”变换”——把一个向量变成另一个向量:

  • Transformer 的每一层:输入向量(1×768)× 权重矩阵(768×3072)= 输出向量(1×3072)
  • 注意力机制:Q(Query,查询向量)× K^T(Key 的转置,键向量)= 注意力分数矩阵(序列长度 × 序列长度)
  • 一个 batch 的训练数据:每行是一个样本,每列是一个特征——这就是一个矩阵
  • 一张灰度图片(如 MNIST 手写数字):28×28 的像素值矩阵

矩阵的维度表示:W ∈ R^(d×k) 读作”W 是一个 d 行 k 列的实数矩阵”。d 是输入维度,k 是输出维度。第一个维度是”行”,第二个是”列”。

张量(Tensor):矩阵的泛化——三维、四维、任意维度的数字阵列。在 AI 中,张量是通用数据结构:

  • 一张彩色图片:三维张量(高度 × 宽度 × 3 个颜色通道 RGB)
  • 一个 batch 的彩色图片:四维张量(batch_size × 高度 × 宽度 × 通道数)
  • 一个 batch 的视频:五维张量(batch_size × 帧数 × 高度 × 宽度 × 通道数)
  • Transformer 的多头注意力中间结果:四维张量(batch_size × 头数 × 序列长度 × 每个头的维度)

PyTorch 中的 torch.Tensor 就是对这个概念的封装。你创建的任何数据——输入、权重、梯度、输出——都是张量。torch.randn(2, 3, 4) 创建一个形状为 (2,3,4) 的三维张量,包含 2×3×4=24 个随机数。

理解这四个抽象层次,你就能读懂任何 AI 论文里的数学符号。x ∈ R^d 意思是”x 是一个 d 维实数向量”,W ∈ R^(d×k) 意思是”W 是一个 d 行 k 列的实数矩阵”。

3.1.2 矩阵乘法:为什么是 AI 的核心运算

矩阵乘法占据了神经网络前向传播和反向传播中 90% 以上的浮点运算。理解它为什么如此核心,是理解 AI 计算的关键。

线性变换的直觉:矩阵乘法 = 把向量从一个空间”映射”到另一个空间。

想象你有一个 768 维的向量(“cat” 这个词的 Embedding)。你用一个 768×3072 的权重矩阵乘以它,得到一个新的 3072 维向量。这个新的向量不再是原始的”cat”的词嵌入,而是被”变换”到了一个新的特征空间——它包含了”cat” 经过这一层神经网络处理后的信息。每一层神经网络都在做这件事:把输入向量从一个空间变换到另一个空间,逐步提取更高层次的特征。

数学上(带偏置):y = xW + b,其中 x 是输入向量(1×d),W 是权重矩阵(d×k),b 是偏置向量(1×k),y 是输出向量(1×k)。

计算过程详解:输出向量 y 的第 j 个元素 = 输入向量 x 的每个元素乘以权重矩阵 W 第 j 列的对应元素,然后全部求和,再加上偏置:

y_j = x_1 × W_{1,j} + x_2 × W_{2,j} + ... + x_d × W_{d,j} + b_j

这其实就是”加权求和”——输出向量的每一个元素,都是输入向量所有元素的加权组合。权重矩阵 W 决定了”怎么组合”——哪些输入元素对输出影响大,哪些影响小。

为什么 GPU 擅长这个:矩阵乘法由大量独立的乘法和加法组成,这些操作可以同时进行。GPU 有几千个核心,每个核心同时算一小块矩阵乘法。这就是为什么 AI 训练必须用 GPU——CPU 做矩阵乘法是按顺序一行一行算的,太慢了。一张 H100 GPU 的矩阵乘法(FP16)速度可达到 1000 TFLOPS(每秒 1000 万亿次浮点运算),而高端 CPU 通常只有 1-2 TFLOPS。

Transformer 中的矩阵乘法全景(每一步都是矩阵乘法):

  • QKV 投影:输入序列 X(seq_len × d_model)分别乘以 W_Q、W_K、W_V 三个权重矩阵,得到 Q、K、V。这是三次矩阵乘法
  • 注意力分数:Scores = Q × K^T / sqrt(d_k),Q(seq_len × d_k)乘以 K^T(d_k × seq_len),得到注意力分数矩阵(seq_len × seq_len)——每个位置对其他所有位置的”关注度”
  • 注意力加权:Output = softmax(Scores) × V,softmax 后的注意力权重(seq_len × seq_len)乘以 V(seq_len × d_v),对 Value 向量加权求和
  • 多头拼接:所有头的输出拼接后乘以输出投影矩阵 W_O
  • 前馈网络:FFN(x) = GELU(xW1 + b1)W2 + b2——两次矩阵乘法。中间维度通常是 d_model 的 4 倍,所以 W1 是 d_model × 4d_model,W2 是 4d_model × d_model
  • 输出投影:最后一层输出乘以词表嵌入矩阵的转置(d_model × vocab_size),得到每个词的概率

理解了这个,你就理解了 Transformer 90% 的计算量来源。这也是为什么模型越大(权重矩阵越大),推理越慢——矩阵乘法的计算量随矩阵维度平方增长。GPT-4 的推理成本中,超过 95% 是矩阵乘法。

3.1.3 点积和余弦相似度:衡量”相似”的数学

在 AI 中,你经常需要回答”这两个东西有多像”——两个词、两个文档、两张图片。向量相似度就是回答这个问题的数学工具。

点积(Dot Product):两个向量对应位置的元素相乘,然后全部加起来。

a · b = a1×b1 + a2×b2 + ... + an×bn

点积的值越大,两个向量在数值上越”接近”。但点积有一个致命问题:它受向量长度的影响。如果向量 a 的长度是向量 b 的 10 倍,即使它们方向完全不同,点积也可能很大。这就像用”总财富”而不是”人均财富”来比较两个国家的富裕程度——总量大的国家看起来总是”更好”。

在注意力机制中,Q 和 K 的点积除以 sqrt(d_k) 就是为了防止点积过大——当向量维度很高时,点积的方差会随维度线性增长,导致 softmax 输出极度尖锐(接近 one-hot),梯度消失。

余弦相似度(Cosine Similarity):点积除以两个向量长度的乘积,只关注方向,不关注长度。

cos(a,b) = (a·b) / (|a| × |b|)

取值范围是 [-1, 1]:

  • 1:两个向量方向完全相同,最相似。比如高质量 Embedding 模型下,“猫”和”猫咪”的词向量余弦相似度应该接近 1
  • 0:两个向量正交(垂直),完全不相关。比如”猫”和”量子力学”的词向量
  • -1:两个向量方向完全相反。比如”好”和”坏”在情感分析中的词向量

在 RAG 系统中的应用:当你向知识库提问时,系统把你的问题转成 Embedding 向量,然后计算它和知识库中每个文档块的余弦相似度,返回最相似的那些。这就是 稠密检索(深挖) 的核心数学原理。如果检索结果不相关,通常不是余弦相似度的问题,而是:

  1. Embedding 模型本身不够好,没有把语义相近的文本映射到相近的向量
  2. 文档切分策略有问题,重要的信息被切碎或切错位置
  3. 查询本身的 Embedding 质量差(比如查询太短、包含歧义词)

2026 年的现实:所有向量数据库(Chroma、Pinecone、Milvus、Weaviate、Qdrant)都内置了余弦相似度计算。你只需要调用 collection.query(query_embeddings=[...], n_results=5),不需要手写任何数学。但你需要理解:当检索质量差时,问题可能出在 Embedding 模型的选择上,而不是相似度度量本身。换一个 Embedding 模型(如从 text-embedding-ada-002 换到 text-embedding-3-large)往往比折腾相似度算法有效得多。

3.1.4 特征值和特征向量:矩阵的”指纹”

这是一个更高级的概念。即使你不做推导,理解它的直觉对阅读 AI 论文有巨大帮助。很多重要算法(PCA、谱聚类、PageRank)本质上都是在求特征向量。

直觉:一个矩阵乘以一个向量,通常会把向量同时”旋转”和”拉伸”。但有些特殊的向量,被矩阵乘了之后,只是被拉伸了,方向完全不变——这些就是特征向量(Eigenvector)。拉伸的倍数就是特征值(Eigenvalue)。

数学上:A v = λ v,其中 A 是矩阵,v 是特征向量,λ 是特征值(一个标量)。

物理直觉:想象你在一块橡皮上画了一个箭头,然后均匀拉伸这块橡皮。大多数箭头会被拉伸并旋转,但有些箭头(恰好沿着拉伸方向的)只会被拉伸,不会旋转。这些箭头就是特征向量。如果特征值 λ 大于 1,特征向量被拉长;如果 0 < λ < 1,被压缩;如果 λ 为负,方向翻转。

在 AI 中的关键应用:

  • PCA(主成分分析):最经典的降维方法。本质是计算数据协方差矩阵的特征向量,保留特征值最大的前 k 个方向,丢掉特征值小的方向。特征值大 = 数据在这个方向上变化大 = 包含更多信息。PCA 在人脸识别(Eigenface)、数据可视化(t-SNE 的前置步骤)、特征预处理中广泛使用。sklearn.decomposition.PCA(n_components=50) 一行搞定。
  • 谱聚类(Spectral Clustering):用图的拉普拉斯矩阵的特征向量来做聚类,能处理非凸形状的聚类(K-Means 只能处理球形聚类)。在社交网络分析和图像分割中非常有用。
  • PageRank:Google 最早的搜索算法,本质上是在求一个巨大网页链接矩阵的主特征向量(最大特征值对应的特征向量)。每个网页的 PageRank 值就是主特征向量的对应分量——被重要网页链接越多的网页,PageRank 值越高。
  • 权重矩阵分析:研究人员通过分析神经网络权重矩阵的特征值谱(所有特征值的分布),来判断模型是否过参数化、哪些层可以剪枝、网络是否在训练中出现了”秩崩溃”(rank collapse)。

3.1.5 SVD(奇异值分解):矩阵的”解剖学”

SVD 是线性代数中最强大的工具之一。它说的是:任何矩阵(不要求方阵,不要求满秩)都可以分解成三个矩阵的乘积。

A = U Σ V^T

  • A:原始矩阵(m×n),任意形状,任意内容
  • U:左奇异向量矩阵(m×m),每一列是一个左奇异向量,各列相互正交(互相垂直,长度为 1)
  • Σ:奇异值对角矩阵(m×n),只有主对角线有值,从大到小排列(σ1 ≥ σ2 ≥ … ≥ σr > 0)
  • V^T:右奇异向量矩阵的转置(n×n),每一行是一个右奇异向量,各行相互正交

直觉:SVD 把任意矩阵拆成”旋转(U)× 缩放(Σ)× 旋转(V^T)“。任何矩阵运算都可以理解为这三步:先用 V^T 旋转坐标系,再沿各个轴用 Σ 缩放(奇异值越大,那个方向上的”信息量”越大),最后用 U 旋转回来。就像把一道复杂的菜拆成”食材 × 配方 × 烹饪方法”——三个简单的结构组合起来,能表达任意复杂的矩阵。

在 AI 中的关键应用:

  • LoRA(低秩适配):LoRA 微调(深挖) 会详细讲解。核心思想:大模型的权重矩阵 W(比如 4096×4096,约 1600 万参数)虽然巨大,但它的”有效信息”可以用两个小矩阵 A(4096×r)和 B(r×4096)的乘积来近似,r 通常只有 8 或 16。这就是 SVD 的直觉——只保留最大的几个奇异值对应的分量,丢弃小的。参数从 4096×4096=1600 万降到 4096×8+8×4096=65,536,减少 99.6%。LoRA 在 2026 年已成为微调大模型的标准方法。
  • 推荐系统(矩阵分解推荐):Netflix Prize 的获胜算法。用户-电影评分矩阵(稀疏,大部分为空)→ SVD 分解 → 得到用户偏好向量和电影特征向量 → 预测未评分的电影。用户的第 i 个偏好特征 × 电影的第 i 个特征 = 用户对电影这个特征的评分。这是协同过滤的数学核心。
  • 数据压缩:一张 1000×1000 的灰度图片,用 SVD 保留前 50 个奇异值,数据量从 100 万个数值降到约 10 万个(50×(1000+1000+1)),但图像质量几乎不变。这就是有损压缩的数学原理,也是 JPEG 压缩的思想基础。
  • 语义分析(LSA, Latent Semantic Analysis):词-文档矩阵(每行是词,每列是文档,值是 TF-IDF)→ SVD → 降维后的词向量和文档向量。这是最早的词嵌入方法之一,Word2Vec 和 BERT 的前身。LSA 能自动发现”car”和”automobile”的向量很近,即使它们从未在同一文档中出现。

2026 年:你不需要手算,但需要理解概念。 NumPy 的 numpy.linalg.svd(A) 一行搞定。LoRA 库(如 HuggingFace PEFT)自动处理了 SVD 的底层细节。但当你看到论文里写”我们使用秩 r=16 的 LoRA”时,你需要理解:r 越小,节省的参数量越大,但模型能表达的适应性越弱——这是在效率和效果之间的权衡。r=8 到 r=64 是常见的经验范围。


← 上一节:章首 | 下一节:3.2 概率统计:理解不确定性 →

关联7

知识图谱

局部图谱 · 点节点跳转