本文主要介绍矩阵的两种经典的分解算法:满秩分解和奇异值分解。这两块内容非常基础,同时却又非常重要,在机器学习,模式识别,人工智能等领域有着非常广泛的应用。
满秩分解
定义与性质
定义1 满秩分解:对于 m×n m × n 的矩阵 A A ,假设其秩为 r r ,若存在秩同样为 r r 两个矩阵: Fm×r F m × r (列满秩)和 Gr×n G r × n (行满秩),使得 A=FG A = F G ,则称其为矩阵 A A 的满秩分解。
定理1:满秩分解有两个性质,
- 满秩分解不唯一:假设存在 r r 阶可逆方阵 D D ,则 A=FG=F(DD−1)G=(FD)(D−1G)=F′G′ A = F G = F ( D D − 1 ) G = ( F D ) ( D − 1 G ) = F ′ G ′ ;
- 任何非零矩阵一定存在满秩分解。证明如下;
假设存在初等变换矩阵 Bm×m B m × m ,使得
BA=(GO)(1) (1) B A = ( G O )
其中 G G 是个 m×r m × r 的行满秩矩阵。由上面的公式,可以推出,
A=B−1(GO)=(F|S)(GO)=FG(2) (2) A = B − 1 ( G O ) = ( F | S ) ( G O ) = F G
公式第二行中,我们将 B−1 B − 1 分块为 (F|S) ( F | S ) ,其中 F F 为 m×r m × r 矩阵(秩为 r r ), G G 为 r×n r × n 矩阵(秩为 r r )。
满秩分解的计算
如果能理解上面的证明过程,那么计算满秩分解就很容易了,因为方法与证明思路是一致的。
举个例子来说明,现在要计算下面矩阵 A A 的满秩分解:
A=⎛⎝⎜−1120221−1−221−1⎞⎠⎟(3) (3) A = ( − 1 0 1 2 1 2 − 1 1 2 2 − 2 − 1 )
首先,对 A A 进行初等变换,得到行满秩矩阵 G G 和初等矩阵 B B .
A=⎛⎝⎜⎜−1120221−1−221−1100010001⎞⎠⎟⎟→⎛⎝⎜⎜−10002010023011101−1001⎞⎠⎟⎟(4) (4) A = ( − 1 0 1 2 1 0 0 1 2 − 1 1 0 1 0 2 2 − 2 − 1 0 0 1 ) → ( − 1 0 1 2 1 0 0 0 2 0 3 1 1 0 0 0 0 0 1 − 1 1 )
可见,
B=⎛⎝⎜11101−1001⎞⎠⎟,G=(−10021023)(5) (5) B = ( 1 0 0 1 1 0 1 − 1 1 ) , G = ( − 1 0 1 2 0 2 0 3 )
接着,可以算出
B−1=⎛⎝⎜1−1−2011001⎞⎠⎟=(F|S)(6) (6) B − 1 = ( 1 0 0 − 1 1 0 − 2 1 1 ) = ( F | S )
因为 r=2 r = 2 ,所以可以得到
F=⎛⎝⎜1−1−2011⎞⎠⎟(7) (7) F = ( 1 0 − 1 1 − 2 1 )
因此
A=FG=⎛⎝⎜1−1−2011⎞⎠⎟⋅(−10021023)(8) (8) A = F G = ( 1 0 − 1 1 − 2 1 ) ⋅ ( − 1 0 1 2 0 2 0 3 )
另一种计算满秩分解的方法是用矩阵 A A 的Hermite标准型。具体做法如下。
Hermite标准型
先给出Hermite标准型的定义。
定义2 Hermite标准型:对于 m×n m × n 的矩阵 H H ,假设其秩为 r r ,若 H H 满足以下3个条件,则称之为Hermite标准型。
- H H 的前 r r 行中,每行都至少含一个非零元素,且每行的第一个非零元是1,而后 m−r m − r 行都是零元;
- 假设第 i i 行的第一个非零元(就是1)在第 ji j i 列,则 j1<j2<⋯<jr j 1 < j 2 < ⋯ < j r ;
- H H 的 j1,j2,…,jr j 1 , j 2 , … , j r 列是单位矩阵 Em E m 的前 r r 行(这个条件实际上覆盖了前2个条件);
由定义可以看出Hermite标准型就是将秩为 r r 的 m×n m × n 矩阵经初等变换而成的阶梯型矩阵。所以也叫做Hermite最简型。
算出Hermite标准型后,对于矩阵的满秩分解 A=FG A = F G 来说,矩阵 F F 就是矩阵 A A 中 j1,j2,…,jr j 1 , j 2 , … , j r 列构成的 m×r m × r 矩阵,而 G G 则是 H H 的前 r r 行构成的矩阵。
还举上面的例子,先变换得到矩阵 A A 的Hermite标准型:
A=⎛⎝⎜−1120221−1−221−1⎞⎠⎟→⎛⎝⎜100010−10023/20⎞⎠⎟=H(9) (9) A = ( − 1 0 1 2 1 2 − 1 1 2 2 − 2 − 1 ) → ( 1 0 − 1 2 0 1 0 3 / 2 0 0 0 0 ) = H
H H 前两行第一个非零元所在的列号是1列和2列,所以
F=⎛⎝⎜−112022⎞⎠⎟,G=(1001−1023/2)(10) (10) F = ( − 1 0 1 2 2 2 ) , G = ( 1 0 − 1 2 0 1 0 3 / 2 )
特征值分解(EVD)
特征值分解是对于对称矩阵的一个经典的分解算法,它也是后面我要说的奇异值分解的基础。所以有必要专门列一个小节,大致介绍一下。
正交矩阵
在介绍特征值分解之前,先科普一个概念——正交矩阵。
定义3 正交矩阵:指满足 AAT=E A A T = E 的矩阵 A A ,其中 E E 为单位矩阵。
正交矩阵是欧式空间的叫法,在酉空间(即复数域上的欧式空间)叫酉矩阵。从定义也能看出正交矩阵有着很多特殊的性质:
- A A 的各行(列)是单位向量且两两正交;
- A A 在任意一组标准正交基下对应的线性变换为正交变换(即只旋转向量,却不改变向量之间的夹角和向量长度)
- |A|=±1 | A | = ± 1
- AT=A−1 A T = A − 1
正交阵的概念先摆在这,后面用到我再提。
特征值与特征向量
定义4 特征值与特征向量:设 A A 为数域P上的线性空间V的一个线性变换,如果对于P中一数 λ0 λ 0 ,存在非零向量 ξ ξ ,使得下式成立,那么 λ0 λ 0 称为 A A 的一个特征值,而 ξ ξ 称为 A A 的属于特征值 λ0 λ 0 的一个特征向量,即
Aξ=λ0ξ(11) (11) A ξ = λ 0 ξ
计算一个线性变换 A A 的特征值与特征向量的方法可以分为以下三步。
- 指定线性空间内的一组基,并写出 A A 在这组基下的矩阵 A A ;
- 求出 A A 的特征多项式 |λE−A| | λ E − A | 在数域P的全部根(几重根就算几个),这些根就是 A A 的全部特征值;
- 把所得的特征值逐个带入 AX=λiX A X = λ i X ,求出关于每个特征值的一组基础解系,也就是全部的线性无关的特征向量;
我举例解释一下:假设有线性变换 A A 在基 ε1,ε2,ε3 ε 1 , ε 2 , ε 3 下的矩阵是 A A ,现在求它的特征值和特征向量。
A=⎛⎝⎜122212221⎞⎠⎟(12) (12) A = ( 1 2 2 2 1 2 2 2 1 )
其特征多项式 |λE−A|=(λ+1)2+(λ−5) | λ E − A | = ( λ + 1 ) 2 + ( λ − 5 ) ,解得 λ1=−1 λ 1 = − 1 (二重), λ2=5 λ 2 = 5 。将 λ1=−1 λ 1 = − 1 代入方程组 AX=−X A X = − X ,解得基础解系是:
⎛⎝⎜10−1⎞⎠⎟,⎛⎝⎜01−1⎞⎠⎟(13) (13) ( 1 0 − 1 ) , ( 0 1 − 1 )
因此,可以得到属于特征值-1的两个线性无关的特征向量: ξ1=ε1−ε3,ξ2=ε2−ε3 ξ 1 = ε 1 − ε 3 , ξ 2 = ε 2 − ε 3 .
同理,也可以求出属于特征值5的特征向量 ξ3=ε1+ε2+ε3 ξ 3 = ε 1 + ε 2 + ε 3 .了解了特征值和特征向量,可以给出特征子空间和矩阵迹的概念了,如下。
定义5 特征子空间:我们把属于特征值 λ0 λ 0 的所有特征向量加上零向量构成的空间称为 λ0 λ 0 对应的特征子空间(记为 Vλ0 V λ 0 ), Vλ0 V λ 0 的维数就是属于 λ0 λ 0 的所有线性无关的特征向量的个数
定义6 矩阵的迹:矩阵 A A 的全体特征值的和为 A A 的迹,记为 Tr(A) T r ( A ) 。实际上,通过证明我们还可以知道 Tr(A) T r ( A ) 也等于 A A 的主对角线上所有元素的和,即 Tr(A)=a11+a22+⋯+ann T r ( A ) = a 11 + a 22 + ⋯ + a n n 。
下面我再补充一个重要的概念——相似矩阵。
相似矩阵
定义7 相似矩阵: A,B A , B 为两个 n n 阶矩阵,如果存在 n n 阶矩阵 X X 使得 B=X−1AX B = X − 1 A X 成立,则 A,B A , B 被称为是相似的,记为 A A ~ B B 。
上面说到每一个线性变换在不同基下对应着不同的矩阵,那这些矩阵有什么关系呢?有如下定理:
定理2:线性变换在不同的基下所对应的矩阵是相似的,反之,若两个矩阵相似,则它们可以被看作是同一个线性变换在不同基下的矩阵。
理解了相似矩阵的概念,我们接着探究相似矩阵与特征多项式的关系,有如下定理:
定理3:相似的矩阵有相同的特征多项式。证明如下,
我们知道,若 A A ~ B B ,则有可逆矩阵 X X ,使得 B=X−1AX B = X − 1 A X ,那可以做出如下的推导:
|λE−B|=|λE−X−1AX|=|X−1(λE−A)X|=|X−1||λE−A||X|=|λE−A|(14) (14) | λ E − B | = | λ E − X − 1 A X | = | X − 1 ( λ E − A ) X | = | X − 1 | | λ E − A | | X | = | λ E − A |
根据定理2,我们知道,同一个线性变换在不同的基下所对应的矩阵是相似的,而定理3告诉我们相似的矩阵有相同的特征多项式,那也就说明了一个问题:即线性变换矩阵的特征多项式与选择的基是无关的。
对角矩阵
对角矩阵即除了主对角线中的元素外,其他元素都为0的矩阵。对角矩阵和线性变换的结合非常紧密,有如下定理存在:
定理4:线性变换 A A 在某一组基下式对角矩阵的充要条件是, A A 有 n n 个线性无关的特征向量。
定理5:属于不同特征值的特征向量是线性无关的。
特征值分解的计算
我们知道对于一个 n×n n × n 的对称矩阵 A A 来说(即 AT=A A T = A ),它与对角矩阵是相似的(证明我略了),那他可以被看作是一个对角阵对应的线性变换 A A 在另一组基下的矩阵,因为对角阵有 n n 个线性无关的特征向量,而属于不同特征值的特征向量是线性无关的,所以我们说对称阵 A A 一定有 n n 个特征值(重根算多个)。
综上,可以得到:
AX1AX2AXn=λ1X1=λ1X2…=λ1Xn(31) (31) A X 1 = λ 1 X 1 A X 2 = λ 1 X 2 … A X n = λ 1 X n
化简一下,上式可以写成: AU=UΛ A U = U Λ ,其中 U=(X1,X2,…,Xn) U = ( X 1 , X 2 , … , X n ) ,
Λ=⎛⎝⎜⎜⎜⎜⎜λ10⋮00λ2⋮0……⋱…00⋮λn⎞⎠⎟⎟⎟⎟⎟(16) (16) Λ = ( λ 1 0 … 0 0 λ 2 … 0 ⋮ ⋮ ⋱ ⋮ 0 0 … λ n )
因为对称阵有一个性质:不同特征值对应的特征向量两两正交。所以此处 U U 即为正交阵(正交阵的概念上面说了,至于正交阵的每一列是单位向量的问题,你对特征值做处理就完了)。
综上,一个对称阵的特征值分解可以写成: A=UΛU−1=UΛUT A = U Λ U − 1 = U Λ U T ,其中 U U 是正交矩阵,每个列向量有 A A 对应的归一化的特征向量构成。
现在对于任意的 n n 维向量 Y Y 来说,可以通过矩阵 A A 实现相应的线性变换。
AY=UΛUTY(17) (17) A Y = U Λ U T Y
其中 UTY U T Y 相当于是对 Y Y 做了一个正交变换。根据前面介绍的正交变换相关知识,正交变换相当于是对向量 Y Y 换了一个坐标系,而新坐标系的基就是 A A 的所有特征向量(即 U U 的所有列向量),因此, UTY=(a1,…,an) U T Y = ( a 1 , … , a n ) , a1,…,an a 1 , … , a n 相当于是 Y Y 在新坐标系下的坐标.
继续化简上面的公式,
AY=UΛUTY=UΛ(a1,…,an)=U⎛⎝⎜⎜⎜⎜⎜λ10⋮00λ2⋮0……⋱…00⋮λn⎞⎠⎟⎟⎟⎟⎟(a1,…,an)=U⎛⎝⎜⎜⎜⎜λ1a1λ2a2⋮λ1a1⎞⎠⎟⎟⎟⎟(18) (18) A Y = U Λ U T Y = U Λ ( a 1 , … , a n ) = U ( λ 1 0 … 0 0 λ 2 … 0 ⋮ ⋮ ⋱ ⋮ 0 0 … λ n ) ( a 1 , … , a n ) = U ( λ 1 a 1 λ 2 a 2 ⋮ λ 1 a 1 )
λiai λ i a i 相当于是对向量 y y 在新的坐标系下沿对应的轴方向进行了拉伸或者压缩,并没有改变向量实际的方向,最后再左乘 U U 相当于对当前的向量再次进行正交变换,因为 U U 是 UT U T 的逆矩阵,所以这是一个与 UT U T 的变换相反的变换。综上,对阵矩阵 A A 所对应的变换实际上可以将一组正交基映射为另一组正交基。
奇异值分解(SVD)
奇异值
上面说了一大推,其实就是介绍了对阵矩阵的一个性质:即把一组正交基映射为另一组正交基。对于任意的 m×n m × n 的矩阵 A A , A A 可以将 n n 维空间中的向量映射到 k k 维空间中( k≤m k ≤ m ),那么现在来探究能否找到这样一组 n n 维正交基,使之经过 A A 的变换后,还是正交基。寻找这样正交基的过程,就是SVD的核心思路。
好了,先假设存在这样的正交基 (V1,V2,…,Vn) ( V 1 , V 2 , … , V n ) , |Vi|=1 | V i | = 1 ,经过 A A 映射后变为 (AV1,AV2,…,AVn) ( A V 1 , A V 2 , … , A V n ) (实际上,这里的 AVi A V i 都是 m m 维向量)。既然他们两两正交,那么就得满足下面的公式。
(AVi)(AVj)=(AVi)T⋅AVj=VTi(ATA)Vj=0(19) (19) ( A V i ) ( A V j ) = ( A V i ) T ⋅ A V j = V i T ( A T A ) V j = 0
现在来证明这个公式是成立的(成立的话表示正交基找到了)。因为我在假设中,设置的 (V1,V2,…,Vn) ( V 1 , V 2 , … , V n ) 是一组正交基,所以, VTiVj=0 V i T V j = 0 。我把这个结论先放这(下面的公式要用)。接着想,现在 ATA A T A 是个 n×n n × n 的对称矩阵。因为对称矩阵一定有 n n 个特征值,其特征向量两两正交,那我就假设 (V1,V2,…,Vn) ( V 1 , V 2 , … , V n ) 是 ATA A T A 的特征向量,可以得到
VTi(ATA)Vj=VTiλjVj=λjVTiVj=0(20) (20) V i T ( A T A ) V j = V i T λ j V j = λ j V i T V j = 0
这样我就证明了 (AV1,AV2,…,AVn) ( A V 1 , A V 2 , … , A V n ) 是一组正交向量。再对这组正交向量做归一化处理,构成一组新的正交基。先计算每个 AVi A V i 的模数:
|AVi|2=λiVTiVi=λi(21) (21) | A V i | 2 = λ i V i T V i = λ i
取单位向量后,得到 ui=1λi√AVi u i = 1 λ i A V i ,其中 σi=λi−−√ σ i = λ i 被称为是矩阵 A A 的奇异值,它实际上就是对称阵 ATA A T A 的特征值的算数平方根。而 (u1,…,un) ( u 1 , … , u n ) 则是一组经过归一化处理的,两两正交的 m m 维向量的集合,在这个集合当中,我们当然可以找到一组 k k 维空间的正交基( k≤m,k≤n k ≤ m , k ≤ n )。
上一段的最后一句话可以这样理解:假设 m=3,k=2,n=3 m = 3 , k = 2 , n = 3 , u1=(1,0,0),u2=(0,1,0),u3=(0,0,0) u 1 = ( 1 , 0 , 0 ) , u 2 = ( 0 , 1 , 0 ) , u 3 = ( 0 , 0 , 0 ) , u1,u2,u3 u 1 , u 2 , u 3 两两正交,我们自然可以找到 k=2 k = 2 维空间的正交基: u′1=(1,0),u′2=(0,1) u 1 ′ = ( 1 , 0 ) , u 2 ′ = ( 0 , 1 )
分解过程
上面得到的正交基对我们非常重要,它可以用来做奇异值分解。我们先明确这样一个关系: σiu′i=AVi,i∈{ 1,…,k} σ i u i ′ = A V i , i ∈ { 1 , … , k } ,现在我做如下两组正交基的拓展工作:
- 生成 (u′1,…,u′m) ( u 1 ′ , … , u m ′ ) 。它是由 (u′1,…,u′k) ( u 1 ′ , … , u k ′ ) 拓展生成的 m m 维空间的正交基
- 已知 (V1,…,Vn) ( V 1 , … , V n ) 是 n n 维空间中一组两两正交的向量,其中, (Vk+1,…,Vn) ( V k + 1 , … , V n ) 使得 AVi=0,i∈{ k+1,…,n} A V i = 0 , i ∈ { k + 1 , … , n }
那么,有下面的公式成立:
A(V1,…,Vk|Vk+1,…,Vn)=(AV1,…,AVk|O,…,O)=(u′1,…,u′k|u′k+1,…,u′m)⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜σ1−⋱−Oσk−−O−O−⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟(22) (22) A ( V 1 , … , V k | V k + 1 , … , V n ) = ( A V 1 , … , A V k | O , … , O ) = ( u 1 ′ , … , u k ′ | u k + 1 ′ , … , u m ′ ) ( σ 1 ⋱ O σ k − − − − − − O O )
继而可以得到奇异值分解的公式:
A=UΣVT=(u′1,…,u′m)⋅⎛⎝⎜⎜⎜⎜⎜σ1⋱σkO⎞⎠⎟⎟⎟⎟⎟⋅⎛⎝⎜⎜V1⋮Vn⎞⎠⎟⎟(23) (23) A = U Σ V T = ( u 1 ′ , … , u m ′ ) ⋅ ( σ 1 ⋱ σ k O ) ⋅ ( V 1 ⋮ V n )
其中 U U 是 m×m m × m 的正交阵, Σ Σ 是 m×n m × n 的对角阵, V V 是 n×n n × n 的正交阵。
更具体地说, U U 是由 ATA A T A 的特征向量经过 A A 变换而来的标准化的 m×m m × m 正交阵, Σ Σ 是由矩阵 ATA A T A 的特征值构成的的算数平方根构成的 m×n m × n 的对角阵(秩为 k k ), V V 是由 ATA A T A 的特征向量构成的 n×n n × n 的正交阵。
计算实例
我举个例子,看看SVD到底是如何计算的。现在分解矩阵
A=⎛⎝⎜011110⎞⎠⎟(24) (24) A = ( 0 1 1 1 1 0 )
根据 A A ,可知参数 m=3,n=2,k=2 m = 3 , n = 2 , k = 2 .
先计算 ATA A T A 的特征值和对应的特征向量:
λ1=3,V1=⎛⎝12√12√⎞⎠,λ2=1,V2=⎛⎝−12√12√⎞⎠(25) (25) λ 1 = 3 , V 1 = ( 1 2 1 2 ) , λ 2 = 1 , V 2 = ( − 1 2 1 2 )
根据上面的分析,这里 V1,V2 V 1 , V 2 构成了奇异值分解中的矩阵 V V ;
再计算奇异值,也就是 ATA A T A 的特征值,解得 λ1=3,λ2=1,λ3=0 λ 1 = 3 , λ 2 = 1 , λ 3 = 0 。其中 λ1−−√,λ2−−√ λ 1 , λ 2 构成了对角矩阵主对角线上的元素。
最后计算 V1,V2 V 1 , V 2 经过 A A 变换后的向量。当然,此时只有 k=2 k = 2 个 m m 维向量,而我们需要 m m 个 m m 维向量去构造矩阵 U U ,你可以计算 AVi A V i ,然后再使用正交基的扩充方法,但是有点复杂,一种更简单的思路是,既然 AAT A A T 是 m×m m × m 对称阵,而 u′1,…,u′m u 1 ′ , … , u m ′ 是 AAT A A T 的特征向量,所以直接计算 AAT A A T 的特征向量,再做归一化处理即可:
u1=⎛⎝⎜⎜⎜16√26√16√⎞⎠⎟⎟⎟,u2=⎛⎝⎜⎜⎜12√0−12√⎞⎠⎟⎟⎟,u3=⎛⎝⎜⎜⎜13√−13√13√⎞⎠⎟⎟⎟(26) (26) u 1 = ( 1 6 2 6 1 6 ) , u 2 = ( 1 2 0 − 1 2 ) , u 3 = ( 1 3 − 1 3 1 3 )
u1,u2,u3 u 1 , u 2 , u 3 构成了奇异值分解中的矩阵 U U .
综上,矩阵 A A 被如下分解:
A=⎛⎝⎜⎜⎜16√26√16√12√0−12√13√−13√13√⎞⎠⎟⎟⎟⎛⎝⎜3–√00010⎞⎠⎟⎛⎝12√−12√12√12√⎞⎠(27) (27) A = ( 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 )
结论:最后再把奇异值分解总结一下,任意 m×n m × n 矩阵 A A ,可以被分解为 A=UΣVT A = U Σ V T ,其中,
- U U : m×m m × m 矩阵,每个列向量由对称阵 AAT A A T 的特征向量构成;
- Σ Σ : m×n m × n 对角阵,秩为 k k ,主对角线上每个元素是对称阵 ATA A T A 的非零特征值的算数平方根;
- V V : n×n n × n 矩阵,每个列向量由对称阵 ATA A T A 的特征向量构成;
参考文献如下: