线性代数与矩阵运算:向量、矩阵、特征值、SVD 在 AI 中的全面应用

线性代数与矩阵运算:向量、矩阵、特征值、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 的核心突破:

  1. "一次计算,全面优化":通过巧妙的数学算法,将多步 SVD 操作融合为单次矩阵分解
  2. 速度提升数倍:在保持模型智能水平(精度几乎无损)的同时,大幅加快压缩速度
  3. 适用范围广:支持 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∣∞=max⁡i∣xi∣|x|_\infty = \max_i |x_i|∣x∣∞=maxi∣xi∣ 最大绝对值 数值稳定性检查

5.2 正则化的数学本质

Lasso: min⁡W∥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: min⁡W∥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 知识体系。关注专栏获取后续更新。

相关推荐
前端技术2 小时前
[特殊字符]️ Spring AI Alibaba Advisor基础应用
java·人工智能·spring
实在智能RPA2 小时前
电商运营自动化AI工具有哪些?哪个最好用?——2026年全链路智能体选型深度指南
大数据·人工智能·ai·自动化
刘佬GEO2 小时前
没时间写内容还能做 GEO:方法、流程与可操作方案
大数据·网络·人工智能·搜索引擎·ai
星速云2 小时前
开源AI工具生态全景:20+工具如何对接统一API网关
人工智能·gpt·开源·api·claude
今日说"法"2 小时前
线性代数与矩阵运算:AI 背后的数学基石
人工智能·线性代数·矩阵
X journey2 小时前
机器学习实践(18.5):特征工程补充
人工智能·算法·机器学习
北鹤M2 小时前
2026实测:17款降重降AI工具横评降重鸟登顶
人工智能
IT_陈寒2 小时前
Python的GIL把我CPU跑满时我才明白并发不是这样玩的
前端·人工智能·后端
wanghowie2 小时前
21.AI运营助手整体架构设计:Multi-Agent + 语义层 + 数据系统
人工智能