回顾:
当对角化(特征值分解)不可用时,我们转而寻求奇异值分解SVD,可将其视为“广义的特征值分解”
下面将看到,奇异值分解是矩阵最终的、最好的分解
ps.本文主要从“广义的特征值分解”角度来介绍SVD,也可从几何意义上理解
若矩阵 A m × n \boldsymbol{A}_{m\times n} Am×n的秩为 r r r,行数为 m m m,列数为 n n n
奇异值分解SVD(Singular value decomposition):任意矩阵可分解为
A
m
×
n
=
U
m
×
m
Σ
m
×
n
V
n
×
n
T
\boldsymbol{A}_{m\times n} =\boldsymbol{U}_{m\times m} \boldsymbol{\Sigma}_{m\times n} \boldsymbol{V}^{T}_{n\times n}
Am×n=Um×mΣm×nVn×nT其中正交矩阵
U
\boldsymbol{U}
U保存左奇异向量,正交矩阵
V
\boldsymbol V
V保存右奇异向量
对角矩阵
Σ
\boldsymbol{\Sigma}
Σ保存了奇异值
σ
\sigma
σ,并且一定有奇异值
σ
≥
0
\sigma\geq 0
σ≥0(或为正奇异值,或为0)
对于方阵,其特征向量满足 A x = λ x \boldsymbol{A} \mathbf{x}=\lambda \mathbf{x} Ax=λx,矩阵形式为 A S = S Λ \boldsymbol{A}\boldsymbol{S}=\boldsymbol{S} \boldsymbol{\Lambda} AS=SΛ
在此基础上,若存在 n n n个无关特征向量( S \boldsymbol{S} S可逆),即可获得 A = S Λ S − 1 \boldsymbol{A} =\boldsymbol{S} \boldsymbol{\Lambda} \boldsymbol{S}^{-1} A=SΛS−1
对于一般的“长方形矩阵”,向量
A
x
\boldsymbol{A} \mathbf{x}
Ax和
x
\mathbf{x}
x维度直接不对齐
我们退而求其次,类比“特征向量”,定义奇异向量:
A
v
i
=
σ
i
u
i
,
i
=
1
,
⋯
,
r
\boldsymbol{A} \mathbf{v}_{i}=\sigma_{i} \mathbf{u}_{i}, i=1, \cdots, r
Avi=σiui,i=1,⋯,r
写为矩阵形式
A
V
r
×
n
=
U
m
×
r
Σ
r
×
r
A
[
v
1
⋯
v
r
]
=
[
u
1
⋯
u
r
]
[
σ
1
⋱
σ
r
]
AVr×n=Um×rΣr×rA[v1⋯vr]=[u1⋯ur][σ1⋱σr]
AVr×nA[v1⋯vr]=Um×rΣr×r=[u1⋯ur]⎣⎡σ1⋱σr⎦⎤
要注意的是,由于矩阵秩
r
r
r的限制,上面只能找到
r
r
r个
σ
i
>
0
\sigma_i>0
σi>0
此即 U m × n V ^ n × r = U ^ m × r Σ ^ r × r \mathbf U_{m\times n}\hat{\mathbf V}_{n\times r}=\hat{\mathbf U}_{m\times r}\hat{\mathbf \Sigma}_{r\times r} Um×nV^n×r=U^m×rΣ^r×r,对应下图中的红色部分
下面将蓝色部分“填充”完整,得到正交矩阵(方阵) U \boldsymbol{U} U和 V \boldsymbol{V} V
剩下的奇异值
σ
i
=
0
\sigma_i=0
σi=0,满足关系
A
v
i
=
0
(
=
σ
i
u
i
)
,
i
=
r
+
1
,
⋯
,
n
\boldsymbol{A} \mathbf{v}_{i}=0(=\sigma_{i} \mathbf{u}_{i}), i=r+1, \cdots, n
Avi=0(=σiui),i=r+1,⋯,n
A
V
n
×
n
=
U
m
×
m
Σ
m
×
n
A
[
v
1
⋯
v
r
⋯
v
n
]
=
[
u
1
⋯
u
r
⋯
u
m
]
[
σ
1
⋱
σ
r
]
AVn×n=Um×mΣm×nA[v1⋯vr⋯vn]=[u1⋯ur⋯um][σ1⋱σr]
AVn×nA[v1⋯vr⋯vn]=Um×mΣm×n=[u1⋯ur⋯um]⎣⎢⎢⎡σ1⋱σr⎦⎥⎥⎤
最终,我们得到了SVD:
A
V
=
U
Σ
⇒
A
=
U
Σ
V
T
\mathbf A\mathbf V=\mathbf U\mathbf \Sigma\Rightarrow\mathbf A=\mathbf U\mathbf \Sigma\mathbf V^T
AV=UΣ⇒A=UΣVT
奇异值分解SVD等价于:在整个 R n \mathbf R^n Rn空间中,找出一组标准正交基 v i \mathbf{v}_{i} vi,且这组基经过矩阵 A \mathbf {A} A的线性变换后,能够生成 R m \mathbf R^m Rm空间中的一组标准正交基 u i \mathbf u_i ui,且满足 A v i = σ i u i \mathbf {A}\mathbf v_i=\sigma_i \mathbf u_i Avi=σiui( σ i \sigma_i σi为伸缩因子)
这里的美妙之处在于,我们找到了一组特殊的标准正交基 V \mathbf V V,它们经过 A \mathbf {A} A的线性变换后,仍得到一组标准正交基 U \mathbf U U( A V = U Σ \mathbf A\mathbf V=\mathbf U\mathbf \Sigma AV=UΣ)
实际上,而正定矩阵的对角化 A = Q Λ Q T \boldsymbol{A} =\boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^{T} A=QΛQT可以视为这里SVD的特殊情况,其 U = V = Q \mathbf U=\mathbf V=\mathbf Q U=V=Q
ps. 必须正定/半正定,从而特征值非负,对应这里的 Σ = Λ \boldsymbol{\Sigma}=\boldsymbol{\Lambda} Σ=Λ
前置知识:
矩阵 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA和 A A T \boldsymbol{A} \boldsymbol{A}^{T} AAT是对称矩阵,并且必为半正定/正定矩阵(特征值全为非负数)
当 A \mathbf A A列满秩 r = n r=n r=n时为正定的,正定矩阵对角化结果 A = Q Λ Q T \boldsymbol{A} =\boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^{T} A=QΛQT
根据上面,SVD就是要找出两组标准正交基,满足 A v i = σ i u i \mathbf {A}\mathbf v_i=\sigma_i \mathbf u_i Avi=σiui( σ i ≥ 0 \sigma_i\geq0 σi≥0为伸缩因子),两组标准正交基分别组成了正交矩阵 U \boldsymbol{U} U和正交矩阵 V \boldsymbol{V} V
SVD中,我们要找正交矩阵,并且还需要非负数的奇异值,自然可以联想到对 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA做特征值分解/相似对角化,其中正好出现了正交矩阵和非负数的特征值
表面上 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT为 m m m阶方阵(有 m m m个特征值), A T A \boldsymbol{A}^{T}\boldsymbol{A} ATA为 n n n阶方阵(有 n n n个特征值)
实际上 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT与 A T A \boldsymbol{A}^{T}\boldsymbol{A} ATA有相同的非零特征值,不匹配的那部分都是0特征值,这与之前的推导一致
(特征值的性质: A B \boldsymbol{A}\boldsymbol{B} AB与 B A \boldsymbol{B}\boldsymbol{A} BA有相同的非零特征值;当 A \boldsymbol{A} A和 B \boldsymbol{B} B均为 n n n阶方阵, A B \boldsymbol{A}\boldsymbol{B} AB与 B A \boldsymbol{B}\boldsymbol{A} BA有相同特征值)
实际上,0奇异值对应的那些左/右奇异向量,也就是 A A T \boldsymbol{A} \boldsymbol{A}^{T} AAT和 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA的零空间中的正交向量
另外,若 A \boldsymbol{A} A为对称/反对称矩阵,则满足 A A T = A T A \boldsymbol{A}\boldsymbol{A}^{T}=\boldsymbol{A}^{T}\boldsymbol{A} AAT=ATA,此时 U = V \boldsymbol{U}=\boldsymbol{V} U=V
但注意,这样的做法是错误的
原因:有可能求出的特征向量
v
i
\mathbf{v}_i
vi和
u
i
\mathbf{u}_i
ui符号不匹配(从而
A
=
U
Σ
V
T
\boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T}
A=UΣVT不成立),这是因为在
A
v
i
=
σ
i
u
i
\mathbf {A}\mathbf v_i=\sigma_i \mathbf u_i
Avi=σiui中我们默认
σ
i
>
0
\sigma_i>0
σi>0;
因此,获取
U
\boldsymbol{U}
U时,应当用
A
V
=
U
Σ
\boldsymbol{A}\boldsymbol{V} =\boldsymbol{U} \boldsymbol{\Sigma}
AV=UΣ来帮助确定特征向量
u
i
\mathbf{u}_i
ui所取的符号
这里还有一个小问题:若把 u i \mathbf u_i ui视为上述的 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT的特征向量,我们还必须验证各个 u i \mathbf u_i ui互相正交
(原因:重特征值有一个特征子空间,其中任意一组基都是特征向量,不一定正交)
验证各个 u i \mathbf u_i ui互相正交:
u 1 T u 2 = ( A v 1 σ 1 ) T ( A v 2 σ 2 ) = v 1 T A T A v 2 σ 1 σ 2 = v 1 T σ 2 2 v 2 σ 1 σ 2 = σ 2 σ 1 v 1 T v 2 = 0 \mathbf{u}_{1}^{T} \mathbf{u}_{2}=\left(\frac{A \mathbf{v}_{1}}{\sigma_{1}}\right)^{T}\left(\frac{A \mathbf{v}_{2}}{\sigma_{2}}\right)=\frac{\mathbf{v}_{1}^{T} A^{T} A \mathbf{v}_{2}}{\sigma_{1} \sigma_{2}}=\frac{\mathbf{v}_{1}^{T} \sigma_{2}^2 \mathbf{v}_{2}}{\sigma_{1} \sigma_{2}}=\frac{\sigma_{2}}{\sigma_{1}} \mathbf{v}_{1}^{T} \mathbf{v}_{2}=0 u1Tu2=(σ1Av1)T(σ2Av2)=σ1σ2v1TATAv2=σ1σ2v1Tσ22v2=σ1σ2v1Tv2=0
但是,当矩阵规模较大时,上述的
A
T
A
\boldsymbol{A}^{T} \boldsymbol{A}
ATA方法计算量太大
所以实际中并不使用上述方法求SVD,我们通过这个过程进一步理解SVD即可
A
=
U
Σ
V
T
=
(
U
Σ
U
T
)
U
V
T
\boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T}=(\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^T) \boldsymbol{U} \boldsymbol{V}^{T}
A=UΣVT=(UΣUT)UVT
由此得到了一种新的分解,即“极分解”(Polar decomposition)
A
=
S
Q
\boldsymbol{A} =\boldsymbol S \boldsymbol Q
A=SQ其中,
几何上的意义:任意矩阵,对应的线性变换可拆分为伸缩、旋转(还有投影)
SVD分解结果(奇异值) A = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT,展示了矩阵 A \boldsymbol{A} A的各方面特征
另外, A \boldsymbol{A} A的零空间由 V \boldsymbol{V} V中那些特征值为0的特征向量(即 v 2 \mathbf v_2 v2)给出,因为此时 A V = U Σ = 0 \boldsymbol{A}\boldsymbol{V} =\boldsymbol{U} \boldsymbol{\Sigma}=0 AV=UΣ=0
更多的,求 A \boldsymbol{A} A的左零空间、列空间等…也能从SVD中找到答案,详见笔记10-3
推论:矩阵行列式
d
e
t
(
A
)
det(\boldsymbol{A})
det(A)=特征值乘积
λ
1
λ
2
.
.
.
λ
n
\lambda_1\lambda_2...\lambda_n
λ1λ2...λn=奇异值乘积
σ
1
σ
2
.
.
.
σ
n
\sigma_1\sigma_2...\sigma_n
σ1σ2...σn
原因:
d
e
t
(
A
)
=
d
e
t
(
U
Σ
V
T
)
=
d
e
t
(
Σ
)
det(\boldsymbol{A}) =det(\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T})=det(\boldsymbol{\Sigma})
det(A)=det(UΣVT)=det(Σ)(正交矩阵行列式为0)