线性代数与矩阵运算:向量、矩阵、特征值、SVD 在 AI 中的全面应用
本文属于 AI 学习路线系列 第 1 篇,系统梳理线性代数核心知识点及其在人工智能中的实际应用。
前言
深度学习的每一次前向传播,本质上都是一连串矩阵乘法。从 ResNet 到 GPT-4,从推荐系统到自动驾驶,线性代数是 AI 最底层的"操作系统"。
2025-2026 年,线性代数在 AI 领域的重要性更是被推向新高度------中科院团队发布的 Swift-SVD 技术让大模型压缩速度提升数倍,LoRA 的低秩分解思想在微调领域大放异彩。理解线性代数,已经不仅仅是"打好基础",更是理解前沿技术的直接钥匙。
本文将从向量 出发,逐步讲解矩阵运算 、特征值分解 、SVD,并结合代码实例和最新行业动态,让你真正看懂 AI 在做什么。
一、向量与向量空间
1.1 什么是向量
向量(Vector) 是 n 维空间中的一个有向线段:
v⃗=[v1,v2,...,vn]T∈Rn\vec{v} = [v_1, v_2, \dots, v_n]^T \in \mathbb{R}^nv =[v1,v2,...,vn]T∈Rn
在 AI 中,几乎所有数据最终都变成了向量:
- 文本 → 通过 Embedding 层映射为稠密向量(如
transformer输出 768 维向量) - 图像 → 展平为像素向量(如
28 × 28的 MNIST 手写数字变为 784 维向量) - 用户行为 → 特征向量(年龄、消费频率、点击历史等)
- 音频 → 声谱图采样后的时频向量
向量就是 AI 处理信息的"原子单元"。
1.2 向量运算与几何直觉
python
import numpy as np
# 定义两个向量
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 向量加法 --- 平移
print("a + b =", a + b) # [5, 7, 9]
# 数乘 --- 缩放
print("2a =", 2 * a) # [2, 4, 6]
# 点积(内积)--- 衡量相似度
dot = np.dot(a, b) # 1*4 + 2*5 + 3*6 = 32
print("a · b =", dot)
# 向量模长
norm_a = np.linalg.norm(a)
print("|a| =", norm_a) # √(1+4+9) ≈ 3.74
# 余弦相似度 --- AI 检索系统的核心度量
cos_sim = dot / (np.linalg.norm(a) * np.linalg.norm(b))
print("cos(a, b) =", round(cos_sim, 4)) # ≈ 0.9746
点积的物理含义:点积越大,两个向量方向越一致。这正是向量检索和语义匹配的数学基础。
1.3 向量空间与基底
向量空间由一组基向量张成。在 AI 中最常见的概念:
- 特征空间:每个维度对应一个特征
- 潜空间(Latent Space):GPT、Stable Diffusion 等生成模型输出的隐向量
- 词向量空间 :Word2Vec、GloVe 构建的语义空间,
king - man + woman ≈ queen
二、矩阵:线性变换的语言
2.1 矩阵的基本定义
矩阵(Matrix) 是 m 行 n 列的数表:
A∈Rm×n=[a11a12⋯a1na21a22⋯a2n⋮⋮⋱⋮am1am2⋯amn]A \in \mathbb{R}^{m \times n} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix}A∈Rm×n= a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amn
2.2 矩阵乘法 = 线性变换
矩阵乘法 C=ABC = ABC=AB 可以理解为"先做 A 变换,再做 B 变换":
Cij=∑k=1nAik⋅BkjC_{ij} = \sum_{k=1}^{n} A_{ik} \cdot B_{kj}Cij=k=1∑nAik⋅Bkj
python
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = A @ B # 矩阵乘法(推荐用 @ 而非 np.matmul 或 *)
print("C =\n", C)
# [[19 22]
# [43 50]]
2.3 神经网络中的矩阵
全连接层的前向传播:
y=Wx+by = Wx + by=Wx+b
| 符号 | 形状 | 含义 |
|---|---|---|
| WWW | Rdout×din\mathbb{R}^{d_{out} \times d_{in}}Rdout×din | 权重矩阵 |
| xxx | Rdin\mathbb{R}^{d_{in}}Rdin | 输入向量 |
| bbb | Rdout\mathbb{R}^{d_{out}}Rdout | 偏置向量 |
| yyy | Rdout\mathbb{R}^{d_{out}}Rdout | 输出向量 |
一次矩阵乘法就完成了整层神经网络的计算。 GPT-4 有数百层这样的矩阵乘法。
python
# 模拟一个全连接层
import torch
import torch.nn as nn
layer = nn.Linear(in_features=768, out_features=256)
x = torch.randn(32, 768) # batch_size=32, 每个样本768维
y = layer(x)
print(y.shape) # torch.Size([32, 256])
2.4 特殊矩阵
| 矩阵类型 | 定义 | AI 应用 |
|---|---|---|
| 单位矩阵 III | Iii=1I_{ii} = 1Iii=1,其余为 0 | 恒等变换、残差连接 |
| 对角矩阵 | 仅对角线非零 | 注意力权重、奇异值矩阵 |
| 正交矩阵 | QTQ=IQ^TQ = IQTQ=I | 正交初始化、GRU 门控 |
| 对称矩阵 | A=ATA = A^TA=AT | 协方差矩阵、相似度矩阵 |
三、特征值与特征向量
3.1 定义与计算
特征方程:
Av⃗=λv⃗A\vec{v} = \lambda \vec{v}Av =λv
其中 λ\lambdaλ 是特征值 ,v⃗\vec{v}v 是对应的特征向量。
几何含义:矩阵 AAA 作用在特征向量 v⃗\vec{v}v 上,只改变其长度(缩放 λ\lambdaλ 倍),不改变方向。
3.2 特征值分解
A=QΛQ−1A = Q \Lambda Q^{-1}A=QΛQ−1
- QQQ:特征向量组成的正交矩阵
- Λ\LambdaΛ:特征值组成的对角矩阵
前提条件 :AAA 必须是方阵,且具有 nnn 个线性无关的特征向量。
3.3 PCA:特征值分解的"招牌应用"
主成分分析(PCA)本质上是找数据协方差矩阵的特征值和特征向量:
Cov(X)=1n−1XTX\text{Cov}(X) = \frac{1}{n-1} X^T XCov(X)=n−11XTX
最大的 kkk 个特征值对应的特征向量,就是数据最重要的 kkk 个主成分。
python
import numpy as np
from sklearn.decomposition import PCA
from sklearn.datasets import load_digits
# 加载手写数字数据集
X, y = load_digits(return_X_y=True) # 64维特征
# PCA 降到 2 维(用于可视化)
pca = PCA(n_components=2)
X_2d = pca.fit_transform(X)
print(f"解释方差比例: {pca.explained_variance_ratio_}")
# ≈ [0.149, 0.136] 前两个主成分解释了约 28.5% 的方差
# 手动实现 PCA(理解本质)
X_centered = X - X.mean(axis=0)
cov_matrix = np.cov(X_centered, rowvar=False)
eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix)
# 取最大的 k 个(注意 eigh 返回的是升序)
top_k = 2
idx = np.argsort(eigenvalues)[::-1][:top_k]
W = eigenvectors[:, idx]
X_pca_manual = X_centered @ W # 投影到主成分空间
3.4 PageRank 与图神经网络
Google 最初的 PageRank 算法也是特征值分解的应用:
r⃗=Mr⃗\vec{r} = M\vec{r}r =Mr
其中 MMM 是网页之间的转移概率矩阵,r⃗\vec{r}r 的稳态值就是各网页的排名分数。图神经网络(GNN)中的消息传递本质上也是类似的邻接矩阵乘法。
四、奇异值分解(SVD):线性代数的"瑞士军刀"
4.1 定义
任意 矩阵 A∈Rm×nA \in \mathbb{R}^{m \times n}A∈Rm×n 都可以做 SVD 分解(不需要是方阵!):
A=UΣVTA = U \Sigma V^TA=UΣVT
| 分量 | 形状 | 含义 |
|---|---|---|
| UUU | Rm×m\mathbb{R}^{m \times m}Rm×m | 左奇异向量(行空间正交基) |
| Σ\SigmaΣ | Rm×n\mathbb{R}^{m \times n}Rm×n | 对角矩阵,对角线是奇异值 σ1≥σ2≥⋯≥0\sigma_1 \geq \sigma_2 \geq \cdots \geq 0σ1≥σ2≥⋯≥0 |
| VVV | Rn×n\mathbb{R}^{n \times n}Rn×n | 右奇异向量(列空间正交基) |
几何直觉:任何线性变换都可以分解为"旋转 → 缩放 → 旋转"三步。
4.2 与特征值分解的关系
ATA=VΣ2VTA^TA = V\Sigma^2V^TATA=VΣ2VT
即 ATAA^TAATA 的特征值就是 AAA 的奇异值的平方,特征向量就是 VVV。
python
import numpy as np
# 构造一个 3×2 的矩阵
A = np.array([[1, 2],
[3, 4],
[5, 6]])
# SVD 分解
U, s, Vt = np.linalg.svd(A, full_matrices=True)
print("U shape:", U.shape) # (3, 3)
print("s =", s) # [9.525, 0.514]
print("Vt shape:", Vt.shape) # (2, 2)
# 截断 SVD(低秩近似)--- 只保留最大的 k 个奇异值
k = 1
A_k = U[:, :k] @ np.diag(s[:k]) @ Vt[:k, :]
print(f"\n原始矩阵 A:\n{A}")
print(f"\n{k} 阶近似 A_{k}:\n{np.round(A_k, 2)}")
4.3 SVD 在 AI 中的五大应用
应用一:低秩近似与数据压缩
保留最大的 kkk 个奇异值,丢弃其余的,就能在极小误差内重建原始矩阵。
Ak=∑i=1kσiu⃗iv⃗iTA_k = \sum_{i=1}^{k} \sigma_i \vec{u}_i \vec{v}_i^TAk=i=1∑kσiu iv iT
Eckart-Young 定理保证了这是最优的秩-kkk 近似。
python
import numpy as np
from skimage import data
import matplotlib.pyplot as plt
# 使用 skimage 自带的图片
image = data.camera() # 512×512 灰度图
# 对图像做 SVD 压缩
U, s, Vt = np.linalg.svd(image, full_matrices=False)
for k in [10, 50, 100, 200]:
img_k = U[:, :k] @ np.diag(s[:k]) @ Vt[:k, :]
print(f"k={k:3d} → 奇异值占比 {sum(s[:k])/sum(s)*100:.1f}%, "
f"存储压缩比 {512*512/(k*(512+512+1)):.0f}:1")
# k=10 → 奇异值占比 73.9%, 压缩比 25:1
# k=50 → 奇异值占比 93.5%, 压缩比 5:1
# k=100 → 奇异值占比 97.8%, 压缩比 2:1
# k=200 → 奇异值占比 99.5%, 压缩比 1:1
应用二:推荐系统(矩阵分解)
Netflix 早期推荐算法的核心就是 SVD 矩阵分解:
- 用户-物品评分矩阵 RRR 规模巨大但稀疏
- SVD 将其分解为用户隐因子矩阵 UUU 和物品隐因子矩阵 VTV^TVT
- 预测用户对未看电影的评分:R^=UkΣkVkT\hat{R} = U_k \Sigma_k V_k^TR^=UkΣkVkT
python
import numpy as np
# 简化示例:5 个用户对 4 部电影的评分矩阵(-1 表示未评分)
R = np.array([
[5, 4, -1, 1],
[4, -1, -1, 2],
[1, 1, 5, 4],
[-1, 1, 5, -1],
[2, 2, 4, 5],
], dtype=float)
# 填充缺失值为 0
R_filled = np.nan_to_num(R, nan=0.0)
# SVD 分解
U, s, Vt = np.linalg.svd(R_filled, full_matrices=False)
k = 2
R_pred = U[:, :k] @ np.diag(s[:k]) @ Vt[:k, :]
print("原始评分矩阵:")
print(R)
print("\nSVD 预测评分矩阵:")
print(np.round(R_pred, 1))
应用三:LoRA 低秩微调(2025-2026 热门技术)
LoRA(Low-Rank Adaptation) 是当前最热门的大模型微调技术,核心思想直接来自 SVD:
Wnew=W0+ΔW=W0+BAW_{new} = W_0 + \Delta W = W_0 + BAWnew=W0+ΔW=W0+BA
其中:
- W0∈Rd×dW_0 \in \mathbb{R}^{d \times d}W0∈Rd×d:预训练权重(冻结不训练)
- B∈Rd×rB \in \mathbb{R}^{d \times r}B∈Rd×r,A∈Rr×dA \in \mathbb{R}^{r \times d}A∈Rr×d:低秩分解矩阵,r≪dr \ll dr≪d
- 当 r=8r = 8r=8,d=4096d = 4096d=4096 时,参数量减少 99.96%
python
import torch
import torch.nn as nn
class LoRALayer(nn.Module):
"""LoRA 低秩适配层"""
def __init__(self, original_layer: nn.Linear, rank: int = 8, alpha: int = 16):
super().__init__()
self.original = original_layer
d_in, d_out = original_layer.in_features, original_layer.out_features
# 冻结原始权重
original_layer.weight.requires_grad_(False)
# 低秩分解矩阵
self.lora_A = nn.Parameter(torch.randn(rank, d_in) * 0.01)
self.lora_B = nn.Parameter(torch.zeros(d_out, rank))
self.scaling = alpha / rank
def forward(self, x):
# 原始输出 + LoRA 低秩修正
return self.original(x) + (x @ self.lora_A.T @ self.lora_B.T) * self.scaling
# 使用示例
original_layer = nn.Linear(768, 768)
lora_layer = LoRALayer(original_layer, rank=8)
print(f"原始参数量: {original_layer.weight.numel():,}")
print(f"LoRA 参数量: {lora_layer.lora_A.numel() + lora_layer.lora_B.numel():,}")
print(f"参数减少: {(1 - 12288 / 589824) * 100:.2f}%")
# 参数减少: 97.92%
为什么 LoRA 有效? 因为模型权重更新 ΔW\Delta WΔW 的"有效秩"通常很低------模型不需要改变所有维度,只需调整少量关键方向即可适配新任务。
应用四:自然语言处理中的 LSA
潜在语义分析(LSA)用 SVD 对词-文档矩阵分解,提取潜在语义:
- 行:词汇,列:文档
- SVD 后的低维空间中,语义相近的词会聚集在一起
- 是 Word2Vec 之前的主流方法,至今仍用于主题建模
python
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import TruncatedSVD
documents = [
"机器学习是人工智能的核心技术",
"深度学习推动了计算机视觉的发展",
"自然语言处理让计算机理解人类语言",
"线性代数是机器学习的数学基础",
"矩阵分解在推荐系统中广泛应用",
]
# 构建词-文档矩阵
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)
# 用截断 SVD(LSA)
svd = TruncatedSVD(n_components=2, random_state=42)
X_reduced = svd.fit_transform(X)
for i, doc in enumerate(documents):
print(f"文档{i}: [{X_reduced[i, 0]:.3f}, {X_reduced[i, 1]:.3f}]")
应用五:🆕 Swift-SVD --- 2026 年大模型压缩前沿
2026 年 4 月 ,中科院与中国电信人工智能研究院联合发布了 Swift-SVD 技术,这是一项革命性的大语言模型压缩方法。
传统的大模型 SVD 压缩需要逐层分解再重组,流程耗时且计算量大。Swift-SVD 的核心突破:
- "一次计算,全面优化":通过巧妙的数学算法,将多步 SVD 操作融合为单次矩阵分解
- 速度提升数倍:在保持模型智能水平(精度几乎无损)的同时,大幅加快压缩速度
- 适用范围广:支持 LLaMA、Qwen、Mistral 等主流开源大模型
Swift-SVD 的出现再次印证了 SVD 是大模型时代的核心数学工具。
五、范数:衡量向量"大小"的标尺
5.1 常用范数
| 范数 | 公式 | 名称 | AI 应用 |
|---|---|---|---|
| L0L_0L0 | ∣x∣0=#{xi≠0}|x|_0 = \#\{x_i \neq 0\}∣x∣0=#{xi=0} | 非零元素个数 | 稀疏表示 |
| L1L_1L1 | ∣x∣1=∑i∣xi∣|x|_1 = \sum_i |x_i|∣x∣1=∑i∣xi∣ | 曼哈顿距离 | Lasso 正则化(产生稀疏解) |
| L2L_2L2 | ∣x∣2=∑ixi2|x|_2 = \sqrt{\sum_i x_i^2}∣x∣2=∑ixi2 | 欧氏距离 | Ridge 正则化、梯度裁剪 |
| L∞L_\inftyL∞ | ∣x∣∞=maxi∣xi∣|x|_\infty = \max_i |x_i|∣x∣∞=maxi∣xi∣ | 最大绝对值 | 数值稳定性检查 |
5.2 正则化的数学本质
Lasso: minW∥y−XW∥22+λ∥W∥1⇒稀疏\text{Lasso: } \min_W \|y - XW\|_2^2 + \lambda \|W\|_1 \quad \Rightarrow \text{稀疏}Lasso: Wmin∥y−XW∥22+λ∥W∥1⇒稀疏
Ridge: minW∥y−XW∥22+λ∥W∥22⇒平滑\text{Ridge: } \min_W \|y - XW\|_2^2 + \lambda \|W\|_2^2 \quad \Rightarrow \text{平滑}Ridge: Wmin∥y−XW∥22+λ∥W∥22⇒平滑
python
import numpy as np
# 范数计算
x = np.array([3, 4, 0, -2, 1])
print("L0 范数(非零元素):", np.count_nonzero(x)) # 4
print("L1 范数(曼哈顿) :", np.linalg.norm(x, ord=1)) # 10
print("L2 范数(欧氏) :", np.linalg.norm(x, ord=2)) # ≈ 5.39
print("L∞ 范数(最大值) :", np.linalg.norm(x, ord=np.inf)) # 4
# Frobenius 范数(矩阵的 L2 范数)
A = np.array([[1, 2], [3, 4]])
print("Frobenius 范数:", np.linalg.norm(A, 'fro')) # ≈ 5.48
六、矩阵行列式与逆
6.1 行列式
行列式 ∣A∣|A|∣A∣ 或 det(A)\det(A)det(A) 衡量矩阵变换对空间体积的缩放比例:
det(A)=∑σsgn(σ)∏iai,σ(i)\det(A) = \sum_{\sigma} \text{sgn}(\sigma) \prod_i a_{i, \sigma(i)}det(A)=σ∑sgn(σ)i∏ai,σ(i)
- det(A)=0\det(A) = 0det(A)=0 → 矩阵奇异(不可逆),某些信息在变换中丢失
- det(A)≠0\det(A) \neq 0det(A)=0 → 矩阵非奇异(可逆)
6.2 逆矩阵
A−1A=AA−1=IA^{-1}A = AA^{-1} = IA−1A=AA−1=I
在 AI 中的应用:
- 线性方程组求解 :Ax=b⇒x=A−1bAx = b \Rightarrow x = A^{-1}bAx=b⇒x=A−1b(但实际用高斯消元更高效)
- 牛顿法优化 :xk+1=xk−H−1gx_{k+1} = x_k - H^{-1}gxk+1=xk−H−1g(H 为 Hessian 矩阵)
python
A = np.array([[1, 2], [3, 4]])
print("行列式:", np.linalg.det(A)) # -2.0
A_inv = np.linalg.inv(A)
print("逆矩阵:\n", A_inv)
print("验证 A @ A⁻¹:\n", np.round(A @ A_inv, 10))
# [[1. 0.]
# [0. 1.]]
七、总结:线性代数 × AI 核心对照表
| 线性代数概念 | AI 中的角色 | 代表应用 |
|---|---|---|
| 向量 | 数据的"原子表示" | Embedding、特征向量 |
| 矩阵乘法 | 神经网络前向传播 | 全连接层、Attention |
| 特征值分解 | 信息压缩与排序 | PCA 降维、PageRank |
| SVD | 万能低秩近似 | LoRA 微调、推荐系统、Swift-SVD |
| 范数 | 约束与度量 | 正则化、梯度裁剪 |
| 行列式 | 可逆性与信息保留 | Hessian 判断、矩阵求逆 |
| 正交矩阵 | 保持结构不变 | 正交初始化、Gram-Schmidt |
本文属于 AI 学习路线系列文章,从数学基础到前沿技术,系统构建你的 AI 知识体系。关注专栏获取后续更新。