GAMES001课程笔记04-奇异值分解与主成分分析

这个系列是GAMES001-图形学中的数学(GAMES 001: Mathematics in Computer Graphics)的同步课程笔记。课程旨在总结归纳图形学学习过程中重要的数学概念、理论和方法,并将以索引的形式在每一章节中穿插讲解该数学专题在图形学中的应用。本课程既可以作为GAMES系列其它课程学习的基础或「手册」,也可以作为站在不一样的视角复习图形学知识的平台。本节主要介绍奇异值分解与主成分分析的相关内容。

奇异值分解

矩阵有很多不同的理解方式。在前面的课程中我们提到过矩阵可以理解为一种线性变换,除此之外矩阵还可以表示一张图片或是点云这种几何数据。因此我们可以从不同的视角来理解矩阵变换的各种意义。

奇异值分解(singular value decomposition, SVD)是一种对矩阵进行分析和处理的重要计算工具,它在数学和整个计算机科学领域都有着大量的应用。

实对称矩阵

我们从实对称矩阵出发。根据线性代数相关理论,实对称矩阵具有如下重要性质:

  • 实对称矩阵的特征值都是实数。
  • 实对称矩阵不同特征值的特征向量相互正交。

在此基础上我们可以得到实对称矩阵的特征值分解:

S=QΛQT=(q0qn1)(λ0λn1)(q0Tqn1T)

其中,特征值λi有正有负,且非零特征值的个数等于矩阵的秩r=rank(S)

如果S的所有特征值都是非负的,则称它是一个半正定(semi-positive definite, SPD)矩阵。对于半正定矩阵,我们可以定义实对角矩阵Σ

Σ=(λ0λn1)

显然它满足Σ2=Λ。这样就可以定义实对称矩阵的平方根P

S=QΛQT=QΣ2QT=(QΣQT)(QΣQT)=P2 P=S12

此外,容易验证实对称矩阵的迹等于其特征值之和:

Tr(S)=Tr(Λ)=iλi

奇异值分解

对于一个更一般的矩阵ARm×n,其秩为r,我们定义一个新的矩阵S

S=ATA

显然S是一个实对称半正定矩阵。对S进行特征值分解,可以得到r个特征向量{vi}构成一组正交基:

Svi=λivi

两边同时乘以特征向量vj可以得到:

viTSvj=viTATAvj=λjviTvj=λjδij

接下来定义向量ui=1λiAvi,容易验证{ui}构成一组正交基:

uiTuj=(1λiAvi)T(1λjAvj)=1λiλjviTATAvj=δij

通过Schmidt正交化可以分别对{vi}{ui}进行扩充,从而得到RnRm上的正交基。其中扩充的基满足:

λiuj=Avj=0

这样两组基的关系写成矩阵形式有:

AV=UΣ

其中,VU都是正交矩阵。

上面的推导即为矩阵的奇异值分解,其更常见的形式为:

A=UΣVT

其中,矩阵A为一个任意m×n维矩阵(不需要是方阵,也不需要满秩);UV分别是Rm×mRn×n的正交矩阵;ΣRm×n的「对角」矩阵,其对角元均是非负数称为矩阵A的奇异值。

矩阵的奇异值分解是线性代数中的重要概念。当矩阵的奇异值分解已知时,我们可以快速地求解矩阵相关的各种问题。

矩阵的逆与SVD

对于一个可逆矩阵ARn×n,我们可以通过SVD来直接获得它的逆:

A1=VΣ1UT

列满秩

对于非方阵的情况,我们可以推广逆阵的概念从而得到矩阵的伪逆。假设矩阵A是列满秩矩阵而且它的行数大于列数m>n,我们的目标是求解矩阵方程:

Ax=b

由于方程数大于未知量的个数,它的解可能是不存在的。此时我们可以转而寻找它在最小二乘意义下的解,这样构造最小二乘的优化目标:

minxAxb2

利用SVD可以对优化目标进行变形:

Axb2=UΣVTxb2=U(ΣVTxUTb)2=ΣVTxUTb2

然后通过换元x=VTxb=UTb得到新的优化目标:

ΣVTxUTb2=Σxb2

由于Σ是一个包含n个非零奇异值的对角矩阵,Σxb2取最小值时需要满足以下条件:

{σ0x0=b0σn1xn1=bn1

也即

x=Σ^1b

其中Σ^1是一个n×m维对角矩阵,对角元为相应奇异值的倒数。最后解出未知量x的表达式为:

x=VΣ^1UTb

其中的系数矩阵VΣ^1UT就称为矩阵A伪逆(pseudo inverse)

除了上面的方法,我们还可以直接对最小二乘的优化目标进行求导来得到伪逆。此时可以得到矩阵方程:

ATAx=ATb

假设ATA是满秩的,我们可以得到x的表达式:

x=(ATA)1ATb

其中的系数矩阵(ATA)1AT称为矩阵A左逆(left inverse)。容易验证当矩阵A是列满秩的时候,左逆和伪逆是等价的。

行满秩

另一种可能出现的情况是矩阵A是行满秩,且m<n。此时方程组的个数小于未知量的个数,方程组有无穷多的解。在这种情况下我们可以构造一个新的最小二乘优化目标:

minxx2s.t. Ax=b

上式的意义在于寻找满足约束Ax=b条件下模长最小的一组未知量。

通过SVD分解,可以得到新的优化目标的解同样是伪逆:

x=VΣ^1UTb

当然,我们同样可以通过优化的方法来求解这个欠定方程组。此时可以得到矩阵A右逆(right inverse)

AT(ATA)1

简单总结一下:

  • 当矩阵A是列满秩时,其左逆(ATA)1AT存在,可以用来求解超定方程。
  • 当矩阵A是行满秩时,其右逆AT(ATA)1存在,可以用来求解欠定方程。
  • 任何情况下,矩阵的伪逆VΣ^1UT都一定存在。

几何变换

从几何变换的角度来看,SVD分解说明一个线性变换可以分解为两次旋转加上一次拉伸缩放。

除了SVD外,任意实方阵A还可以通过极分解(polar decomposition)来得到一个正交阵和半正定矩阵:

A=RS

极分解可以通过SVD来显式构造得到:

R=UVT S=VΣVT

形状匹配

SVD在图形学中的一个经典应用是形状匹配(shape matching),它的目标是寻找一个刚体变换使得形状q能够变形到形状p上。这个问题等价于如下优化问题:

R,t=argminiipi(Rqi+t)2

这个优化问题可以利用SVD来进行求解。首先假设旋转R是已知的从而只考虑位移t,通过对优化目标求偏导可以得到:

ipi(Rqi+t)2=iRqi+tpi=0 t=1n(ipiRiqi)

取质点集合变形前后的质心分别为qc=1nqi以及pc=1npi,则有:

t=pcRqc

接下来考虑求解旋转R。把位移的表达式带入优化目标中可以得到:

ipi(Rqi+t)2=i(pipc)R(qiqc)2

记中心化后的坐标分别为pi=pipc以及qi=qiqc,这样优化目标可以转换为:

R=argminipiRqi2

将上式展开并且只考虑关于旋转R的部分可以得到新的最优化问题:

minipiRqi2maxipiTRqi

利用矩阵迹的性质继续进行变形:

ipiTRqi=Tr(ipiTRqi)=Tr(RiqipiT)

记求和号内的矩阵为H=iqipiT,得到最终的优化目标:

maxRTr(RH)

此时旋转矩阵R可由H矩阵的SVD给出:

R=VUT

总结一下,形状匹配算法的流程如下:

  1. 计算两组质点的质心并分别进行中心化qi=qiqcpi=pipc
  2. 构造矩阵H=iqipiT,并对其进行分解H=UΣVT
  3. 计算最优旋转R=VUT
  4. 计算相对位移t=pcRqc

实际上上述形状匹配算法即为点云匹配中经典的ICP算法。

图像压缩

SVD的一个重要应用是对图像进行压缩。我们可以把一幅图像看作是一个大型稠密矩阵,根据SVD的形式把它写成一系列秩为1的矩阵之和:

A=UΣVT=iσiuiviT

对于通常的图像,其奇异值的大小往往只几种在前若干阶上。随着奇异值数量的增加,奇异值的大小一般会显著减少。因此,我们可以只考虑那些奇异值比较大的特征向量来重建原始的图像。这样可以显著减少存储所需要的空间。

实际上前面叙述的对矩阵进行低秩重建的思想在如今火热的大模型领域也有着重要的应用。

SVD求导

除此之外,SVD实际上还是可导的运算。在很多应用中涉及到对SVD进行求导。

然而遗憾的是,SVD的求导一般是比较难处理的。

一般来说,SVD的复杂度还是比较高的。好在目前绝大多数的数值计算库中都有比较好的实现,在实际工程中一般不会需要从头进行编程。

主成分分析

主成分分析(principal component analysis, PCA)是SVD的一个经典应用。PCA的一大作用是对高维的数据进行降维,使得我们可以在相对低维的空间来分析它们。

从几何的角度来看,PCA的目标是寻找到数据分布的主方向vRn,使得我们把数据投影到主方向上后有着最大的分布。对于样本xi,它在直线x=m+tv上的投影为:

xi=(xim)v

其中m=1nixi为数据的中心,也是样本数据的零阶近似。此时,数据点在垂直直线方向上的距离为:

di2=xim2xi2

最小化di等价于最大化xi2。这样,我们可以定义一个最优化问题:

maxvT(i(xim)(xim)T)v

其中,S=i(xim)(xim)T即为数据分布的方差矩阵。

显然,方差矩阵S是一个半正定矩阵,其全部特征值非负。对它进行特征值分解有:

S=QΛQT=(q0qn1)(λ0λn1)(q0Tqn1T)

其中,QTQ=Iλ0λ10S的全部特征值。把S的特征值分解代入优化目标中,可以得到:

vTSv=vTQΛQTv=(QTv)TΛ(QTv)

显然,当v=q0时上式取到最大值λ0

找到主方向并完成投影后,我们可以对剩下的分量继续寻找主方向。实际上这些分量的主方向对应着方差矩阵S的第二个特征向量,因此基于特征值分解我们可以得到原始样本数据的全部主方向。

总结一下,Rn中样本数据组成的数据集其前m个主方向为方差矩阵S的前m个特征向量。这些向量相互正交,张成了m维的子空间。将数据投影到这个子空间中,就构成了原始数据的低维表达。

应用

我们可以利用PCA来计算点云的法向。此时对于点云中的每个点我们需要提取它和它附近的一些样本点组成数据集,然后在这个数据集上计算三个主方向就能够得到该点的法向。

在人脸识别领域,PCA的一个经典案例是eigenface。我们可以对人脸图像数据使用PCA进行降维,然后提取特征值大的那些特征向量组成人脸数据的特征脸。

在数值模拟中,我们也可以利用PCA来对模型进行降阶从而降低仿真的计算量。

最后需要说明的是PCA本质上是一种线性降维方法,对于非线性的数据PCA可能不会得到特别好的效果。

要处理高度非线性的数据可以考虑kernel PCA或是自编码器这样的方法。

Reference