引用Gilbert老爷子的话:
The Singular Value Decomposition is a highlight of linear algebra.
奇异值分解,形式上是把一个矩阵 $A$写作$A=U\Sigma V^T$,其中 $U、V$ 是正交阵,$\Sigma$是对角阵。一方面看,我们相当于在输入空间和输出空间同时换基得到一个漂亮的对角阵,也就是把线性映射拆成旋转、拉伸、旋转,另一方面,我们展开$\Sigma$ 也就得到:
$$ A=\sigma_1u_1v_1^T+\sigma_2u_2v_2^T+…… $$
我们可以把 $A$拆成若干个秩一矩阵的和,如果我们需要,可以丢掉$\sigma$也就是奇异值较小的那些矩阵,从而得到一个漂亮的近似,我们可以证明,保留前$k$大的奇异值对应矩阵,是$A$的最佳秩$k$近似,这也就是$PCA$ 定理。
任意矩阵都可以这么分解
我们知道,实对称矩阵可以正交对角化,但一般的矩阵并没有这么好的性质。幸运的是,对称矩阵是易于构造的,Gilbert老爷子说,关于 $A$的问题,往往可以变成$A^TA$ 的问题。
$$ A^TA=PDP^T $$
做移项,暴露出对角阵:
$$ P^TA^TAP=D $$
这时,我们可以把 $AP$看成整体,记为$G$,也就有 $G^T G=D$,这说明 $G$是一个正交阵!因为非对角元是列向量之间的内积都是$0$ ,那么我们可以得到:
$$ AP=G $$
是一个正交阵,我们设 $P=[\beta_1, \beta_2 … \beta_n]$,$G=[\alpha_1, \alpha_2 … \alpha_n]$于是有:
$$ [A\beta_1, A\beta_2 ... A\beta_n]=[\alpha_1, \alpha_2 ... \alpha_n] $$
利用实对称阵的特征值非负,$D$我们设为$diag (\sigma_1^2 … \sigma_n^2)$,那么也就有 $||\alpha_i||=\sigma_i$,我们于是可以除以 $\sigma_i$来构造标准正交基,记$\gamma_i=\alpha_i / \sigma_i$,于是有:
$$ AP=[\gamma_1, \gamma_2 ... \gamma_n]\begin{pmatrix} \sigma_1 & 0 & 0 & \cdots & 0 \\ 0 & \sigma_2 & 0 & \cdots & 0 \\ 0 & 0 & \sigma_3 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & \sigma_n \end{pmatrix} $$
因为 $P$也是正交阵,两边右乘$P^T$ 就得到了我们想要的形式。
从这里我们也可以看到,SVD中的对角阵由 $A^TA$的特征值开根得到,不难知道同样可以由$AA^T$的特征值得到,计算上看$A$ 的形状我们可以选二者中比较小的那个算,会好算一点(
SVD与四个基本子空间
我们按照 $\sigma$的大小依次排列,让$\sigma_1$最大,$\sigma_n$最小,这样利用$\sigma$的非负性我们就知道从第$r+1$个奇异值开始$\sigma$都是$0$ ,$r$ 是矩阵的秩。这样我们也就可以看出:
$$ A\beta_{r+1}=...=A\beta_n=0 $$
这说明 $\beta_{r+1}…\beta_n$构成$A$的零空间,那么前$r$个$\beta$是后面向量的正交补,说明前面的向量构成$A$的行空间,类似的做转置我们就知道,前$r$个$\gamma$构成$A$的列空间,剩下的$\gamma$构成$A$的左零空间。SVD直接将$A$的四个基本子空间暴露在我们眼前。那么再利用$A\beta_i=\sigma_i \gamma_i$,我们就得到了行空间和列空间之间的映射,我们可以做一个转置:
$$ A^T=V\Sigma U^T $$
然后再右乘 $U$ 就有:
$$ A^T \gamma_i=\sigma_i\beta_i $$
也就是说,行列空间存在双射。这与他们维度相等吻合。
伪逆快速求解
当一个矩阵 $A$不是方阵,或者它是方阵但不可逆(奇异矩阵)时,我们无法定义标准逆矩阵$A^{-1}$。为了解决这个问题,数学家提出了广义逆的概念,其中最常用、最精确的一种叫做 Moore-Penrose 伪逆(通常记作 $A^+$)。
1. 基于 SVD 的直观定义
这是理解伪逆最简单、最实用的方式。假设矩阵 $A$ 的奇异值分解为:
$$ A = U \Sigma V^T $$
那么 $A$的伪逆$A^+$ 定义为:
$$ A^+ = V \Sigma^+ U^T $$
这里的 $\Sigma^+$ 是怎么得到的?
将 $\Sigma$矩阵转置(形状从$m \times n$变为$n \times m$)。
将对角线上所有非零的奇异值取倒数($\frac{1}{\sigma_i}$)。
保持所有的 0 元素不变。
2. 伪逆必须满足的四个条件
一个矩阵 $G$要想成为$A$ 的 Moore-Penrose 伪逆,必须严格满足以下四个 Penrose 方程:
**$AGA = A$
**$GAG = G$
**$(AG)^H = AG$
$(GA)^H = GA$
容易验证,SVD给出的伪逆符合这四个方程,而且是易求的。
这时,若要解 $Ax = b$,只要两边同乘伪逆就得到了最小二乘解。
主成分分析 (Principal Component Analysis) 定理与证明
1. 定理描述
定理 (Principal Component Analysis):
$$ \min_{\text{dim}V=k} Q(A, V) = Q(A, V_k) = \lambda_{k+1} + \dots + \lambda_m $$
[!abstract] 物理意义
即在欧氏空间 $\mathbb{R}^m$的所有$k$维子空间中,点$\alpha_1, \dots, \alpha_n$到主子空间$V_k = \langle \beta_1, \dots, \beta_k \rangle$ 的距离的平方和最小。
2. 证明过程
第一步:子空间投影表示
设 $V$是$\mathbb{R}^m$的一个$k$ 维子空间,$\omega_1, \dots, \omega_k$是$V$ 的一组标准正交基。
记 $B = [\omega_1 \dots \omega_k]$,则有 $B^T B = I_k$。
$B B^T \alpha_i$是$\alpha_i$在子空间$V$ 上的正交投影:
$$ \begin{aligned} & (\alpha_i, \omega_1)\omega_1 + \dots + (\alpha_i, \omega_k)\omega_k \\ = & \omega_1(\omega_1^T \alpha_i) + \dots + \omega_k(\omega_k^T \alpha_i) \\ = & (\omega_1 \omega_1^T + \dots + \omega_k \omega_k^T)\alpha_i = B B^T \alpha_i \end{aligned} $$
第二步:勾股定理与目标转化
对 $\alpha_i (i=1, \dots, n)$ 应用勾股定理后求和:
$$ \underbrace{\sum \|\alpha_i\|^2}_{\text{tr}(A^T A) = \lambda_1 + \dots + \lambda_m \text{ (固定)}} = \underbrace{\sum \|B B^T \alpha_i\|^2}_{\text{正交投影平方和}} + \underbrace{\sum \|\alpha_i - B B^T \alpha_i\|^2}_{\text{垂线平方和} = Q(A, V)} $$
欲使垂线平方和 $Q(A, V)$ 取最小值,只需让正交投影的平方和取最大,即最大化:
$$ \sum_{1 \le i \le n} \|B B^T \alpha_i\|^2 = \|B B^T A\|_F^2 $$
第三步:矩阵迹的化简
利用 Frobenius 范数与迹的关系进行推导:
$$ \begin{aligned} \|B B^T A\|_F^2 &= \text{tr}((B B^T A)^T (B B^T A)) & \color{green}{\text{Frobenius 范数性质}} \\ &= \text{tr}(A^T B \underbrace{B^T B}_{I_k} B^T A) & \color{green}{B^T B = I_k} \\ &= \text{tr}(A^T B B^T A) \\ &= \text{tr}(B^T A A^T B) \\ &= \text{tr}(B^T P D P^T B) & \color{green}{\text{设 } AA^T = PDP^T} \\ &= \text{tr}(C^T D C) & \color{green}{\text{令 } C = P^T B} \\ &= \text{tr}(C C^T D) \end{aligned} $$
第四步:约束条件分析
记 $m \times k$矩阵$C = P^T B$,由
$$ C^T C = B^T P P^T B = B^T B = I_k $$
知 $C$的$k$ 列也由两两正交的单位向量组成。
故 $C$的列组可扩充成$\mathbb{R}^m$ 的标准正交基,排成一个正交矩阵。
故 $C$第$i$行元素的平方和$c_i$满足条件$0 \le c_i \le 1$,且:
$$ c_1 + \dots + c_m = \text{tr}(C C^T) = \text{tr}(C^T C) = k $$
第五步:得出结论
由 $\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_m$ 及排序不等式,得:
$$ \text{tr}(C C^T D) = c_1 \lambda_1 + \dots + c_m \lambda_m \le \lambda_1 + \lambda_2 + \dots + \lambda_k $$
等号可在 $C = \begin{bmatrix} I_k \ 0 \end{bmatrix}$,$B = P C = [\beta_1 \dots \beta_k]$,即 $V = \langle \beta_1, \dots, \beta_k \rangle = V_k$ 时取到。
[!important] 唯一性
当 $\lambda_k > \lambda_{k+1}$时,等号仅在$V_k = \langle \beta_1, \dots, \beta_k \rangle$取到,此时$k$ 维主子空间唯一。
矩阵的最佳低秩逼近 (Best Low-Rank Approximation)
1. 定理描述
设 $A = P S Q^T = [\beta_1 \beta_2 \dots \beta_m] \begin{bmatrix} \sigma_1 & & & \ & \ddots & & \ & & \sigma_r & \ & & & 0 \end{bmatrix} \begin{bmatrix} \gamma_1^T \ \gamma_2^T \ \vdots \ \gamma_n^T \end{bmatrix}$是实矩阵$A \in \mathbb{M}_{m,n}(\mathbb{R})$ 的 SVD 分解。
其中:
- $P, Q$分别是$m$级和$n$ 级正交矩阵。
- $r$是矩阵$A$ 的秩 ($r = \text{rank}(A)$)。
- $\sigma_1 \ge \dots \ge \sigma_r > 0$是$A$ 的奇异值。
记 $B_k = [\beta_1 \dots \beta_k], 1 \le k \le r$,定义:
$$ A_k = \sigma_1 \beta_1 \gamma_1^T + \dots + \sigma_k \beta_k \gamma_k^T = B_k B_k^T A $$
[!tip] 核心结论
$A_k$是$A$在秩$k$ 下的最佳逼近:
即对任意秩为 $k$的矩阵$M \in \mathbb{M}_{m,n}(\mathbb{R})$,有:
$$ \|A - M\|_F^2 \ge \|A - A_k\|_F^2 = \sigma_{k+1}^2 + \dots + \sigma_r^2 $$
2. 相关定义:Frobenius 范数
这里 $|A|F$表示实矩阵$A = [a{ij}]$ 的 Frobenius 范数:
$$ \|A\|_F = \sqrt{\text{tr}(A^T A)} = \sqrt{\text{tr}(A A^T)} = \sqrt{\sum_{\substack{1 \le i \le m \\ 1 \le j \le n}} a_{ij}^2} = \sqrt{\sigma_1^2 + \dots + \sigma_r^2} $$
3. 证明要点
记 $A = [\alpha_1 \dots \alpha_n]$,$M = [\xi_1 \dots \xi_n] \in \mathbb{M}_{m,n}(\mathbb{R})$。
设 $V = \langle \xi_1, \dots, \xi_n \rangle$ ($\dim V = k$) 表示 $M$ 的列空间。
- 距离不等式:
$$ \|\alpha_i - \xi_i\|^2 \ge d(\alpha_i, V)^2, \quad 1 \le i \le n $$
其中 $d(\alpha, V)$表示向量$\alpha$到子空间$V$ 的欧氏距离。
- 目标函数转化:
$$ \|A - M\|_F^2 \ge \sum_{i=1}^n d(\alpha_i, V)^2 = Q(A, V) $$
根据 PCA 定理:
$$ Q(A, V) \ge Q(A, V_k) = \sigma_{k+1}^2 + \dots + \sigma_r^2 $$
取等条件:
- 这里 $V_k = \langle \beta_1, \dots, \beta_k \rangle$是$A$ 列向量分布的主子空间。
- 上式中的等号可在 $M = A_k = B_k B_k^T A$ 时取到。
- 此时 $M$的列向量$B_k B_k^T \alpha_i$刚好是$\alpha_i$在$k$维主子空间$V_k$ 上的正交投影。
最终结果:
- $|\alpha_i - B_k B_k^T \alpha_i|^2 = d(\alpha_i, V_k)^2, \quad 1 \le i \le n$*$|A - A_k|F^2 = Q(A, V_k) = \sigma{k+1}^2 + \dots + \sigma_r^2$
这些结果可以用于图片压缩,将图片转化为灰度矩阵后保留其前 $k$ 大的奇异值,就达到了压缩图片的效果。以下是一个python利用奇异值分解实现图片压缩的代码:
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
# 1. 加载图片并转换为灰度矩阵
img = Image.open('C:/Users/32372/Desktop/wallpaper/【哲风壁纸】三体-智子.png').convert('L')
A = np.array(img)
# 2. 进行奇异值分解
U, s, Vt = np.linalg.svd(A)
# 3. 取前 k 个奇异值进行重构
def reconstruct(k):
# s 是一个一维向量,需要构建成 Sigma 矩阵
Sigma_k = np.diag(s[:k])
# 矩阵相乘:U_k * Sigma_k * V^T_k
A_k = U[:, :k] @ Sigma_k @ Vt[:k, :]
return A_k
# 4. 可视化对比
plt.figure(figsize=(12, 4))
for i, k in enumerate([5, 20, 100]):
plt.subplot(1, 3, i+1)
plt.imshow(reconstruct(k), cmap='gray')
plt.title(f'Top {k} Singular Values')
plt.show()