奇异值和特征值都描述了一个矩阵的一些特性,但很多情况下,对于两者之间的区别和联系都不太清楚。
本文就这两者进行解析,并对奇异值的一些简单应用进行探索。
奇异值与特征值的定义
奇异值与特征值都被用于描述矩阵作用于某些向量的标量,都是描述该向量模长变化幅度的数值。矩阵与向量的乘积得到一个新的向量,几何上相当于对向量进行了旋转和拉伸,就像是对向量施加了一个作用,或者说是变换。
定义:
- 如果有向量
v
v
v能使得矩阵
A
A
A与之的积
A
v
=
λ
v
Av=\lambda v
Av=λv,
λ
\lambda
λ为标量,那么
λ
\lambda
λ和
v
v
v就分别是
A
A
A的
特征值
与特征向量
- 如果存在
单位正交矩阵
U U U和 V V V,使得 A = U D V T A=UDV^T A=UDVT, D D D为对角矩阵
,对角线上的值被称为奇异值
, U U U和 V V V中的列分别被称为 D D D的左奇异向量
和右奇异向量
特征值只能在方阵中进行,而奇异值则没有这个限制。
如果考虑矩阵的维度,奇异值的定义为:
对于一个秩为 r r r的矩阵 A m ∗ n A_{m*n} Am∗n,必存在 m ∗ m m*m m∗m的正交矩阵 U m ∗ m U_{m*m} Um∗m, n ∗ n n*n n∗n的正交矩阵 V n ∗ n V_{n*n} Vn∗n, m ∗ n m*n m∗n的矩阵 D m ∗ n D_{m*n} Dm∗n,使得:
A m ∗ n = U m ∗ m D m ∗ n V n ∗ n T = U m ∗ m [ Σ r ∗ r 0 0 0 ] m ∗ n V n ∗ n T A_{m*n}=U_{m*m}D_{m*n}V_{n*n}^T=U_{m*m}\begin{bmatrix}\Sigma_{r*r}&0\\0&0\end{bmatrix}_{m*n}V^T_{n*n} Am∗n=Um∗mDm∗nVn∗nT=Um∗m[Σr∗r000]m∗nVn∗nT
特征值
从定义中可看出,特征向量给出了方向不变作用的方向。 当 A A A作用于特征向量时( A v Av Av),它只是将特征向量 v v v数乘一个标量(对应的特征值 λ \lambda λ),相当于将 v v v长度变化了 λ \lambda λ倍,若 λ \lambda λ为正, v v v方向保持不变;否则, v v v方向反转。
例如:对于矩阵 A = [ 1 1 3 1 3 1 ] A=\begin{bmatrix}1&\frac{1}{3}\\\frac{1}{3}&1\end{bmatrix} A=[131311],单位圆被变换为椭圆,特征向量是所有向量中经过线性变换(乘以 A A A)后,方向不变的向量。
奇异值
特征向量不变的方向并不保证是拉伸效果最大的方向,而这是奇异向量的方向。
奇异值是非负实数,通常从大到小顺序排列。
σ 1 \sigma_1 σ1是矩阵 A A A的最大奇异值,对应右奇异向量 v v v。 v v v是 a r g max x , ∣ x ∣ = 1 ( ∣ ∣ A x ∣ ∣ 2 2 ) arg\max_{x,|x|=1}(||Ax||_2^2) argmaxx,∣x∣=1(∣∣Ax∣∣22)的解,换句话说:在 A A A与所有单位向量 x x x的乘积中, ∣ ∣ A v ∣ ∣ 2 2 = σ 1 ||Av||_2^2=\sigma_1 ∣∣Av∣∣22=σ1是最大的;但不保证乘积后方向不变。
怎么理解这一点呢?
对于 A = U D V T A=UDV^T A=UDVT,可以这么理解:
- V T V^T VT:旋转(正定矩阵)
- D D D:缩放或拉伸(对角矩阵)
- U U U:旋转(正定矩阵)
由于SVD分解对于 A A A本身没有任何的限制,也就是说,任何矩阵变换总可以看成旋转+缩放或拉伸+旋转的过程。
既然这样,那么对于拉伸效果最大的判断,就是看 D D D矩阵中最大的奇异值了。
例如:对于矩阵 A = [ 1 1 3 1 3 1 ] A=\begin{bmatrix}1&\frac{1}{3}\\\frac{1}{3}&1\end{bmatrix} A=[131311],单位圆被变换为椭圆,奇异向量对应椭圆的半长轴,不同于上例中同一矩阵的特征值方向。
区别与联系
从上面的图中可以清楚的看到,奇异值与特征值的差异在于:
- 特征向量描述的是矩阵的方向不变作用的向量
- 奇异向量描述的是矩阵最大作用的方向向量
而它们的关联在于:
- A T A A^TA ATA和 A A T AA^T AAT特征值是 A A A的奇异值的平方(具体的解释分析见下文)
方向不变和拉伸最大都是矩阵内禀
的性质,方向不变在马尔可夫随机场中非常重要;而拉伸最大的方向则是数据方差分布最大的方向,所含信息量最大,是PCA等方法中的核心思想。
A A A的奇异值与 A T A A^TA ATA和 A A T AA^T AAT的特征值的关系
首先,我们需要简单回顾一下特征值与特征向量:
如果对于任意方阵A,假设求得 n n n个特征值 [ λ 1 , λ 2 , . . . , λ n ] [\lambda_1,\lambda_2,...,\lambda_n] [λ1,λ2,...,λn],对应到特征向量为 [ x 1 , x 2 , . . . x n ] [x_1,x_2,...x_n] [x1,x2,...xn],其中每一个 x i x_i xi均为一个列向量。我们分别构建特征值对应的对角阵 Σ \Sigma Σ和特征向量构建的矩阵 W W W,有:
Σ = [ λ 1 λ 2 ⋱ λ n ] \Sigma=\begin{bmatrix}\lambda_1 \\ & \lambda_2 \\ && \ddots \\ &&& \lambda_n\end{bmatrix} Σ= λ1λ2⋱λn
W = [ x 1 x 2 . . . x n ] W=\begin{bmatrix}x_1&x_2&...&x_n\end{bmatrix} W=[x1x2...xn]
那么结合 A x = λ x Ax=\lambda x Ax=λx,我们得到如下等式,即 A A A的特征分解表达式:
A W = W Σ ⇒ A = W Σ W − 1 AW=W\Sigma \Rightarrow A=W\Sigma W^{-1} AW=WΣ⇒A=WΣW−1
进一步,由于特征向量是原空间经过线性变换后的方向向量,因此我们可以对每个特征向量进行尺度缩放,令其模长为1(归一化),即 ∣ ∣ x i ∣ ∣ 2 2 = 1 ||x_i||_2^2=1 ∣∣xi∣∣22=1。那么此时构建的 n n n个特征向量组成的矩阵 W W W则为正交矩阵,即满足 W T = W − 1 W^T=W^{-1} WT=W−1。因此, A A A的特征分解表达式可改写为:
A = W Σ W T A=W\Sigma W^T A=WΣWT
有了以上结论,我们就可以进一步去探寻 A T A A^TA ATA的特征值与 A A A的奇异值之间的关系了。
我们知道, A A A的SVD分解结果为:
A = U D V T = U [ Σ 0 ] V T A=UDV^T=U\begin{bmatrix}\Sigma\\0\end{bmatrix}V^T A=UDVT=U[Σ0]VT
因此:
A T = V D T U T = V [ Σ 0 ] U T A^T=VD^TU^T=V\begin{bmatrix}\Sigma & 0\end{bmatrix}U^T AT=VDTUT=V[Σ0]UT
那么有:
A T A = V D T U T U D V T A^TA=VD^TU^TUDV^T ATA=VDTUTUDVT
由于 U U U是正交矩阵:
A T A = V D T D V T = V Σ 2 V T A^TA=VD^TDV^T=V\Sigma^2V^T ATA=VDTDVT=VΣ2VT
因此我们发现对 A A A的右奇异矩阵 V V V正好是 A T A A^TA ATA的特征向量构建的矩阵 W W W。同时, A T A A^TA ATA特征值是 A A A奇异值的平方。
同理:
A A T = U D V T V D T U T = U D D T U T = U Σ 2 U T AA^T=UDV^TVD^TU^T=UDD^TU^T=U\Sigma^2U^T AAT=UDVTVDTUT=UDDTUT=UΣ2UT
因此我们发现对 A A A的左奇异矩阵 U U U正好是 A A T AA^T AAT的特征向量构建的矩阵 W W W。同时, A A T AA^T AAT特征值是 A A A奇异值的平方。
在文章【Math】线性方程组的最小二乘解中,对齐次方程组的最小二乘解进行分析,其中对应的特征值解和奇异值解。根据结论,特征值解为 A T A A^TA ATA最小特征值对应的特征向量,奇异值解为 A A A最小奇异值对应的右奇异向量。
根据本文结论, A T A A^TA ATA特征值是 A A A奇异值的平方,因此最小奇异值就对应着最小特征值,又因为 A A A的右奇异矩阵 V V V矩阵正好是 A T A A^TA ATA的特征向量构建的矩阵 W W W,因此 A T A A^TA ATA最小特征值对应的特征向量等同于 A A A最小奇异值对应的右奇异向量。这并不矛盾。
对于SVD分解与特征值特征向量的关系,我们还应该想到, A A A的SVD分解结果亦可通过特征分解得到。其中求解 A T A A^TA ATA的特征向量对应SVD中的 V V V;求解 A A T AA^T AAT的特征向量对应SVD中的 U U U;而 D D D也可通过特征值求平方根得到;最后在构建 U D V T UDV^T UDVT各矩阵行列顺序的时候,按照奇异值 σ \sigma σ从大到小的顺序构建即可。
奇异值分解的求法
根据 A A A的奇异值与 A T A A^TA ATA和 A A T AA^T AAT的特征值的关系,我们就可以通过特征值的求法,来进行奇异值分解,下面介绍一下步骤:
第一步:求出 A m ∗ n T A m ∗ n A^T_{m*n}A_{m*n} Am∗nTAm∗n的 n n n个特征值 λ 1 \lambda_1 λ1、 λ 2 \lambda_2 λ2、 . . . ... ...、 λ r \lambda_r λr、 λ r + 1 = 0 \lambda_{r+1}=0 λr+1=0、 λ r + 2 = 0 \lambda_{r+2}=0 λr+2=0、 . . . ... ...、 λ n = 0 \lambda_{n}=0 λn=0(并按照从大到小排列)和对应的标准正交的特征向量 v 1 v_1 v1、 v 2 v_2 v2、 . . . ... ...、 v r v_r vr、 v r + 1 v_{r+1} vr+1、 v r + 2 v_{r+2} vr+2、 . . . ... ...、 v n v_n vn
第二步:取标准正交的特征向量构成正交矩阵
V n ∗ n = [ v 1 v 2 . . . v r v r + 1 v r + 2 . . . v n ] n ∗ n V_{n*n}=\begin{bmatrix}v_1&v_2&...&v_r&v_{r+1}&v_{r+2}&...&v_n\end{bmatrix}_{n*n} Vn∗n=[v1v2...vrvr+1vr+2...vn]n∗n
取正奇异值,即前 r r r个奇异值,即非零特征值开根号 λ 1 \sqrt{\lambda_1} λ1、 λ 2 \sqrt{\lambda_2} λ2、 . . . ... ...、 λ r \sqrt{\lambda_r} λr,构成对角矩阵
Σ r ∗ r = [ λ 1 λ 2 ⋱ λ n ] r ∗ r \Sigma_{r*r}=\begin{bmatrix}\sqrt{\lambda_1} \\ & \sqrt{\lambda_2} \\ && \ddots \\ &&& \sqrt{\lambda_n}\end{bmatrix}_{r*r} Σr∗r= λ1λ2⋱λn r∗r
添加额外的 0 0 0组成 m ∗ n m*n m∗n的矩阵:
D m ∗ n = [ Σ r ∗ r 0 0 0 ] m ∗ n D_{m*n}=\begin{bmatrix}\Sigma_{r*r}&0\\0&0\end{bmatrix}_{m*n} Dm∗n=[Σr∗r000]m∗n
第三步:求出 A m ∗ n A m ∗ n T A_{m*n}A_{m*n}^T Am∗nAm∗nT的 m m m个特征值 λ 1 \lambda_1 λ1、 λ 2 \lambda_2 λ2、 . . . ... ...、 λ r \lambda_r λr、 λ r + 1 = 0 \lambda_{r+1}=0 λr+1=0、 λ r + 2 = 0 \lambda_{r+2}=0 λr+2=0、 . . . ... ...、 λ m = 0 \lambda_{m}=0 λm=0(并按照从大到小排列)和对应的标准正交的特征向量 u 1 u_1 u1、 u 2 u_2 u2、 . . . ... ...、 u r u_r ur、 u r + 1 u_{r+1} ur+1、 u r + 2 u_{r+2} ur+2、 . . . ... ...、 u n u_n un
第四步:取标准正交的特征向量构成正交矩阵
U m ∗ m = [ u 1 u 2 . . . u r v r + 1 u r + 2 . . . u m ] m ∗ m U_{m*m}=\begin{bmatrix}u_1&u_2&...&u_r&v_{r+1}&u_{r+2}&...&u_m\end{bmatrix}_{m*m} Um∗m=[u1u2...urvr+1ur+2...um]m∗m
结束。
再思考一下,因为 A T A A^TA ATA和 A A T AA^T AAT的秩相等、特征值一致,感觉第三步第四步有点重复的意思了,还有没有其他的办法代替这两步么?
从另个角度看:
A = U D V T ⇒ A V = U D V T V A=UDV^T \Rightarrow AV=UDV^TV A=UDVT⇒AV=UDVTV
由于 V V V是正交矩阵,可以得到:
A V = U D ⇒ A v i = σ i u i ⇒ u i = 1 σ i A v i AV=UD \Rightarrow Av_i=\sigma_iu_i \Rightarrow u_i=\frac{1}{\sigma_i}Av_i AV=UD⇒Avi=σiui⇒ui=σi1Avi
这个时候,可以看到 Σ \Sigma Σ的维度为 r r r, V V V的维度为 n n n,最多只可以计算出 U U U的 r r r个维度,还缺 m − r m-r m−r个维度。此时可以通过标准正交的基扩充方法,将 u 1 u_1 u1、 u 2 u_2 u2、 . . . ... ...、 u r u_r ur扩充为 m m m维向量空间的标准正交基 u 1 u_1 u1、 u 2 u_2 u2、 . . . ... ...、 u r u_r ur、 b 1 b_1 b1、 b 2 b_2 b2、 . . . ... ...、 b m − r b_{m-r} bm−r,组成正交矩阵:
U m ∗ m = [ u 1 u 2 . . . u r b 1 b 2 . . . b m − r ] m ∗ m U_{m*m}=\begin{bmatrix}u_1&u_2&...&u_r&b_{1}&b_{2}&...&b_{m-r}\end{bmatrix}_{m*m} Um∗m=[u1u2...urb1b2...bm−r]m∗m
关于标准正交的基扩充,可以参考文章:奇异值分解(SVD)的定义、证明、求法。
奇异值的应用
假设想要对图片进行压缩,图片的像素矩阵为 A m ∗ n A_{m*n} Am∗n。根据SVD分解,可以将 A m ∗ n A_{m*n} Am∗n进行转换为:
A m ∗ n = U m ∗ m D m ∗ n V n ∗ n T A_{m*n}=U_{m*m}D_{m*n}V^T_{n*n} Am∗n=Um∗mDm∗nVn∗nT
我们现在存储的是 U m ∗ m U_{m*m} Um∗m、 D m ∗ n D_{m*n} Dm∗n、 V n ∗ n V_{n*n} Vn∗n三个矩阵。如何能够压缩这 3 3 3个矩阵的维度呢?
对于 m m m行 n n n列的矩阵 A A A, 通过SVD分解之后,拆分成了 3 3 3个子矩阵,其中 U U U矩阵为 m m m行 n n n列的方阵, V V V矩阵为 n n n行 n n n列的方阵, D D D矩阵为只有对角线有值的矩阵,其中的值称之为奇异值。
在奇异值分解中, D D D矩阵的奇异值是按照从大到小的顺序排列的,而且减少的特别快,经常前 10 % 10\% 10%的奇异值就占据了全部奇异值 99 % 99\% 99%以上的比例。基于这个性质,我们可以只提取前几个奇异值及其对应的矩阵来近似的描述原来的矩阵。
通常, D D D矩阵可以根据 A A A矩阵的秩 r r r进行划分块:
D m ∗ n = [ Σ r ∗ r 0 0 0 ] m ∗ n D_{m*n}=\begin{bmatrix}\Sigma_{r*r}&0\\0&0\end{bmatrix}_{m*n} Dm∗n=[Σr∗r000]m∗n
如果只取前 k k k个奇异值,且 k ≥ r k\ge r k≥r,那么新的矩阵较原来的矩阵是无损的。这是因为, Σ \Sigma Σ矩阵的奇异值表示其对应的特征,而当 k ≥ r k\ge r k≥r时, D k ∗ k D_{k*k} Dk∗k已经包含了 Σ r ∗ r \Sigma_{r*r} Σr∗r的所有非零元素,所以其是可以完美复原出来的。
例如:
A 4 ∗ 5 = [ 1 0 0 0 2 0 0 3 0 0 0 0 0 0 0 0 4 0 0 0 ] A_{4*5}=\begin{bmatrix}1&0&0&0&2\\0&0&3&0&0\\0&0&0&0&0\\0&4&0&0&0\end{bmatrix} A4∗5= 10000004030000002000
可以SVD分解为:
A 4 ∗ 5 = U 4 ∗ 4 D 4 ∗ 5 V 5 ∗ 5 T = [ 0 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 ] [ 4 0 0 0 0 0 3 0 0 0 0 0 5 0 0 0 0 0 0 0 ] [ 0 1 0 0 0 0 0 1 0 0 0.2 0 0 0 0.8 0 0 0 1 0 0.8 0 0 0 − 0.2 ] A_{4*5}=U_{4*4}D_{4*5}V_{5*5}^T=\begin{bmatrix}0&0&1&0\\0&1&0&0\\0&0&0&1\\1&0&0&0\end{bmatrix}\begin{bmatrix}4&0&0&0&0\\0&3&0&0&0\\0&0&\sqrt{5}&0&0\\0&0&0&0&0\end{bmatrix}\begin{bmatrix}0&1&0&0&0\\0&0&1&0&0\\\sqrt{0.2}&0&0&0&\sqrt{0.8}\\0&0&0&1&0\\\sqrt{0.8}&0&0&0&-\sqrt{0.2}\end{bmatrix} A4∗5=U4∗4D4∗5V5∗5T= 0001010010000010 40000300005000000000 000.200.8100000100000010000.80−0.2
如果 U U U取前 3 3 3列, D D D取前 3 3 3行 3 3 3列, V T V^T VT取前 3 3 3行,那么:
U 4 ∗ 3 D 3 ∗ 3 V 3 ∗ 5 T = [ 0 0 1 0 1 0 0 0 0 1 0 0 ] [ 4 0 0 0 3 0 0 0 5 ] [ 0 1 0 0 0 0 0 1 0 0 0.2 0 0 0 0.8 ] = [ 1 0 0 0 2 0 0 3 0 0 0 0 0 0 0 0 4 0 0 0 ] U_{4*3}D_{3*3}V_{3*5}^T=\begin{bmatrix}0&0&1\\0&1&0\\0&0&0\\1&0&0\end{bmatrix}\begin{bmatrix}4&0&0\\0&3&0\\0&0&\sqrt{5}\end{bmatrix}\begin{bmatrix}0&1&0&0&0\\0&0&1&0&0\\\sqrt{0.2}&0&0&0&\sqrt{0.8}\end{bmatrix}=\begin{bmatrix}1&0&0&0&2\\0&0&3&0&0\\0&0&0&0&0\\0&4&0&0&0\end{bmatrix} U4∗3D3∗3V3∗5T= 000101001000 400030005 000.2100010000000.8 = 10000004030000002000
可以看到,该值与 A 4 ∗ 5 A_{4*5} A4∗5完全一致。
如果 U U U取前 2 2 2列, D D D取前 2 2 2行 2 2 2列, V T V^T VT取前 2 2 2行,那么:
U 4 ∗ 2 D 2 ∗ 2 V 2 ∗ 5 T = [ 0 0 0 1 0 0 1 0 ] [ 4 0 0 3 ] [ 0 1 0 0 0 0 0 1 0 0 ] = [ 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 4 0 0 0 ] U_{4*2}D_{2*2}V_{2*5}^T=\begin{bmatrix}0&0\\0&1\\0&0\\1&0\end{bmatrix}\begin{bmatrix}4&0\\0&3\end{bmatrix}\begin{bmatrix}0&1&0&0&0\\0&0&1&0&0\end{bmatrix}=\begin{bmatrix}0&0&0&0&0\\0&0&3&0&0\\0&0&0&0&0\\0&4&0&0&0\end{bmatrix} U4∗2D2∗2V2∗5T= 00010100 [4003][0010010000]= 00000004030000000000
此时看到,该值与 A 4 ∗ 5 A_{4*5} A4∗5不一致。
因此,假设 A A A的秩为 r r r,有:
A m ∗ n = U m ∗ m D m ∗ n V n ∗ n T ≈ U m ∗ k D k ∗ k V k ∗ n T A_{m*n}=U_{m*m}D_{m*n}V^T_{n*n}\approx U_{m*k}D_{k*k}V^T_{k*n} Am∗n=Um∗mDm∗nVn∗nT≈Um∗kDk∗kVk∗nT
- 当 k ≥ r k\ge r k≥r时,没有损失
- 当 k < r k< r k<r时, k k k越大,损失的越小
图片压损也就是采用这个原理,可以将图片的矩阵进行SVD分解,取其前 k k k个奇异值,然后重新计算出该图片的样式。
PCA主成分分析法,其实也是采取的同样近似的原理,所谓主成分,就是奇异值较大的几个子矩阵,用它们来代替整体的矩阵。
相关阅读
- 白话来说SVD奇异值分解(1)→原理推导与奇异值求解举例
- 奇异值与特征值辨析
- 奇异值分解
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用