跳到主要内容

线性代数基础

线性代数是人工智能和机器学习的数学语言。神经网络的前向传播是一系列矩阵乘法,注意力机制是向量点积的集合,Embedding 空间是高维向量空间中的几何结构。没有线性代数的直觉,就无法真正理解深度学习模型的工作原理。

向量与矩阵

向量(Vector)

向量是有序的数字列表,可以理解为 n 维空间中的一个点或方向:

列向量(Column Vector):
x = [x₁]
[x₂]
[x₃]

行向量(Row Vector):
xᵀ = [x₁, x₂, x₃]

在 AI 中,向量无处不在:

  • 词向量(Word Embedding):每个词被表示为 768 维或 1536 维的实值向量,捕捉语义关系
  • 图像特征向量:CNN 最后一层的特征图展平后得到的向量,表示图像的高层语义
  • 用户/物品向量:推荐系统中,用户偏好和物品特征各用一个向量表示

矩阵(Matrix)

矩阵是二维的数字数组,形状记为 m×n(m 行 n 列):

# NumPy 示例
import numpy as np
A = np.array([[1, 2, 3],
[4, 5, 6]]) # 形状 2×3

矩阵的核心运算:

  • 加法:同形状矩阵对应元素相加,(A+B)ᵢⱼ = Aᵢⱼ + Bᵢⱼ
  • 标量乘法:每个元素乘以标量 c,(cA)ᵢⱼ = c·Aᵢⱼ
  • 转置:行列互换,(Aᵀ)ᵢⱼ = Aⱼᵢ,形状从 m×n 变为 n×m

矩阵乘法——深度学习的核心操作

维度规则

矩阵乘法 C = A × B 要求 A 的列数等于 B 的行数:

A: (m×k)  ×  B: (k×n)  →  C: (m×n)

C[i,j] = Σₖ A[i,k] · B[k,j] (第 i 行与第 j 列的点积)

维度检查是调试神经网络的关键技能

# 神经网络线性层示例
X = np.random.randn(32, 784) # 批次 32,输入维度 784(MNIST 展平)
W = np.random.randn(784, 256) # 权重矩阵
b = np.zeros(256) # 偏置向量

# 前向传播:(32, 784) × (784, 256) → (32, 256)
output = X @ W + b

批量矩阵乘法(Batch Matrix Multiply)

深度学习框架中常见的批量操作:

# PyTorch 中的 bmm
# 输入形状:(batch, seq_len, d_model)
Q = torch.randn(8, 512, 64) # 8个样本,512个token,64维
K = torch.randn(8, 512, 64)
# 注意力分数:(8, 512, 512)
scores = torch.bmm(Q, K.transpose(-2, -1))

点积与相似度

向量点积(Dot Product)衡量两个向量的相似程度:

a · b = Σᵢ aᵢbᵢ = |a| · |b| · cos(θ)
  • 当 θ=0(方向相同)时,cos(θ)=1,点积最大(最相似)
  • 当 θ=90°(正交)时,cos(θ)=0,点积为零(无关)
  • 当 θ=180°(方向相反)时,cos(θ)=-1(最不相似)

余弦相似度在 AI 中的应用:

def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

# 词向量相似度
king = word_vectors["king"] # 形状 (300,)
queen = word_vectors["queen"] # 形状 (300,)
sim = cosine_similarity(king, queen) # 接近 1.0

Word2Vec 的著名类比:king - man + woman ≈ queen 正是在向量空间中做算术。

特征值与特征向量

直觉理解

对于方阵 A,如果存在非零向量 v 使得 Av = λv,则 λ 为特征值,v 为对应的特征向量。

直觉:矩阵 A 作用于特征向量时,只改变其长度(缩放因子 λ),不改变方向。这揭示了矩阵变换的"固有方向"。

import numpy as np
A = np.array([[4, 1],
[2, 3]])
eigenvalues, eigenvectors = np.linalg.eig(A)
print("特征值:", eigenvalues) # [5., 2.]

在 AI 中的应用

  • PCA 降维:协方差矩阵的特征向量指向数据方差最大的方向(主成分)
  • 图神经网络:图拉普拉斯矩阵的特征分解用于谱图卷积
  • 稳定性分析:Hessian 矩阵的特征值用于分析优化景观(鞍点检测)

奇异值分解(SVD)

SVD 是线性代数中最强大的分解之一,将任意矩阵分解为三个特殊矩阵的乘积:

A = U Σ Vᵀ

其中:
- U: m×m 正交矩阵(左奇异向量)
- Σ: m×n 对角矩阵(奇异值,按降序排列)
- V: n×n 正交矩阵(右奇异向量)

应用一:图像压缩

from PIL import Image
import numpy as np

img = np.array(Image.open("photo.jpg").convert("L")) # 灰度图,(M, N)
U, S, Vt = np.linalg.svd(img, full_matrices=False)

# 只保留前 k 个奇异值实现压缩
k = 50
img_compressed = U[:, :k] @ np.diag(S[:k]) @ Vt[:k, :]
# k=50 时,通常保留 90%+ 的视觉质量,但存储量大幅压缩

应用二:推荐系统(矩阵分解)

用户-物品评分矩阵 R(用户×电影)通常极度稀疏,SVD(或其变体 ALS、FunkSVD)将其分解为:

R ≈ U × Σ × Vᵀ

- U 的每行:用户的"隐因子"表示(对不同类型电影的偏好)
- V 的每行:电影的"隐因子"表示(属于哪些类型)
- 点积 U[user] · V[item] 预测评分

应用三:Transformer 中的低秩分解

LoRA(Low-Rank Adaptation)技术将大型权重矩阵的更新分解为两个低秩矩阵的乘积:

ΔW = B × A,其中 rank(ΔW) = r << min(m, n)

这使得微调大模型所需的可训练参数量从数十亿降至数百万。

在 AI 中的具体应用总结

权重矩阵(Neural Network Weights)

神经网络的每一层本质上是一个矩阵变换:

# 全连接层
class Linear:
def __init__(self, in_features, out_features):
self.W = np.random.randn(in_features, out_features) * 0.01
self.b = np.zeros(out_features)

def forward(self, x):
return x @ self.W + self.b # 矩阵乘法 + 广播加法

Embedding 空间的几何结构

Transformer 中的词嵌入矩阵是一个 (vocab_size, d_model) 的矩阵。每个词对应一行向量,语义相似的词在高维空间中距离更近。注意力机制中的 Q, K, V 投影矩阵进一步将词向量映射到不同的子空间。

多头注意力计算

Attention(Q, K, V) = softmax(QKᵀ / √dₖ) × V

维度分析(以 GPT-2 为例):
- Q, K, V 形状:(batch, heads, seq_len, head_dim)
- QKᵀ 形状:(batch, heads, seq_len, seq_len) ← 注意力分数矩阵
- 输出形状:(batch, heads, seq_len, head_dim)

线性代数的直觉理解:注意力机制是在用 Q(查询)与所有 K(键)做内积,找到最相关的位置,然后按相关性加权求和 V(值)——本质是加权矩阵乘法。