奇异值分解(singular value decomposition,简称SVD)不仅广泛应用于机器学习领域,也在控制理论中有着广泛的应用。本文主要介绍SVD的基本原理。
文章目录
一、预备知识
1.1 特征值与特征向量
设 A 是n阶方阵,如果存在数λ和非零n维列向量 x,使得 A α = λ α Aα=λα Aα=λα 成立,则称 λ 是矩阵A的一个特征值(characteristic value),而α是矩阵A对应于特征值λ的特征向量(Eigenvector)。
1.2 幺正矩阵(酉矩阵)(Unitary Matrix)
泛泛来讲,如果一个n阶方阵,它的列向量构成一组标准正交基,那么这个矩阵就是幺正矩阵,或称酉矩阵。
一个简单的充分必要判别准则是:方阵U的共扼转置乘以U等于单位阵,则U是酉矩阵。即酉矩阵的逆矩阵与其伴随矩阵相等。
对于实数矩阵而言,共轭转置等于其转置。
酉矩阵的性质:
① 矩阵U为酉矩阵的充要条件是它的共轭转置矩阵等于其逆矩阵,
即 U ∗ = U − 1 U^{*}=U^{-1} U∗=U−1 或 U ∗ U = U U ∗ = I U^{*}U=UU^{*}=I U∗U=UU∗=I
② 若酉矩阵的元素全是实数,则其为正交矩阵;
正交矩阵的性质:转置等于伴随,即 U T = U ∗ U^{T}=U^{*} UT=U∗
③ 酉矩阵的行列式的绝对值为1;
④ U=VΣV*
其中V是酉矩阵,Σ 是主对角线上元素绝对值为1的对角阵。
在查找相关文献时,遇到了一个问题:共轭转置矩阵与伴随矩阵为什么都用A*表示?
关于详细解答,请参考:https://zhuanlan.zhihu.com/p/87330558
这里只总结一句:当A为酉矩阵时,伴随矩阵等于其共轭转置矩阵。
1.3 特征分解
求出特征值和特征向量之后,就可以对方阵A进行特征分解。
A = W Σ W − 1 A=WΣW^{-1} A=WΣW−1
其中W是这n个特征向量所张成的n x n维酉矩阵( W T = W − 1 W^{T}=W^{-1} WT=W−1),Σ 是主对角线上每个元素就是一个特征值的对角阵。
因此也可以写成: A = W Σ W T A=WΣW^{T} A=WΣWT
分解得到的 Σ 矩阵是一个对角阵, 里面的特征值是由大到小排列的, 这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。
【总结】: 特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要, 而特征向量表示这个特征是什么。不过, 特征值分解也有很多的局限, 比如说要进行特征分解,矩阵A必须是方阵。如果A不是方阵,即行和列不相同时,就不能用这种方法对矩阵进行分解,由此引入SVD的概念。
二、SVD定义
SVD也是对矩阵进行分解,但是与特征分解不同,SVD并不要求分解的矩阵为方阵。
定义矩阵A的SVD为:
A = U Σ V T A=UΣV^{T} A=UΣVT
其中U是一个m * m的矩阵,Σ是一个m * n的矩阵,除了对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,V是一个n * n的矩阵。U和V都是酉矩阵,即满足 U T U = I U^{T}U=I UTU=I, V T V = I V^{T}V=I VTV=I
那么我们如何求出SVD分解后的U,Σ,V这三个矩阵呢?
2.1 求矩阵V
将矩阵A的转置与A作矩阵乘法,得到一个n x n的方阵 A T A A^{T}A ATA。由于 A T A A^{T}A ATA是方阵,因此可以进行特征分解,而且得到特征值λi与特征向量vi。将该方阵的所有特征向量张成一个n x n的矩阵V,这就是SVD中的矩阵V了。
一般,将V中的每个特征向量叫做A的右特征向量。
2.2 求矩阵U
相反,将矩阵A与A的转置作矩阵乘法,得到一个m x m的方阵 A A T AA^{T} AAT。由于 A A T AA^{T} AAT是方阵,因此可以进行特征分解,而且得到特征值λi与特征向量ui。将该方阵的所有特征向量张成一个n x n的矩阵U,这就是SVD中的矩阵U了。
一般,将U中的每个特征向量叫做A的左特征向量。
2.3 求矩阵Σ
A = U Σ V T ⇒ A V = U Σ V T V ⇒ A V = U Σ ⇒ A v i = σ i u i ⇒ σ i = A v i / u i A=UΣV^{T} ⇒ AV=UΣV^{T}V ⇒ AV=UΣ ⇒Av_i=σ_iu_i⇒σ_i=Av_i/u_i A=UΣVT⇒AV=UΣVTV⇒AV=UΣ⇒Avi=σ