转自:
https://liam.page/2017/11/22/SVD-for-Human-Beings/
更多信息请读者移步原文阅读。
推荐中国台湾周志成老师的线性代数博客
https://ccjou.wordpress.com/
以及书籍《矩阵分析及应用》-- 张贤达
还可参考:
https://www.cnblogs.com/endlesscoding/p/10058532.html
矩阵的转置(transpose)是最简单的一种矩阵变换。简单来说,若 m×n 的矩阵 M 的转置记为 M?;则 M? 是一个 n×m 的矩阵,并且 Mi,j=M?j,i。
因此,矩阵的转置相当于将矩阵按照主对角线翻转;同时,我们不难得出 M=(M?)?。
关于矩阵的一些性质:
(A + B)T = AT + BT;
(AB)T = BTAT;
(AB)-1 = B-1A-1;
(A-1)T = AT)-1 (此时A必须是可逆方阵);
矩阵的共轭转置(conjugate transpose)可能是倒数第二简单的矩阵变换。共轭转置只需要在转置的基础上,再叠加复数的共轭(M*)即可。因此,若以 M? 记矩阵 M 的共轭转置,则有
MH = (M*)T = (MT)*
满足UT U = UUT = E(E为单位矩阵)的实方阵,成为正交矩阵。
酉矩阵(unitary matrix)是一种特殊的复方阵,它满足
UU?=U?U=In.
不难看出,酉矩阵实际上是推广的正交矩阵(orthogonal matrix);当酉矩阵中的元素均为实数时,酉矩阵实际就是正交矩阵。另一方面,由于 MM−1=M−1M=In,所以酉矩阵 U 满足 U−1=U?;事实上,这是一个矩阵是酉矩阵的充分必要条件。
复方阵M满足MM?=M?M,则称M为正规矩阵。
复系数的酉矩阵和实系数的正交矩阵都是正规矩阵。但正规矩阵并不只有酉矩阵或正交矩阵。
例如说,矩阵 M = ( 1 1 0 0 1 1 1 0 1 ) \mathbf{M}=\left(\begin{array}{lll}{1} & {1} & {0} \\ {0} & {1} & {1} \\ {1} & {0} & {1}\end{array}\right) M=⎝⎛101110011⎠⎞即是一个正规矩阵,但它显然不是酉矩阵或正交矩阵;因为
M M H = ( 2 1 1 1 2 1 1 1 2 ) = M H M \mathbf{M} \mathbf{M}^{\mathrm{H}}=\left(\begin{array}{lll}{2} & {1} & {1} \\ {1} & {2} & {1} \\ {1} & {1} & {2}\end{array}\right)=\mathbf{M}^{\mathrm{H}} \mathbf{M} MMH=⎝⎛211121112⎠⎞=MHM
满足A = AH 的复方阵称为Hermitian矩阵。
矩阵的对角化是线性代数中的一个重要命题。谱定理(spectral theorem)给出了方阵对角化的一个结论:若矩阵 M 是一个正规矩阵,则存在酉矩阵 U,以及对角矩阵 Λ,使得 M=UΛU?.
这也就是说,正规矩阵,可经由酉变换,分解为对角矩阵;这种矩阵分解的方式,称为谱分解(spectral decomposition)。
谱定理给出了正规矩阵分解的可能性以及分解形式。然而,对于矩阵来说,正规矩阵是要求非常高的。因此,谱定理是一个非常弱的定理,它的适用范围有限。在实际生产中,我们遇到的很多矩阵都不是正规矩阵。对于这些矩阵,谱定理就失效了。作为谱定理的泛化,SVD 分解对于原矩阵的要求就要弱得多。
SVD 的定义:假设 M 是一个 m×n 的矩阵,其中的元素全部属于数域 ?(实数域 ℝ 或复数域 ℂ)。那么,存在 m×m 的酉矩阵 U 和 n×n 的酉矩阵 V 使得M=UΣV?,
其中 Σ 是 m×n 的非负实数对角矩阵;并且 Σ 对角线上的元素 Σi,i是 M 的奇异值。一般来说,我们偏好将这些奇异值按从大到小的顺序排列,这样一来 Σ 就由 M 唯一确定了。
另一方面,因为 U 和 V 都是酉矩阵,所以 U 和 V 的列向量分别张成 ?m 和 ?n 的一组标准正交基。我们将 U 的列向量记作 u ⃗ i \vec{u}_{i} ui, 1⩽i⩽m;将 V 的列向量记作 v ⃗ j \vec{v}_{j} vj,1⩽j⩽n;同时,将 Σ 对角线上的第 i 个元素记作 σk,1⩽k⩽min(m,n)。那么,SVD 分解实际可以将矩阵 M 写作一个求和形式
M = ∑ i = 1 min ( m , n ) σ i u ⃗ i v ⃗ i ⊤ \mathbf{M}=\sum_{i=1}^{\min (m, n)} \sigma_{i} \vec{u}_{i} \vec{v}_{i}^{\top} M=i=1∑min(m,n)σiuivi⊤
了解了 SVD 的介绍和相关几何解释之后,接下来最直接想要知道的就是如何计算一个矩阵的 SVD 了。我们分成几步来探讨这个问题。
我们对求特征值和特征向量比较熟悉,一般分两步:
推论1:若A ∊ ℂnxn为Hermitain矩阵,其特征值一定是实数,并且有A= UΣUH,式中U = [u1,u2,…,un]T; Σ = diag(λ1,λ2,…,λn)。
证明:因为对于任意 Hermitain矩阵A的特征值λi都有对于的特征向量 u ⃗ i \vec{u}_{i} ui((!= 0 ⃗ \vec{0} 0)满足下列关系:
A u i = λ i u i , i = 1 , 2 , ⋯   , n \boldsymbol{A} \boldsymbol{u}_{i}=\lambda_{i} \boldsymbol{u}_{i}, \quad i=1,2, \cdots, n Aui=λiui,i=1,2,⋯,n
将这些方程写成矩阵的形式:
A [ u 1 , ⋯   , u n ] = [ u 1 , ⋯   , u n ] [ λ 1 0 ⋱ 0 λ n ] \boldsymbol{A}\left[\boldsymbol{u}_{1}, \cdots, \boldsymbol{u}_{n}\right]=\left[\boldsymbol{u}_{1}, \cdots, \boldsymbol{u}_{n}\right]\left[\begin{array}{ccc}{\boldsymbol{\lambda}_{1}} & {} & {0} \\ {} & {\ddots} & {} \\ {0} & {} & {\lambda_{n}}\end{array}\right] A[u1,⋯,un]=[u1,⋯,un]⎣⎡λ10⋱0λn⎦⎤
令U = [u1,u2,…,un]T; Σ = diag(λ1,λ2,…,λn),所以有
A U = U Σ \boldsymbol{A} \boldsymbol{U}=\boldsymbol{U}\Sigma AU=UΣ
(?证不下去了,显然下一步要在等式两边同右乘UH,然后证明U是酉矩阵,即UUH = E。线性代数中在讲 对称矩阵的性质的时候给出定理:对于n阶实对称矩阵A,存在正交矩阵Q,使得A = QΣQT,现在只是把这个推广到复数域上了,可以参考这两个:https://www.zhihu.com/question/38801697
https://blog.csdn.net/BingeCuiLab/article/details/47209037)
现在,假设矩阵 Mm×n 的 SVD 分解是M=UΣV?,那么我们有
M M H = U Σ V H V Σ H U H = U Σ Σ H U H \boldsymbol{M} \boldsymbol{M}^{H}=\boldsymbol{U}\Sigma \boldsymbol{V}^{H}\boldsymbol{V}\Sigma ^{H}\boldsymbol{U}^{H}=\boldsymbol{U}\Sigma\Sigma ^{H}\boldsymbol{U}^{H} MMH=UΣVHVΣHUH=UΣΣHUH
M H M = V Σ H U H U Σ V H = V Σ Σ H V H \boldsymbol{M}^{H} \boldsymbol{M}=\boldsymbol{V}\Sigma ^{H}\boldsymbol{U}^{H}\boldsymbol{U}\Sigma \boldsymbol{V}^{H}=\boldsymbol{V}\Sigma\Sigma ^{H}\boldsymbol{V}^{H} MHM=VΣHUHUΣVH=VΣΣHVH
显然MMH 和 MHM都是Hermitian矩阵,用推论1有:
U 的列向量(左奇异向量),是 MM? 的特征向量;同时,V 的列向量(右奇异向量),是 M?M 的特征向量;另一方面,M 的奇异值(Σ 的非零对角元素)则是 MM? 或者 M?M 的非零特征值的平方根。通过这样将问题转换,我们就可以用求特征值的方法求奇异值了。
计算出任意矩阵的 SVD 分解的算法步骤:
Example:对矩阵M = [ 2 4 1 3 0 0 0 0 ] \left[\begin{array}{ll}{2} & {4} \\ {1} & {3} \\ {0} & {0} \\ {0} & {0}\end{array}\right] ⎣⎢⎢⎡21004300⎦⎥⎥⎤进行奇异值分解。
首先,我们需要计算 MM?,
W = M M H = [ 2 4 1 3 0 0 0 0 ] [ 2 1 0 0 4 3 0 0 ] = [ 20 14 0 0 14 10 0 0 0 0 0 0 0 0 0 0 ] \mathbf{W}=\mathbf{M} \mathbf{M}^{H}=\left[\begin{array}{ll}{2} & {4} \\ {1} & {3} \\ {0} & {0} \\ {0} & {0}\end{array}\right]\left[\begin{array}{llll}{2} & {1} & {0} & {0} \\ {4} & {3} & {0} & {0}\end{array}\right]=\left[\begin{array}{cccc}{20} & {14} & {0} & {0} \\ {14} & {10} & {0} & {0} \\ {0} & {0} & {0} & {0} \\ {0} & {0} & {0} & {0}\end{array}\right] W=MMH=⎣⎢⎢⎡21004300⎦⎥⎥⎤[24130000]=⎣⎢⎢⎡20140014100000000000⎦⎥⎥⎤
然后,我们求 W 的特征值与特征向量。
[ 20 − λ 14 0 0 14 10 − λ 0 0 0 0 − λ 0 0 0 0 − λ ] x ⃗ = 0 → \left[\begin{array}{cccc}{20-\lambda} & {14} & {0} & {0} \\ {14} & {10-\lambda} & {0} & {0} \\ {0} & {0} & {-\lambda} & {0} \\ {0} & {0} & {0} & {-\lambda}\end{array}\right] \vec{x}=\overrightarrow{0} ⎣⎢⎢⎡20−λ14001410−λ0000−λ0000−λ⎦⎥⎥⎤x=0
根据线性方程组的理论,若要该关于 x ⃗ \vec{x} x 的方程有非零解,则要求系数矩阵的行列式为 0;也就是
∣ 20 − λ 14 0 0 14 10 − λ 0 0 0 0 − λ 0 0 0 0 − λ ∣ = ∣ 20 − λ 14 14 10 − λ ∣ ∣ − λ 0 0 − λ ∣ = 0 \left|\begin{array}{cccc}{20-\lambda} & {14} & {0} & {0} \\ {14} & {10-\lambda} & {0} & {0} \\ {0} & {0} & {-\lambda} & {0} \\ {0} & {0} & {0} & {-\lambda}\end{array}\right|=\left|\begin{array}{cc}{20-\lambda} & {14} \\ {14} & {10-\lambda}\end{array}\right|\left|\begin{array}{cc}{-\lambda} & {0} \\ {0} & {-\lambda}\end{array}\right|=0 ∣∣∣∣∣∣∣∣20−λ14001410−λ0000−λ0000−λ∣∣∣∣∣∣∣∣=∣∣∣∣20−λ141410−λ∣∣∣∣∣∣∣∣−λ00−λ∣∣∣∣=0
这也就是 ((20−λ)(10−λ)−196)λ2=0;解得 λ1=λ2=0, λ3=15+√221≈29.866, λ4=15−√221≈0.134。将特征值代入原方程,可解得对应的特征向量;这些特征向量即作为列向量,形成矩阵
U = [ − 0.82 − 0.58 0 0 − 0.58 0.82 0 0 0 0 1 0 0 0 0 1 ] \mathbf{U}=\left[\begin{array}{cccc}{-0.82} & {-0.58} & {0} & {0} \\ {-0.58} & {0.82} & {0} & {0} \\ {0} & {0} & {1} & {0} \\ {0} & {0} & {0} & {1}\end{array}\right] U=⎣⎢⎢⎡−0.82−0.5800−0.580.820000100001⎦⎥⎥⎤
同理可解得(注意,MM? 和 M?M 的特征值相同)
V = [ − 0.40 − 0.91 − 0.91 0.40 ] \mathbf{V}=\left[\begin{array}{cc}{-0.40} & {-0.91} \\ {-0.91} & {0.40}\end{array}\right] V=[−0.40−0.91−0.910.40]
以及 Σ 上的对角线元素由 W 的特征值的算术平方根组成;因此有
Σ = [ 5.46 0 0 0.37 0 0 0 0 ] \boldsymbol{\Sigma}=\left[\begin{array}{cc}{5.46} & {0} \\ {0} & {0.37} \\ {0} & {0} \\ {0} & {0}\end{array}\right] Σ=⎣⎢⎢⎡5.4600000.3700⎦⎥⎥⎤
因此我们得到矩阵 M 的 SVD 分解(数值上做了近似):
[ 2 4 1 3 0 0 0 0 ] ≈ [ − 0.82 − 0.58 0 0 − 0.58 0.82 0 0 0 0 1 0 0 0 0 1 ] [ 5.46 0 0 0.37 0 0 0 0 ] [ − 0.40 − 0.91 − 0.91 0.40 ] \left[\begin{array}{ll}{2} & {4} \\ {1} & {3} \\ {0} & {0} \\ {0} & {0}\end{array}\right] \approx\left[\begin{array}{cccc}{-0.82} & {-0.58} & {0} & {0} \\ {-0.58} & {0.82} & {0} & {0} \\ {0} & {0} & {1} & {0} \\ {0} & {0} & {0} & {1}\end{array}\right]\left[\begin{array}{cc}{5.46} & {0} \\ {0} & {0.37} \\ {0} & {0} \\ {0} & {0}\end{array}\right]\left[\begin{array}{cc}{-0.40} & {-0.91} \\ {-0.91} & {0.40}\end{array}\right] ⎣⎢⎢⎡21004300⎦⎥⎥⎤≈⎣⎢⎢⎡−0.82−0.5800−0.580.820000100001⎦⎥⎥⎤⎣⎢⎢⎡5.4600000.3700⎦⎥⎥⎤[−0.40−0.91−0.910.40]