奇異值分解(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。
1.????? 奇異值分解過程用到特征值分解實現。
2.????? 分解后的正交向量均表明了主要特征的變換方向。
3.????? 特征值分解僅得到一組正交向量,該向量表明了線性變換后的變換方向;而奇異值分解得到了兩組正交向量,分別對應于變換前和變換后的正交向量。
5.??????特征值矩陣和奇異值矩陣均為對角陣,元素都是從大到小排列,其大小均表示變換后的拉伸幅度(縮放因子)。
轉自 譚祥軍? 《模態空間》
作者: 亮子
振動控制、數據采集、狀態監測領域的創新領導者 —— 美國晶鉆儀器公司