SVD分解的应用
定义: 设
A
∈
C
r
m
×
n
,
r
>
0
A\in C_{r}^{m\times n},\quad r>0
A∈Crm×n,r>0,
A
H
A
A^{H}A
AHA的特征值为
λ
1
≥
λ
2
⋯
≥
λ
r
λ
r
+
1
=
⋯
=
λ
n
=
0
\lambda_{1}\geq \lambda_{2}\cdots \geq \lambda_{r}\> \lambda_{r+1}=\cdots=\lambda_{n}=0
λ1≥λ2⋯≥λrλr+1=⋯=λn=0
则称
σ
=
λ
i
(
i
=
1
,
2
,
⋯
n
)
\sigma =\sqrt{\lambda_{i}}(i=1,2,\cdots n)
σ=λi
(i=1,2,⋯n)为
A
A
A的奇异值;当
A
A
A为零矩阵时,它的奇异值都是0.
定义: 设
A
∈
C
r
m
×
n
,
r
>
0
A\in C_{r}^{m\times n},\quad r>0
A∈Crm×n,r>0,则存在
m
m
m阶酉矩阵和
n
n
n阶酉矩阵
V
V
V,使得
U
H
A
V
=
[
Σ
O
O
O
]
U^{H}AV=\begin{bmatrix} \Sigma&O \\ O& O \end{bmatrix}
UHAV=[ΣOOO]
其中
Σ
=
d
i
a
g
(
σ
1
,
σ
2
,
⋯
,
σ
r
)
\Sigma=diag(\sigma_{1},\sigma_{2},\cdots,\sigma_{r})
Σ=diag(σ1,σ2,⋯,σr),而
σ
i
(
i
=
1
,
2
,
⋯
,
r
)
\sigma_{i}(i=1,2,\cdots,r)
σi(i=1,2,⋯,r)为矩阵
A
A
A的全部非零奇异值。
对 以 上 的 说 明 解 释 : \color{red}{对以上的说明解释:} 对以上的说明解释:
1. H H H表示的意思和转置 T T T类似,只是 H H H当矩阵 A A A为虚数矩阵时应用,由于我们大多时候用的都是实数矩阵,所以在这里可把 H H H当作 T T T;酉矩阵其实也是相对于复数矩阵来定义的,在这里可以看作就是正交矩阵。以下都用 T T T代替 H H H
2. A T A A^{T}A ATA是实对称矩阵,那么它是半正定的,则它的特征值 λ i ≥ 0 \lambda_{i}\geq 0 λi≥0,即特征值为非负数。
要判定一个矩阵是半正定,用 x T A T A x = ( A x ) T A x = ∥ A x ∥ 2 ≥ 0 x^{T}A^{T}Ax=(Ax)^{T}Ax=\begin{Vmatrix} Ax \end{Vmatrix}^{2}\geq 0 xTATAx=(Ax)TAx=∥∥Ax∥∥2≥0,那么 A T A A^{T}A ATA半正定。
3.为何特征值 λ r + 1 \lambda_{r+1} λr+1之后都是0呢?
因为
R
(
A
T
A
)
=
R
(
A
)
=
r
R(A^{T}A)=R(A)=r
R(ATA)=R(A)=r,且有
A
T
A
=
P
−
1
Λ
P
=
P
−
1
(
λ
1
λ
2
⋱
λ
n
)
P
A^{T}A=P^{-1}\Lambda P=P^{-1}\begin{pmatrix} \lambda_{1}& & &\\ & \lambda_{2}& &\\ & & \ddots&\\ & & &\lambda_{n} \end{pmatrix}P
ATA=P−1ΛP=P−1⎝⎜⎜⎛λ1λ2⋱λn⎠⎟⎟⎞P
因为
P
P
P是可逆矩阵,即满秩矩阵,所以
R
(
A
T
A
)
=
R
(
Λ
)
=
r
R(A^{T}A)=R(\Lambda)=r
R(ATA)=R(Λ)=r(为什么呢?因为矩阵的初等变换不改变矩阵的秩,
P
−
1
和
P
P^{-1}和P
P−1和P相当于初等行变换和初等列变换),所以
λ
r
+
1
\lambda_{r+1}
λr+1之后特征值为0
图像压缩算法
U
T
A
V
=
[
Σ
O
O
O
]
U^{T}AV=\begin{bmatrix} \Sigma &O\\ O&O \end{bmatrix}
UTAV=[ΣOOO]
U
U
T
A
V
V
T
=
U
[
Σ
O
O
O
]
V
T
UU^{T}AVV^{T}=U\begin{bmatrix} \Sigma &O\\ O&O \end{bmatrix}V^{T}
UUTAVVT=U[ΣOOO]VT
因为
U
U
T
=
V
V
T
=
E
UU^{T}=VV^{T}=E
UUT=VVT=E,则
A
m
×
n
=
(
u
1
u
2
⋯
u
m
)
(
σ
1
0
⋯
0
0
⋱
⋱
0
⋮
⋮
σ
r
⋮
0
0
⋯
0
)
m
×
n
(
v
1
T
v
2
T
⋮
v
n
T
)
=
σ
1
u
1
v
1
T
+
σ
2
u
2
v
2
T
+
⋯
+
σ
r
u
r
v
r
T
A_{m\times n}=\begin{pmatrix} u_{1}&u_{2} &\cdots &u_{m} \end{pmatrix}\begin{pmatrix} \sigma_{1}&0 & \cdots&0\\ 0& \ddots&\ddots &0\\ \vdots&\vdots &\sigma_{r} &\vdots\\ 0&0 &\cdots &0 \end{pmatrix}_{m\times n}\begin{pmatrix} v_{1}^{T}\\v_{2}^{T}\\\vdots\\v_{n}^{T} \end{pmatrix}=\sigma_{1}u_{1}v_{1}^{T}+\sigma_{2}u_{2}v_{2}^{T}+\cdots+\sigma_{r}u_{r}v_{r}^{T}
Am×n=(u1u2⋯um)⎝⎜⎜⎜⎛σ10⋮00⋱⋮0⋯⋱σr⋯00⋮0⎠⎟⎟⎟⎞m×n⎝⎜⎜⎜⎛v1Tv2T⋮vnT⎠⎟⎟⎟⎞=σ1u1v1T+σ2u2v2T+⋯+σrurvrT
取前
k
k
k项,
e
r
r
o
r
=
1
−
∑
i
=
1
k
σ
i
∑
i
=
1
r
σ
i
error=1-\frac{\sum_{i=1}^{k}\sigma_{i}}{\sum_{i=1}^{r}\sigma_{i}}
error=1−∑i=1rσi∑i=1kσi
那么保存这幅图像需要多少个参数呢?根据 u u u和 v v v向量的维度,可以确定需要 r + r m + + r n = r ( m + n + 1 ) r+rm++rn=r(m+n+1) r+rm++rn=r(m+n+1),在进行 S V D SVD SVD之前,需要 m × n m\times n m×n个参数.
若我们只取前
k
k
k项,则只需要
k
(
m
+
n
+
1
)
k(m+n+1)
k(m+n+1)个参数,那么可得压缩率为
r
a
t
e
=
k
(
m
+
n
+
1
)
m
×
n
rate = \frac{k(m+n+1)}{m\times n}
rate=m×nk(m+n+1)
举例:
由图可知,保留的参数越多,图片越清晰,精度越高。
深度学习加速
在深度学习中,用得最多的就是矩阵的乘法,如何加快矩阵乘法的运算速度,可通过
S
V
D
SVD
SVD分解来加速训练。
A
m
×
n
=
σ
1
u
1
v
1
T
+
σ
2
u
2
v
2
T
+
⋯
+
σ
r
u
r
v
r
T
A_{m\times n}=\sigma_{1}u_{1}v_{1}^{T}+\sigma_{2}u_{2}v_{2}^{T}+\cdots+\sigma_{r}u_{r}v_{r}^{T}
Am×n=σ1u1v1T+σ2u2v2T+⋯+σrurvrT
假设有矩阵
A
200
×
100
A_{200\times 100}
A200×100,取前
10
10
10项
A
200
×
100
=
σ
1
u
1
v
1
T
+
σ
2
u
2
v
2
T
+
⋯
≈
(
u
1
,
u
2
,
⋯
,
u
10
)
200
×
10
(
σ
1
⋱
σ
10
)
(
v
1
T
v
2
T
⋮
v
10
T
)
10
×
100
=
M
200
×
10
N
10
×
100
A_{200\times 100}=\sigma_{1}u_{1}v_{1}^{T}+\sigma_{2}u_{2}v_{2}^{T}+\cdots\approx\begin{pmatrix} u_{1},u_{2},\cdots,u_{10} \end{pmatrix}_{200\times 10}\begin{pmatrix} \sigma_{1}& &\\ & \ddots&\\ & &\sigma_{10} \end{pmatrix}\begin{pmatrix} v_{1}^{T}\\v_{2}^{T}\\\vdots\\v_{10}^{T} \end{pmatrix}_{10\times 100} \\=M_{200\times 10}N_{10\times 100}
A200×100=σ1u1v1T+σ2u2v2T+⋯≈(u1,u2,⋯,u10)200×10⎝⎛σ1⋱σ10⎠⎞⎝⎜⎜⎜⎛v1Tv2T⋮v10T⎠⎟⎟⎟⎞10×100=M200×10N10×100
那么现在计算矩阵乘法 A 200 × 100 X 100 × 1 A_{200\times 100}X_{100\times 1} A200×100X100×1,需要算 200 × 100 200\times 100 200×100次乘法
若使用 S V D SVD SVD取前 10 10 10项, M 200 × 10 N 10 × 100 X 100 × 1 M_{200\times 10}N_{10\times 100}X_{100\times 1} M200×10N10×100X100×1算 10 × 100 + 10 × 200 = 3000 10\times 100+10\times 200=3000 10×100+10×200=3000次乘法。
S V D SVD SVD加速可用于移动端深度学习训练.