Series · ML Math Derivations · Chapter 2

机器学习数学推导(二):线性代数与矩阵论

机器学习的语言是线性代数。本文从第一性原理推导向量空间、特征值分解、SVD 与矩阵求导——ML 优化所需的全部工具。

这一章为什么写、和别处有什么不同

如果你上过一门标准的线性代数课,本文里的对象你大多见过。但本文不是那门课。 它是「机器学习视角下的线性代数」——梯度下降、PCA、神经网络训练、读论文时真正会反复用到的那六七个想法。

具体来说,本章想做三件事:

  1. 给矩阵建立几何直觉:旋转、拉伸、投影、压扁。
  2. 把四个真正常用的分解讲清楚——谱分解、SVD、QR、Cholesky——并告诉你什么时候用哪一个
  3. 矩阵求导讲到能在草稿纸上推出任何神经网络梯度的程度。

我们刻意略过行简化、按余子式展开的行列式、以及向量空间的抽象证明。如果需要那些内容,文末参考文献给出了标准教材。这里,每一个概念最终都会落到一张图,或一行 NumPy 上。

先修要求: 矩阵乘法、转置、行列式的概念、偏导数。


1. 向量空间、子空间、秩——几何核心

先把八条公理放一边。机器学习里真正用得上的心智模型是:

向量空间是一张过原点的、无限延伸的「平片」。子空间是套在它里面的、更小的过原点的平片。

$\mathbb{R}^2$ 中过原点的一条直线是 1 维子空间;$\mathbb{R}^3$ 中过原点的一个平面是 2 维子空间。关键的两个字是「过原点」——一旦平片被平移开,加法和数乘就不再封闭了。

R^3 中的一个二维子空间

1.1 张成、线性无关、基——一口气讲完

挑几个向量 $v_1, \ldots, v_k$。它们所有线性组合 $\sum \alpha_i v_i$ 的集合叫做张成 (span)——它总是一个子空间。

它们线性无关当且仅当谁都不在其他人的张成里,等价于:

$$\alpha_1 v_1 + \cdots + \alpha_k v_k = 0 \;\implies\; \alpha_1 = \cdots = \alpha_k = 0. \tag{1}$$

= 线性无关的张成集;基的大小就是子空间的维数

线性无关 vs 线性相关

图就是全部故事:无关的向量围出非退化的平行四边形(面积大于零,确实张成 2 维);相关的向量躺在一条直线上,平行四边形塌掉。

1.2 矩阵 就是 线性映射

每一个矩阵 $A \in \mathbb{R}^{m \times n}$ 等同于一个线性映射 $T : \mathbb{R}^n \to \mathbb{R}^m$,反之亦然。两者之间只有一条对照:

$A$ 的第 $j$ 列就是 $T(e_j)$——第 $j$ 个标准基向量被映到的位置。

所以当你看到神经网络一层里的权重矩阵 $W \in \mathbb{R}^{h \times d}$,本质上就是一个函数:「输入 $d$ 维,输出 $h$ 维」;$W$ 的每一列告诉你某个输入特征对输出贡献什么。

1.3 秩与四个基本子空间

对秩为 $r$ 的 $m \times n$ 矩阵 $A$:

子空间定义处于维数直观含义
列空间 $\text{Col}(A)$$\{Ax : x \in \mathbb{R}^n\}$$\mathbb{R}^m$$r$输出能到达哪里
零空间 $\text{Null}(A)$$\{x : A x = 0\}$$\mathbb{R}^n$$n-r$哪些输入被压扁掉
行空间 $\text{Row}(A)$$\text{Col}(A^\top)$$\mathbb{R}^n$$r$$A$「真正看到」的输入
左零空间$\{y : A^\top y = 0\}$$\mathbb{R}^m$$m-r$哪些输出永远到不了

正交性(基本定理)。 $\text{Null}(A) \perp \text{Row}(A)$。

证明。 若 $Ax = 0$,行空间中任一向量形如 $w = A^\top z$,则 $\langle x, w\rangle = z^\top (Ax) = 0$。$\square$

所以 $\mathbb{R}^n$ 被劈成两块正交的子空间:行空间($A$ 在这里干活)和零空间($A$ 在这里抹掉信息)。只要模型的参数比方程多——这在现代 ML 里几乎总是成立——零空间就非平凡,就有许多不同的参数向量给出完全相同的预测。


2. 范数与内积——几何层

内积 $\langle \cdot, \cdot\rangle$ 给你「夹角」;范数 $\|\cdot\|$ 给你「长度」。$\mathbb{R}^n$ 上的标准内积是 $\langle x, y\rangle = x^\top y$,诱导出 $\|x\|_2 = \sqrt{x^\top x}$。

正则化里的常用主力是 $\ell_p$ 范数族

范数公式单位球ML 用途
$\ell_1$$\sum_ix_i$
$\ell_2$$\sqrt{\sum_i x_i^2}$圆 / 球Ridge、权重衰减
$\ell_\infty$$\max_ix_i$

2.1 Cauchy-Schwarz 与余弦

定理(Cauchy-Schwarz)。 $|\langle u, v\rangle| \le \|u\| \cdot \|v\|$,等号成立当且仅当 $u, v$ 共线。

证明。 二次式 $\|u + tv\|^2 = \|u\|^2 + 2t\langle u, v\rangle + t^2\|v\|^2$ 对所有 $t$ 都非负,故判别式 $\le 0$。$\square$

两边除以 $\|u\|\|v\|$ 就得到夹角余弦 $\cos\theta = \langle u, v\rangle / (\|u\|\|v\|)$,并自然解释了为什么它落在 $[-1, 1]$ 之间。检索系统中的 cosine similarity、注意力机制、对比学习——背后都是这条不等式。

2.2 真正会用到的矩阵范数

范数公式衡量什么
Frobenius $\|A\|_F$$\sqrt{\sum_{ij} a_{ij}^2}$把 $A$ 当向量后的「欧氏长度」
谱范数 $\|A\|_2$$\sigma_1(A)$在所有单位输入上能产生的最大拉伸
核范数 $\|A\|_*$$\sum_i \sigma_i(A)$$\text{rank}(A)$ 的凸替代

谱范数是 Lipschitz 分析的正确选择(例如 GAN 中的 spectral normalization);核范数是低秩矩阵补全(Netflix 那一类问题)真正最小化的目标。


3. 特征值分解——「能在变换中保留方向的那些向量」

3.1 定义和直觉

非零向量 $v$ 是 $A \in \mathbb{R}^{n \times n}$ 的特征向量,对应特征值 $\lambda$,当且仅当:

$$Av = \lambda v. \tag{2}$$

几何上:$A$ 一般会把输入旋转一下,但沿特征向量方向 $A$ 只是把它放大或缩小。特征向量的方向在变换中得以保留。

特征分解:能存活下来的方向

特征值满足特征多项式 $\det(A - \lambda I) = 0$。两条免费等式:

  • $\sum_i \lambda_i = \operatorname{tr}(A)$
  • $\prod_i \lambda_i = \det(A)$

3.2 谱定理(每天都会用到的那一条)

定理。 若 $A$ 是实对称矩阵($A = A^\top$),则:

  1. 所有特征值都是实数;
  2. 不同特征值对应的特征向量正交;
  3. $A$ 可被正交对角化:$A = Q \Lambda Q^\top$,其中 $Q^\top Q = I$,$\Lambda$ 对角。

证明思路(特征值是实的)。 取 $Av = \lambda v$,$v \neq 0$。用两种方式计算 $\bar v^\top A v$,并利用 $A = A^\top$,得 $\lambda = \bar\lambda$。$\square$

写成秩 1 形式

$$A = \sum_{i=1}^n \lambda_i\, q_i q_i^\top. \tag{3}$$

仔细看这个式子——$A$ 字面上就是一组沿正交方向的投影,按特征值加权求和。这就是 ML 里看待对称矩阵的标准镜头:协方差矩阵、Gram 矩阵、Hessian、图 Laplacian——全部如此。

3.3 正定与半正定矩阵

对称矩阵 $A$ 被称为正定($A \succ 0$),当对所有 $x \neq 0$,$x^\top A x > 0$。等价表述是:所有特征值都为正。把 $> 0$ 改为 $\ge 0$ 就是半正定($A \succeq 0$)。

正定矩阵 = 一个碗

几何含义:$\{x : x^\top A x = 1\}$ 是一个椭球,主轴沿特征向量方向,半轴长为 $1/\sqrt{\lambda_i}$。一旦某个特征值变负,就成了双曲面(鞍面),没有最小值。这就是凸优化坚持要求 Hessian 正定的原因。

正定矩阵在 ML 中无处不在:

  • 协方差 $\Sigma = \mathbb{E}[(x - \mu)(x - \mu)^\top]$ 总是半正定。
  • Gram 矩阵 $X^\top X$ 半正定;当 $X$ 列无关时正定。
  • 核函数必须半正定(Mercer 定理),否则你无法在任何特征空间里复现它。
  • 凸损失的 Hessian 半正定;严格凸 ⇔ 正定。

4. 奇异值分解 (SVD)——通用分解

4.1 定理

定理 (SVD)。 任意 $A \in \mathbb{R}^{m \times n}$(秩 $r$)可分解为:

$$A = U \Sigma V^\top, \tag{4}$$

其中 $U \in \mathbb{R}^{m \times m}$、$V \in \mathbb{R}^{n \times n}$ 都是正交矩阵,$\Sigma$ 对角,奇异值 $\sigma_1 \ge \cdots \ge \sigma_r > 0$(之后是 0)。

为什么 SVD 总存在。 $A^\top A$ 是对称半正定矩阵,谱定理给出标准正交特征基 $V$,特征值为 $\sigma_i^2$。对 $\sigma_i > 0$ 定义 $u_i = A v_i / \sigma_i$,再补全成正交基 $U$。则 $A v_i = \sigma_i u_i$,即 $AV = U\Sigma$,即 $A = U\Sigma V^\top$。$\square$

4.2 几何图景:旋转、缩放、再旋转

SVD 几何流水线

任意线性映射都可以分成三步:

  1. $V^\top$:把输入旋转一下,使其主轴对齐坐标轴;
  2. $\Sigma$:沿每根坐标轴按 $\sigma_i$ 拉伸(这是唯一非刚性的一步);
  3. $U$:把结果旋到输出空间。

这是线性代数中最干净的心智模型:任何矩阵都是「旋转 → 沿坐标轴拉伸 → 再旋转」

4.3 没有满秩会怎样:可视化

某个 $\sigma_i = 0$ 时,那个方向上的输入就被消灭了。输出椭球塌缩为更低维的形状:

秩亏:二维塌缩到一维

秩 1 矩阵 $A = u v^\top$ 把整个 $\mathbb{R}^n$ 都映到单一直线 $\text{span}(u)$ 上。所有与 $v$ 正交的向量都进入零空间,被映为零。这恰恰是低秩逼近能压缩数据的本质。

4.4 Eckart-Young 定理:最佳低秩逼近

定理 (Eckart-Young)。 在 Frobenius 与谱范数意义下,$A$ 的最佳秩 $k$ 逼近为:

$$A_k = \sum_{i=1}^k \sigma_i u_i v_i^\top, \tag{5}$$

误差为 $\|A - A_k\|_F = \sqrt{\sum_{i>k} \sigma_i^2}$,$\|A - A_k\|_2 = \sigma_{k+1}$。

这是 PCA 的数学引擎。把数据矩阵 $X$ 中心化、做 SVD:前 $k$ 个右奇异向量就是主成分方向,奇异值平方除以 $n$ 就是各方向上的方差。它同样是你听说过的所有低秩技术的核心:图像压缩、潜在语义分析、推荐系统、LoRA。

4.5 伪逆与条件数

Moore-Penrose 伪逆用 SVD 算:$A^+ = V \Sigma^+ U^\top$,其中 $\Sigma^+$ 把非零奇异值取倒数。这样 $x^\star = A^+ b$ 就是 $Ax = b$ 的最小范数最小二乘解——也正是 numpy.linalg.lstsq 返回的东西。

条件数 $\kappa(A) = \sigma_1 / \sigma_r$ 衡量 $A$ 把相对扰动放大多少倍。粗略来说,$\kappa(A) \approx 10^k$ 时,解 $Ax = b$ 会丢约 $k$ 位精度。任何最小二乘拟合都该先看一眼条件数。

4.6 特征分解 vs SVD

特征分解SVD
适用矩阵方阵任意 $m \times n$
形式$A = P \Lambda P^{-1}$$A = U \Sigma V^\top$
是否总存在仅当可对角化总存在
「值」可能复数非负实数
左右因子互逆?不一定一定($U, V$ 正交)

对称半正定矩阵,二者重合($U = V = Q$,$\Sigma = \Lambda$)。其他情况首选 SVD——稳定、通用、对长方矩阵也有效。


5. 矩阵求导——优化的引擎

这是大部分 ML 读者最希望本文给出的清爽参考。我们用分子布局:导数的形状跟着输出走(标量对向量的梯度是列向量,与输入同型)。

矩阵求导形状速查

5.1 每天必用的四条公式

#$f$$\nabla f$备注
1$a^\top x$$a$线性项
2$x^\top A x$$(A + A^\top) x$$A$ 对称时 $= 2Ax$
3$\|A x - b\|_2^2$$2 A^\top (A x - b)$最小二乘
4$\ln \det X$$X^{-\top}$log-det,高斯 MLE 必用

公式 (2) 的证明。 $f = \sum_{i,j} A_{ij} x_i x_j$,则 $\partial f / \partial x_k = \sum_j A_{kj} x_j + \sum_i A_{ik} x_i = [(A + A^\top) x]_k$。$\square$

公式 (3) 的证明。 链式法则:$\nabla_x \tfrac12 \|Ax - b\|^2 = A^\top (Ax - b)$。乘以 2 把 ML 论文里习惯丢掉的那个 $\tfrac12$ 吸收掉。最优解是正规方程 $A^\top A x = A^\top b$。

5.2 链式法则与反向传播

定理(链式法则)。 若 $L: \mathbb{R}^n \to \mathbb{R}$ 写成 $L(x) = f(g(x))$,$g: \mathbb{R}^n \to \mathbb{R}^m$,则:

$$\nabla_x L = J_g^\top \cdot \nabla_g f, \tag{6}$$

$J_g$ 是 $g$ 的 $m \times n$ 雅可比矩阵。

这个公式就是反向传播。神经网络中一层 $z = Wx + b$,$a = \sigma(z)$,下游损失 $L$:

$$\delta := \frac{\partial L}{\partial a} \odot \sigma'(z), \quad \frac{\partial L}{\partial W} = \delta\, x^\top, \quad \frac{\partial L}{\partial b} = \delta. \tag{7}$$

整套算法就这么多——PyTorch 的 autograd 引擎所做的,就是把 (6) 跑在一张计算图上。

5.3 用有限差分自检

每次推导出梯度,都该顺手做一次数值检验:

$$\hat g_i = \frac{f(x + \varepsilon e_i) - f(x - \varepsilon e_i)}{2 \varepsilon}.$$

取 $\varepsilon = 10^{-5}$,与解析梯度的相对误差应在 $10^{-6}$ 量级。下面 7 节的代码就是这么做的。


6. 数值分解——选哪一个、什么时候用

6.1 QR 解最小二乘

任意列满秩 $A$ 都可分解为 $A = QR$,$Q$ 列正交、$R$ 上三角。求 $\min_x \|Ax - b\|$ 时,先算 $Q^\top b$,再回代 $Rx = Q^\top b$。

为什么 QR 优于正规方程。 正规方程要算 $A^\top A$,其条件数变成 $\kappa(A)^2$。$\kappa(A) = 10^4$ 时就是 $10^8$——你的精度预算被平方了。QR 直接作用于 $A$,条件数仍是 $\kappa(A)$。

6.2 Cholesky 解正定方程

正定 $A$ 存在 Cholesky 分解 $A = LL^\top$,$L$ 下三角且对角元为正。代价 $O(n^3 / 3)$,是 LU 的一半。解 $Ax = b$ 就是两次三角回代。这是高斯过程推断、核方法、任何带正定 Hessian 的二次规划的主力工具。

6.3 决策表

场景
对称矩阵(协方差、Hessian)谱分解
任意矩阵;要诚实的秩、PCA、伪逆SVD
长瘦最小二乘 $\min \|Ax - b\|$QR
正定线性方程组 $Ax = b$Cholesky
检测秩亏 / 监控数值健康通过 SVD 看 $\kappa(A)$

7. 代码:把所有结论都跑一遍

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import numpy as np
from scipy.linalg import svd, qr, cholesky

rng = np.random.default_rng(42)

# -------- SVD 低秩逼近:Eckart-Young 实战 --------
m, n, true_rank = 100, 80, 10
U_t = rng.standard_normal((m, true_rank))
S_t = np.diag(np.linspace(10, 1, true_rank))
V_t = rng.standard_normal((n, true_rank))
A = U_t @ S_t @ V_t.T + 0.5 * rng.standard_normal((m, n))

U, s, Vt = svd(A, full_matrices=False)
print("rank-k 逼近:实际 vs 理论 Frobenius 误差")
for k in [1, 5, 10, 20]:
    A_k = U[:, :k] @ np.diag(s[:k]) @ Vt[:k, :]
    actual = np.linalg.norm(A - A_k, "fro")
    theory = np.sqrt(np.sum(s[k:] ** 2))
    print(f"  k={k:2d}: actual={actual:6.2f}  theory={theory:6.2f}")

# -------- QR vs 正规方程:数值稳定性 --------
m, n = 100, 10
A = rng.standard_normal((m, n))
x_true = rng.standard_normal(n)
b = A @ x_true + 0.1 * rng.standard_normal(m)

x_normal = np.linalg.solve(A.T @ A, A.T @ b)
Q, R = qr(A, mode="economic")
x_qr = np.linalg.solve(R, Q.T @ b)
print(f"\nkappa(A) = {np.linalg.cond(A):.1f},  "
      f"kappa(A^T A) = {np.linalg.cond(A.T @ A):.1f}")
print(f"正规方程误差: {np.linalg.norm(x_normal - x_true):.2e}")
print(f"QR 误差     : {np.linalg.norm(x_qr - x_true):.2e}")

# -------- 线性回归梯度自检 --------
n, d = 100, 5
X = rng.standard_normal((n, d))
w_true = rng.standard_normal(d)
y = X @ w_true + 0.1 * rng.standard_normal(n)

loss = lambda w: 0.5 / n * np.sum((X @ w - y) ** 2)
grad = lambda w: 1 / n * X.T @ (X @ w - y)

def grad_numeric(w, eps=1e-7):
    g = np.zeros_like(w)
    for i in range(len(w)):
        wp, wm = w.copy(), w.copy()
        wp[i] += eps; wm[i] -= eps
        g[i] = (loss(wp) - loss(wm)) / (2 * eps)
    return g

w_test = rng.standard_normal(d)
print(f"\n 梯度检验: ||analytic - numeric|| = "
      f"{np.linalg.norm(grad(w_test) - grad_numeric(w_test)):.2e}")

输出里值得留意三件事:Eckart-Young 的实际误差与理论值在机器精度内吻合;即便在条件数温和的情形下,QR 也比正规方程精确一到两个数量级;解析梯度与有限差分的差距在 $10^{-9}$ 量级。


8. Q&A——常见疑问

Q1. 什么时候应该用正规方程? 当 $\kappa(A) < 10^3$ 左右——比如规模小、特征尺度均匀的问题。一旦病态严重,就用 QR 或 SVD。条件数被平方真的会吃掉精度。

Q2. 为什么 $\ell_1$ 会产生稀疏解? $\ell_1$ 单位球的尖角恰好长在坐标轴上。一般的优化等值线先碰到这些尖角,而尖角处某些坐标为零。光滑的 $\ell_2$ 球没有尖角,最优解通常落在远离坐标轴的地方。

Q3. SVD 和 PCA 是不是一回事? 是的,只是记账方式不同。设中心化数据 $X \in \mathbb{R}^{n \times d}$:

  • 走协方差路线:$\Sigma = \tfrac{1}{n} X^\top X$,前 $k$ 个特征向量就是主方向;
  • 走 SVD 路线:$X = U \Sigma V^\top$,$V$ 的列就是主方向,$\sigma_i^2 / n$ 就是各方向解释方差。 对高维数据($d \gg n$),SVD 路线明显更便宜,因为根本不用把 $d \times d$ 的协方差矩阵实例化出来。

Q4. 为什么对称矩阵的特征值如此特殊? 它们是实数(可以排序),并且特征向量构成正交基。这种正交性使得任意向量都能写成 $\sum \langle v, q_i\rangle q_i$——是对 $A$ 行为最干净的坐标系。ML 里的 Hessian、协方差、Gram、Laplacian 全是对称矩阵,所以这件事天天用得上。

Q5. 「秩」的实际操作含义是什么? 秩衡量的是 $A$ 保留了多少输入信息。秩 $r$ 的 $\mathbb{R}^{m \times n}$ 矩阵把 $(n - r)$ 维子空间(其零空间)整体抹掉,输出落在 $r$ 维子空间(其列空间)里。在 ML 中,这正是自动编码器的瓶颈维度、矩阵补全的秩、嵌入向量的潜在维度。


总结

工具关键公式何时使用
谱定理$A = Q \Lambda Q^\top$对称矩阵:协方差、Hessian
SVD$A = U \Sigma V^\top$任意矩阵:PCA、伪逆、低秩逼近
QR$A = QR$病态最小二乘
Cholesky$A = LL^\top$正定线性方程组(高斯 MLE、GP)
二次型梯度$\nabla (x^\top A x) = 2Ax$任何二次目标
链式法则$\nabla_x L = J_g^\top \nabla_g f$一行公式概括反向传播

参考文献

  1. Strang, G. (2023). Introduction to Linear Algebra (6th ed.). Wellesley-Cambridge Press.
  2. Trefethen, L. N. & Bau III, D. (1997). Numerical Linear Algebra. SIAM.——稳定性问题写得最干净。
  3. Golub, G. H. & Van Loan, C. F. (2013). Matrix Computations (4th ed.). Johns Hopkins University Press.——算法圣经。
  4. Petersen, K. B. & Pedersen, M. S. (2012). The Matrix Cookbook. Technical University of Denmark.——大家都在查的梯度速查表。
  5. Eckart, C. & Young, G. (1936). The approximation of one matrix by another of lower rank. Psychometrika, 1(3), 211-218.
  6. Boyd, S. & Vandenberghe, L. (2018). Introduction to Applied Linear Algebra. Cambridge University Press.——以数据为中心的优秀配套读物。

系列导航

主题链接
1绪论与数学基础<– 上一篇
2线性代数与矩阵论当前位置
3概率论与统计推断下一篇 –>
4凸优化理论前往 –>
5线性回归前往 –>

Liked this piece?

Follow on GitHub for the next one — usually one a week.

GitHub