回顾:
- 对于有n个线性无关特征向量的矩阵,可对角化 A = S Λ S − 1 \boldsymbol{A} =\boldsymbol{S} \boldsymbol{\Lambda} \boldsymbol{S}^{-1} A=SΛS−1,特征向量矩阵 S \boldsymbol{S} S列向量为特征向量
- 对于正定矩阵,特征值都是正数,所有特征向量之间是正交的,故特征向量矩阵 Q \boldsymbol{Q} Q为正交矩阵,其对角化结果 A = Q Λ Q T \boldsymbol{A} =\boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^{T} A=QΛQT(视为奇异值分解的特殊情况)
- 对于一般的任意矩阵,奇异值分解 A = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT,其中 U \boldsymbol{U} U和 V \boldsymbol V V为正交矩阵
当对角化(特征值分解)不可用时,我们转而寻求奇异值分解SVD,可将其视为“广义的特征值分解”
下面将看到,奇异值分解是矩阵最终的、最好的分解
ps.本文主要从“广义的特征值分解”角度来介绍SVD,也可从几何意义上理解
奇异值分解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(总是约定奇异值非负)
SVD的由来
对于方阵,其特征向量满足 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
]
\begin{aligned} A V_{r \times n}&=U_{m \times r} \Sigma_{r \times r} \\ A\left[v_{1} \cdots v_{r}\right]&=\left[u_{1} \cdots u_{r}\right]\left[\begin{array}{lll} \sigma_{1} & & \\ & \ddots & \\ & & \sigma_{r}\end{array}\right] \end{aligned}
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
]
\begin{aligned} A V_{n \times n}&=U_{m \times m} \Sigma_{m \times n} \\ A\left[v_{1} \cdots v_{r} \cdots v_{n}\right]&=\left[u_{1} \cdots u_{r} \cdots u_{m}\right]\left[\begin{array}{lll} \sigma_{1} & && \\ & \ddots && \\ & & \sigma_{r}& \\ & & & \end{array}\right]\end{aligned}
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
- 正交矩阵 V n × n \boldsymbol{V}_{n\times n} Vn×n对应 R n \mathbf R^n Rn空间中的一组标准正交基
- 正交矩阵 U m × m \boldsymbol{U}_{m\times m} Um×m对应 R m \mathbf R^m Rm空间中的一组标准正交基
- 注意,这时 Σ m × n \boldsymbol{\Sigma}_{m\times n} Σm×n不是对角阵,但是其中蕴含了一个对角阵
奇异值分解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 = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT中的 U \boldsymbol{U} U和 V \boldsymbol{V} V
前置知识:
矩阵 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 T A \boldsymbol{A}^{T} \boldsymbol{A} ATA为正定的,正定矩阵对角化结果 A T A = Q Λ Q T \boldsymbol{A}^{T} \boldsymbol{A} =\boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^{T} ATA=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做特征值分解/相似对角化,其中正好出现了正交矩阵和非负数的特征值
- 如何获取正交矩阵
V
\boldsymbol{V}
V
根据 A = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT可得 A T A = V Σ T U T U Σ V T = V Σ T Σ V T = V [ σ 1 2 σ 2 2 ⋱ σ r 2 ] V T (当 Σ 为对角阵) \begin{aligned} \boldsymbol{A}^{T} \boldsymbol{A} &=\boldsymbol{V} \boldsymbol{\Sigma}^{T} \boldsymbol{U}^{T} \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} \\ &=\boldsymbol{V} \boldsymbol{\Sigma}^{T} \boldsymbol{\Sigma} \boldsymbol{V}^{T} \\ &=\boldsymbol{V}\left[\begin{array}{llll} \sigma_{1}^{2} & & & \\ & \sigma_{2}^{2} & & \\ & & \ddots & \\ & & & \sigma_{r}{ }^{2} \end{array}\right] \boldsymbol{V}^{T}(当\boldsymbol{\Sigma}为对角阵) \end{aligned} ATA=VΣTUTUΣVT=VΣTΣVT=V σ12σ22⋱σr2 VT(当Σ为对角阵)上式就相当于正定矩阵 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA的相似对角化,
其中 σ i 2 = λ i \sigma_i^2=\lambda_i σi2=λi对应 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA的特征值(总是约定奇异值非负: σ i = λ i \sigma_i=\sqrt\lambda_i σi=λi),
V \boldsymbol{V} V对应对称阵 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA的(标准正交)特征向量 - 如何获取正交矩阵
U
\boldsymbol{U}
U(不完全正确的做法)
类似上面,有 A A T = U Σ Σ T U T \boldsymbol{A}\boldsymbol{A}^{T}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{\Sigma}^{T} \boldsymbol{U}^{T} AAT=UΣΣTUT σ i 2 \sigma_i^2 σi2对应 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT的特征值,
U \boldsymbol{U} U对应正交矩阵 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT的(标准正交)特征向量;
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
但注意,这样的做法是错误的
原因:
- 对于特征向量有 A v i = λ i v i \mathbf {A}\mathbf v_i=\lambda_i \mathbf v_i Avi=λivi,等式左右都是 v i \mathbf v_i vi,那么为了表达线性变换 A \mathbf {A} A使得特征向量 v i \mathbf v_i vi反向拉伸,会不可避免的出现 λ i \lambda_i λi为负数的情况;
- 对于奇异向量有 A v i = σ i u i \mathbf {A}\mathbf v_i=\sigma_i \mathbf u_i Avi=σiui,等式左右分别是 v i \mathbf v_i vi和 u i \mathbf u_i ui,那么理论上当 σ i \sigma_i σi为负数时,我们完全可以将其变为正数,而把负号放到 u i \mathbf u_i ui上,从而总是约定和保证 σ i \sigma_i σi非负
至此就明白了,由上面方法求出的 v i \mathbf{v}_i vi和 u i \mathbf{u}_i ui有可能需要搭配负数的 σ i \sigma_i σi(否则 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
\boldsymbol{U}
U(正确做法)
u i = A v i σ i \mathbf u_i=\frac{\mathbf {A}\mathbf v_i}{\sigma_i} ui=σiAvi,其中 σ i \sigma_i σi的选择要使 u i \mathbf u_i ui标准化(长为1)
这里还有一个小问题:若把 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即可
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其中,
- S = U Σ U T \boldsymbol S=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^T S=UΣUT为对称矩阵,对应了简单的拉伸(对称阵相似于实对角阵 Σ \boldsymbol{\Sigma} Σ,对应的变换仅伸缩了坐标轴)
- Q = U V T \boldsymbol Q=\boldsymbol{U} \boldsymbol{V}^{T} Q=UVT为正交矩阵,对应了旋转的线性变换
几何上的意义:任意矩阵,对应的线性变换可拆分为伸缩、旋转(还有投影)
- 类比:复数可以表示为
r
e
j
θ
re^{j\theta}
rejθ,其中两项分别对应“拉伸”和“旋转”
这里的分解类似, S \boldsymbol S S和 Q \boldsymbol Q Q分别对应了“拉伸”和“旋转”
矩阵 A \boldsymbol{A} A是否可逆,决定SVD是否有0奇异值
SVD分解结果(奇异值) A = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT,展示了矩阵 A \boldsymbol{A} A的各方面特征
- 例如
Σ
=
[
3
0
0
2
]
\boldsymbol{\Sigma}=\left[\begin{array}{cc}3 & 0 \\0 & 2\end{array}\right]
Σ=[3002],则
A
\boldsymbol{A}
A可逆
ps. 可逆矩阵 r = n r=n r=n,则 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA和 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT为正定矩阵(特征值全为正,对应 A \boldsymbol{A} A奇异值全为正) - Σ = [ 3 0 0 − 2 ] \boldsymbol{\Sigma}=\left[\begin{array}{cc}3 & 0 \\0 & -2\end{array}\right] Σ=[300−2],这不是SVD,因为我们奇异值不可能为负值
-
Σ
=
[
3
0
0
0
]
\boldsymbol{\Sigma}=\left[\begin{array}{cc}3 & 0 \\0 & 0\end{array}\right]
Σ=[3000],
Σ
\boldsymbol{\Sigma}
Σ秩为1,而
U
\boldsymbol{U}
U和
V
\boldsymbol{V}
V为正交的,因此
A
\boldsymbol{A}
A秩为1,不可逆;
理解[ A \boldsymbol{A} A不满秩则不可逆]:对矩阵做SVD A = U Σ V T \boldsymbol{A}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT, A \boldsymbol{A} A行/列不满秩,则矩阵零空间有非零向量,那么就有 A x = 0 \mathbf A\mathbf x=\mathbf 0 Ax=0,进而SVD中的 Σ \boldsymbol{\Sigma} Σ的右下角相应出现0元素,这从根本上决定了 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(Σ)(正交矩阵行列式为±1)
SVD的应用
- 大型矩阵 A \boldsymbol{A} A,希望提取重要信息(不只是简单的找出较大的元素值),可以做SVD并从“秩1矩阵分解”的角度来看:秩1矩阵 σ 1 u 1 v 1 T \sigma_1\mathbf{u}_1\mathbf{v}_1^T σ1u1v1T对应了矩阵最重要的部分
- 奇异值分解在最小二乘法问题中有重要应用
因为在实际问题中常碰到矩阵 A \boldsymbol{A} A不是列满秩( r < n r<n r<n)的状态,因此 A T A \boldsymbol{A}^T\boldsymbol{A} ATA不可逆(之前学过,当半正定矩阵满足 x T A x = 0 ( x ≠ 0 ) \mathbf{x}^{T} \boldsymbol{A} \mathbf{x}=0(\mathbf{x}\neq 0) xTAx=0(x=0),则至少有一个特征值为0),无法用之前的方法求最优解,此时需要SVD
即使是列满秩的情况,当矩阵是超大型矩阵时, A T A \boldsymbol{A}^T\boldsymbol{A} ATA的计算量太大,用奇异值分解SVD会帮助降低计算量