本文所述矩阵均为实矩阵;
本文所述中,行空间(row space)为矩阵横着的向量(水平方向)组成的线性空间。(在台湾地区竖着的为行,横着的为列)
本文所需预备知识:
- 掌握矩阵特征值分解;
- 理解矩阵就是线性变换;
- 理解矩阵的四个子空间;
- 了解正交矩阵及施密特正交化
矩阵本质上是一种线性变换,包括了旋转、拉伸等线性操作。一个 m×n 的矩阵 A 可以被视为一个从 n 维向量空间 Rn 到 m 维向量空间 Rm 的线性变换,即A∈Rm∗n:Rn−−>Rm。这个变换将 Rn 中的向量 x 映射到 Rm 中的一个向量 y ,该过程可以用矩阵乘法来表示:
y=Ax
而不管是特征值分解还是奇异值分解,都是把这个变换拆解开。也就是把一个复杂的变换动作拆解开。例如,对称半正定矩阵的特征值分解是把矩阵的变换动作拆解为旋转、伸缩、旋转三个变换。
例如,矩阵
A=[2−1−12]=U:旋转[−22222222]Σ:拉伸[3001]VT:旋转[−22222222].
这个例子中,U 和 VT 都是正交矩阵,只负责旋转;Σ 是对角矩阵,只负责沿正交方向进行拉伸或收缩。
注:对角矩阵只有拉伸收缩的效果。(伸缩也包含了将某一个维度缩为0);单位正交矩阵只有旋转的效果。因此,奇异值分解的本质就是把一个线性变换分解成三个矩阵,分别只有旋转、拉伸、旋转的作用。
然而特征值分解并非对所有矩阵均适用,它要求矩阵是方阵,且矩阵必须是可对角化的。而奇异值分解(SVD)是一种更通用、更强大的矩阵分解方法,可将任意矩阵所表示的线性变换分解为旋转拉伸旋转。(事实上,实对称正定矩阵的特征值分解是奇异值分解的特例)
奇异值分解的本质是找到两组正交基,使得变换可以由一个具有最简形式(即对角形)的矩阵表示。
具体来说,对于一个 m×n 矩阵 A,矩阵的秩 r 为,SVD 将其分解为三个矩阵的乘积:
A=UΣVT
其中, U 是一个 m×m 的正交矩阵,即列向量ui相互正交,有UT=U−1;V 是一个 n×n 的正交矩阵,即列向量vi相互正交,有VT=V−1;Σ 是一个 m×n 的类对角矩阵,如下:
Σ=σ1000⋮00⋱0⋯⋱⋯00σr0⋮00⋮00⋮0⋯⋯⋯⋯⋱⋯0000⋮0
其对角线上的元素σi>0,i=1,2,...,r;σj=0,j=r+1,...,min(n,m) 是 A 的奇异值。
SVD 的分解不具有唯一性。 为了便利应用,通常习惯将奇异值由大至小排序,即σ1≥σ2≥…≥σr
下图可帮助更好的理解奇异值分解。尤其是 Σ 矩阵中大多元素均为0。
U 和 V 的列分别构成了矩阵行空间和列空间的正交基。 Σ 的对角线上的非零元素表示对应基向量在变换过程中的伸缩因子。
具体如何求解呢?想要同时找两组正交基满足条件当然不好找,可以先把矩阵U消掉,即构造 ATA矩阵:
ATA=VΣTUTUΣVT=VΣTΣVT
求解ATA的特征分解,经特征分解,可得特征值λi,…,λr 和特征向量αi,…,αr (由于矩阵A的秩为r, 因此仅有r个特征向量)。
由于矩阵ATA为对称半正定矩阵,因此其特征向量αi必定正交,且特征值必为非负数。
此时,对特征值按照递减进行排序,使其满足:
λ1≥λ2⋯≥λr≥0λs=0,s=r+1,r+2,...,n
且对特征值排序后对应的特征向量αi进行标准化,得到一组正交向量vi
vi=∣∣α∣∣αi
接着,利用ATA的特征向量来构造矩阵V。已经有了r个正交的特征向量组成了矩阵A的行空间,还差零空间中的n-r个的基,该n−r个正交基向量可利用施密特正交化来构造,最终可得n个正交基v1,v2,…,vn。(事实上,这零空间的n−r个正交基可以不用求解,因为根本用不到!)因此有矩阵V:
V=∣v1∣∣v2∣∣⋯∣∣vn∣n∗n
接下来需要寻找一组正交向量ui来构造矩阵U了,此时注意到:
(Avi)T(Avj)=viTATAvj=viTλivj
由于vi,vj分别为对称半正定矩阵ATA的特征向量的标准化向量,有viTvj=0, 所以(Avi)T(Avj)=0
因此,Avi和 Avi其实就是正交的,也就是想要寻找的正交向量ui,然后,对向量Avi进行标准化,求解Avi的模长平方,有:
∣∣Avi∣∣2=(Avi)T(Avi)=viTATAvi=viTλivi=λi=σi2
对Avi进行标准化,得到ui,有:
ui=∣∣Avi∣∣Avi=σiAvi∈Rm,i=1,2,...,r
列空间为m维空间,上述r个u向量仅仅填充了r维度,因此还需要剩下的m−r个正交基向量,同样采用施密特正交化得到(事实上,这m-r个左零空间的正交基也可以不用求解,因为用不到!)。此时可有U矩阵:
U= ∣ u1 ∣ ∣ u2 ∣ ∣ ⋯ ∣ ∣ um ∣m∗m
由 ∣∣Avi∣∣2=σi2 可见,奇异值便是投影过去的向量Avi的长度,而Avi经过标准化后,奇异值表示变换在对应的奇异向量方向上的缩放因子,即Avi=σui
最后,利用求得的两组基向量 vi 和 ui 和奇异值 σi 来形式化描述奇异值分解。如下:
V=∣v1∣∣v2∣∣⋯∣∣vn∣n∗nU=∣u1∣∣u2∣∣⋯∣∣um∣m∗m
AV=A∣v1∣∣v2∣∣⋯∣∣vn∣=∣Av1∣∣Av2∣∣⋯∣∣Avn∣=∣Av1∣∣Av2∣∣⋯∣∣Avr∣∣0∣∣⋯∣∣0∣=∣σ1u1∣∣σ2u2∣∣⋯∣∣σrur∣∣0∣∣⋯∣∣0∣=∣u1∣∣u2∣∣⋯∣∣um∣@σ1⋱0σr00=UΣ
σ1⋱0σr00
至此,已经完成了矩阵的奇异值分解。
稍微总结一下,SVD 的计算主要是利用下面几个性质:
- ATA和AAT的非零特征值为λi=σi2,i=1,2,…,r,r=rankA。
注,ATA和AAT是半正定(positive semi definite)矩阵,其特征值必定非负,且特征向量必然正交。
- ATA 的单位特征向量为vj
ATAvj=σj2vj,j=1,2,…,n
- AAT 的单位特征向量为uj,
AATuj=σj2uj,j=1,2,…,m
- 对于 j=1,2,…,r,uj 和vj具有以下关系:
Avj=σjujATuj=σjvj
对应奇异值σi , ui称为左奇异向量,vi称为右奇异向量。
- 矩阵ATA为对称半正定矩阵。
证明对称性,(AA)T=ATA
证明半正定:对任意非零向量x, 向量Ax的二范数∣∣Ax∣∣2=(Ax)TAx=xTAAx, 因为模长∣∣Ax∣∣2≥0, 因此二次型矩阵 ATA 为半正定矩阵。
- 对称:决定了特征向量为正交的
- 正定:决定了特征值为非负数
- 矩阵AB的特征值和矩阵BA的特征值是相同的。
直觉上理解:矩阵AB和BA表达的是同一种变换,无非是顺序先后的问题。
- 对称矩阵的特征向量互相正交
宏观理解
对于任意一个m∗n矩阵A,都有四个子空间:行空间、零空间、列空间、左零空间。假设该矩阵的秩 rankA=r。则矩阵的四个空间可由下图所示。
注:这张图左右各有两个子空间,这两个子空间是天生正交的,从其中垂直的黑线也可以发现。因此绘制的时候,先画两个垂直线。
其中:
- 行空间和零空间天然正交,这是由定义所然。
- 列空间和左零空间也天然正交,这也是定义所然。
- 行空间的维度和列空间的维度均为r,等于矩阵的秩
- 行空间和零空间共同张成了m维空间。
- 列空间和左零空间共同张成了n维空间。
- 零空间的向量在经过矩阵变换后,塌缩到了m维空间的原点,即 Ax=0, 也因此零空间称为核空间。如果不是方阵或者矩阵不满秩,则零空间维度不是零,此时,线性变换将不再是可逆的,因为塌缩到m维空间的原点的向量回不去了,这种矩阵不可逆。
在经过奇异值分解之后,分别找到了一组行空间的正交基和列空间的一组正交基,且满足 Avi=σui,i=1,2,3,…,r。因此可有如下图所示(下图中红色的向量即为两组正交基)。
通过 SVD,可以清晰地看到矩阵 A 在不同方向上的 “拉伸” 效果,以及它如何将 Rn 中的向量映射到 Rm 中。
这样做有什么好处呢?矩阵本身就是线性变换,因此检查一下做奇异值分解前后线性变换的区别,在奇异值分解之前,n维的向量x经过线性变换A之后,转到了m维空间,如下图所示:
线性变换A经过奇异值分解之后,有A=UΣVT,此时,再对n维的向量x做线性变换就变成了三步走了:
- VTx:旋转,变换到VT的坐标系下。
- ΣVTx:拉伸or收缩某些方向,也有一些方向丢失(变为0)
- UΣVTx :旋转,变换到U所表示的坐标系下。
即如下图所示:
这样做有什么作用呢?将奇异值分解的结果用秩1矩阵求和形式表示为:
A=[u1u2⋯um]σ1σ2⋱σr⋱v1Tv2T⋮vnT=[σ1u1σ2u2⋯σrur0⋯0]v1Tv2T⋮vnT=σ1u1v1T+σ2u2v2T+⋯+σrurvrT=i=1∑rσiuiviT
上式指出A仅由U的前 r 个行向量(以Ur表示),VT的前r列矢量(以VrT表示), 以及Σ的左上r×r分块决定(以Σr表示),称为「瘦」奇异值分解,如下图所示。
这个结果看似不起眼,其实它有重大的意义。矩阵A总共有m×n个元,Ur有m×r个元素,VrT有r×n个元,Σr则只需储存主对角的r个非零元。若以 SVD 形式储存,总计有(m+n+1)×r 个元。当矩阵的秩 r 远小于 m 和 n 时,利用矩阵的 SVD 可以大幅减少储存量。
此外,从1到r,由于σ1≥σ2≥…≥σr,因此变换产生的的作用原来越小,通常可以用前面几个变换来替代整个线性变换,这便是主成分分析(PCA)的思想。
参考
阳明交通大学, 周志成 线性代数 svd奇异值分解
Feature Column from the AMS
shunliz.gitbooks.io
奇异值分解(SVD)原理及应用 - 耐烦不急 - 博客园
奇异值分解(SVD)
特征值分解和奇异值分解 - gao_jian - 博客园
机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用 - LeftNotEasy - 博客园