奇异值分解–SVD
奇异值分解算是特征值分解的变种,相较于特征值分解,可适用范围更广,主要用于提取主要特征,因为矩阵可能是有很多0的稀疏矩阵,存储量大且浪费空间,这时就需要提取主要特征
奇异值分解 是将任意较复杂的矩阵用更小、更简单的 3个子矩阵的相乘表示 ,用这3个小矩阵来描述大矩阵重要的特性。
应用:在使用线性代数的地方,基本上都要使用 SVD。 SVD 不仅仅应用在 PCA 、图像压缩、数字水印、 推荐系统和文章分类、 LSA (隐性语义分析)、特征压缩(或数据降维)中,在信号分解、信号重构、信号降噪、数据融合、同标识别、目标跟踪、故障检测和神经网络等方面也有很好的应用, 是很多机器学习算法的基石。
特征值分解
特征值分解是矩阵分解的一种方法,矩阵分解也称为矩阵因子分解,即将原始矩阵表示成新的结构简单或者具有特殊性质的两个或多个矩阵的乘积,类似于代数中的因子分解。
特征值分解的实质是求解给定矩阵的特征值和 特征向盘,提取出矩阵最重要的特征,其中特征值分解公式
A
=
Q
∑
Q
−
1
A=Q\sum Q^{-1}
A=Q∑Q−1
, 其中Q为特征向量矩阵, Σ 是特征值对角阵。
奇异值分解(singular value Decomposition)
奇异值分解 (Singular Value Decompostion) 是六种矩阵分解中综合性最强,应用最广的分解,即最好的分解,也是主成分分析 (PCA)(principal component analysis) 的基础。六种矩阵分解分别为:
- LU分解(LU Decomposition):将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,常用于求解线性方程组和计算行列式。
- QR分解(QR Decomposition):将一个矩阵分解为一个正交矩阵和一个上三角矩阵的乘积,常用于求解最小二乘问题和计算特征值与特征向量。
- Cholesky分解(Cholesky Decomposition):将一个对称正定矩阵分解为一个下三角矩阵的转置和一个下三角矩阵的乘积,常用于求解线性方程组和进行最小二乘拟合。
- 特征值分解(Eigenvalue Decomposition):将一个方阵分解为由特征值和特征向量组成的对角矩阵和一个可逆矩阵的乘积,常用于求解线性方程组、计算矩阵的幂以及矩阵的指数函数等。
- 奇异值分解(Singular Value Decomposition,SVD):将一个矩阵分解为由奇异值组成的对角矩阵和两个正交矩阵的乘积,常用于数据压缩、降维和数据去噪等。
- Schur分解(Schur Decomposition):将一个矩阵分解为一个上Hessenberg矩阵(上三角矩阵)和酉矩阵的乘积,常用于计算特征值和Schur正交多项式等问题。
A = L U A = Q R A = L L T A = X Λ X − 1 A = U ∑ V T S = Q Λ Q T A=LU\\A=QR\\A=LL^T\\A=XΛX^{-1}\\A=U\sum V^T\\S=QΛQ^T A=LUA=QRA=LLTA=XΛX−1A=U∑VTS=QΛQT
上Hessenberg矩阵
海森堡阵(Hessenberg),是一个数学用语,对方阵A,若i>j+1时,有a(i,j)=0,则称A是上海森堡阵。
酉矩阵
若n阶复矩阵A满足
A
H
A
=
A
A
H
=
E
A^HA=AA^H=E
AHA=AAH=E
则称A是酉矩阵,记作 A ∈ U nxn
例子:
A
=
[
c
o
s
θ
i
s
i
n
θ
i
s
i
n
θ
c
o
s
θ
]
B
=
[
−
1
−
i
2
−
1
−
i
2
1
+
i
2
−
1
−
i
2
]
A=\begin{bmatrix} cos\theta&isin\theta\\ isin\theta&cos\theta \end{bmatrix}\\ B=\begin{bmatrix} \frac{-1-i}{2}&\frac{-1-i}{2}\\ \frac{1+i}{2}&\frac{-1-i}{2} \end{bmatrix}
A=[cosθisinθisinθcosθ]B=[2−1−i21+i2−1−i2−1−i]
都为酉矩阵
值得注意的是:只有矩阵为方阵(m=n)时,才有特征值;但对任何一个矩阵,都能求奇异值,因此SVD对所有矩阵均适用。即任意矩阵可分解为 A = UΣVT ,分解结果为正交矩阵U ,对角矩阵Σ,正交矩阵V 。
如果矩阵 A 为正定矩阵,他的奇异值分解就是 A=QΛQT,一个正交矩阵 Q 就可以满足分解,而不需要两个。而对于可对角化的矩阵有 A =SΛS-1,但特征向量矩阵 S 并不是正交矩阵,而 SVD 中的 U 和 V 都是正交矩阵。
众所周知,矩阵乘向量是对向量做线性变换,如旋转,拉伸,翻折等。旋转与翻折可以通过正交矩阵(Orthogonal matrices)实现,如二维直角坐标系下旋转与翻折可通过如下两个正交矩阵描述:
Q
r
o
t
a
t
e
=
[
c
o
s
θ
−
s
i
n
θ
s
i
n
θ
c
o
s
θ
]
Q
r
e
f
l
e
c
t
=
[
c
o
s
θ
s
i
n
θ
s
i
n
θ
−
c
o
s
θ
]
Q_{rotate}=\begin{bmatrix} cos\theta&-sin\theta\\ sin\theta&cos\theta \end{bmatrix}\\ Q_{reflect}=\begin{bmatrix} cos\theta&sin\theta\\ sin\theta&-cos\theta \end{bmatrix}
Qrotate=[cosθsinθ−sinθcosθ]Qreflect=[cosθsinθsinθ−cosθ]
旋转矩阵 Qrotate 代表逆时针旋转θ ,此式在坐标变换或二维张量推导证明中常用。翻折矩阵Qreflect 代表以 θ/2 为对称轴,进行翻折。
正交矩阵(Orthogonal matrices)特点为:每列或每行只有与自身相乘时才为1,否则为0。即:
Q
T
Q
=
Q
Q
T
=
I
−
>
Q
T
=
Q
−
1
Q^TQ=QQ^T=I -> Q^T=Q^{-1}
QTQ=QQT=I−>QT=Q−1
这意味着: 对于正交矩阵,我们能瞬间求逆(只需转置),这非常漂亮(通常,矩阵求逆非常耗时)。
对于拉伸,我们只需在特定方向上(如特征向量方向)乘上变换因子(如特征值)即可实现拉伸。
几何角度理解SVD
SVD告诉我们:任何一个矩阵所代表的线性变换,可分解为先旋转(或翻折),再缩伸,最后再旋转(或翻折)的形式。
这三个过程至少具有一个,如对角阵只有缩拉。用矩阵语言描述如下:从右到左依次作用,先旋转 V T ,再伸缩 Σ ,最后再旋转 U 。
A
=
U
∑
V
T
A
V
=
U
∑
A=U\sum V^T \\ AV=U\sum
A=U∑VTAV=U∑
举例说明:
1)对一个在 Rn 空间中的单位球, VT 作用为转换一下坐标基,球未变形;
2)Σ 作用为将 n 维球变为 r 维球(只有r个奇异值),再进行伸缩变换,此时球变形了(如下图),
3)U 作用:再进行基的转变(如下图)。
线性变换可简单理解为:若变换前为一直线,变换后也应为直线(如下图)。
举例:
旋转+拉伸例子
- 当矩阵 M=[2 1, 1 2] 作用在向量x->=[x1 x2] T 上时,得到如下结果:
从这张图,很难看出什么门道,若将原始坐标逆时针旋转45°,再将M作用于旋转后的矩阵,可得到如下结果:
旋转过程实际上是寻找矩阵M特征向量的过程,如上图中,矩阵M特征向量分别为:
v
1
=
[
2
2
2
2
]
,
v
2
=
[
−
2
2
2
2
]
v_1=\begin{bmatrix} \frac{\sqrt{2}}{2}\\ \frac{\sqrt{2}}{2} \end{bmatrix} , v_2=\begin{bmatrix} -\frac{\sqrt{2}}{2}\\ \frac{\sqrt{2}}{2} \end{bmatrix}
v1=[2222],v2=[−2222]
即对应旋转45°的情况,v1,v2组成的旋转矩阵为
Q
r
o
t
a
t
e
=
[
c
o
s
Π
4
−
s
i
n
Π
4
s
i
n
Π
4
c
o
s
Π
4
]
Q_{rotate}=\begin{bmatrix} cos\frac{Π}{4}&-sin\frac{Π}{4}\\ sin\frac{Π}{4}&cos\frac{Π}{4} \end{bmatrix}
Qrotate=[cos4Πsin4Π−sin4Πcos4Π]
一般地,对于一组正交基V,经过矩阵M变化后,得到正交基U,要描述这一过程,就会得到奇异值分解。奇异值就是不同基变化的伸缩量,即
A
=
U
∑
V
T
A
V
=
U
∑
A=U\sum V^T \\ AV=U\sum
A=U∑VTAV=U∑
空间角度理解SVD
可以将矩阵 A 视为一种线性变换操作,将其行空间中的一个向量 v1 , 变为其列空间中的向量 u1=Av1。奇异值分解就是要在行空间中寻找一组正交基,将其通过矩阵 A 线性变换生成列空间中的一组正交基 Avi=σi ui 。
找出矩阵 A 行空间中的正交基很容易,Gram-Schmidt 正交化过程就可以做到,但是随便的一组正交基经过矩阵 A 变换得到的向量并不一定正交,因此满足此要求的行空间正交基非常特殊。而矩阵 A 零空间的向量所对应的是矩阵 ∑ 对角线上的0元素
设矩阵 Amxn 秩为r,从矩阵 A 行空间(row space)中找一个向量 **v1 **,通过 Av1 投影到 A 的列空间(column space) u1 方向, 得到:
A
v
1
=
σ
1
u
1
Av_1=\sigma_1u_1
Av1=σ1u1
其中 σ1 是缩放因子,在此处与特征值类似,称为奇异值
SVD妙处在于,在行空间中找到的 r 个向量是正交的,即v1 , v2 , v3 , … , vr 彼此正交,且列向量空间的 r 个向量也是正交的,即u1 , u2 , u3 , … , ur 彼此正交
将上述过程用矩阵描述为:
A
[
v
1
v
2
.
.
.
v
r
.
.
.
v
n
]
=
[
u
1
.
.
.
u
r
.
.
.
u
m
]
[
σ
1
0
.
.
.
σ
r
0
0
.
.
.
0
]
A\begin{bmatrix} v_1&v_2&...&v_r&...&v_n \end{bmatrix} =\begin{bmatrix} u_1...u_r...u_m \end{bmatrix} \begin{bmatrix} \sigma_1&&&&&0\\ &...\\\\ &&&&\sigma_r&0 \\ 0&...&&&&0 \end{bmatrix}
A[v1v2...vr...vn]=[u1...ur...um]
σ10......σr000
即:
A
V
=
U
∑
A
=
U
∑
V
−
1
=
U
∑
V
T
=
σ
1
u
1
v
1
T
+
.
.
σ
r
u
r
v
r
T
AV=U\sum\\ A=U\sum V^{-1}=U\sum V^T=\sigma_1u_1v_1^T+..\sigma_ru_rv_r^T
AV=U∑A=U∑V−1=U∑VT=σ1u1v1T+..σrurvrT
其中,正交矩阵 U 为 m x m , 正交矩阵 V 为 n x n ,对角矩阵 ∑ 为 m x n .
如何求SVD
如何求 SVD , 就是如何求矩阵 U , ∑ , V .
A
T
A
=
(
U
∑
V
T
)
T
U
∑
V
T
=
V
∑
T
∑
V
T
A
A
T
=
U
∑
V
T
(
U
∑
V
T
)
T
=
U
∑
∑
T
U
T
A^TA=(U∑V^T)^TU∑ V^T=V∑^T∑V^T\\ AA^T=U∑V^T(U∑V^T)^T=U∑∑^TU^T
ATA=(U∑VT)TU∑VT=V∑T∑VTAAT=U∑VT(U∑VT)T=U∑∑TUT
注意正交矩阵:
U
T
U
=
U
U
T
=
I
,
V
T
V
=
V
V
T
=
I
U^TU=UU^T=I , V^TV=VV^T=I
UTU=UUT=I,VTV=VVT=I
ATA , AAT 为对称阵, 对称阵具有分解 S = QΛQT ,
对 ATA , Q = V , Λ = ∑T∑ ;
对 AAT , Q = U , Λ = ∑∑T.
因此,矩阵 V 是 ATA 特征向量归一化后的矩阵;
矩阵 U 是 AAT 特征向量归一化后的矩阵;
奇异值平方 σ12 , σ22 , σ32 , … σr2 为 AAT 和 ATA 的特征值。
注意奇异值为正数,即 σ1 ≥ σ1 ≥ σ1 ≥ σr > 0
证明:
若向量 v 是矩阵 ATA 的单位特征向量,λ是其对应的特征值,则:
A T A v → = λ v → , ∣ ∣ v ∣ ∣ 2 = 1 A^TA\overrightarrow{v}=\lambda\overrightarrow{v},\\||v||^2=1 ATAv=λv,∣∣v∣∣2=1
由几何关系可知:
0
≤
∣
∣
A
v
∣
∣
2
=
(
A
v
)
T
(
A
v
)
=
v
T
A
T
A
v
=
v
T
λ
v
=
λ
∣
∣
v
∣
∣
2
=
λ
0≤||Av||^2=(Av)^T(Av)=v^TA^TAv=v^T\lambda v=\lambda ||v||^2=\lambda
0≤∣∣Av∣∣2=(Av)T(Av)=vTATAv=vTλv=λ∣∣v∣∣2=λ
奇异值: σi = λi^1/2 (根号λi) >0
仅针对实数域:
为什么不能直接通过 AAT 计算U ?
这是因为确定特征向量的过程中,特征向量反向仍然符合要求,通过现在的方法无法确 认向量的符号,但是一旦我们确认 v 的方向之后,u 的方向也就随之确定,将 v 代入 AV=U∑ 计算 u 可以避免这种问题。u 和 v 之间的符号联系在进行 AAT 的计算时 被切断了,而用 AV=U∑ 可以避免此问题。
正确案例
奇异值分解在最小二乘法问题中有重要应用,因为在实际问题中常碰到矩阵 A 不是列满秩的状态,因此 ATA 不可逆,无法用之前的方法求最优解。即使是列满秩的情况当矩阵是超大型矩阵时,ATA 的计算量太大,用奇异值分解的办法会降低计算量。
SVD应用
-
图像压缩及去噪
-
当矩阵病态时,准确求矩阵的秩
-
计算伪逆,用于最小二乘近似
-
极分解
-
潜在语义索引
参考资料: