1. 特征值分解(EVD)
实对称矩阵
在理角奇异值分解之前,需要先回顾一下特征值分解,如果矩阵
A
A
A 是一个
m
×
m
m \times m
m×m 的实对称矩阵(即
A
=
A
T
A = A^T
A=AT),那么它可以被分解成如下的形式
A
=
Q
Σ
Q
T
=
Q
[
λ
1
…
…
…
…
λ
2
…
…
…
…
⋱
…
…
…
…
λ
m
]
Q
T
A = Q \Sigma Q^T = Q{ \left[ \begin{array}{ccc} \lambda_1 & \ldots & \ldots & \ldots \\ \ldots & \lambda_2 & \ldots & \ldots \\ \ldots & \ldots & \ddots & \ldots \\ \ldots & \ldots & \ldots & \lambda_m \end{array} \right ]} Q^T
A=QΣQT=Q⎣⎢⎢⎡λ1…………λ2…………⋱…………λm⎦⎥⎥⎤QT
其中
Q
Q
Q 为标准正交阵,有
Q
Q
T
=
I
QQ^T = I
QQT=I,
Σ
\Sigma
Σ为对角矩阵,上面的矩阵维度均为
m
×
m
m \times m
m×m。
λ
i
\lambda_i
λi 称为特征值,
q
i
q_i
qi 是
Q
Q
Q(特征矩阵)中的列向量,称为特征向量。它们之间的关系有
A
q
i
=
λ
i
q
i
Aq_i = \lambda_i q_i
Aqi=λiqi,
q
i
T
q
j
=
0
(
i
≠
j
)
q_i^Tq_j = 0 (i \neq j)
qiTqj=0(i=j)
这里的特征值分解需要被分解的矩阵
A
A
A为实对称矩阵,但是现实中,我们所遇到的问题一般不是实对称矩阵。那么当我们碰到一般的矩阵,即有一个
m
×
n
m \times n
m×n 的矩阵
A
A
A,它是否能被分解成上面的形式呢?当然是可以的,这就是我们下面要讨论的内容。
2. 奇异值分解(SVD)
1. 定义
一个
m
×
n
m \times n
m×n的实数矩阵
A
A
A,我们需要把它分解成如下的形式
A
=
U
Σ
V
T
A = U \Sigma V^T
A=UΣVT
其中
U
U
U 和
V
V
V 均为单位正交阵,有
U
U
T
=
I
UU^T = I
UUT=I,
V
V
T
=
I
VV^T = I
VVT=I,
U
U
U 称为左奇异矩阵,
V
V
V 称为右奇异矩阵,
Σ
\Sigma
Σ 仅在主对角线上有值,称为奇异值,其他元素均为0。上面矩阵的维度分别为
U
∈
R
m
×
m
U \in R^{m \times m}
U∈Rm×m,
Σ
∈
R
m
×
n
\Sigma \in R^{m \times n}
Σ∈Rm×n,
V
∈
R
n
×
n
V \in R^{n \times n}
V∈Rn×n。
那么
Σ
\Sigma
Σ有如下形式
Σ
=
[
σ
1
0
0
0
0
σ
2
0
0
0
0
⋱
0
0
0
0
⋱
]
m
×
n
\Sigma = { \left[ \begin{array}{ccc} \sigma_1 & 0 & 0 & 0 \\ 0 & \sigma_2 & 0 & 0 \\ 0 & 0 & \ddots & 0 \\ 0 & 0 & 0 & \ddots \end{array} \right ]}_{m \times n}
Σ=⎣⎢⎢⎡σ10000σ20000⋱0000⋱⎦⎥⎥⎤m×n
2. 奇异值分解
我们可以利用下面的方法求解
U
,
V
,
Σ
U,V,\Sigma
U,V,Σ
A
A
T
=
U
Σ
V
T
V
Σ
T
U
T
=
U
Σ
Σ
T
U
T
A
T
A
=
V
Σ
U
T
U
Σ
T
V
T
=
V
Σ
T
Σ
V
T
AA^T = U \Sigma V^T V \Sigma^T U^T = U \Sigma \Sigma^T U^T \\ A^TA = V \Sigma U^T U \Sigma^T V^T = V \Sigma^T \Sigma V^T
AAT=UΣVTVΣTUT=UΣΣTUTATA=VΣUTUΣTVT=VΣTΣVT
这里
Σ
Σ
T
\Sigma \Sigma^T
ΣΣT 和
Σ
T
Σ
\Sigma^T \Sigma
ΣTΣ 是不相等的,因为它们的维数不同,
Σ
Σ
T
∈
R
m
×
m
\Sigma \Sigma^T \in R^{m \times m}
ΣΣT∈Rm×m,
Σ
T
Σ
∈
R
n
×
n
\Sigma^T \Sigma \in R^{n \times n}
ΣTΣ∈Rn×n,但是它们在主对角线上的奇异值是相等的,即
Σ
Σ
T
=
[
σ
1
2
0
0
0
0
σ
2
2
0
0
0
0
⋱
0
0
0
0
⋱
]
m
×
m
Σ
T
Σ
=
[
σ
1
2
0
0
0
0
σ
2
2
0
0
0
0
⋱
0
0
0
0
⋱
]
n
×
n
\Sigma \Sigma^T = { \left[ \begin{array}{ccc} \sigma_1^2 & 0 & 0 & 0\\ 0 & \sigma_2^2 & 0 & 0\\ 0 & 0 & \ddots & 0\\ 0 & 0 & 0 & \ddots \end{array} \right ]}_{m \times m} \qquad \Sigma^T \Sigma = { \left[ \begin{array}{ccc} \sigma_1^2 & 0 & 0 & 0\\ 0 & \sigma_2^2 & 0 & 0\\ 0 & 0 & \ddots & 0\\ 0 & 0 & 0 & \ddots \end{array} \right ]}_{n \times n}
ΣΣT=⎣⎢⎢⎡σ120000σ220000⋱0000⋱⎦⎥⎥⎤m×mΣTΣ=⎣⎢⎢⎡σ120000σ220000⋱0000⋱⎦⎥⎥⎤n×n
我们知道
A
A
T
AA^T
AAT 和
A
T
A
A^TA
ATA 都是对称矩阵,那么就可以对它们做特征值分解,分别得到矩阵
U
U
U 和
V
V
V,对
Σ
Σ
T
\Sigma \Sigma^T
ΣΣT 或
Σ
T
Σ
\Sigma^T \Sigma
ΣTΣ 中的特征值开方,就可以得到所有的奇异值。
3. 求解步骤
- 先分别求解矩阵 A A T AA^T AAT 和 A T A A^TA ATA ;
- 利用
A A T = U Σ V T V Σ T U T = U Σ Σ T U T A T A = V Σ U T U Σ T V T = V Σ T Σ V T AA^T = U \Sigma V^T V \Sigma^T U^T = U \Sigma \Sigma^T U^T \\ A^TA = V \Sigma U^T U \Sigma^T V^T = V \Sigma^T \Sigma V^T AAT=UΣVTVΣTUT=UΣΣTUTATA=VΣUTUΣTVT=VΣTΣVT
进行特征值分解,得到矩阵 U U U 和 V V V; - 对2中求得的矩阵 Σ Σ T \Sigma \Sigma^T ΣΣT 或 Σ T Σ \Sigma^T \Sigma ΣTΣ 的特征值开方,最终得到所有的奇异值。