本博客主要介绍在SLAM问题中常常出现的一些线性代数相关的知识,很早就想整理一下了,刚好看到Manii 的博客对矩阵分解的方法进行了总结,以方便求解线性方程组AX=B。在基于《计算机视觉—算法与应用》附录A 的内容 ,重点介绍了各种分解的适用情况、分解的特点。
为什么要进行矩阵分解?
1、矩阵分解可以在一定程度上降低存储空间,可以大大减少问题处理的计算量(如对一个矩阵进行求逆、求解方程组等),从而高效地解决目标问题。
2、矩阵分解可以提高算法的数值稳定性。
矩阵与矩阵分解的几何意义?
在矩阵分解中,我们常常期望将矩阵分解成正交矩阵、对角矩阵以及上三角(下三角)矩阵的乘积。以三维矩阵为例,一个普通矩阵的几何意义是对坐标进行某种线性变换,而正交矩阵的几何意义是坐标的旋转,对角矩阵的几何意义是坐标的缩放,三角矩阵的几何意义是对坐标的切边。因此对矩阵分解的几何意义就是将这种变换分解成缩放、切边和旋转的过程。
三角分解又称为LU分解或LR分解,是将原正方(square)矩阵分解成一个上三角矩阵和一个下三角矩阵。
A = L D U = L ( D U ) = ( L D ) U A=LDU=L(DU)=(LD)U A=LDU=L(DU)=(LD)U其中L是单位下三角矩阵,D是对角矩阵,U是单位上三角矩阵。
假设矩阵A为对称矩阵,且任意K阶主子式均不为0时(即正定),A有如下唯一的分解形式:
A = L D L T = ( 1 0 0 L 21 1 0 L 31 L 32 1 ) ( D 1 0 0 0 D 2 0 0 0 D 3 ) ( 1 L 21 L 31 0 1 L 32 0 0 1 ) A=LDL^{T}=\begin{pmatrix} 1 & 0 & 0\\ L_{21} & 1 & 0\\ L_{31} & L_{32} & 1 \end{pmatrix}\begin{pmatrix} D_{1} & 0 & 0\\ 0& D_{2} & 0\\ 0& 0 & D_{3} \end{pmatrix}\begin{pmatrix} 1 & L_{21} & L_{31}\\ 0 & 1& L_{32}\\ 0 & 0 & 1 \end{pmatrix} A=LDLT=⎝⎛1L21L3101L32001⎠⎞⎝⎛D1000D2000D3⎠⎞⎝⎛100L2110L31L321⎠⎞
即L为下三角单位矩阵,D为对角矩阵。LDLT方法实际上是Cholesky分解法的改进(LLT分解需要开平方),具体代码可见Chelesky分解LDLT用于求解线性方程组。
注:一个对称矩阵A是正定的充要条件是对任何非零向量 x x x有 x T A x > 0 x^{T}Ax>0 xTAx>0,即对称矩阵A正定,非奇异,也可以说任意K阶主子式均不为0。
LLT分解又被称为平方根分解,是LDLT分解的一种特殊形式,即其中的D为单位矩阵。
一个对称正定矩阵A可以唯一地被分解成一个下三角矩阵L和L的转置LT相乘的形式:
A = L L T = R T R A=LL^{T} =R^{T}R A=LLT=RTR其中的L是下三角矩阵,R是上三角矩阵。
(正定要求矩阵的所有特征值必须大于0,因此分解的下三角对角元也是大于0的)
LLT分解常用于求解最小二乘问题中的 A T A x = A T b A^{T}Ax=A^{T}b ATAx=ATb
令 C = A T A = R R C=A^{T}A=RR C=ATA=RR,又有 d = A T b d=A^{T}b d=ATb,
因子经过因子分解后,x可以通过解下面的方程获得,即只需求解两个三角系统,通过一系列前向和后向迭代运算。
R T z = d , R x = z R^{T}z=d, Rx=z RTz=d,Rx=z LLT分解的总操作数为 O ( N 2 ) O(N2) O(N2),具体代码可见Chelesky分解LLT,对于系数矩阵来说操作数会大大降低。
如果A是mxn实(复)矩阵,且其n个列线性无关,则A有分解:
A = Q R A=QR A=QR 其中 Q Q Q是正交矩阵(或酉矩阵), Q Q T = 1 QQ^{T}=1 QQT=1, R R R是上三角矩阵。
QR分解有三种常用方法:Givens 变换、Householder 变换,以及 Gram-Schmidt正交化。
QR分解是一项广泛用于稳定求解病态最小二乘问题的方法,也是一些更复杂算法的矩阵,如计算SVD及特征值分解。在计算机视觉中,QR分解可以用于将相机矩阵转换为一个旋转矩阵和一个上三角的标定矩阵。
设A是一个mxn的矩阵,则存在一个分解的m阶正交矩阵U、非负对角阵Σ和n阶正交矩阵V:
A = U D V T = U [ Σ 0 0 0 ] V T A=UDV^{T}=U\begin{bmatrix} \Sigma & 0\\ 0 & 0 \end{bmatrix}V^{T} A=UDVT=U[Σ000]VT
其中 Σ = d i a g ( σ 1 , σ 2 , . . . , σ r ) Σ=diag(σ1,σ2,...,σr) Σ=diag(σ1,σ2,...,σr), σ σ σ为矩阵A的全部非零奇异值,且一般我们会将 Σ Σ Σ的值从大到小排序。奇异值分解的一个重要性质是:在实际大多数情况中,奇异值 σ σ σ减小的速度特别快,因此可以使用前 r r r个奇异值来对矩阵做近似(即丢弃U和V的后几列),将获得原始矩阵A在最小二乘意义下的最佳逼近。
矩阵的奇异值分解通常是不唯一的。
SVD分解在最优化问题、特征值问题、最小二乘问题(尤其是亏秩最小二乘问题)等具有巨大的作用。
SVD分解的几何意义可以通过公式的重写获得:
A V = U Σ 或 A v j = σ j u j AV=UΣ 或 Av_{j}=σ_{j}u_{j} AV=UΣ或Avj=σjuj
即当矩阵A作用于任何基向量 v j v_{j} vj时,会把 v j v_{j} vj变换到 u j u_{j} uj的方向,同时将 u j u_{j} uj的长度变成 σ j σ_{j} σj。另一种解释为:当一个矩阵A作用于一个向量时,由于矩阵A可以被分解为正交矩阵、对角矩阵、正交矩阵,因此可以理解为对该向量先旋转、再缩放,然后再旋转。
如果A是一个NxN的方阵,且有N个线性无关的特征向量,则可以被写成特征值分解的形式:
A = U Λ U T A=UΛU^{T} A=UΛUT
其中U为NxN方阵,且第 i i i列为 A A A的特征向量, Λ Λ Λ为对角矩阵,其对角线上的元素为对应的特征值。注意只有可对角化矩阵才能作特征值分解。
特征值分解可用于求解矩阵的逆:
A − 1 = U Λ − 1 U A^{−1}=UΛ^{−1}U A−1=UΛ−1U在数据统计分析中常常出现A为半正定矩阵,其表示数据点的协方差,此时特征值分解就是通常所说的主分量分析(PCA),因为它完成了对数据点分布在其中心周围变化的主方向和幅度的建模。
在求解最小二乘问题时,常常通过一系列外积之和构造对称矩阵C,此时C也是半正定的:
C = ∑ i a i a i T = A A T C=∑_{i}a_{i}a_{i}^{T}=AA^{T} C=i∑aiaiT=AAT
此时C的特征值和特征向量与A的奇异值和奇异向量:
A = U D V T A=UDV^{T} A=UDVT C = A A T = U D V T V D T U T = U Λ U T C=AA^{T}=UDV^{T}VD^{T}U^{T}=UΛU^{T} C=AAT=UDVTVDTUT=UΛUT
由此我们可以得到特征值 λ i = σ i 2 λ_{i}=σ^{2}_{i} λi=σi2
对称矩阵:任意的 N×N 实对称矩阵都有 N 个线性无关的特征向量。并且这些特征向量都可以正交单位化而得到一组正交且模为 1 的向量。故实对称矩阵 A 可被分解成 A = U Λ U A=UΛU A=UΛU,其中 U U U 为 正交矩阵, Λ Λ Λ 为实对角矩阵,因此一个实对称矩阵有实特征值,其特征向量俩俩正交。—《多视图几何》附录A4.2