奇异值分解(SVD)是线性代数中一种重要的矩阵分解方法,在数据压缩存储、搜索引擎、信号处理、统计学、动力学等领域有重要应用。在介绍奇异值分解之前,很有必要先介绍一下特征值分解。因为二者有着紧密的关联,特征值分解和奇异值分解的目的都是一样:提取出矩阵中最重要的特征。特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且在线性代数或者矩阵论里面,也很少讲任何跟特征值和奇异值有关的应用。奇异值分解是一个有着显著物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵包含原始矩阵重要的特征。
特征值分解及其物理意义
对一个M×M的方阵A和向量υ,如果存在λ使得下式成立
则称λ为矩阵A的的特征值,υ称为矩阵A的特征向量。一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式
其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素是一个特征值。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵:
从几何上来说,我们可以认为一个二维向量是几何平面上的一点(x,y),通过矩阵M变换到另一点
变换后的结果相当于乘以下图所示的变换,即水平方向乘以了因子3(长度拉伸了3倍),垂直方向不变化。
让我们考虑这个矩阵
通过这个矩阵变换的结果相当于乘以如下图所示的变换
从上图来看,简单描述变换的几何效果不是很容易。然而,让我们将网格旋转45度,再来看发生了什么。
现在是不是很清楚了?新得到的网格的变换方式与之前通过对角矩阵变换得到的网格的方式是相同的:网格在一个方向上拉伸了3倍。(两者的变换方式或幅度相同,是因为二者的特征值相同,都是(3,1)。)第二个矩阵变换需要旋转45度,是因为对应的特征向量是沿45度方向。第一个对角阵M的特征向量是(1,0)和(0,1),第二个矩阵的特征向量是(0.707,0.707)和(0.707,-0.707)。因此,特征值在变换中充当了缩放因子的作用,而特征向量则是指明了变换方向。
这是非常特殊的情况,因为矩阵M是对称阵,也就是说,矩阵M的转置仍然等于矩阵M。如果我们有一个2×2的对称矩阵,那么结果是我们总在这个平面内旋转网格,因此,这个矩阵在两个方向上扮演了拉伸或者压缩的角色。换句话说,对称阵的变换行为像对角阵。
上面的矩阵是对称的,所以这个变换是一个对x,y轴方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时压缩)。当矩阵不是对称的时候,假如说矩阵是下面的样子:
这个矩阵变换后得到的形状为剪切形。
初看起来,这个网格不是正交的,但当对其旋转58.28度之后,两个网格都变成了正交网格。
这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变换方向(变换方向可能不止一个),如果我们想要描述好一个变换,那我们就描述好这个变换主要的变换方向就好了。反过头来看看之前特征值分解的式子,分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变换方向(从主要的变换到次要的变换排列)。
当矩阵是高维的情况时,那么这个矩阵就是高维空间下的一个线性变换,这个线性变换可能没法通过图片来表示,但是可以想象,这个变换也同样有很多的变换方向,我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变换方向。我们利用这前N个变换方向,就可以近似这个矩阵(变换)。也就是之前说的:提取这个矩阵最重要的特征。
总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么。或者理解为特征向量是指明特征变换的方向,特征值为对应的特征变换方向上变化的幅度。可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多的事情。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。而奇异值变换却没有此要求。
特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实世界中,我们看到的大部分矩阵都不是方阵,我们怎样才能描述这样普通的矩阵的重要特征呢?奇异值分解可以用来干这个事情,奇异值分解是一个能适用于任意矩阵的一种分解方法。
其中S=diag(σ1,σ2,……,σr),σi>0 (i=1,2…,r),r=rank(A)。得到的U是一个N×N的方阵(里面的向量是正交的,U里面的向量称为左奇异向量)。S是一个N×M的矩阵(非对角线的元素都是0,对角线上的元素称为奇异值),VT(是一个M×M的方阵,里面的向量也是正交的,V里面的向量称为右奇异向量)。 在对矩阵进行奇异值分解时,是通过特征值分解方法求得的,首先将矩阵转化为方阵,然后对其进行特征值分解。 假设对N×M的矩阵A进行奇异值分解,首先,我们将矩阵A左乘以它的转置矩阵AT,将会得到一个M×M方阵,我们用这个方阵求特征值可以得到:
这里求得的υ就是上面的右奇异向量。 或者将我们将矩阵A右乘以它的转置矩阵AT,将会得到一个N×N方阵,我们用这个方阵求特征值可以得到:
我们有
从这我们明白了:向量V是原始域(或空间)的正交基(或向量),U是变换后的域(或空间)的正交基(或向量),而奇异值S描述了原始域(或空间)的正交向量V在变换后的域(或空间)沿向量U方向被拉伸的幅度。
对这个例子,我们引入单位圆来进行变换。变换后得到的图形为椭圆,它的长轴和短轴在变换后的空间定义了正交的网格。
注意到椭圆的长轴和短轴由Mv1和Mv2定义。在单位圆的所有向量中,Mv1和Mv2向量是最长和最短的向量。
换句话说,单位圆上的|Mx|在v1方向上有最大值,在v2方向上有最小值。这样就将问题简化为相当标准的微积分问题:我们希望在整个单位圆上优化函数。结果是这个函数的关键点出现在矩阵MTM的特征向量处。既然这个矩阵是对称阵,不同特征值对应的特征向量将是正交的。这些正交的向量是就vi。通过引入单位圆后的变换,我们就找到了变换后的主分量方向,即Mv1和Mv2方向,也就是向量u1和u2表示的方向。
奇异值σ跟特征值λ类似,奇异值在矩阵S中也是由大到小排列,而且σ减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r个奇异值来近似描述矩阵,这里定义一下部分奇异值分解:
r是一个远小于m、n的数。右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于m,则相乘的结果越接近于A。
2. 分解后的正交向量均表明了主要特征的变换方向。
3. 特征值分解仅得到一组正交向量,该向量表明了线性变换后的变换方向;而奇异值分解得到了两组正交向量,分别对应于变换前和变换后的正交向量。
5. 特征值矩阵和奇异值矩阵均为对角阵,元素都是从大到小排列,其大小均表示变换后的拉伸幅度(缩放因子)。
转自 谭祥军 《模态空间》
作者: 亮子
振动控制、数据采集、状态监测领域的创新领导者 —— 美国晶钻仪器公司