ESC
输入关键词搜索文章
目录

奇异值分解(SVD)

线性代数 · 从特征值到矩阵的解剖镜
任何矩阵都可以分解为旋转→缩放→旋转——SVD 是理解数据结构的通用显微镜
Part 0 · 学习目标
SVD:矩阵的"解剖镜"

特征值分解只能处理方阵,而且要求矩阵有足够多的线性无关特征向量。但现实中的数据矩阵往往是长方形的——$m$ 个样本、$n$ 个特征,形状是 $m \times n$ 的矩形。

奇异值分解(Singular Value Decomposition, SVD)将特征值分解推广到任意形状的矩阵。任意一个 $m \times n$ 实矩阵 $A$ 都可以分解为

$$A = U \Sigma V^T$$

其中 $U$$V$ 是正交矩阵,$\Sigma$ 是对角矩阵(或矩形对角阵)。这个分解的威力在于:它从数据矩阵中提取出隐藏的"模式",并按重要性排序——第一个奇异值最大,对应的模式最重要,后面的依次递减。

本章覆盖:SVD 的严格定义与存在性、与特征值分解的深层关系、几何意义(旋转→缩放→旋转)、Eckart-Young 定理与低秩近似、SVD 与 PCA 的联系,以及数据降维、图像压缩、推荐系统等实际应用。

前置知识回顾

  • 特征值与特征向量$A\mathbf{x} = \lambda \mathbf{x}$,参见 特征值笔记
  • 正交矩阵$Q^T Q = I$$Q$ 的列构成标准正交基,$Q$ 保持内积和长度。
  • 实对称矩阵的对角化:实对称矩阵 $A^T = A$ 可以被正交对角化:$Q^T A Q = \Lambda$
  • 矩阵的秩:列空间或行空间的维数,等于非零奇异值的个数。
  • 向量范数与矩阵范数:Frobenius 范数 $\|A\|_F = \sqrt{\sum_{i,j} a_{ij}^2}$,谱范数 $\|A\|_2 = \sigma_1$
Part 1 · 从特征值到 SVD
为什么需要 SVD?

特征值分解 $A = P\Lambda P^{-1}$ 只能对方阵使用,而且要求矩阵可对角化。但当 $A$ 是长方形矩阵(比如 $1000 \times 50$ 的数据矩阵),甚至方阵但不可对角化时,特征值分解就无能为力了。

SVD 通过一个巧妙的迂回来解决这个问题:不直接分解 $A$,而是分析 $A^TA$$AA^T$。这两个矩阵都是实对称半正定的,所以必然可正交对角化,且特征值非负。

$A \in \mathbb{R}^{m \times n}$,秩为 $r$。考虑下面的矩阵:

  • $A^T A \in \mathbb{R}^{n \times n}$:对称半正定,可正交对角化。
  • $A A^T \in \mathbb{R}^{m \times m}$:对称半正定,可正交对角化。

关键在于:$A^TA$$AA^T$ 共享相同的非零特征值。设 $\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_r > 0$$A^TA$(也是 $AA^T$)的非零特征值,定义 奇异值

$$\sigma_i = \sqrt{\lambda_i}, \quad i = 1, 2, \dots, r$$

这就是 SVD 的核心直觉:奇异值是 $A^TA$(或 $AA^T$)特征值的平方根。矩阵 $A$ 对空间的作用力,被 $A^TA$ 这个"平方度量"捕捉到,再开平方还原。

一个简单例子

$A = \begin{pmatrix} 1 & 0 \\ 0 & 2 \end{pmatrix}$。这已经是一个对角矩阵,所以 $A$ 就是它的 SVD($U = I, \Sigma = A, V = I$)。奇异值 $\sigma_1 = 2, \sigma_2 = 1$

现在考虑 $A = \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix}$(剪切矩阵)。这个矩阵只有一个特征值 $\lambda = 1$(代数重数 2,几何重数 1),不可对角化。但它的 SVD 存在且有意义:

$$A^TA = \begin{pmatrix} 1 & 1 \\ 1 & 2 \end{pmatrix}, \quad \text{特征值} \quad \lambda_{1,2} = \frac{3 \pm \sqrt{5}}{2}$$

所以两个奇异值 $\sigma_1 \approx 1.618, \sigma_2 \approx 0.618$——它们描述的是剪切变换对单位圆的作用(变成一个椭圆),而非特征值这种"方向不变"的概念。

Part 2 · SVD 的严格定义
$A = U\Sigma V^T$

奇异值分解

$A \in \mathbb{R}^{m \times n}$$m \times n$ 实矩阵,秩为 $r$。则存在正交矩阵 $U \in \mathbb{R}^{m \times m}$$V \in \mathbb{R}^{n \times n}$,以及矩形对角矩阵 $\Sigma \in \mathbb{R}^{m \times n}$,使得

$$A = U \Sigma V^T$$

其中 $\Sigma$ 的对角线元素 $\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r > 0$,其余位置全为零。这些 $\sigma_i$ 称为 $A$奇异值(singular values)。

$U$ 的列 $\mathbf{u}_1, \dots, \mathbf{u}_m$ 称为 左奇异向量(left singular vectors),正交归一。

$V$ 的列 $\mathbf{v}_1, \dots, \mathbf{v}_n$ 称为 右奇异向量(right singular vectors),正交归一。

三种形式

SVD 有几种等价的表达形式,在不同场景下各有便利:

形式数学表达说明
完整 SVD$A_{m \times n} = U_{m \times m} \Sigma_{m \times n} V^T_{n \times n}$$U, V$ 都是方阵,$\Sigma$ 为矩形对角阵
紧凑 SVD$A_{m \times n} = U_{m \times r} \Sigma_{r \times r} V^T_{r \times n}$只保留 $r$ 个非零奇异值,$U,V$ 变为"瘦"矩阵
外积形式$A = \sum_{i=1}^{r} \sigma_i \mathbf{u}_i \mathbf{v}_i^T$矩阵拆为 $r$ 个秩-1 矩阵的和,按重要性排序

外积形式最为直观:$A$ 被拆解为 $r$ 层"模式",每层是一个左奇异向量乘以对应的右奇异向量转置,再乘以奇异值 $\sigma_i$。越靠前的模式越重要,因为 $\sigma_i$ 越大。

与四个基本子空间的关系

SVD 直接给出了矩阵四个基本子空间的规范正交基:

  • $A$列空间 $\operatorname{Col}(A)$:由 $\mathbf{u}_1, \dots, \mathbf{u}_r$ 张成
  • $A$左零空间 $\operatorname{N}(A^T)$:由 $\mathbf{u}_{r+1}, \dots, \mathbf{u}_m$ 张成
  • $A$行空间 $\operatorname{Row}(A)$:由 $\mathbf{v}_1, \dots, \mathbf{v}_r$ 张成
  • $A$零空间 $\operatorname{N}(A)$:由 $\mathbf{v}_{r+1}, \dots, \mathbf{v}_n$ 张成

一次 SVD 就同时给出了所有四个子空间的规范正交基,这是特征值分解做不到的。

例题 1:计算 $2 \times 2$ 矩阵的 SVD

题目:$A = \begin{pmatrix}1 & 2 \\ 0 & 2\end{pmatrix}$,求 $A$ 的完整 SVD。

步骤:

  1. 计算 $A^TA$$A^TA = \begin{pmatrix}1 & 2 \\ 2 & 8\end{pmatrix}$
  2. $A^TA$ 的特征值和特征向量$\det(A^TA - \lambda I) = (\lambda - 1)(\lambda - 8) - 4 = \lambda^2 - 9\lambda + 4 = 0$,解得 $\lambda_1 = \frac{9 + \sqrt{65}}{2} \approx 8.531$$\lambda_2 = \frac{9 - \sqrt{65}}{2} \approx 0.469$
  3. 奇异值$\sigma_1 = \sqrt{8.531} \approx 2.921$$\sigma_2 = \sqrt{0.469} \approx 0.685$
  4. 右奇异向量$\mathbf{v}_1$$\lambda_1$ 对应的特征向量,$\mathbf{v}_2$$\lambda_2$ 对应的特征向量。求解 $(A^TA - \lambda_i I)\mathbf{v}_i = \mathbf{0}$ 并归一化。
  5. 左奇异向量$\mathbf{u}_i = \frac{1}{\sigma_i} A \mathbf{v}_i$$i=1,2$

这个例子展示了 SVD 的标准计算流程:先算 $A^TA$ 的特征分解,再通过 $\mathbf{u}_i = A\mathbf{v}_i/\sigma_i$ 得到左奇异向量。

注意:当 $m \gg n$(或反之)时,计算 $A^TA$(大小为 $n \times n$)比直接处理 $A$ 高效得多。这是许多数值算法利用的优化技巧。
Part 3 · 与特征值分解的关系
$A^TA$$AA^T$ 的谱

SVD 与特征值分解最深刻的关系在于:SVD 是"平方化"后的特征值分解

定理:SVD 与 $A^TA$ 的特征分解

$A = U\Sigma V^T$$A$ 的 SVD。则

$$A^T A = V (\Sigma^T \Sigma) V^T$$
$$A A^T = U (\Sigma \Sigma^T) U^T$$

换句话说:

  • $V$ 的列是 $A^TA$ 的特征向量(右奇异向量 = $A^TA$ 的特征向量)
  • $U$ 的列是 $AA^T$ 的特征向量(左奇异向量 = $AA^T$ 的特征向量)
  • $\sigma_i^2$$A^TA$(或 $AA^T$)的特征值
  • $A^TA$$AA^T$ 的非零特征值完全相同

这个定理直接给出了 SVD 的存在性证明:因为 $A^TA$ 是实对称半正定矩阵,它必然有正交对角化 $A^TA = V\Lambda V^T$,其中 $\Lambda = \operatorname{diag}(\lambda_1, \dots, \lambda_n)$$\lambda_i \ge 0$。取 $\sigma_i = \sqrt{\lambda_i}$,再定义 $\mathbf{u}_i = A\mathbf{v}_i / \sigma_i$(对 $\sigma_i > 0$),就能验证 $A = U\Sigma V^T$

与特征值分解的关键区别

特征值分解SVD
适用范围方阵(且可对角化)任意矩阵(包括长方形)
因子特性$P$ 可逆但不一定正交$U,V$ 一定是正交矩阵
对角元素特征值(可为负数/复数)奇异值(非负实数)
子空间信息仅给出特征空间给出全部四个基本子空间
数值稳定性特征值可能对扰动敏感SVD 的数值稳定性更好
唯一性特征向量方向不唯一奇异值唯一,向量在非重根时唯一(符号可调)

SVD 与极分解

SVD 还能导出极分解:$A = (UV^T)(V\Sigma V^T) = QP$,其中 $Q = UV^T$ 是正交矩阵(旋转),$P = V\Sigma V^T$ 是对称半正定矩阵(拉伸)。这可以看作把一个线性变换拆成"先拉伸后旋转"或者"先旋转后拉伸"——极分解相当于复数的极坐标表示 $z = re^{i\theta}$ 在矩阵领域的推广。

直观理解

特征值和特征向量回答的是"哪些方向在变换下方向不变"。

奇异值和奇异向量回答的是"变换在哪些正交方向上拉伸最强"。

前者要求不变方向,后者不要求。所以 SVD 对任何矩阵都存在,而特征值分解只对(可对角化的)方阵存在。

Part 4 · 几何意义
旋转 → 缩放 → 旋转

SVD 最直观的几何解释:任何一个线性变换 $A: \mathbb{R}^n \to \mathbb{R}^m$ 都可以分解为三个基本操作的复合:

旋转 → 缩放 → 旋转

$$A = U \Sigma V^T$$
  • $V^T$ 先做旋转:将标准基旋转到"奇异向量的方向"。$\det(V^T)$ 为正就是纯旋转,为负则包含一个反射。
  • $\Sigma$ 然后做缩放:沿各个坐标轴方向分别缩放 $\sigma_1, \sigma_2, \dots$ 倍。注意如果 $m \neq n$,这里还包含维度改变(增加或删除坐标轴)。
  • $U$ 最后再做旋转:将缩放后的坐标轴旋转到目标的基方向。

几何上,$A$$\mathbb{R}^n$ 中的单位球面映射为 $\mathbb{R}^m$ 中的一个椭球。椭球的半轴方向就是 $U$ 的列向量,半轴长度就是奇异值 $\sigma_i$。换句话说:奇异值测量了单位球在变换后各个方向的拉伸幅度,奇异向量指明了拉伸的方向。

这个视角在很多物理和工程问题中有直接应用:

  • 惯性张量:刚体旋转惯量矩阵的 SVD 给出主惯性轴和对应的转动惯量。
  • 弹性力学:应变张量的 SVD 将任意变形分解为三个正交方向的纯拉伸。
  • 流体力学:速度梯度张量的 SVD 分解出流体的拉伸和旋转成分。

二维几何示例

考虑 $A = \begin{pmatrix}2 & 1 \\ 1 & 2\end{pmatrix}$

单位圆上的点经过 $A$ 映射后变成一个椭圆。我们可以算出:

  • 椭圆的长半轴方向是 $(1, 1)^T/\sqrt{2}$,长度为 $\sigma_1 = 3$
  • 椭圆的短半轴方向是 $(1, -1)^T/\sqrt{2}$,长度为 $\sigma_2 = 1$

SVD 告诉我们:先将单位圆旋转 $45^\circ$$V^T$ 的作用),然后沿新的坐标轴分别拉伸 3 倍和 1 倍($\Sigma$ 的作用),最后再旋转回标准坐标系($U$ 的作用)。三个变换合起来就是把圆变成这个椭圆。

Part 5 · Eckart-Young 定理
最优的秩-k 近似

SVD 的一个核心应用是 低秩近似:用秩更小的矩阵来逼近原矩阵。Eckart-Young 定理(也称 Eckart-Young-Mirsky 定理)告诉我们,截断 SVD 给出的是最优的低秩近似。

Eckart-Young 定理(Eckart & Young, 1936)

$A \in \mathbb{R}^{m \times n}$ 的 SVD 为 $A = U\Sigma V^T$$\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r > 0$。对任意 $k < r$,定义截断 SVD

$$A_k = \sum_{i=1}^{k} \sigma_i \mathbf{u}_i \mathbf{v}_i^T$$

$A_k$$A$ 在所有秩不超过 $k$ 的矩阵中的最优近似,即

$$\|A - A_k\|_F = \min_{\operatorname{rank}(B) \le k} \|A - B\|_F = \sqrt{\sigma_{k+1}^2 + \cdots + \sigma_r^2}$$

对谱范数同样成立:$\|A - A_k\|_2 = \min_{\operatorname{rank}(B) \le k} \|A - B\|_2 = \sigma_{k+1}$

$\sigma_k > \sigma_{k+1}$ 时,$A_k$ 是唯一的。

这个定理的直觉很简单:SVD 把矩阵拆成按重要性递减的"层",保留前 $k$ 层(最重要的 $k$ 个模式),丢弃后面的。误差就是被丢弃的那些奇异值的平方和(Frobenius 范数)或最大被丢弃奇异值(谱范数)。

证明思路(谱范数的情况)

对谱范数 $\|A - B\|_2$,设 $B$ 是任意秩 $\le k$ 的矩阵。$\operatorname{null}(B)$ 的维数至少为 $n - k$$\operatorname{span}\{\mathbf{v}_1, \dots, \mathbf{v}_{k+1}\}$ 的维数为 $k+1$。这两个子空间必有交集:存在单位向量 $\mathbf{z}$ 同时属于两者。那么 $(A - B)\mathbf{z} = A\mathbf{z}$(因为 $B\mathbf{z} = 0$),而 $\|A\mathbf{z}\|_2$ 至少是 $\sigma_{k+1}$(因为 $\mathbf{z}$ 在前 $k+1$ 个右奇异向量张成的空间里)。所以 $\|A - B\|_2 \ge \sigma_{k+1}$。截断 SVD $A_k$ 正好达到了这个下界。

秩-1 近似的几何直觉

矩阵 $A$ 将单位球映射为椭球。椭球的半轴长度就是奇异值。找秩-1 近似相当于用一条直线(一维子空间)近似整个椭球。显然,最佳近似是用最长的那个半轴——即 $\sigma_1 \mathbf{u}_1 \mathbf{v}_1^T$。秩-k 近似就是用前 $k$ 个最长的半轴张成的 $k$ 维子空间来近似椭球。

低秩近似的数值示例

$A = \begin{pmatrix}1 & 2 & 3 \\ 2 & 4 & 6 \\ 3 & 6 & 9\end{pmatrix}$。这个矩阵的秩为 1(第二行是第一行的 2 倍,第三行是第一行的 3 倍)。计算 SVD:

  • $\sigma_1 \approx 14.0$$\sigma_2 = \sigma_3 = 0$
  • $\mathbf{u}_1 \approx (0.267, 0.535, 0.802)^T$
  • $\mathbf{v}_1 \approx (0.267, 0.535, 0.802)^T$

$A_1 = \sigma_1 \mathbf{u}_1 \mathbf{v}_1^T$ 精确还原了 $A$ 本身。如果在此基础上截断只保留 $\sigma_1$,误差为 0。

再看 $B = \begin{pmatrix}1 & 0 \\ 0 & 2 \\ 0 & 0\end{pmatrix}$,SVD 给出 $\sigma_1 = 2, \sigma_2 = 1$。秩-1 近似 $B_1 = \sigma_1 \mathbf{u}_1 \mathbf{v}_1^T$ 丢掉的是 $\sigma_2 = 1$ 对应的那层,误差 $\|B - B_1\|_F = 1$

Part 6 · SVD 与 PCA
主成分分析的 SVD 视角

主成分分析(Principal Component Analysis, PCA)是机器学习中最常用的降维工具之一。通常教科书介绍 PCA 时用的是协方差矩阵的特征值分解,但更本质地说:PCA 是 SVD 在数据中心化后的特例

SVD 视角下的 PCA

设有 $m$$n$ 维数据样本 $\mathbf{x}_1, \dots, \mathbf{x}_m \in \mathbb{R}^n$,构成数据矩阵 $X \in \mathbb{R}^{m \times n}$(行对应样本)。

Step 1:数据中心化,$\tilde{X} = X - \mathbf{1}\bar{\mathbf{x}}^T$,其中 $\bar{\mathbf{x}}$ 是样本均值。

Step 2:样本协方差矩阵为 $S = \frac{1}{m-1} \tilde{X}^T \tilde{X}$

Step 3:对 $\tilde{X}$ 做 SVD:$\tilde{X} = U \Sigma V^T$

则:

  • $V$ 的列就是主成分方向(即协方差矩阵 $S$ 的特征向量)
  • $\sigma_i^2 / (m-1)$ 是第 $i$ 个主成分的方差
  • $\sigma_i^2 / \sum_{j=1}^{r} \sigma_j^2$ 是第 $i$ 个主成分的方差解释比例
  • $U\Sigma$ 的列是数据在主成分方向上的投影(得分矩阵)

为什么用 SVD 做 PCA 比用特征值分解更好?

  • 不需要构造协方差矩阵 $S$:当 $n$ 很大(比如 $n = 10^5$ 的图像数据)时,$S$$n \times n$ 矩阵,构造和存储都不现实。而直接对 $\tilde{X} \in \mathbb{R}^{m \times n}$ 做 SVD 要高效得多。
  • 数值稳定性更好:构造 $S = \tilde{X}^T\tilde{X}/(m-1)$ 会使条件数平方化,损失数值精度。
  • 同时给出降维映射和数据投影$V$ 给出从原空间到主成分空间的映射,$U\Sigma$ 直接给出所有样本的主成分坐标。

实用技巧:用 SVD 做 PCA 的算法

输入:数据矩阵 $X \in \mathbb{R}^{m \times n}$,目标维度 $k$

  1. 中心化:$\tilde{X} = X - \mathbf{1}\bar{\mathbf{x}}^T$
  2. 计算 $\tilde{X}$ 的 SVD:$\tilde{X} = U\Sigma V^T$
  3. $V$ 的前 $k$ 列作为主成分基 $V_k \in \mathbb{R}^{n \times k}$
  4. 降维后的数据:$Z = \tilde{X} V_k \in \mathbb{R}^{m \times k}$
  5. 重建近似:$\hat{X} = Z V_k^T + \mathbf{1}\bar{\mathbf{x}}^T$

SVD 与 PCA 的深层统一

本质上,SVD 和 PCA 都在做同一件事:找到数据中方差最大的正交方向。SVD 从矩阵分解的角度做,PCA 从协方差矩阵特征分解的角度做。两者的差异只在于 PCA 要求数据中心化(因为协方差矩阵的定义需要去均值),而 SVD 可以直接应用于任意矩阵。

更广泛地看,SVD 统一了多种统计方法:

  • PCA = SVD on centered data
  • 对应分析(Correspondence Analysis)= SVD on 标准化后的列联表
  • 潜在语义分析(LSA)= SVD on 词-文档矩阵(TF-IDF)
  • 典型相关分析(CCA)= 广义 SVD
Part 7 · 实际应用
图像压缩、推荐系统与降维

应用 1:图像压缩

一张灰度图像是一个 $m \times n$ 矩阵,每个元素是像素灰度值。SVD 图像压缩的流程:

  1. 对图像矩阵 $A$ 做 SVD:$A = U\Sigma V^T$
  2. 只保留最大的 $k$ 个奇异值,丢弃其余:$A_k = \sum_{i=1}^k \sigma_i \mathbf{u}_i \mathbf{v}_i^T$
  3. 存储 $k$ 个奇异值 + $k$ 个左奇异向量(截断)+ $k$ 个右奇异向量(截断),共 $k(m+n+1)$ 个浮点数
  4. 解压时重建 $A_k$

压缩比 = $mn / [k(m+n+1)]$。一张 $1000 \times 1000$ 的图像,取 $k=50$ 时压缩比约为 $1000000 / (50 \times 2001) \approx 10$ 倍。由于自然图像中存在大量冗余(相邻像素高度相关),前几十个奇异值往往就能捕获绝大部分信息。

这是有损压缩,但奇异值衰减很快——很多图像的奇异值在前几十个就衰减到接近零了。$k$ 的选择取决于所需的压缩比和质量平衡。

应用 2:推荐系统

推荐系统中的"协同过滤"问题:有一个 $m \times n$ 的用户-物品评分矩阵 $R$,其中大部分条目缺失(用户只对少量物品评过分)。SVD 用于提取"潜在因子":

  • 左奇异向量 $\mathbf{u}_i$ 可以理解为"用户在第 $i$ 个潜在因子上的负荷"
  • 右奇异向量 $\mathbf{v}_i$ 可以理解为"物品在第 $i$ 个潜在因子上的负荷"
  • 奇异值 $\sigma_i$ 表示该因子在解释评分变化时的重要性

如果只看前 $k$ 个奇异值,$R_k = U_k \Sigma_k V_k^T$ 就是 $R$$k$ 维"潜在特征空间"中的近似。填充缺失值最自然的方法就是用这个低秩近似去预测:用户 $i$ 对物品 $j$ 的预测评分 = $\sum_{t=1}^k \sigma_t u_{it} v_{jt}$

这就是著名的 FunkSVD(Simon Funk, 2006)的核心思想,在 Netflix Prize 比赛中大放异彩。现代推荐系统的矩阵分解方法(如 ALS、BPR)都可以视为 SVD 在评分缺失、带正则化条件下的变体。

应用 3:数据降维与可视化

参考 Part 6 的 PCA 部分。SVD 是数据降维的基础工具,不仅用于 PCA,还用于:

  • t-SNE 初始化:t-SNE 通常用 PCA(即 SVD)的结果作为初始嵌入,比随机初始化更稳定。
  • 潜在语义索引(LSI):在自然语言处理中,对 TF-IDF 矩阵做 SVD,得到文档在"语义空间"中的低维表示。
  • 文本聚类:SVD 降维后接 K-means,在低维空间中聚类效果更好(避免了"维度灾难"中的距离度量失效问题)。

应用 4:其他常见用法

  • 伪逆(Moore-Penrose)$A^+ = V \Sigma^+ U^T$,其中 $\Sigma^+$ 将非零奇异值取倒数。几乎所有最小二乘问题的解都可以用伪逆表达。
  • 条件数估计:矩阵 $A$ 的条件数 $\kappa(A) = \sigma_1 / \sigma_r$,衡量线性系统 $A\mathbf{x} = \mathbf{b}$ 对扰动的敏感度。
  • 总最小二乘(TLS):当 $A$$\mathbf{b}$ 都有噪声时,总最小二乘的解由最小奇异值对应的右奇异向量给出。
  • 系统识别:Hankel 矩阵的 SVD 用于从时间序列数据中提取系统的动态模式(如 DMD 算法)。
  • Google PageRank:虽然不是直接使用 SVD,但 PageRank 的稀疏矩阵迭代求解与 SVD 中求主奇异向量的幂法密切相关。
Part 8 · 计算方法简述
SVD 是怎么算出来的?

实际工程中,SVD 的计算不通过 $A^TA$ 的特征值分解(那会平方化条件数,损失精度)。现代 SVD 算法走的是更精巧的路径。

方法 1:分而治之(Divide and Conquer)

这是目前 LAPACK 默认使用的算法(自 LAPACK 3.0 起),适用于稠密矩阵。核心思想:

  1. 先将 $A$ 通过正交变换化为 二对角矩阵(bidiagonal form):$A = U_1 B V_1^T$$B$ 只有对角线和上对角线非零。
  2. $B$ 做 SVD:$B = U_2 \Sigma V_2^T$(二对角矩阵的 SVD 有递归的分治解法)。
  3. 合并:$A = (U_1 U_2) \Sigma (V_1 V_2)^T$

时间复杂度 $O(mn^2)$$m \ge n$。对于大多数日常矩阵规模($n < 1000$),分治算法非常高效。

方法 2:QR 迭代(Jacobi SVD)

一种更古老但数值更稳定的方法,尤其适合精度要求极高的场景。通过一系列 Jacobi 旋转(Givens 旋转)交替消去 $A^TA$ 的非对角元。每次旋转只处理一个 $2 \times 2$ 的子问题,收敛后得到 SVD。

Jacobi SVD 的数值精度通常优于分治算法,但速度较慢。在有些领域(如需要极高精度的高性能计算)仍被使用。

方法 3:随机化 SVD(Randomized SVD)

当矩阵规模极大($m, n > 10^4$)时,精确 SVD 的计算成本不可接受。随机化 SVD 是 2010 年代以来流行的近似方法:

  1. 生成随机矩阵 $\Omega \in \mathbb{R}^{n \times (k+p)}$$p$ 是过采样参数,通常取 5-10)
  2. 计算采样矩阵 $Y = A \Omega \in \mathbb{R}^{m \times (k+p)}$
  3. $Y$ 做 QR 分解 $Y = QR$$Q$ 的列近似张成 $A$ 的列空间的前 $k$
  4. 计算 $B = Q^T A \in \mathbb{R}^{(k+p) \times n}$(将 $A$ 投影到低维空间)
  5. $B$ 做精确 SVD:$B = \tilde{U} \Sigma V^T$
  6. 最终结果:$A \approx (Q \tilde{U}) \Sigma V^T$

时间复杂度从 $O(mn^2)$ 降到 $O(mnk)$。对 $k \ll \min(m, n)$ 的大矩阵,计算速度可以提升一到两个数量级,而误差可控(概率意义上以指数级接近最优近似)。

工程实践中的选择

矩阵大小推荐方法备注
$< 1000$分治 SVD(numpy.linalg.svd)标准选择,精度和速度的平衡
$10^3 \sim 10^4$分治 / Jacobi精度要求极高时选 Jacobi
$> 10^4$$k$ 较小随机化 SVD(sklearn.utils.extmath.randomized_svd)大数据场景的标准做法
稀疏矩阵截断 SVD(svds / PROPACK)用 Lanczos 迭代求部分奇异值

在 Python 中,numpy.linalg.svdscipy.linalg.svd 调用的是 LAPACK 的分治或 QR 实现。sklearn.decomposition.TruncatedSVD 对稀疏矩阵效率更高。对超大矩阵,可以考虑 sparse.svdsfbpca(随机化 SVD 的 Python 绑定)。

Part 9 · 知识关联图
SVD 在知识网络中的位置
→ 特征值分解
SVD 是特征值分解的推广
特征值分解只对方阵成立,SVD 对任意矩阵成立。实对称矩阵的 SVD 退化为其特征值分解。
→ PCA(机器学习)
PCA = SVD on centered data
数据中心化后的 SVD 直接给出 PCA 的主成分方向、方差解释比例和降维结果。比协方差矩阵特征分解更快更稳定。
→ 最小二乘 / 伪逆
伪逆的 SVD 表达
$A^+ = V\Sigma^+ U^T$,所有最小二乘问题 $\min\|A\mathbf{x} - \mathbf{b}\|_2$ 的解都可以用伪逆统一表达。
→ 极分解
旋转 + 拉伸
SVD 导出极分解 $A = (UV^T)(V\Sigma V^T) = QP$,将任意线性变换拆成正交部分和半正定部分。
→ 矩阵范数与条件数
谱范数 = 最大奇异值
$\|A\|_2 = \sigma_1$,条件数 $\kappa(A) = \sigma_1/\sigma_r$。条件数判断线性方程组求解的数值稳定性。
→ 推荐系统
矩阵补全与潜在因子模型
FunkSVD / ALS 等推荐算法本质上是用 SVD 的低秩近似填补用户-物品评分矩阵中的缺失值。

复习速查

概念公式关键点
SVD$A = U\Sigma V^T,\ A \in \mathbb{R}^{m \times n}$$U \in \mathbb{R}^{m \times m},\ V \in \mathbb{R}^{n \times n}$ 正交,$\Sigma$ 矩形对角
奇异值$\sigma_i = \sqrt{\lambda_i(A^TA)}$非负,递减排列;非零奇异值个数 = $\operatorname{rank}(A)$
外积形式$A = \sum_{i=1}^r \sigma_i \mathbf{u}_i \mathbf{v}_i^T$矩阵拆为秩-1 矩阵之和,按重要性排序
$A^TA$ 的关系$A^T A = V\Sigma^T\Sigma V^T$右奇异向量 = $A^TA$ 特征向量,奇异值平方 = 特征值
$AA^T$ 的关系$A A^T = U\Sigma\Sigma^T U^T$左奇异向量 = $AA^T$ 特征向量
几何意义旋转 $\to$ 缩放 $\to$ 旋转$V^T$ 旋转,$\Sigma$ 沿坐标轴缩放,$U$ 旋转
Eckart-Young$\|A - A_k\|_F = \sqrt{\sum_{i=k+1}^r \sigma_i^2}$截断 SVD 是最优的秩-$k$ 近似(Frobenius 范数下)
与 PCA 的关系$\tilde{X} = U\Sigma V^T$$V$ 的列 = 主成分方向;$\sigma_i^2/(m-1)$ = 方差
伪逆$A^+ = V\Sigma^+ U^T$$\Sigma^+$ 将非零奇异值取倒数
条件数$\kappa(A) = \sigma_1 / \sigma_r$衡量 $A\mathbf{x} = \mathbf{b}$ 对扰动的敏感度

参考来源

  • Strang, G. Introduction to Linear Algebra (5th ed.). Wellesley-Cambridge Press, 2016. Chapter 7: The Singular Value Decomposition and the Pseudoinverse.
  • Trefethen, L. N. & Bau, D. Numerical Linear Algebra. SIAM, 1997. Lecture 4 & 5: SVD and condition number.
  • Eckart, C. & Young, G. "The approximation of one matrix by another of lower rank." Psychometrika, 1936.
  • Halko, N., Martinsson, P. G. & Tropp, J. A. "Finding structure with randomness: Probabilistic algorithms for constructing approximate matrix decompositions." SIAM Review, 2011.
  • Wikipedia: Singular Value Decomposition
  • Wikipedia: Low-rank approximation (Eckart-Young-Mirsky theorem)
  • Scikit-learn 文档: PCA using SVD