Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

2.6 奇异值分解与低秩逼近

本节属“补充篇 · 数值线性代数工具箱”:2.x 是补充篇内部编号,不是课堂第 2 章的节号。课堂第 2 章是线性方程组的解法。

本节把前面所有工具收拢到一个分解里。SVD 是现代数值线性代数的中心:它同时给出四个基本子空间的标准正交基(2.2)、2-范数与条件数(2.4)、对称谱理论向任意矩阵的推广(2.5)、低秩逼近的最优答案(2.6.5)、伪逆与秩亏最小二乘(2.6.4),也是 PCA、推荐系统、图像压缩的方法基础。线索是:SVD 怎样从对称矩阵的谱里长出来 → 两种几何读法 → 四个基本子空间、伪逆与数值秩、最优低秩逼近 → 压缩与 PCA 两个应用。一句话:如果只能带一件工具走,就带 SVD。

SVD:圆变成椭圆,奇异值就是半轴 A = UΣVᵀ:先转、再拉、再转;奇异值谱决定「保留多少」。 NUMERICAL · SVD / 16 ATLAS / N-16 SVD:圆变成椭圆,奇异值就是半轴 A = UΣVᵀ:先转、再拉、再转;奇异值谱决定「保留多少」。 σ₁σ₂A 把单位圆变成椭圆半轴长度 = 奇异值奇异值谱与低秩截断σ12.10σ21.25σ30.62σ40.28σ50.09k = 2保留最大的 k 个奇异值 → 秩 k 最优近似。A = U Σ Vᵀ · Σ = diag(σ₁ ≥ σ₂ ≥ … ≥ 0)
图解读图:SVD 把任意矩阵拆成旋转 → 沿坐标轴拉伸 → 再旋转:Vᵀ 转过去,Σ 把单位圆拉成椭圆,U 再转回来。奇异值就是椭圆半轴的长度;只保留最大的 k 个,就得到秩 k 的最优近似(Eckart–Young)。

2.6.1 奇异值的来源:把长方形矩阵「对称化」

直觉 · 从 ATAA^{\mathrm T}A 里「偷」一个答案

对长方形矩阵 AA(m≠nm\neq n)根本谈不上特征值——Av=λvA\boldsymbol{v}=\lambda\boldsymbol{v} 这个式子两头维数就对不上。但 ATA∈Rn×nA^{\mathrm T}A\in\mathbb{R}^{n\times n} 不一样:它既是方阵,又对称半正定,而它的谱理论(2.5.4)我们已经完全掌握。于是可以问:

ATAA^{\mathrm T}A 的特征值都非负(≥0\ge0,所以能开方),它们能告诉我们 AA 有多「大」吗?

能。λmax⁡(ATA)=∥A∥22\lambda_{\max}(A^{\mathrm T}A)=\lVert A\rVert_2^2 这条公式 1.3.4 已经用过。现在把全部特征值都用上,再对 ATA^{\mathrm T} 做一次同样的分解,就得到 SVD。奇异值就是「把长方形矩阵变成对称方阵之后,特征值再开方」。

定理 2.6.1(新增) · 奇异值分解的存在性

设 A∈Rm×nA\in\mathbb{R}^{m\times n}(m,nm,n 任意,m≥nm\ge n 或 m<nm\lt n 均可),则存在正交矩阵 U∈Rm×mU\in\mathbb{R}^{m\times m}、V∈Rn×nV\in\mathbb{R}^{n\times n} 与非负对角阵 Σ∈Rm×n\Sigma\in\mathbb{R}^{m\times n},使

A=UΣVT,(2.29)A=U\Sigma V^{\mathrm T}, \tag{2.29}

其中 Σ\Sigma 的对角元 σ1≥σ2≥⋯≥σmin⁡(m,n)≥0\sigma_1\ge\sigma_2\ge\cdots\ge\sigma_{\min(m,n)}\ge0 称为 AA 的奇异值(singular values)。

结构形式(m≥nm\ge n 情形): 写成列向量形式

U=[u1,…,un⏟U1, un+1,…,um⏟U0],Σ=(Σ1O) (Σ1=diag⁡(σ1,…,σn) 取前 n 个,列满秩时全部非零),V=[v1,…,vn],U=[\underbrace{\boldsymbol{u}_1,\dots,\boldsymbol{u}_n}_{U_1},\ \underbrace{\boldsymbol{u}_{n+1},\dots,\boldsymbol{u}_m}_{U_0}],\qquad \Sigma=\begin{pmatrix}\Sigma_1\\O\end{pmatrix}\ (\Sigma_1=\operatorname{diag}(\sigma_1,\dots,\sigma_n)\ \text{取前 }n\text{ 个,列满秩时全部非零}),\qquad V=[\boldsymbol{v}_1,\dots,\boldsymbol{v}_n],

则

A V=U Σ⟺Avi=σiui (i=1,…,n),ATui=σivi (i=1,…,n).A\,V=U\,\Sigma\quad\Longleftrightarrow\quad A\boldsymbol{v}_i=\sigma_i\boldsymbol{u}_i\ (i=1,\dots,n),\qquad A^{\mathrm T}\boldsymbol{u}_i=\sigma_i\boldsymbol{v}_i\ (i=1,\dots,n).

特别地,{vi}\{\boldsymbol{v}_i\} 是 ATAA^{\mathrm T}A 的标准正交特征向量(特征值 σi2\sigma_i^2),{ui}\{\boldsymbol{u}_i\} 是 AATAA^{\mathrm T} 的标准正交特征向量(同样对应 σi2\sigma_i^2)。

证明

第一步:对称化。 ATAA^{\mathrm T}A 对称半正定(xTATAx=∥Ax∥22≥0\boldsymbol{x}^{\mathrm T}A^{\mathrm T}A\boldsymbol{x}=\lVert A\boldsymbol{x}\rVert_2^2\ge0)。由谱定理(定理 2.5.1 第 5 条)存在正交矩阵 VV 使

VT(ATA)V=Λ=diag⁡(λ1,…,λn),λ1≥⋯≥λn≥0.V^{\mathrm T}(A^{\mathrm T}A)V=\Lambda=\operatorname{diag}(\lambda_1,\dots,\lambda_n),\qquad \lambda_1\ge\cdots\ge\lambda_n\ge0 .

记 σi=λi\sigma_i=\sqrt{\lambda_i}。设前 rr 个特征值为正,即 λ1,…,λr>0\lambda_1,\dots,\lambda_r\gt0(r=rank⁡Ar=\operatorname{rank}A,因为 rank⁡(ATA)=rank⁡A\operatorname{rank}(A^{\mathrm T}A)=\operatorname{rank}A,见 定理 2.2.6 的证明),λr+1=⋯=λn=0\lambda_{r+1}=\cdots=\lambda_n=0。

第二步:构造 UU 的前 rr 列。 令 vi\boldsymbol{v}_i 为 VV 的第 ii 列。对 i≤ri\le r,定义

ui=Aviσi∈Rm.\boldsymbol{u}_i=\frac{A\boldsymbol{v}_i}{\sigma_i}\in\mathbb{R}^m .

验证 {u1,…,ur}\{\boldsymbol{u}_1,\dots,\boldsymbol{u}_r\} 标准正交:

uiTuj=viTATAvjσiσj=λjviTvjσiσj=λjδijσiσj=δij.\boldsymbol{u}_i^{\mathrm T}\boldsymbol{u}_j=\frac{\boldsymbol{v}_i^{\mathrm T}A^{\mathrm T}A\boldsymbol{v}_j}{\sigma_i\sigma_j} =\frac{\lambda_j\boldsymbol{v}_i^{\mathrm T}\boldsymbol{v}_j}{\sigma_i\sigma_j}=\frac{\lambda_j\delta_{ij}}{\sigma_i\sigma_j}=\delta_{ij} .

第三步:补全 UU。 把标准正交组 {u1,…,ur}\{\boldsymbol{u}_1,\dots,\boldsymbol{u}_r\} 扩充为 Rm\mathbb{R}^m 的标准正交基(Gram–Schmidt,2.3.1),得 U=[u1,…,um]U=[\boldsymbol{u}_1,\dots,\boldsymbol{u}_m] 正交。则对 i≤ri\le r,Avi=σiuiA\boldsymbol{v}_i=\sigma_i\boldsymbol{u}_i;而对 i>ri\gt r,ATAvi=0A^{\mathrm T}A\boldsymbol{v}_i=\boldsymbol{0} 给出

∥Avi∥22=viTATAvi=0 ⟹ Avi=0=σiui.\lVert A\boldsymbol{v}_i\rVert_2^2=\boldsymbol{v}_i^{\mathrm T}A^{\mathrm T}A\boldsymbol{v}_i=0\ \Longrightarrow\ A\boldsymbol{v}_i=\boldsymbol{0}=\sigma_i\boldsymbol{u}_i .

于是对所有 i=1,…,ni=1,\dots,n 都有 Avi=σiuiA\boldsymbol{v}_i=\sigma_i\boldsymbol{u}_i,写成矩阵形式即 AV=UΣAV=U\Sigma,两边右乘 VTV^{\mathrm T} 得(2.29)。

关键观察:构造 UU 的方式是「被动」的。 我们没有去解 AATAA^{\mathrm T} 的特征值问题,而是从 ATAA^{\mathrm T}A 的特征向量 vi\boldsymbol{v}_i 出发,用 ui=Avi/σi\boldsymbol{u}_i=A\boldsymbol{v}_i/\sigma_i 把 ui\boldsymbol{u}_i 顺手算出来。这比分别解两个特征值问题省事得多,数值上也更稳——ui\boldsymbol{u}_i 和 σi\sigma_i 都来自 ATAA^{\mathrm T}A 的信息,不必另起炉灶。

∎
三种情形,一个公式
  • 「瘦」SVD(经济型): 只保留非零的奇异值,以及 UU、VV 各自的前 rr 列,得 A=UrΣrVrTA=U_r\Sigma_rV_r^{\mathrm T}(UrU_r 为 m×rm\times r、Σr\Sigma_r 为 r×rr\times r、VrV_r 为 n×rn\times r,r=rank⁡Ar=\operatorname{rank}A——注意这里的下标 rr 指秩,与上文结构形式里表示「前 nn 列」的 U1,Σ1U_1,\Sigma_1 是两套记号)。存储最省,工程上用的就是它。
  • 「满」SVD: 如(2.29),U,VU,V 都是方阵、正交。理论推导用它。
  • 秩亏 / 长方形: 若 r<nr\lt n,Σ\Sigma 的对角元从 σr+1\sigma_{r+1} 起全为零;若 m<nm\lt n,把 ATA^{\mathrm T} 的 SVD 转置就得到 AA 的 SVD(A=UΣVTA=U\Sigma V^{\mathrm T} 依然成立,只是 Σ\Sigma 变成「矮」的)。
例 2.6.1(新增) · 手算一个 SVD

求

A=(3045)A=\begin{pmatrix}3&amp;0\\4&amp;5\end{pmatrix}

的 SVD(写出 σi\sigma_i、UU、VV,并验证)。

解

第 1 步:算 ATAA^{\mathrm T}A。

ATA=(3405)(3045)=(25202025).A^{\mathrm T}A=\begin{pmatrix}3&amp;4\\0&amp;5\end{pmatrix}\begin{pmatrix}3&amp;0\\4&amp;5\end{pmatrix}=\begin{pmatrix}25&amp;20\\20&amp;25\end{pmatrix}.

第 2 步:特征值。 det⁡(ATA−λI)=(25−λ)2−400=0⇒λ=25±20\det(A^{\mathrm T}A-\lambda I)=(25-\lambda)^2-400=0\Rightarrow\lambda=25\pm20,即 λ1=45, λ2=5\lambda_1=45,\ \lambda_2=5。故

σ1=45=35≈6.7082,σ2=5≈2.2361.\sigma_1=\sqrt{45}=3\sqrt5\approx6.7082,\qquad\sigma_2=\sqrt5\approx2.2361 .

第 3 步:特征向量(VV)。 对 λ1=45\lambda_1=45:(25−45)v1+20v2=0⇒−20v1+20v2=0⇒v1=v2(25-45)v_1+20v_2=0\Rightarrow-20v_1+20v_2=0\Rightarrow v_1=v_2,归一化得 v1=12(1,1)T\boldsymbol{v}_1=\frac{1}{\sqrt2}(1,1)^{\mathrm T}。对 λ2=5\lambda_2=5:(25−5)v1+20v2=0⇒20v1+20v2=0⇒v1=−v2(25-5)v_1+20v_2=0\Rightarrow20v_1+20v_2=0\Rightarrow v_1=-v_2,得 v2=12(1,−1)T\boldsymbol{v}_2=\frac{1}{\sqrt2}(1,-1)^{\mathrm T}。

V=12(111−1).V=\frac{1}{\sqrt2}\begin{pmatrix}1&amp;1\\1&amp;-1\end{pmatrix}.

第 4 步:UU 由公式 ui=Avi/σi\boldsymbol{u}_i=A\boldsymbol{v}_i/\sigma_i 得到。

u1=Av1σ1=135⋅12(34+5)=1310(39)=110(13),\boldsymbol{u}_1=\frac{A\boldsymbol{v}_1}{\sigma_1}=\frac{1}{3\sqrt5}\cdot\frac{1}{\sqrt2}\begin{pmatrix}3\\4+5\end{pmatrix}=\frac{1}{3\sqrt{10}}\begin{pmatrix}3\\9\end{pmatrix}=\frac{1}{\sqrt{10}}\begin{pmatrix}1\\3\end{pmatrix},

u2=Av2σ2=15⋅12(34−5)=110(3−1).\boldsymbol{u}_2=\frac{A\boldsymbol{v}_2}{\sigma_2}=\frac{1}{\sqrt5}\cdot\frac{1}{\sqrt2}\begin{pmatrix}3\\4-5\end{pmatrix}=\frac{1}{\sqrt{10}}\begin{pmatrix}3\\-1\end{pmatrix}.

U=110(133−1).U=\frac{1}{\sqrt{10}}\begin{pmatrix}1&amp;3\\3&amp;-1\end{pmatrix}.

验证:

UΣVT=110(133−1)(35005)12(111−1)=520(133−1)(331−1)=12(3+33−39−19+1)=(3045) ✓U\Sigma V^{\mathrm T}=\frac{1}{\sqrt{10}}\begin{pmatrix}1&amp;3\\3&amp;-1\end{pmatrix}\begin{pmatrix}3\sqrt5&amp;0\\0&amp;\sqrt5\end{pmatrix}\frac{1}{\sqrt2}\begin{pmatrix}1&amp;1\\1&amp;-1\end{pmatrix} =\frac{\sqrt5}{\sqrt{20}}\begin{pmatrix}1&amp;3\\3&amp;-1\end{pmatrix}\begin{pmatrix}3&amp;3\\1&amp;-1\end{pmatrix} =\frac12\begin{pmatrix}3+3&amp;3-3\\9-1&amp;9+1\end{pmatrix}=\begin{pmatrix}3&amp;0\\4&amp;5\end{pmatrix}\ \checkmark

顺带得到的量: ∥A∥2=σ1=6.7082\lVert A\rVert_2=\sigma_1=6.7082;∥A∥F=σ12+σ22=45+5=50=7.0711\lVert A\rVert_F=\sqrt{\sigma_1^2+\sigma_2^2}=\sqrt{45+5}=\sqrt{50}=7.0711(核对:9+0+16+25=50\sqrt{9+0+16+25}=\sqrt{50} ✓);cond2(A)=σ1/σ2=3\mathrm{cond}_2(A)=\sigma_1/\sigma_2=3;det⁡A=3×5−0=15=σ1σ2=6.7082×2.2361\det A=3\times5-0=15=\sigma_1\sigma_2=6.7082\times2.2361 ✓(=15=15)。

外积形式(下面要用):

A=σ1u1v1T+σ2u2v2T=6.7082 u1v1T+2.2361 u2v2T.A=\sigma_1\boldsymbol{u}_1\boldsymbol{v}_1^{\mathrm T}+\sigma_2\boldsymbol{u}_2\boldsymbol{v}_2^{\mathrm T}=6.7082\,\boldsymbol{u}_1\boldsymbol{v}_1^{\mathrm T}+2.2361\,\boldsymbol{u}_2\boldsymbol{v}_2^{\mathrm T}.

截去第二项后,误差 ∥A−A1∥2=σ2=2.2361\lVert A-A_1\rVert_2=\sigma_2=2.2361 恰好等于被丢掉的奇异值——见 定理 2.6.4。

∎

2.6.2 SVD 的两种几何读法

直觉 · 读法一:旋转 → 拉伸 → 旋转

A=UΣVTA=U\Sigma V^{\mathrm T} 不只是计算公式,还可以按从右到左的顺序「读」出来:

x → VT  换坐标 → Σ  沿坐标轴拉伸 → U  再换坐标.\boldsymbol{x}\ \xrightarrow{\ V^{\mathrm T}\ }\ \text{换坐标}\ \xrightarrow{\ \Sigma\ }\ \text{沿坐标轴拉伸}\ \xrightarrow{\ U\ }\ \text{再换坐标}.

第一步和第三步都是正交变换,只旋转或镜像、不改变长度(2.1.3);只有中间的 Σ\Sigma 在做真正的拉伸,而且只沿坐标轴拉,第 ii 根轴的拉伸倍数正是 σi\sigma_i(取零就等于把这根轴压扁)。因此:

任何矩阵 = 一次旋转 + 一次沿轴拉伸 + 一次旋转。

这是矩阵最本质的几何图像,它立刻解释了两件事:① 单位球被 AA 映成椭球,各个半轴长就是 σi\sigma_i(于是 ∥A∥2=σ1\lVert A\rVert_2=\sigma_1 就是最大拉伸);② 只要有某个 σi=0\sigma_i=0,就有一个方向被压扁到零——这正是 AA 奇异、矩阵降秩的几何含义。

直觉 · 读法二:两组「配对」的正交方向

Avi=σiuiA\boldsymbol{v}_i=\sigma_i\boldsymbol{u}_i 说明:输入方向 vi\boldsymbol{v}_i(VV 的第 ii 列)经过 AA 之后,恰好落在输出方向 ui\boldsymbol{u}_i(UU 的第 ii 列)上,长度乘上 σi\sigma_i。于是 AA 做的事就是「把 VV 这组标准正交基映到 UU 这组标准正交基,并逐轴缩放」。

这是 SVD 最有用的一种读法:它把矩阵拆成「一组输入方向 + 一组输出方向 + 一组缩放倍数」。只改缩放倍数 σi\sigma_i、方向全部保留,就得到最优低秩逼近(2.6.5)——这也是 SVD 在数据科学里全部用法(PCA、压缩、去噪、推荐)的共同原理。

v₁ v₂ 单位球(输入) —A→ σ₁u₁ σ₂u₂ 椭球(输出半轴 σ₁, σ₂) σ₁ ≥ σ₂ ≥ 0 σ₂ = 0 ⟹ 压扁 (矩阵降秩)
图 2-1 · SVD 的几何:AA 把单位球映成椭球,vi\boldsymbol{v}_i 方向被映射到 ui\boldsymbol{u}_i 方向并乘以 σi\sigma_i。σ1\sigma_1 是最大拉伸(∥A∥2\lVert A\rVert_2),若某轴被压成零则矩阵奇异。
例 2.6.2(新增) · 用几何读法看一个「压扁」的矩阵

A=(122436)A=\begin{pmatrix}1&amp;2\\2&amp;4\\3&amp;6\end{pmatrix}(一眼就能看出第 2 列 =2×=2\times第 1 列,秩 1)。求 SVD 并解释几何。

解

ATA=(123246)(122436)=(14282856)=14(1224)A^{\mathrm T}A=\begin{pmatrix}1&amp;2&amp;3\\2&amp;4&amp;6\end{pmatrix}\begin{pmatrix}1&amp;2\\2&amp;4\\3&amp;6\end{pmatrix}=\begin{pmatrix}14&amp;28\\28&amp;56\end{pmatrix}=14\begin{pmatrix}1&amp;2\\2&amp;4\end{pmatrix}。

特征值:tr⁡=70\operatorname{tr}=70,det⁡=142(4−4)=0\det=14^2(4-4)=0,故 λ1=70, λ2=0\lambda_1=70,\ \lambda_2=0。于是

σ1=70≈8.3666,σ2=0.\sigma_1=\sqrt{70}\approx8.3666,\qquad\sigma_2=0 .

λ1=70\lambda_1=70 的特征向量:(14−70)v1+28v2=0⇒v1=v2/2(14-70)v_1+28v_2=0\Rightarrow v_1=v_2/\sqrt2 方向,v1=15(1,2)T\boldsymbol{v}_1=\frac{1}{\sqrt5}(1,2)^{\mathrm T}(注意恰好是列方向);v2=15(2,−1)T\boldsymbol{v}_2=\frac{1}{\sqrt5}(2,-1)^{\mathrm T}。

u1=Av1σ1=170⋅15(1+42+83+12)=170⋅55(123)=114(123).\boldsymbol{u}_1=\frac{A\boldsymbol{v}_1}{\sigma_1}=\frac{1}{\sqrt{70}}\cdot\frac{1}{\sqrt5}\begin{pmatrix}1+4\\2+8\\3+12\end{pmatrix}=\frac{1}{\sqrt{70}}\cdot\frac{5}{\sqrt5}\begin{pmatrix}1\\2\\3\end{pmatrix}=\frac{1}{\sqrt{14}}\begin{pmatrix}1\\2\\3\end{pmatrix}.

几何解释: σ2=0\sigma_2=0 意味着 v2\boldsymbol{v}_2 这个方向被 AA 压扁到零,于是整个单位圆被映成一条线段(退化的一维椭球)。线段的方向是 u1=(1,2,3)T/14\boldsymbol{u}_1=(1,2,3)^{\mathrm T}/\sqrt{14},长度 2σ1=16.72\sigma_1=16.7(直径)。

验证: rank⁡A=1\operatorname{rank}A=1(恰有一个非零奇异值);det⁡A\det A 无从谈起(AA 不是方阵),但 AATAA^{\mathrm T} 的秩也是 1 ✓。∥A∥2=8.3666\lVert A\rVert_2=8.3666,∥A∥F=70=8.3666\lVert A\rVert_F=\sqrt{70}=8.3666(秩 1 时两者相等,因为 ∥A∥F2=∑σi2=σ12\lVert A\rVert_F^2=\sum\sigma_i^2=\sigma_1^2)。

数据含义: 这个矩阵的两列完全相关(第 2 列是第 1 列的 2 倍),所以它携带的信息本质上只有 1 维——SVD 只用一个非零奇异值就把这件事精确说了出来。「有效维度 = 非零奇异值的个数」,这就是 SVD 在数据分析里的核心读法。

∎

2.6.3 奇异值与四个基本子空间

上一小节的两种读法告诉我们,vi\boldsymbol{v}_i 和 ui\boldsymbol{u}_i 是一对一对配好的方向。这些方向还有另一重身份:它们恰好就是四个基本子空间的标准正交基。SVD 一口气把这四组基全部交出来——这是它的「结构性回报」,其他任何分解都没有这么完整。

定理 2.6.2(新增) · SVD 与四个基本子空间

设 A∈Rm×nA\in\mathbb{R}^{m\times n},rank⁡A=r\operatorname{rank}A=r,SVD 为 A=UΣVTA=U\Sigma V^{\mathrm T},σ1≥⋯≥σr>0=σr+1=⋯\sigma_1\ge\cdots\ge\sigma_r\gt0=\sigma_{r+1}=\cdots。则

子空间 维数 标准正交基 出处
C(A)C(A)(列空间) rr u1,…,ur\boldsymbol{u}_1,\dots,\boldsymbol{u}_r UU 的前 rr 列
N(AT)N(A^{\mathrm T})(左零空间) m−rm-r ur+1,…,um\boldsymbol{u}_{r+1},\dots,\boldsymbol{u}_m UU 的后 m−rm-r 列
C(AT)C(A^{\mathrm T})(行空间) rr v1,…,vr\boldsymbol{v}_1,\dots,\boldsymbol{v}_r VV 的前 rr 列
N(A)N(A)(零空间) n−rn-r vr+1,…,vn\boldsymbol{v}_{r+1},\dots,\boldsymbol{v}_n VV 的后 n−rn-r 列

且

∥A∥2=σ1,∥A∥F=σ12+⋯+σr2,cond2(A)=σ1σr (可逆时).(2.30)\lVert A\rVert_2=\sigma_1,\qquad \lVert A\rVert_F=\sqrt{\sigma_1^2+\cdots+\sigma_r^2},\qquad \mathrm{cond}_2(A)=\frac{\sigma_1}{\sigma_r}\ (\text{可逆时}). \tag{2.30}

证明

列空间: 由 A=UΣVTA=U\Sigma V^{\mathrm T} 与 Σ\Sigma 的结构,AA 的列是 UU 前 rr 列的线性组合(系数来自 ΣrVT\Sigma_rV^{\mathrm T} 的行),且 rank⁡A=r\operatorname{rank}A=r,故 C(A)=span⁡{u1,…,ur}C(A)=\operatorname{span}\{\boldsymbol{u}_1,\dots,\boldsymbol{u}_r\};这 rr 个向量标准正交,故是标准正交基。

行空间: 同法对 AT=VΣTUTA^{\mathrm T}=V\Sigma^{\mathrm T}U^{\mathrm T} 得 C(AT)=span⁡{v1,…,vr}C(A^{\mathrm T})=\operatorname{span}\{\boldsymbol{v}_1,\dots,\boldsymbol{v}_r\}。

零空间: Avi=σiui=0A\boldsymbol{v}_i=\sigma_i\boldsymbol{u}_i=\boldsymbol{0} 对 i>ri\gt r 成立,故 vr+1,…,vn∈N(A)\boldsymbol{v}_{r+1},\dots,\boldsymbol{v}_n\in N(A);又 dim⁡N(A)=n−r\dim N(A)=n-r(定理 2.2.1),故它们构成标准正交基。

左零空间: ATui=σivi=0A^{\mathrm T}\boldsymbol{u}_i=\sigma_i\boldsymbol{v}_i=\boldsymbol{0}(i>ri\gt r),同法。

(2.30): ∥A∥2=σ1\lVert A\rVert_2=\sigma_1 由 定理 1.3.5 与 λmax⁡(ATA)=σ12\lambda_{\max}(A^{\mathrm T}A)=\sigma_1^2(课堂第 3 讲讲矩阵范数时把 2-范数留作自学——这一式就是那处留白的兑现);∥A∥F2=tr⁡(ATA)=∑iλi(ATA)=∑iσi2\lVert A\rVert_F^2=\operatorname{tr}(A^{\mathrm T}A)=\sum_i\lambda_i(A^{\mathrm T}A)=\sum_i\sigma_i^2;条件数由 定理 2.4.1 第 4 条。

这张表就是 2.2 节「四个基本子空间」问题的完整答案——而且它比手算行简化稳定得多(行简化在病态矩阵上会丢有效数字,SVD 不会)。实践判据:要四个基本子空间,用 SVD;只想知道秩,用列主元 QR 省点代价即可。

∎
例 2.6.3(新增) · 从 SVD 读出四个子空间

对例 2.2.1 的 A=(123124631232)A=\begin{pmatrix}1&amp;2&amp;3&amp;1\\2&amp;4&amp;6&amp;3\\1&amp;2&amp;3&amp;2\end{pmatrix}(r=2r=2)用 SVD 求出四个基本子空间的标准正交基,并与例 2.2.1 的手算结果对照。

解
import numpy as np
A = np.array([[1.,2,3,1],[2,4,6,3],[1,2,3,2]])
U, s, Vt = np.linalg.svd(A)
print("sigma =", np.round(s, 6))
print("rank =", (s > 1e-12*s[0]).sum())
sigma = [9.877729 0.656096 0.      ]
rank = 2

完整数值(∥A∥F=98=9.8995\lVert A\rVert_F=\sqrt{98}=9.8995 与 σ12+σ22=9.87772+0.65612=98\sqrt{\sigma_1^2+\sigma_2^2}=\sqrt{9.8777^2+0.6561^2}=\sqrt{98} ✓,这一条是自检):

U=(−0.3892−0.71780.5774−0.8162−0.0218−0.5774−0.42700.69590.5774),VT=(−0.2479−0.4958−0.7437−0.3738−0.0999−0.1998−0.29970.9275−0.96340.13210.23310−0.01870.8348−0.55030).U=\begin{pmatrix}-0.3892&amp;-0.7178&amp;\mathbf{0.5774}\\-0.8162&amp;-0.0218&amp;\mathbf{-0.5774}\\-0.4270&amp;0.6959&amp;\mathbf{0.5774}\end{pmatrix},\qquad V^{\mathrm T}=\begin{pmatrix}-0.2479&amp;-0.4958&amp;-0.7437&amp;-0.3738\\-0.0999&amp;-0.1998&amp;-0.2997&amp;\mathbf{0.9275}\\\hdashline -0.9634&amp;0.1321&amp;0.2331&amp;0\\-0.0187&amp;0.8348&amp;-0.5503&amp;0\end{pmatrix}.

(虚线以下为 VTV^{\mathrm T} 的后 n−r=2n-r=2 行。)

四个基本子空间(标准正交基):

子空间 维数 SVD 给出的标准正交基 例 2.2.1 的手算基
C(A)C(A) 22 UU 的前 2 列 (1,2,1)T, (1,3,2)T(1,2,1)^{\mathrm T},\ (1,3,2)^{\mathrm T}(不正交,需再正交化)
N(AT)N(A^{\mathrm T}) 11 UU 第 3 列 =(0.5774,−0.5774,0.5774)T=(0.5774,-0.5774,0.5774)^{\mathrm T} (1,−1,1)T(1,-1,1)^{\mathrm T}——单位化后完全相同 ✓
C(AT)C(A^{\mathrm T}) 22 VV 的前 2 列 (1,2,3,0)T, (0,0,0,1)T(1,2,3,0)^{\mathrm T},\ (0,0,0,1)^{\mathrm T}
N(A)N(A) 22 VV 的后 2 列 (−2,1,0,0)T, (−3,0,1,0)T(-2,1,0,0)^{\mathrm T},\ (-3,0,1,0)^{\mathrm T}

SVD 与手算给出的是同样的子空间(子空间本身唯一,这是必然的);差别只在基的选择:

  • N(AT)N(A^{\mathrm T}) 那一行完全吻合:UU 的第 3 列恰好就是 (1,−1,1)T/3(1,-1,1)^{\mathrm T}/\sqrt3(一维子空间,两组基只差单位化)。
  • 后两行不同:SVD 给出的基是标准正交的,而手算的 (−2,1,0,0)(-2,1,0,0) 与 (−3,0,1,0)(-3,0,1,0) 内积 =6≠0=6\neq0(不正交);C(A)C(A) 那一行的手算基同理。

这正是 SVD 优于手算的实质: 它不仅告诉你「哪些向量张成子空间」,还直接把一组标准正交的坐标轴送到手上——可以直接拿来做投影(2.2.3)、判正交、算距离,不必再补一次 Gram–Schmidt。

顺带核对几个范数关系: ∥A∥2=σ1=9.8777\lVert A\rVert_2=\sigma_1=9.8777(大于 ∥A∥F/2=7.0\lVert A\rVert_F/\sqrt2=7.0,因为 ∥A∥2\lVert A\rVert_2 量的是最大拉伸、∥A∥F\lVert A\rVert_F 量的是全部奇异值的平方和开方);∥A∥2≤∥A∥F\lVert A\rVert_2\le\lVert A\rVert_F ✓(1.3.4 的结论)。

∎
例 2.6.4(新增) · von Neumann 迹不等式

证明:对任意 A,B∈Rm×nA,B\in\mathbb{R}^{m\times n}(同形),

∣tr⁡(ATB)∣≤∑i=1min⁡(m,n)σi(A)σi(B).(2.31)\lvert\operatorname{tr}(A^{\mathrm T}B)\rvert\le\sum_{i=1}^{\min(m,n)}\sigma_i(A)\sigma_i(B) . \tag{2.31}

用途: 它是许多扰动界证明的起点(信号处理里的匹配滤波、矩阵近似理论都会用到它),而且很容易做数值验证。

证明(归约到「对称情形 + 奇异子空间的对齐」;完整推导见附录)

核心是三条工具链,全部细节在附录 A.2.3–A.2.4:

  1. 对称迹不等式(附录引理 A.3.3):对称阵 S,TS,T 满足 tr⁡(ST)≤∑iλi(S)λi(T)\operatorname{tr}(ST)\le\sum_i\lambda_i(S)\lambda_i(T)(特征值降序配对)。它由「特征基展开 ⟹ 系数方阵 (uiTvj)2(\boldsymbol{u}_i^{\mathrm T}\boldsymbol{v}_j)^2 双随机 ⟹ Birkhoff 定理拆成置换的凸组合 ⟹ 逐个置换用标量重排不等式」四步组成;
  2. 对称化膨胀:把矩形问题化为对称问题——令 S=(OAATO)S=\begin{pmatrix}O&amp;A\\A^{\mathrm T}&amp;O\end{pmatrix}、T=(OBBTO)T=\begin{pmatrix}O&amp;B\\B^{\mathrm T}&amp;O\end{pmatrix},则 S,TS,T 对称,SS 的特征值恰为 ±σi(A)\pm\sigma_i(A),且 tr⁡(ST)=2tr⁡(ATB)\operatorname{tr}(ST)=2\operatorname{tr}(A^{\mathrm T}B);
  3. 对 S,TS,T 套用第 1 步(特征值降序逐项相乘,两块恰好各贡献一个 ∑σi(A)σi(B)\sum\sigma_i(A)\sigma_i(B)),除以 22 即得(2.31);对 −B-B 再用一次得绝对值版本。

数值验证:

import numpy as np
rng = np.random.default_rng(3)
for m, n in [(5, 4), (4, 5)]:
    A, B = rng.normal(size=(m, n)), rng.normal(size=(m, n))
    lhs = abs(np.trace(A.T @ B))
    rhs = np.linalg.svd(A, compute_uv=False) @ np.linalg.svd(B, compute_uv=False)
    print(f"|tr(A^T B)| = {lhs:.6f}  ≤  Σσ_i(A)σ_i(B) = {rhs:.6f}")
|tr(A^T B)| = 7.009041  ≤  Σσ_i(A)σ_i(B) = 26.317431
|tr(A^T B)| = 0.839841  ≤  Σσ_i(A)σ_i(B) = 19.541253

注意两者的差距很大(7.07.0 对 26.326.3):随机矩阵的 ∣tr⁡(ATB)∣\lvert\operatorname{tr}(A^{\mathrm T}B)\rvert 通常远小于这个上界,因为取等要求 A,BA,B 的左右奇异子空间完全对齐(取等条件的讨论见附录 A.2.4)。特例 B=ATB=A^{\mathrm T}:tr⁡(ATA)=∥A∥F2=∑σi2\operatorname{tr}(A^{\mathrm T}A)=\lVert A\rVert_F^2=\sum\sigma_i^2 恰好取等——(2.31)是紧界。

∎

2.6.4 伪逆与秩亏最小二乘

直觉 · 伪逆 = 「能求逆的地方求逆,不能求逆的地方记零」

四个子空间把 AA 的「结构」说清楚了;接下来该解方程了——AA 不可逆时怎么办?若 AA 奇异(或者根本就是长方形),A−1A^{-1} 就不存在。但在 SVD 给出的两组基下,AA 做的事很简单:「沿 vi\boldsymbol{v}_i 方向乘 σi\sigma_i」——那么只要把非零的 σi\sigma_i 取倒数、把为零的 σi\sigma_i 还记为零,就得到一个「最接近逆」的矩阵:伪逆 A+A^{+}。A+A^{+} 满足 Penrose 四条件,是唯一的最优「广义逆」。

对秩亏最小二乘,A+bA^{+}\boldsymbol{b} 给出的是最小范数最小二乘解——在所有能最小化 ∥Ax−b∥\lVert A\boldsymbol{x}-\boldsymbol{b}\rVert 的 x\boldsymbol{x} 中,它挑出「∥x∥\lVert\boldsymbol{x}\rVert 最小」的那一个。这样一来,2.2.4 里「列满秩时最小二乘解才唯一」的结论就被补全了。

定义 2.6.1 · Moore–Penrose 伪逆

设 A=UΣVT∈Rm×nA=U\Sigma V^{\mathrm T}\in\mathbb{R}^{m\times n} 的 SVD,Σ=diag⁡(σ1,…,σr,0,…,0)\Sigma=\operatorname{diag}(\sigma_1,\dots,\sigma_r,0,\dots,0)。定义

Σ+=diag⁡(1σ1,…,1σr,0,…,0)∈Rn×m,A+=VΣ+UT∈Rn×m.(2.32)\Sigma^{+}=\operatorname{diag}\Bigl(\frac1{\sigma_1},\dots,\frac1{\sigma_r},0,\dots,0\Bigr)\in\mathbb{R}^{n\times m},\qquad A^{+}=V\Sigma^{+}U^{\mathrm T}\in\mathbb{R}^{n\times m} . \tag{2.32}

称 A+A^{+} 为 AA 的 Moore–Penrose 伪逆(pseudoinverse)。

定理 2.6.3(新增) · 伪逆的性质与秩亏最小二乘

A+A^{+} 由(2.32)定义,则

  1. Penrose 四条件: AA+A=AAA^{+}A=A;A+AA+=A+A^{+}AA^{+}=A^{+};(AA+)T=AA+(AA^{+})^{\mathrm T}=AA^{+};(A+A)T=A+A(A^{+}A)^{\mathrm T}=A^{+}A。满足这四条的唯一矩阵就是 A+A^{+};
  2. 若 AA 可逆,A+=A−1A^{+}=A^{-1};
  3. AA+AA^{+} 是到 C(A)C(A) 上的正交投影;A+AA^{+}A 是到 C(AT)C(A^{\mathrm T}) 上的正交投影;
  4. 秩亏最小二乘: 对任意 b∈Rm\boldsymbol{b}\in\mathbb{R}^m,x^=A+b\hat{\boldsymbol{x}}=A^{+}\boldsymbol{b} 是唯一的最小范数最小二乘解

x^=arg⁡min⁡{∥x∥2:x 最小化 ∥Ax−b∥2};\hat{\boldsymbol{x}}=\arg\min\Bigl\{\lVert\boldsymbol{x}\rVert_2:\boldsymbol{x}\ \text{最小化}\ \lVert A\boldsymbol{x}-\boldsymbol{b}\rVert_2\Bigr\} ;

  1. 列满秩时 A+=(ATA)−1ATA^{+}=(A^{\mathrm T}A)^{-1}A^{\mathrm T};行满秩时 A+=AT(AAT)−1A^{+}=A^{\mathrm T}(AA^{\mathrm T})^{-1}。
证明(3 与 4 的要点)

(3): AA+=UΣVTV⏟IΣ+UT=UΣΣ+UT=Udiag⁡(1,…,1,0,…,0)UTAA^{+}=U\Sigma\underbrace{V^{\mathrm T}V}_{I}\Sigma^{+}U^{\mathrm T}=U\Sigma\Sigma^{+}U^{\mathrm T}=U\operatorname{diag}(1,\dots,1,0,\dots,0)U^{\mathrm T}——这是一个「保留 UU 前 rr 列、丢掉其余」的对角投影矩阵,对称、幂等,列空间 =C(Ur)=C(A)=C(U_r)=C(A),故由 定理 2.2.5(反之部分)它正是到 C(A)C(A) 的正交投影。同法可得 A+A=Vdiag⁡(1,…,1,0,…,0)VTA^{+}A=V\operatorname{diag}(1,\dots,1,0,\dots,0)V^{\mathrm T}。

(4): 在 SVD 坐标下令 y=VTx\boldsymbol{y}=V^{\mathrm T}\boldsymbol{x}、c=UTb\boldsymbol{c}=U^{\mathrm T}\boldsymbol{b},则 ∥Ax−b∥2=∥Σy−c∥2\lVert A\boldsymbol{x}-\boldsymbol{b}\rVert_2=\lVert\Sigma\boldsymbol{y}-\boldsymbol{c}\rVert_2、∥x∥2=∥y∥2\lVert\boldsymbol{x}\rVert_2=\lVert\boldsymbol{y}\rVert_2(这就是正交不变性),问题就此完全解耦成逐个分量:

(σiyi−ci)2(i=1,…,n).(\sigma_iy_i-c_i)^2\qquad(i=1,\dots,n) .

  • 若 σi>0\sigma_i\gt0(i≤ri\le r):取 yi=ci/σiy_i=c_i/\sigma_i 使该项为零(最优);
  • 若 σi=0\sigma_i=0:该项为 ci2c_i^2,与 yiy_i 无关,最小范数要求取 yi=0y_i=0;
  • 若 i>ni\gt n(m>nm\gt n 时的多余行):不影响。

故最优解 y=Σ+c\boldsymbol{y}=\Sigma^{+}\boldsymbol{c},即 x=VΣ+UTb=A+b\boldsymbol{x}=V\Sigma^{+}U^{\mathrm T}\boldsymbol{b}=A^{+}\boldsymbol{b},且在每个「自由」分量上都取了零(这正是最小范数条件)。

(1)的唯一性:满足 Penrose 四条件的矩阵唯一(标准事实,见 习题 B4)。

∎
例 2.6.5(新增) · 秩亏最小二乘的伪逆解

求

A=(122436),b=(111)A=\begin{pmatrix}1&amp;2\\2&amp;4\\3&amp;6\end{pmatrix},\qquad\boldsymbol{b}=\begin{pmatrix}1\\1\\1\end{pmatrix}

的最小范数最小二乘解。

解

由例 2.6.2 已得 AA 的 SVD:σ1=70\sigma_1=\sqrt{70}、σ2=0\sigma_2=0,v1=15(1,2)T\boldsymbol{v}_1=\frac{1}{\sqrt5}(1,2)^{\mathrm T}、v2=15(2,−1)T\boldsymbol{v}_2=\frac{1}{\sqrt5}(2,-1)^{\mathrm T},u1=114(1,2,3)T\boldsymbol{u}_1=\frac{1}{\sqrt{14}}(1,2,3)^{\mathrm T}。

伪逆(只用 σ1\sigma_1 一项):

A+=v11σ1u1T=15(12)⋅170⋅114(123)=14900(123246)=170(123246)=170AT.A^{+}=\boldsymbol{v}_1\frac{1}{\sigma_1}\boldsymbol{u}_1^{\mathrm T} =\frac{1}{\sqrt5}\begin{pmatrix}1\\2\end{pmatrix}\cdot\frac{1}{\sqrt{70}}\cdot\frac{1}{\sqrt{14}}\begin{pmatrix}1&amp;2&amp;3\end{pmatrix} =\frac{1}{\sqrt{4900}}\begin{pmatrix}1&amp;2&amp;3\\2&amp;4&amp;6\end{pmatrix} =\frac{1}{70}\begin{pmatrix}1&amp;2&amp;3\\2&amp;4&amp;6\end{pmatrix}=\frac{1}{70}A^{\mathrm T}.

(秩 1 矩阵的伪逆就是转置除以 ∥A∥F2=70\lVert A\rVert_F^2=70。)

x^=A+b=170(123246)(111)=170(612)=(0.08570.1714).\hat{\boldsymbol{x}}=A^{+}\boldsymbol{b}=\frac{1}{70}\begin{pmatrix}1&amp;2&amp;3\\2&amp;4&amp;6\end{pmatrix}\begin{pmatrix}1\\1\\1\end{pmatrix}=\frac{1}{70}\begin{pmatrix}6\\12\end{pmatrix}=\begin{pmatrix}0.0857\\0.1714\end{pmatrix}.

核对正交条件 ATr=0A^{\mathrm T}\boldsymbol{r}=\boldsymbol{0}: Ax^=335(1+42+83+12)=335(5,10,15)T=37(1,2,3)T=(0.4286,0.8571,1.2857)TA\hat{\boldsymbol{x}}=\frac{3}{35}\begin{pmatrix}1+4\\2+8\\3+12\end{pmatrix}=\frac{3}{35}(5,10,15)^{\mathrm T}=\frac37(1,2,3)^{\mathrm T}=(0.4286,0.8571,1.2857)^{\mathrm T},故

r=b−Ax^=(0.5714, 0.1429, −0.2857)T,ATr=(0.5714+0.2857−0.85711.1429+0.5714−1.7143)=(00) ✓\boldsymbol{r}=\boldsymbol{b}-A\hat{\boldsymbol{x}}=(0.5714,\ 0.1429,\ -0.2857)^{\mathrm T},\qquad A^{\mathrm T}\boldsymbol{r}=\begin{pmatrix}0.5714+0.2857-0.8571\\1.1429+0.5714-1.7143\end{pmatrix}=\begin{pmatrix}0\\0\end{pmatrix}\ \checkmark

残差平方和 =∥r∥22=0.4286=3/7=\lVert\boldsymbol{r}\rVert_2^2=0.4286=3/7。

验证「最小范数」: 正态方程 ATAx=ATbA^{\mathrm T}A\boldsymbol{x}=A^{\mathrm T}\boldsymbol{b} 是

(14282856)x=(612) ⟺ x1+2x2=37,\begin{pmatrix}14&amp;28\\28&amp;56\end{pmatrix}\boldsymbol{x}=\begin{pmatrix}6\\12\end{pmatrix}\ \Longleftrightarrow\ x_1+2x_2=\frac37 ,

一条直线——最小二乘解不唯一。取此直线上的另一点 x2=0⇒x1=3/7x_2=0\Rightarrow x_1=3/7,得 x′=(3/7,0)T\boldsymbol{x}&#x27;=(3/7,0)^{\mathrm T}:残差同样是 3/73/7(同为最小二乘解),但 ∥x′∥2=0.4286>∥x^∥2=0.1917\lVert\boldsymbol{x}&#x27;\rVert_2=0.4286\gt\lVert\hat{\boldsymbol{x}}\rVert_2=0.1917。伪逆给出的是这条直线上离原点最近的点 ✓(x^\hat{\boldsymbol{x}} 沿 (1,2)(1,2) 方向,正是直线的法方向)。

这个例子重要在哪里: AA 的列相关(第 2 列 =2×=2\times第 1 列),最小二乘解因此成为一条直线。np.linalg.lstsq 与 np.linalg.pinv 默认返回这条直线上最小范数的那一点;而直接消元解正态方程,得到的是直线上任意一点(取到哪一点取决于主元选择)——这就是伪逆与正态方程在秩亏问题上的本质区别。

∎
思考 · 伪逆的截断参数:数值秩的判定

真实数据里没有「精确为零的奇异值」,只有「相对很小的奇异值」。np.linalg.pinv(A, rcond=t) 会把满足 σi≤t⋅σ1\sigma_i\le t\cdot\sigma_1 的奇异值直接当作零。tt 该怎么选? 常用准则有三条:

  1. 机器精度准则: t=max⁡(m,n)⋅ut=\max(m,n)\cdot u(LAPACK 默认 uu 的若干倍)。适合矩阵本身精确、只是数值上降秩的情形。
  2. 噪声水平准则: 若数据带噪声(真实场景大多如此),t≈t\approx 噪声幅度 /σ1/\sigma_1。这才是实践中更常见的情形:低于噪声水平的那些奇异值,对应的方向携带的只是噪声,不该被放大——截断伪逆做的就是「去掉噪声子空间」,这是正则化的雏形。
  3. 能量准则: 保留前 kk 个使 ∑i≤kσi2/∑iσi2≥99%\sum_{i\le k}\sigma_i^2/\sum_i\sigma_i^2\ge99\% 的奇异值(工程常用)。

注意:不截断的伪逆可能给出荒谬的结果。 若最小的非零奇异值 σr\sigma_r 相对 σ1\sigma_1 很小,1/σr1/\sigma_r 就会把 b\boldsymbol{b} 中对应方向的分量放大 σ1/σr=cond(A)\sigma_1/\sigma_r=\mathrm{cond}(A) 倍——和直接求逆一样危险。这就是非截断不可的原因,也是 Tikhonov 正则化(习题 D2)的动机。

2.6.5 Eckart–Young:为什么截断 SVD 是最优压缩

直觉 · SVD 按「重要性」排序,砍掉尾巴就是最优删减

读法二已经预告过:保留方向、只改缩放倍数,就能得到最优低秩逼近。这一小节把这句话变成一条定理,先看外积和:

A=∑i=1rσiuiviT.A=\sum_{i=1}^{r}\sigma_i\boldsymbol{u}_i\boldsymbol{v}_i^{\mathrm{T}} .

每一项 σiuiviT\sigma_i\boldsymbol{u}_i\boldsymbol{v}_i^{\mathrm{T}} 都是一个秩 1 矩阵,贡献大小由 σi\sigma_i 度量。于是要找「秩 kk 的最佳逼近」,最自然的做法就是保留最大的 kk 项、砍掉其余的。Eckart–Young 定理断言:这个自然做法恰好就是最优的——不存在别的秩 kk 矩阵比它更接近 AA;而且误差精确等于被砍掉的第一个奇异值。

这就是 SVD 在数据科学里占据统治地位的理论根据:凡是「用低维结构近似高维数据」的任务(压缩、去噪、降维、推荐),最优答案都是截断 SVD。

定理 2.6.4(新增) · Eckart–Young–Mirsky 定理

设 A∈Rm×nA\in\mathbb{R}^{m\times n} 的 SVD 为 A=UΣVTA=U\Sigma V^{\mathrm T},rank⁡A=r\operatorname{rank}A=r。对 k<rk\lt r 记

Ak=∑i=1kσiuiviT(2.33)A_k=\sum_{i=1}^{k}\sigma_i\boldsymbol{u}_i\boldsymbol{v}_i^{\mathrm T} \tag{2.33}

(AA 的秩 kk 截断 SVD),则

min⁡rank⁡B≤k∥A−B∥2=∥A−Ak∥2=σk+1,(2.34)\min_{\operatorname{rank}B\le k}\lVert A-B\rVert_2=\lVert A-A_k\rVert_2=\sigma_{k+1}, \tag{2.34}

min⁡rank⁡B≤k∥A−B∥F=∥A−Ak∥F=σk+12+⋯+σr2.(2.35)\min_{\operatorname{rank}B\le k}\lVert A-B\rVert_F=\lVert A-A_k\rVert_F=\sqrt{\sigma_{k+1}^2+\cdots+\sigma_r^2} . \tag{2.35}

即 AkA_k 是 AA 在 ∥⋅∥2\lVert\cdot\rVert_2 与 ∥⋅∥F\lVert\cdot\rVert_F 意义下的最佳秩 kk 逼近。

证明(∥⋅∥2\lVert\cdot\rVert_2 情形,用 Courant–Fischer)

先证上界 ∥A−Ak∥2=σk+1\lVert A-A_k\rVert_2=\sigma_{k+1}。 A−Ak=∑i>kσiuiviTA-A_k=\sum_{i\gt k}\sigma_i\boldsymbol{u}_i\boldsymbol{v}_i^{\mathrm T} 是「把后 r−kr-k 项留下来」的形式,它的奇异值就是 σk+1,…,σr\sigma_{k+1},\dots,\sigma_r(后面补零),故 ∥A−Ak∥2=σk+1\lVert A-A_k\rVert_2=\sigma_{k+1}。

再证下界(任何秩 ≤k\le k 的 BB 都不可能更好)。 设 rank⁡B≤k\operatorname{rank}B\le k,则 dim⁡N(B)≥n−k\dim N(B)\ge n-k(定理 2.2.1)。考虑

S=span⁡{v1,…,vk+1},dim⁡S=k+1.\mathcal{S}=\operatorname{span}\{\boldsymbol{v}_1,\dots,\boldsymbol{v}_{k+1}\},\qquad\dim\mathcal{S}=k+1 .

由维数公式 dim⁡(S∩N(B))≥(k+1)+(n−k)−n=1\dim(\mathcal{S}\cap N(B))\ge(k+1)+(n-k)-n=1,故存在单位向量 x∈S∩N(B)\boldsymbol{x}\in\mathcal{S}\cap N(B)。写 x=∑i≤k+1civi\boldsymbol{x}=\sum_{i\le k+1}c_i\boldsymbol{v}_i。则 Bx=0B\boldsymbol{x}=\boldsymbol{0},故

∥A−B∥22≥∥(A−B)x∥22=∥Ax∥22=∥∑i≤k+1σiciui∥22=∑i≤k+1σi2ci2 ≥ σk+12∑i≤k+1ci2=σk+12.\lVert A-B\rVert_2^2\ge\lVert(A-B)\boldsymbol{x}\rVert_2^2=\lVert A\boldsymbol{x}\rVert_2^2 =\Bigl\lVert\sum_{i\le k+1}\sigma_ic_i\boldsymbol{u}_i\Bigr\rVert_2^2=\sum_{i\le k+1}\sigma_i^2c_i^2\ \ge\ \sigma_{k+1}^2\sum_{i\le k+1}c_i^2=\sigma_{k+1}^2 .

(最后一步用了 σi≥σk+1\sigma_i\ge\sigma_{k+1}(i≤k+1i\le k+1),以及 ∥x∥22=∑ci2=1\lVert\boldsymbol{x}\rVert_2^2=\sum c_i^2=1。)故 ∥A−B∥2≥σk+1\lVert A-B\rVert_2\ge\sigma_{k+1}。上下界合起来即得(2.34)。

Frobenius 情形((2.35))的证法走另一条路(对称化膨胀 + Hoffman–Wielandt 不等式),见 习题 B6 与附录 A.2.5。

这个证明值得记住: 只用一次「维数计数」,加上一个 Courant–Fischer 型的二次型估计,就把「最优低秩逼近」这件看起来非用优化理论不可的事彻底解决了。这是线性代数结构力量的又一次展示。

∎
例 2.6.6(新增) · 低秩逼近的误差恰好等于下一个奇异值

构造一个奇异值指数衰减的 60×4060\times40 矩阵,对 k=1,2,3,5,8,10k=1,2,3,5,8,10 计算 ∥A−Ak∥2\lVert A-A_k\rVert_2、∥A−Ak∥F\lVert A-A_k\rVert_F,与理论值对照。

解
import numpy as np
rng = np.random.default_rng(0); m, n = 60, 40
# 先随机取正交基,再指定奇异值(指数衰减)——精确控制谱
U_, _, Vt_ = np.linalg.svd(rng.normal(size=(m, n)), full_matrices=False)
dec = np.exp(-np.arange(n) / 2.5)
A = (U_ * dec) @ Vt_                      # 奇异值 = dec
U, S, Vt = np.linalg.svd(A)
for k in [1, 2, 3, 5, 8, 10]:
    Ak = (U[:, :k] * S[:k]) @ Vt[:k]
    e2 = np.linalg.norm(A - Ak, 2); eF = np.linalg.norm(A - Ak, 'fro')
    print(f"k={k:2d}  ||A-Ak||_2={e2:.6e} (=σ{k+1}={S[k]:.6e})  "
          f"||A-Ak||_F={eF:.6e} (=√Σσ²={np.sqrt((S[k:]**2).sum()):.6e})  "
          f"能量={((S[:k]2).sum()/(S2).sum()):.4%}")
k= 1  ||A-Ak||_2=6.703200e-01 (=σ2=6.703200e-01)  ||A-Ak||_F=9.033085e-01 (=√Σσ²=9.033085e-01)  能量=55.07%
k= 2  ||A-Ak||_2=4.493290e-01 (=σ3=4.493290e-01)  ||A-Ak||_F=6.055058e-01 (=√Σσ²=6.055058e-01)  能量=79.81%
k= 3  ||A-Ak||_2=3.011942e-01 (=σ4=3.011942e-01)  ||A-Ak||_F=4.058827e-01 (=√Σσ²=4.058827e-01)  能量=90.93%
k= 5  ||A-Ak||_2=1.353353e-01 (=σ6=1.353353e-01)  ||A-Ak||_F=1.823748e-01 (=√Σσ²=1.823748e-01)  能量=98.17%
k= 8  ||A-Ak||_2=4.076220e-02 (=σ9=4.076220e-02)  ||A-Ak||_F=5.493025e-02 (=√Σσ²=5.493025e-02)  能量=99.83%
k=10  ||A-Ak||_2=1.831564e-02 (=σ11=1.831564e-02)  ||A-Ak||_F=2.468175e-02 (=√Σσ²=2.468175e-02)  能量=99.97%

每行的两个等号都精确成立到机器精度——这是 定理 2.6.4 最直接的验证。再看能量列: 只用 k=3k=3 个奇异值就抓住了 90.9%90.9\% 的能量,k=8k=8 就有 99.8%99.8\%——这正是「低秩结构」的定量含义:少数几个奇异值就主导了整个矩阵。

# 用随机秩 k 矩阵「挑战」最优性:误差必然不小于 σ_{k+1}
for k in [3, 5]:
    best = np.inf
    for _ in range(200):
        B = rng.normal(size=(m, n)) @ rng.normal(size=(n, n))   # 一般满秩
        Bk = (lambda u, s, vt: (u[:, :k] * s[:k]) @ vt[:k])(*np.linalg.svd(B, full_matrices=False))
        best = min(best, np.linalg.norm(A - Bk, 2))
    print(f"k={k}: 200 个随机秩 {k} 阵的最小误差 = {best:.6e}  ≥  σ{k+1} = {S[k]:.6e}")

结论: 随机秩 kk 矩阵的误差都严格大于(通常是远大于)σk+1\sigma_{k+1},从没有更小的——Eckart–Young 保证 AkA_k 的误差最小。

∎

2.6.6 低秩逼近的应用:图像压缩与 PCA

应用一 · 图像与矩阵的低秩压缩

Eckart–Young 说截断 SVD 是最优的,那么它到底怎么用?先看最直观的一类:压缩。

AkA_k 的存储代价是 k(m+n)k(m+n) 个数(kk 个 σi\sigma_i + UU 的 kk 列 + VV 的 kk 列),而原矩阵需要 mnmn 个数。压缩比

k(m+n)mn.\frac{k(m+n)}{mn}.

本章实测(合成图像,120×120120\times120,包含几个二维正弦叠加与一条亮带):

kk 存储占比 2k/1202k/120 ∥E∥F/∥A∥F\lVert E\rVert_F/\lVert A\rVert_F RMSE PSNR
1 1.7% 0.7243 0.6642 17.3 dB
2 3.3% 0.3182 0.2917 24.4 dB
3 5.0% 0.2336 0.2142 27.1 dB
5 8.3% 0.1938 0.1777 28.7 dB
8 13.3% 0.1122 0.1029 33.5 dB
12 20.0% 0.0152 0.0140 50.8 dB

读表: 只花 20%20\% 的存储就达到 50.850.8 dB(肉眼几乎看不出差别),用 13%13\% 达到 33.533.5 dB(一般图像压缩的水平)。注意 k=3→5k=3\to5 的收益很小(27.1→28.727.1\to28.7),因为 σ4,σ5\sigma_4,\sigma_5 彼此接近(表里 σ4\sigma_4–σ7≈10.1\sigma_7\approx10.1 三个近似相等——图像中那条亮带是低秩的,只贡献少数几个奇异值);k=8→12k=8\to12 收益巨大(33.5→50.833.5\to50.8),因为这里跨过了一段奇异值陡降区。这条「奇异值谱的形状」,就是「这张图能压到什么程度」的答案。

应用二 · PCA(主成分分析)

第二个应用面向数据分析。给定数据中心化后的数据矩阵 X∈Rn×dX\in\mathbb{R}^{n\times d}(nn 个样本、dd 个特征,每列均值为零),PCA 要做的事很直接:把样本投影到「方差最大的几个方向」上。步骤只有四步:

  1. 算协方差矩阵 C=1n−1XTXC=\dfrac{1}{n-1}X^{\mathrm T}X(对称半正定);
  2. 对 XX 做 SVD:X=UΣVTX=U\Sigma V^{\mathrm T};
  3. 主方向 = VV 的列(即 CC 的特征向量);主成分方差 = σi2/(n−1)\sigma_i^2/(n-1)(CC 的特征值);
  4. 取前 kk 列降维:z=VkTx∈Rk\boldsymbol{z}=V_k^{\mathrm T}\boldsymbol{x}\in\mathbb{R}^k,方差解释比 =∑i≤kσi2/∑iσi2=\sum_{i\le k}\sigma_i^2/\sum_i\sigma_i^2。

为什么用 SVD,而不直接对 CC 做特征值分解? 因为 cond(XTX)=cond(X)2\mathrm{cond}(X^{\mathrm T}X)=\mathrm{cond}(X)^2:对协方差矩阵做特征值分解,等于把条件数平方(2.4.4 已经讲过的老问题)。SVD 直接在 XX 上算,误差只经过 cond(X)\mathrm{cond}(X) 一次。这正是「正态方程 vs QR」之争在统计领域的翻版。

本章实测(400400 个二维样本,真实协方差 (3222)\begin{pmatrix}3&amp;2\\2&amp;2\end{pmatrix},其理论特征值 4.5616/0.43844.5616/0.4384): 样本协方差 (3.05042.08622.08622.0822)\begin{pmatrix}3.0504&amp;2.0862\\2.0862&amp;2.0822\end{pmatrix},其特征值 4.7080/0.42474.7080/0.4247(采样波动,与理论值同量级);主方向 ≈(−0.783,−0.622)\approx(-0.783,-0.622)(对应 33 号种子下的样本方向),第一主成分解释 91.7%91.7\% 的方差。

最后核对两条路径的关系:SVD 与特征值分解给出完全一致的结果:σi(Xc)=(n−1)λi(C)\sigma_i(X_c)=\sqrt{(n-1)\lambda_i(C)}(实测 43.3414/13.017243.3414/13.0172 与 399×4.7080=43.34\sqrt{399\times4.7080}=43.34、399×0.4247=13.02\sqrt{399\times0.4247}=13.02 ✓)。详见 2.7 实验三。

思考 · 低秩逼近的三种「正则化」用法

同一个「截断奇异值」操作,在不同场景有不同的名字:

  1. 压缩: 保留前 kk 个奇异值 → 用少量参数重建矩阵(图像、视频、模型权重)。
  2. 去噪: 数据 == 低秩信号 ++ 小噪声。若噪声幅度 ≪σk\ll\sigma_k,则 AkA_k 恰好是信号的估计。截断点选在「奇异值谱的拐点」。
  3. 正则化 / 求解病态问题: 截断伪逆 Ak+=∑i≤kviuiT/σiA_k^{+}=\sum_{i\le k}\boldsymbol{v}_i\boldsymbol{u}_i^{\mathrm T}/\sigma_i 直接把「小奇异值方向被放大」这个病根砍掉。这是 Tikhonov 正则化的一种(硬阈值版本)。

三者的共同点:都由奇异值的大小决定信谁、不信谁。 这就是 SVD 成为数据科学核心工具的深层原因——它提供了一个有原则的「取舍」框架。

2.6.7 小结与常见错误

本节公式速查
概念 公式 / 结论
SVD A=UΣVTA=U\Sigma V^{\mathrm T},U,VU,V 正交,σ1≥⋯≥σr>0\sigma_1\ge\cdots\ge\sigma_r\gt0
与特征值的关系 Avi=σiuiA\boldsymbol{v}_i=\sigma_i\boldsymbol{u}_i;ATAvi=σi2viA^{\mathrm T}A\boldsymbol{v}_i=\sigma_i^2\boldsymbol{v}_i;AATui=σi2uiAA^{\mathrm T}\boldsymbol{u}_i=\sigma_i^2\boldsymbol{u}_i
外积形式 A=∑i≤rσiuiviTA=\sum_{i\le r}\sigma_i\boldsymbol{u}_i\boldsymbol{v}_i^{\mathrm T}
四个子空间 C(A)=C(A)= span{u1..ur}\{\boldsymbol{u}_1..\boldsymbol{u}_r\};N(AT)=N(A^{\mathrm T})= span{ur+1..um}\{\boldsymbol{u}_{r+1}..\boldsymbol{u}_m\};C(AT)=C(A^{\mathrm T})= span{v1..vr}\{\boldsymbol{v}_1..\boldsymbol{v}_r\};N(A)=N(A)= span{vr+1..vn}\{\boldsymbol{v}_{r+1}..\boldsymbol{v}_n\}
范数与条件数 ∥A∥2=σ1\lVert A\rVert_2=\sigma_1;∥A∥F=∑σi2\lVert A\rVert_F=\sqrt{\sum\sigma_i^2};cond2=σ1/σr\mathrm{cond}_2=\sigma_1/\sigma_r;∣det⁡A∣=∏σi\lvert\det A\rvert=\prod\sigma_i(方阵)
伪逆 A+=VΣ+UTA^{+}=V\Sigma^{+}U^{\mathrm T};Penrose 四条件;秩亏最小二乘的最小范数解
列/行满秩简化 列满秩:A+=(ATA)−1ATA^{+}=(A^{\mathrm T}A)^{-1}A^{\mathrm T};行满秩:A+=AT(AAT)−1A^{+}=A^{\mathrm T}(AA^{\mathrm T})^{-1}
Eckart–Young min⁡rank⁡B≤k∥A−B∥2=σk+1\min_{\operatorname{rank}B\le k}\lVert A-B\rVert_2=\sigma_{k+1};Ak=∑i≤kσiuiviTA_k=\sum_{i\le k}\sigma_i\boldsymbol{u}_i\boldsymbol{v}_i^{\mathrm T}
迹不等式 ∣tr⁡(ATB)∣≤∑σi(A)σi(B)\lvert\operatorname{tr}(A^{\mathrm T}B)\rvert\le\sum\sigma_i(A)\sigma_i(B)
数值秩 #{i:σi>tσ1}\#\{i:\sigma_i\gt t\sigma_1\},阈值 tt 需按数据噪声水平选定
常见错误清单 · 自查七条
  1. 把奇异值当特征值。 σi(A)=∣λi(A)∣\sigma_i(A)=\lvert\lambda_i(A)\rvert 一般不成立(只有对称 / 正规矩阵才有 σi=∣λi∣\sigma_i=\lvert\lambda_i\rvert)。反例:A=(0100)A=\begin{pmatrix}0&amp;1\\0&amp;0\end{pmatrix} 的 λi=0\lambda_i=0 而 σ1=1\sigma_1=1。奇异值总非负、总有 min⁡(m,n)\min(m,n) 个;特征值可负可复。
  2. 对 ATAA^{\mathrm T}A 做特征值分解来「算 SVD」。 数学上可行,但 cond(ATA)=cond(A)2\mathrm{cond}(A^{\mathrm T}A)=\mathrm{cond}(A)^2——要白白丢掉一半有效数字。实现里永远用 np.linalg.svd(A)(Golub–Kahan 双对角化,直接作用在 AA 上),不要用 eigh(A.T@A)。
  3. 不截断伪逆就算病态问题。 未截断的 A+A^{+} 会把 1/σmin⁡1/\sigma_{\min} 放大 cond(A)\mathrm{cond}(A) 倍(定理 2.6.3),与直接求逆一样危险。必须设 rcond,或者用 Tikhonov / 截断 SVD。
  4. 把 np.linalg.matrix_rank 的默认阈值当真理。 这个函数的默认阈值是 max⁡(m,n)⋅eps⋅σ1\max(m,n)\cdot\mathrm{eps}\cdot\sigma_1,只适合「精确矩阵数值降秩」;真实带噪数据的秩判定必须按噪声水平设阈值(2.6.4 的思考题)。
  5. 以为 SVD 唯一。 A=UΣVTA=U\Sigma V^{\mathrm T} 中,若某个奇异值有重数(或为零),U,VU,V 的对应列可任意旋转——唯一的只有奇异值(及其重数)。比较两个 SVD 前要理解这一点(类似 QR 的符号不确定,但更强)。
  6. 在数据中心化之前做 PCA。 PCA 的「方差最大方向」依赖均值已扣除;不中心化就做 SVD,第一主方向会指向均值方向——这是初学者最常见的错误(这时所谓的「解释方差」根本不是方差)。
  7. 以为 AkA_k 是唯一的秩 kk 最优逼近。 Eckart–Young 保证 AkA_k 的误差最小;当 σk=σk+1\sigma_k=\sigma_{k+1} 时,最优的矩阵本身不唯一(可取 kk 维奇异子空间内的任意正交基组合)。而最优误差总是 ∥A−Ak∥2=σk+1\lVert A-A_k\rVert_2=\sigma_{k+1}(2.6.4)。
课程预告 · 本节之后
  • SVD 的计算算法:Golub–Kahan 双对角化 + QR 迭代,复杂度 O(mnmin⁡(m,n))O(mn\min(m,n))——原书第 3 章 3.3(QR 方法)是其基础;实践用 LAPACK gesdd(np.linalg.svd 默认);
  • 秩亏最小二乘与正则化:原书第 2 章 2.3.2「关于病态线性方程组的求解问题」与 Tikhonov 正则化;
  • PCA / 潜在语义分析 / 推荐系统:数据科学的应用层,数学内核就是本节;
  • 本章的 SVD 与第一章的条件数在此汇合:cond2(A)=σ1/σr\mathrm{cond}_2(A)=\sigma_1/\sigma_r(2.6.3),「离奇异有多远」有了精确答案。