从入门到入土之——奇异值分解(SVD)
SVD将一个复杂的矩阵变换分解为旋转-拉伸-旋转三个基本操作,提供了关于矩阵秩、四大子空间和最佳低秩近似的完整信息。其推导基于对称矩阵的特征分解,具有坚实的数学基础,可以说是线性代数中最重要、最优雅的分解之一,它提供了理解矩阵基本结构的一个强大框架。
1. 直观理解
先抛开数学公式,从几何角度来感受SVD,想象一个矩阵 A 作为一个线性变换,将一个空间中的向量(例如单位圆)映射到另一个空间(例如一个椭圆)。
SVD的核心思想是:任何矩阵的线性变换效果,都可以被分解为三个简单的基本变换:
-
一个旋转 (V*):在原始空间(输入空间)中,找出一组标准的正交基(v₁, v₂, …, vₙ)旋转一下向量
-
一个缩放 (Σ):在新的旋转后的坐标系下,对向量在各个坐标轴上进行纯粹的拉伸或压缩(缩放因子就是奇异值 σ₁, σ₂, …, σₙ),这是最关键的一步。
-
另一个旋转 (U): 在缩放后的结果上,再进行一次旋转,将其放入目标空间(输出空间)中。
各变换解释:
假设一个 2x2 矩阵 A,对单位圆上所有的点进行变换,使得单位圆最终变成一个椭圆,SVD揭示了一个矩阵的“本质”的拉伸方向和强度,而撇开了旋转的影响。
-
V* 的作用是:找到单位圆上的“主轴方向”(即椭圆的长轴和短轴方向在变换前对应的方向)。
-
Σ 的作用是:将这两个主轴方向分别拉伸 σ₁ 和 σ₂ 倍,这就形成了椭圆的长轴和短轴长度。
-
U 的作用是:将这个拉伸后的椭圆(其轴可能与坐标轴对齐)旋转到它在目标空间中的最终朝向。
2. 数学推导
数学定义
对于任意一个 m × n 的实数矩阵 A,其奇异值分解为:
A=UΣVTA=U\Sigma V^TA=UΣVT
其中:
-
U 是一个 m × m 的正交矩阵(UᵀU = I),列向量 u1,u2,...,umu₁, u₂, ..., u_mu1,u2,...,um 称为 左奇异向量,张成矩阵 A 的列空间。
-
Σ (西格玛) 是一个 m × n 的对角矩阵(非对角元素均为0),其对角线上的元素 σ₁ ≥ σ₂ ≥ … ≥ σₚ ≥ 0(p = min(m, n))称为奇异值,表示缩放因子。
-
V 是一个 n × n 的正交矩阵(VᵀV = I),列向量 v1,v2,...,vnv₁, v₂, ..., v_nv1,v2,...,vn 称为 右奇异向量,张成矩阵 A 的行空间。
数学推导
SVD可以被看作是特征分解在任意矩阵上的推广,特征分解只适用于方阵,而SVD适用于任何矩阵。
2.1 构造对称方阵:
对于一个 m × n 的实数矩阵 A,其转置Aᵀ为一个n × m的实数矩阵,考虑 AᵀA 和 AAᵀ两个实对称方阵(并且是半正定的),其中
- AᵀA 是 n × n 的。
- AAᵀ 是 m × m 的。
2.2 特征分解:
根据实对称矩阵的性质,AᵀA 和 AAᵀ 都可以被正交对角化:
-
ATA=VΛvVTAᵀA = V Λᵥ VᵀATA=VΛvVT
V 的列是 AᵀA 的特征向量,也就是SVD中的 V(右奇异向量)。
Λᵥ 是对角矩阵,其元素是 AᵀA 的特征值 λ。
ATA=(UΣVT)T(UΣVT)=(VΣTUT)(UΣVT)=VΣ2VTA^TA=(U\Sigma V^T)^T(U\Sigma V^T) \\=(V\Sigma^T U^T)(U\Sigma V^T)=V\Sigma^2V^TATA=(UΣVT)T(UΣVT)=(VΣTUT)(UΣVT)=VΣ2VT -
AAT=UΛuUTAAᵀ = U Λᵤ UᵀAAT=UΛuUT
U 的列是 AAᵀ 的特征向量,也就是SVD中的 U(左奇异向量)。
Λᵤ 是对角矩阵,其元素是 AAᵀ 的特征值 λ。
AAT=(UΣVT)(UΣVT)T=(UΣVT)(VΣTUT)=UΣ2UTAA^T=(U\Sigma V^T)(U\Sigma V^T)^T \\=(U\Sigma V^T)(V\Sigma^T U^T)=U\Sigma^2U^TAAT=(UΣVT)(UΣVT)T=(UΣVT)(VΣTUT)=UΣ2UT
2.3 连接特征值与奇异值:
从下面的推导可以得出结论是:AᵀA 和 AAᵀ 拥有相同的非零特征值。
假设 λ 是 AᵀA 的一个特征值,v 是其对应的特征向量,那么:
(AAT)(Av)=A(ATAv)=A(λv)=λ(Av)(AAᵀ)(A v) = A (AᵀA v) = A (λ v) = λ (A v)(AAT)(Av)=A(ATAv)=A(λv)=λ(Av)
这说明 λ 也是 AAᵀ 的特征值,而其对应的特征向量是 A v(需要归一化)。
因此,Λu=Σ2Λᵤ =\Sigma^2Λu=Σ2,奇异值 σ_i 就是这些特征值的平方根: σi=λiσ_i = \sqrt{λ_i}σi=λi。
2.4 组装SVD:
从 AᵀA 的特征分解中得到 V 和奇异值 (Σ 的对角元素)。
左奇异向量 U 可以通过 ui=(1/σi)∗Aviu_i = (1 / σ_i) * A v_iui=(1/σi)∗Avi 来计算(对于所有 σ_i > 0 的项),对于 σ_i = 0 的项,U 的剩余列可以任意扩充为一组标准正交基。
3. 原理分析与性质
降维与矩阵的真正秩
SVD特性之一是它可以可靠地确定矩阵的秩,数值计算中,由于浮点数精度问题,判断一个矩阵的秩是很困难的(某个特征值到底是0还是1e-15?)。
在SVD中,矩阵 A 的秩 r 就等于非零奇异值的个数。
A=UΣVT=σ1u1v1T+σ2u2v2T+...+σrurvrTA = U Σ Vᵀ = σ₁ u₁ v₁ᵀ + σ₂ u₂ v₂ᵀ + ... + σ_r u_r v_rᵀA=UΣVT=σ1u1v1T+σ2u2v2T+...+σrurvrT
这意味着矩阵 A 可以由 r 个“秩一矩阵” (uiviT)(u_i v_iᵀ)(uiviT) 加权求和而来,权重就是奇异值,奇异值的大小代表了该分量在矩阵 A 中的“重要性”,SVD揭示了矩阵的四个基本子空间:
- 行空间:由 V 的前 r 列 (v1,...,vr)(v₁, ..., v_r)(v1,...,vr) 张成。
- 零空间:由 V 的后 n - r 列 (vr+1,...,vn)(v_{r+1}, ..., v_n)(vr+1,...,vn) 张成。
- 列空间:由 U 的前 r 列 (u1,...,ur)(u₁, ..., u_r)(u1,...,ur) 张成。
- 左零空间:由 U 的后 m - r 列 (ur+1,...,um)(u_{r+1}, ..., u_m)(ur+1,...,um) 张成。
最佳低秩逼近
这是SVD的一个极其重要的应用。如果我们想用一个秩为 k(k < r)的矩阵 A_k 来近似原始矩阵 A,那么在弗罗贝尼乌斯范数(Frobenius norm)和谱范数(spectral norm)意义下的最佳近似是:
Ak=σ1u1v1T+σ2u2v2T+...+σkukvkTA_k = σ₁ u₁ v₁ᵀ + σ₂ u₂ v₂ᵀ + ... + σ_k u_k v_kᵀAk=σ1u1v1T+σ2u2v2T+...+σkukvkT
也就是说,我们只需保留前 k 个最大的奇异值及其对应的奇异向量,丢弃那些不重要的(小的)奇异值分量。这构成了数据压缩、降维和去噪的数学基础。
4. 示例
设 A=[[2,0][0,3]]A = \begin{bmatrix} [2,0]\\ [0,3]\end{bmatrix}A=[[2,0][0,3]],这是一个对角矩阵。
1. 计算 AᵀA 和 AAᵀ:
ATA=[[4,0][0,9]]AᵀA =\begin{bmatrix} [4,0]\\ [0,9]\end{bmatrix}ATA=[[4,0][0,9]]
AAT=[[4,0][0,9]]AAᵀ = \begin{bmatrix} [4,0]\\ [0,9]\end{bmatrix}AAT=[[4,0][0,9]]
2. 特征分解:
AᵀA 的特征值和特征向量:
λ₁ = 9, v₁ = [0, 1]ᵀ
λ₂ = 4, v₂ = [1, 0]ᵀ
按奇异值从大到小排序,所以 σ₁ = √9 = 3, σ₂ = √4 = 2。
对应 σ₁=3 的 v₁ 是 [0, 1]ᵀ
对应 σ₂=2 的 v₂ 是 [1, 0]ᵀ
因此 V=[[0,1][1,0]]V = \begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix}V=[[0,1][1,0]] (列是特征向量)。
3. 奇异值:
σ₁ = √9 = 3
σ₂ = √4 = 2
Σ=[[3,0][0,2]]Σ = \begin{bmatrix} [3,0]\\ [0,2]\end{bmatrix}Σ=[[3,0][0,2]]
4. 左奇异向量 U:
我们可以用公式 ui=(1/σi)Aviu_i = (1 / σ_i) A v_iui=(1/σi)Avi 计算。
u1=(1/3)∗[[2,0][0,3]]∗[0,1]T=(1/3)∗[0,3]T=[0,1]Tu₁ = (1/3) *\begin{bmatrix} [2,0]\\ [0,3]\end{bmatrix} * [0, 1]ᵀ = (1/3) * [0, 3]ᵀ = [0, 1]ᵀu1=(1/3)∗[[2,0][0,3]]∗[0,1]T=(1/3)∗[0,3]T=[0,1]T
u2=(1/2)∗[[2,0][0,3]]∗[1,0]T=(1/2)∗[2,0]T=[1,0]Tu₂ = (1/2) *\begin{bmatrix} [2,0]\\ [0,3]\end{bmatrix} * [1, 0]ᵀ = (1/2) * [2, 0]ᵀ = [1, 0]ᵀu2=(1/2)∗[[2,0][0,3]]∗[1,0]T=(1/2)∗[2,0]T=[1,0]T
因此 U=[[0,1][1,0]]U = \begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix}U=[[0,1][1,0]]。
5. 最终SVD:
A=UΣVT=[[0,1][1,0]]∗[[3,0][0,2]]∗[[0,1][1,0]]A = U Σ Vᵀ =\begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix} *\begin{bmatrix} [3,0]\\ [0,2]\end{bmatrix} * \begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix}A=UΣVT=[[0,1][1,0]]∗[[3,0][0,2]]∗[[0,1][1,0]]
6. 验证:
UΣ=[[0∗3,1∗2][1∗3,0∗2]]=[[0,2][3,0]](UΣ)VT=[[0,2][3,0]]∗[[0,1][1,0]]=[[2,0][0,3]]=AU Σ = \begin{bmatrix} [0*3, 1*2]\\ [1*3, 0*2]\end{bmatrix}= \begin{bmatrix} [0, 2]\\ [3, 0]\end{bmatrix}\\
(U Σ) Vᵀ = \begin{bmatrix} [0, 2]\\ [3, 0]\end{bmatrix}* \begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix} = \begin{bmatrix} [2, 0]\\ [0,3]\end{bmatrix}= AUΣ=[[0∗3,1∗2][1∗3,0∗2]]=[[0,2][3,0]](UΣ)VT=[[0,2][3,0]]∗[[0,1][1,0]]=[[2,0][0,3]]=A
验证成功!
这个例子很简单,但展示了SVD的组成部分, 对于非对角矩阵,计算过程更复杂,但原理相同。
5. 应用场景
-
点云配准/ICP:求解两组点云之间的最佳刚体变换(旋转 R 和平移 t)。通过SVD可以优雅地求出使得对应点距离和最小的最优 R。
-
SLAM中的矩阵分解:在解决优化问题时,例如求解线性系统 Ax=b,SVD可以提供数值稳定的解。
-
位姿估计:从本质矩阵或单应矩阵中恢复相机旋转 R 和平移 t 需要用到SVD。
-
矩阵伪逆 :对于非方阵或奇异矩阵 A,其伪逆 A⁺ 可以通过SVD计算:A⁺ = V Σ⁺ Uᵀ,其中 Σ⁺ 是 Σ 的转置后非零元素取倒数。
-
降维与主成分分析 (PCA):PCA本质上就是对数据的协方差矩阵进行特征分解(等同于对中心化后的数据矩阵进行SVD)。最大的奇异值对应的奇异向量就是最主要的主成分方向。