SVD奇异值分解逐步推导
1. 回顾特征值和特征向量
首先回顾下特征值和特征向量的定义:
A
x
=
λ
x
Ax=\lambda x
Ax=λx其中,A是一个
n
×
n
n\times n
n×n的矩阵,
x
x
x是一个
n
n
n维向量,则
λ
\lambda
λ是矩阵A的一个特征值,而
x
x
x是矩阵A的特征值
λ
\lambda
λ对应的特征向量。
求出特征值和特征向量有什么好处呢?就是我们可以将矩阵A特征分解。如果我们求出了矩阵A的n个特征值
λ
1
≤
λ
2
≤
.
.
.
≤
λ
n
\lambda _1\leq \lambda_2\leq ... \leq\lambda_n
λ1≤λ2≤...≤λn,以及这
n
n
n个特征值所对应的特征向量
w
1
,
w
2
,
.
.
.
,
w
n
w_1, w_2, ..., w_n
w1,w2,...,wn,那么矩阵A就可以用以下的特征分解表示:
W
−
1
A
W
=
Λ
⇔
A
=
W
Λ
W
−
1
W^{-1}AW=\Lambda \Leftrightarrow A=W\Lambda W^{-1}
W−1AW=Λ⇔A=WΛW−1其中,
W
W
W是这
n
n
n个特征向量所组成的
n
×
n
n\times n
n×n维矩阵,而
Λ
\Lambda
Λ是将这
n
n
n个特征值作为主对角线的
n
×
n
n\times n
n×n维矩阵。一般情况下,我们会把
W
W
W的这
n
n
n个特征向量标准化,即满足
∣
∣
w
i
∣
∣
2
=
1
||w_i||_2=1
∣∣wi∣∣2=1,或者
w
i
T
w
i
=
1
w_i^Tw_i=1
wiTwi=1,此时
W
W
W的
n
n
n个特征向量为标准正交基,满足
W
T
W
=
I
W^TW=I
WTW=I,即
W
T
=
W
−
1
W^T=W^{-1}
WT=W−1,也就是说
W
W
W为酉矩阵。这样我们的特征分解表达式可以写成:
A
=
W
Λ
W
T
A=W\Lambda W^T
A=WΛWT
题外延伸------矩阵压缩:
设 W = ( w 1 , w 2 , w 3 , . . . , w n ) W=(w_1, w_2, w_3,...,w_n) W=(w1,w2,w3,...,wn),则:
W T = ( w 1 T w 2 T w 3 T . . . w n T ) W^T=\begin{pmatrix} w_1^T\\ w_2^T\\ w_3^T\\ ... \\ w_n^T \end{pmatrix} WT=⎝⎜⎜⎜⎜⎛w1Tw2Tw3T...wnT⎠⎟⎟⎟⎟⎞那么:
A = ( w 1 , w 2 , w 3 , . . . , w n ) ( λ 1 λ 2 λ 3 . . . λ n ) ( w 1 T w 2 T w 3 T . . . w n T ) = λ 1 w 1 w 1 T + λ 2 w 2 w 2 T + λ 3 w 3 w 3 T + . . . + λ n w n w n T A=(w_1, w_2, w_3,...,w_n)\begin{pmatrix} \lambda_1&&&\\ &\lambda_2&&\\ &&\lambda_3&\\ &&&...\\ &&&&\lambda_n \end{pmatrix}\begin{pmatrix} w_1^T\\ w_2^T\\ w_3^T\\ ... \\ w_n^T \end{pmatrix} \\ =\lambda_1w_1w_1^T+\lambda_2w_2w_2^T+\lambda_3w_3w_3^T+...+\lambda_nw_nw_n^T A=(w1,w2,w3,...,wn)⎝⎜⎜⎜⎜⎛λ1λ2λ3...λn⎠⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎛w1Tw2Tw3T...wnT⎠⎟⎟⎟⎟⎞=λ1w1w1T+λ2w2w2T+λ3w3w3T+...+λnwnwnT假设A为 n × n n\times n n×n维矩阵,如果正常表示矩阵A共需使用 n 2 n^2 n2个元素,如果将取得的特征值 λ 1 , λ 2 , λ 3 , . . . , λ n \lambda_1,\lambda_2,\lambda_3,...,\lambda_n λ1,λ2,λ3,...,λn按从大到小排序,即 λ 1 ≥ λ 2 ≥ λ 3 ≥ . . . ≥ λ n \lambda_1\geq\lambda_2\geq\lambda_3\geq...\geq\lambda_n λ1≥λ2≥λ3≥...≥λn,则将A的压缩表示为 λ 1 w 1 w 1 T \lambda_1w_1w_1^T λ1w1w1T,即只需要 n + 1 n+1 n+1个元素。
注意到要进行特征分解,矩阵A必须为方阵。
那么如果A不是方阵,即行和列不相同时,我们还可以对矩阵进行分解吗?答案是可以,此时我们的SVD登场了。
2. SVD推导
Step1:矩阵分解
假如 A A A为 m × n m\times n m×n维矩阵,则 A T A A^TA ATA为对称正定矩阵。
证明:1)对称性: ( A T A ) T = A T A ⇒ 对 称 性 (A^TA)^T=A^TA\Rightarrow 对称性 (ATA)T=ATA⇒对称性
2)正定性: x T A T A x = ( A x ) T ( A x ) ≥ 0 ⇒ 正 定 性 x^TA^TAx=(Ax)^T(Ax)\geq 0\Rightarrow正定性 xTATAx=(Ax)T(Ax)≥0⇒正定性
对于矩阵A,有
(
A
T
A
)
v
i
=
λ
i
v
i
(A^TA)v_i=\lambda _iv_i
(ATA)vi=λivi,其中
λ
i
\lambda_i
λi为特征值,
v
i
v_i
vi为特征向量。假定
(
v
i
,
v
j
)
(v_i, v_j)
(vi,vj)是一组正交基,那么有
v
i
T
⋅
v
j
=
0
v_i^T\cdot v_j=0
viT⋅vj=0,那么:
(
A
v
i
,
A
v
j
)
=
(
A
v
i
)
T
⋅
A
v
j
=
v
i
T
A
T
A
v
j
=
v
i
T
λ
j
v
j
=
λ
j
v
i
T
v
j
=
0
(Av_i, Av_j)=(Av_i)^T\cdot Av_j=v_i^TA^TAv_j=v_i^T\lambda_jv_j=\lambda_jv_i^Tv_j=0
(Avi,Avj)=(Avi)T⋅Avj=viTATAvj=viTλjvj=λjviTvj=0因此,
A
v
i
,
A
v
j
Av_i,Av_j
Avi,Avj也是一组正交基,根据上述公式可以推导出
(
A
v
i
,
A
v
i
)
=
λ
i
v
i
T
v
i
=
λ
i
(Av_i, Av_i)=\lambda_iv_i^Tv_i=\lambda_i
(Avi,Avi)=λiviTvi=λi,从而可以得到:
∣
A
v
i
∣
2
=
λ
i
|Av_i|^2=\lambda_i
∣Avi∣2=λi
∣
A
v
i
∣
=
λ
i
|Av_i|=\sqrt{\lambda_i}
∣Avi∣=λi根据上述公式,有
A
v
i
∣
A
v
i
∣
=
1
λ
i
A
v
i
\frac{Av_i}{|Av_i|}=\frac{1}{\sqrt{\lambda_i}}Av_i
∣Avi∣Avi=λi1Avi,令
1
λ
i
A
v
i
=
u
i
\frac{1}{\sqrt{\lambda_i}}Av_i=u_i
λi1Avi=ui,可得:
A
v
i
=
λ
i
u
i
=
δ
i
u
i
Av_i=\sqrt{\lambda_i}u_i=\delta_i u_i
Avi=λiui=δiui其中,
δ
i
=
λ
i
\delta_i=\sqrt{\lambda_i}
δi=λi,进一步推导:
A
V
=
A
(
v
1
,
v
2
,
.
.
.
,
v
n
)
=
(
A
v
1
,
A
v
2
,
.
.
.
,
A
v
n
)
=
(
δ
1
u
1
,
δ
2
u
2
,
.
.
.
,
δ
n
u
n
)
=
U
Σ
AV=A(v_1,v_2,...,v_n)=(Av_1,Av_2,...,Av_n)=(\delta_1u_1,\delta_2u_2,...,\delta_nu_n)=U\Sigma
AV=A(v1,v2,...,vn)=(Av1,Av2,...,Avn)=(δ1u1,δ2u2,...,δnun)=UΣ从而得出:
A
=
U
Σ
V
T
A=U\Sigma V^T
A=UΣVT
Step2:矩阵计算
得到矩阵A的表示后,我们应该如何计算向量 U U U和 V V V呢?继续往下面分析:
首先计算出A的转置
A
T
A^T
AT:
A
T
=
V
Σ
T
U
T
A^T=V\Sigma ^TU^T
AT=VΣTUT
A
T
A
=
V
Σ
T
U
T
U
Σ
V
T
=
V
Σ
2
V
T
A^TA=V\Sigma^TU^TU\Sigma V^T=V\Sigma^2V^T
ATA=VΣTUTUΣVT=VΣ2VT利用上式可以得到,
A
T
A
v
i
=
λ
i
v
i
A^TAv_i=\lambda_iv_i
ATAvi=λivi,只需要求出
A
T
A
A^TA
ATA的特征向量即可得到
V
V
V.
同理可得
A
A
T
AA^T
AAT的值:
A
A
T
=
U
Σ
V
T
V
Σ
T
U
T
=
U
Σ
2
U
T
AA^T=U\Sigma V^TV\Sigma^TU^T=U\Sigma^2U^T
AAT=UΣVTVΣTUT=UΣ2UT可以得到
A
A
T
u
i
=
λ
i
u
i
AA^Tu_i=\lambda_iu_i
AATui=λiui,只需要求出
A
A
T
AA^T
AAT的特征向量即可得到
U
U
U.
题外延伸-----矩阵(图像)压缩:
一个 m × n m\times n m×n的矩阵A经SVD分解后,可以写成如下形式:
A m × n = U m × m Σ V n × n T = ( u 1 , u 2 , . . . , u m ) ( λ 1 1 2 λ 2 1 2 . . . ) ( v 1 T v 2 T . . . v n T ) = λ 1 1 2 u 1 v 1 T + λ 2 1 2 u 2 v 2 T + . . . A_{m\times n}=U_{m\times m}\Sigma V^T_{n\times n}=(u_1,u_2,...,u_m)\begin{pmatrix} \lambda_1^{\frac{1}{2}}&&\\ &\lambda_2^{\frac{1}{2}}&\\ &&... \end{pmatrix}\begin{pmatrix} v_1^T\\ v_2^T\\ ...\\ v_n^T \end{pmatrix}\\ =\lambda_1^{\frac{1}{2}}u_1v_1^T+\lambda_2^{\frac{1}{2}}u_2v_2^T+... Am×n=Um×mΣVn×nT=(u1,u2,...,um)⎝⎜⎛λ121λ221...⎠⎟⎞⎝⎜⎜⎛v1Tv2T...vnT⎠⎟⎟⎞=λ121u1v1T+λ221u2v2T+...
假设A为 m × n m\times n m×n维矩阵,在没有压缩时表示矩阵A共需要 m × n m\times n m×n个元素。如果将取得的特征值按从大到小排序,即 λ 1 ≥ λ 2 ≥ λ 3 ≥ . . . ≥ λ m i n { m , n } \lambda_1\geq\lambda_2\geq\lambda_3\geq...\geq\lambda_{min\{m,n\}} λ1≥λ2≥λ3≥...≥λmin{m,n},则A的压缩最小压缩表示为 λ 1 1 2 u 1 v 1 T \lambda_1^{\frac{1}{2}}u_1v_1^T λ121u1v1T,即需要 m + n + 1 m+n+1 m+n+1个元素。
当压缩储存量为 ( m + n + 1 ) × k (m+n+1)\times k (m+n+1)×k时,误差为
e r r o r = ( m + n ) × ∑ i = 1 k λ i ( m + n ) × ∑ i = 1 m i n ( m , n ) λ i = ∑ i = 1 k λ i ∑ i = 1 m i n ( m , n ) λ i error=\frac{(m+n)\times\sum_{i=1}^{k}\lambda_i}{(m+n)\times\sum_{i=1}^{min(m,n)}\lambda_i}=\frac{\sum_{i=1}^{k}\lambda_i}{\sum_{i=1}^{min(m,n)}\lambda_i} error=(m+n)×∑i=1min(m,n)λi(m+n)×∑i=1kλi=∑i=1min(m,n)λi∑i=1kλi
例题讲解
我们举一个简单的例子讲解矩阵时如何进行奇异值分解的。定义矩阵A为:
A
=
(
0
1
1
1
1
0
)
A=\begin{pmatrix} 0 &1 \\ 1&1\\ 1&0 \end{pmatrix}
A=⎝⎛011110⎠⎞首先求出
A
T
A
、
A
A
T
A^TA、AA^T
ATA、AAT:
A
T
A
=
(
0
1
1
1
1
0
)
(
0
1
1
1
1
0
)
=
(
2
1
1
2
)
A^TA=\begin{pmatrix} 0&1&1\\ 1&1&0 \end{pmatrix}\begin{pmatrix} 0&1\\ 1&1\\ 1&0 \end{pmatrix}=\begin{pmatrix} 2&1\\ 1&2 \end{pmatrix}
ATA=(011110)⎝⎛011110⎠⎞=(2112)
A
A
T
=
(
0
1
1
1
1
0
)
(
0
1
1
1
1
0
)
=
(
1
1
0
1
2
1
0
1
1
)
AA^T=\begin{pmatrix} 0&1\\ 1&1\\ 1&0 \end{pmatrix}\begin{pmatrix} 0&1&1\\ 1&1&0 \end{pmatrix}=\begin{pmatrix} 1&1&0\\ 1&2&1\\ 0&1&1 \end{pmatrix}
AAT=⎝⎛011110⎠⎞(011110)=⎝⎛110121011⎠⎞进而求出
A
T
A
A^TA
ATA的特征值和特征向量:
λ
1
=
3
;
v
1
=
(
1
2
1
2
)
;
λ
2
=
1
;
v
2
=
(
−
1
2
1
2
)
\lambda_1=3;v_1=\begin{pmatrix} \frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} \end{pmatrix}; \lambda_2=1;v_2=\begin{pmatrix} -\frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} \end{pmatrix}
λ1=3;v1=(2121);λ2=1;v2=(−2121)接着求出
A
A
T
AA^T
AAT的特征值和特征向量:
λ
1
=
3
;
u
1
=
(
1
6
2
6
1
6
)
;
λ
2
=
1
;
u
2
=
(
1
2
0
−
1
2
)
;
λ
3
=
0
;
u
3
=
(
1
3
−
1
3
1
3
)
\lambda_1=3;u_1=\begin{pmatrix} \frac{1}{\sqrt{6}}\\ \frac{2}{\sqrt{6}}\\ \frac{1}{\sqrt{6}} \end{pmatrix}; \lambda_2=1;u_2=\begin{pmatrix} \frac{1}{\sqrt{2}}\\ 0\\ -\frac{1}{\sqrt{2}} \end{pmatrix};\lambda_3=0;u_3=\begin{pmatrix} \frac{1}{\sqrt{3}}\\ -\frac{1}{\sqrt{3}}\\ \frac{1}{\sqrt{3}} \end{pmatrix}
λ1=3;u1=⎝⎜⎛616261⎠⎟⎞;λ2=1;u2=⎝⎛210−21⎠⎞;λ3=0;u3=⎝⎜⎛31−3131⎠⎟⎞利用
A
v
i
=
δ
i
u
i
,
i
=
1
,
2
Av_i=\delta_iu_i,i=1,2
Avi=δiui,i=1,2求奇异值:
(
0
1
1
1
1
0
)
(
1
2
1
2
)
=
δ
1
(
1
6
2
6
1
6
)
⇒
δ
1
=
3
\begin{pmatrix} 0&1\\ 1&1\\ 1&0 \end{pmatrix}\begin{pmatrix} \frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} \end{pmatrix}=\delta_1\begin{pmatrix} \frac{1}{\sqrt{6}}\\ \frac{2}{\sqrt{6}}\\ \frac{1}{\sqrt{6}} \end{pmatrix} \Rightarrow\delta_1=\sqrt{3}
⎝⎛011110⎠⎞(2121)=δ1⎝⎜⎛616261⎠⎟⎞⇒δ1=3
(
0
1
1
1
1
0
)
(
−
1
2
1
2
)
=
δ
2
(
1
2
0
−
1
2
)
⇒
δ
2
=
1
\begin{pmatrix} 0&1\\ 1&1\\ 1&0 \end{pmatrix}\begin{pmatrix} -\frac{1}{\sqrt{2}}\\ \frac{1}{\sqrt{2}} \end{pmatrix}=\delta_2\begin{pmatrix} \frac{1}{\sqrt{2}}\\ 0\\ -\frac{1}{\sqrt{2}} \end{pmatrix} \Rightarrow\delta_2=1
⎝⎛011110⎠⎞(−2121)=δ2⎝⎛210−21⎠⎞⇒δ2=1也可以用
δ
i
=
λ
i
\delta_i=\sqrt{\lambda_i}
δi=λi直接求出奇异值为
3
\sqrt{3}
3和
1
1
1.
最终得到矩阵A的奇异值分解为:
A
=
U
Σ
V
T
=
(
1
6
1
2
1
3
2
6
0
−
1
3
1
6
−
1
2
1
3
)
(
3
0
0
1
0
0
)
(
1
2
1
2
−
1
2
1
2
)
A=U\Sigma V^T=\begin{pmatrix} \frac{1}{\sqrt{6}} &\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{3}} \\ \frac{2}{\sqrt{6}} &0 & -\frac{1}{\sqrt{3}} \\ \frac{1}{\sqrt{6}} &-\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{3}} \end{pmatrix}\begin{pmatrix} \sqrt{3} & 0\\ 0 & 1\\ 0 & 0 \end{pmatrix}\begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{pmatrix}
A=UΣVT=⎝⎜⎛616261210−2131−3131⎠⎟⎞⎝⎛300010⎠⎞(21−212121)
SVD的一些性质
对于奇异值,他跟我们特征分解中的特征值类似,在奇艺置矩阵中也是按照从大到小排列,而且奇异值的减少特别快,在很多情况下,前10%甚至1%的奇异值就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个奇异值和对应的左右奇异向量来近似描述矩阵(与前面描述的题外延伸之矩阵压缩类似),由于这个重要的性质,SVD也可以用于PCA降维,来做数据压缩和去噪,也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需要来做推荐。同时也可以用于NLP中的算法,比如潜在语义索引(LSI)。