SVD分解的理解

SVD分解(奇異值分解),本應是本科生就掌握的方法,然而卻經常被忽視。實際上,SVD分解不但很直觀,而且極其有用。SVD分解提供了一種方法將一個矩陣拆分成簡單的,並且有意義的幾塊。它的幾何解釋可以看做將一個空間進行旋轉,尺度拉伸,再旋轉三步過程。

首先來看一個對角矩陣,

幾何上, 我們將一個矩陣理解爲對於點 (x, y) 從一個平面到另一個平面的映射:

下圖顯示了這個映射的效果: 平面被橫向拉伸了3倍,縱向沒有變化。

 

對於另一個矩陣

它的效果是

這樣一個變化並不是很好描述,然而當我們將座標系旋轉45度後,我們可以看出

這時,我們發現這個新的網格上發生的變化和網格在對角陣下發生變化的效果相似。

這是一個對稱矩陣的例子,可以看出,對稱矩陣經過旋轉後,其作用就和對角陣類似了。數學上,對於一個對稱矩陣M, 我們可以找到一組正交向量 vi 從而 Mvi 相當於 vi上的標量乘積; 也就是

Mvi = λivi
λi 是標量,也就是對應對角陣中對角線上的元素. 由於這個性質,我們稱 vi 是 M 的特徵向量;  λi 爲特徵值. 一個對稱矩陣不同特徵值對應的特徵向量是正交的。

對於更廣泛的情況,我們看看是否能從一個正交網格轉換到另一個正交網格. 考慮一個非對稱矩陣:

這個矩陣的效果形象的稱爲剃刀(shear)。

 

這個矩陣將網格在水平方向拉伸了,而垂直方向沒有變化。如果我們將網格旋轉大約58度,這兩個網格就又會都變爲正交的了。

 

奇異值分解:

考慮一個 2 *2 矩陣, 我們可以找到兩組網格的對應關係。用向量表示,那就是當我們選擇合適的單位正交向量 v1 和v2Mv1 和 Mv2 也是正交的.

 

我們使用 u1 和 u2 代表 Mv1 和 Mv2的方向.  Mv1 和 Mv2 的長度表示爲 σ1 和 σ2,也就是網格在每個方向的拉伸.這兩個拉伸值叫做M的 奇異值(sigular value)

 

和前面類似,我們可以 有

Mv1 = σ1u1

Mv2 = σ2u2

我們一直討論的 v1 和 v2 是一對正交向量, 對於一般的向量 x,我們有這樣的投影關係

x = (v1xv1 + (v2xv2
也就是說

Mx = (v1xMv1 + (v2xMv2
Mx = (v1x) σ1u1 + (v2x) σ2u

Mx = u1σ1 v1Tx + u2σ2 v2Tx    --->     M = u1σ1 v1T + u2σ2 v2T

這個關係可以寫成矩陣形式

M = UΣVT
U 的列是 u1 和 u2, Σ  σ1 和 σ2構成的對角陣,  V 的列是 v1 和 v2.  即V描述了域中的一組正交基,U描述了相關域的另一組正交基,Σ 表述了U中的向量與V中向量的拉伸關係。

尋找奇異值分解

奇異值分解可以應用於任何矩陣,對於前面的例子,如果我們加上一個圓,那它會映射成一個橢圓,橢圓的長軸和短軸定義了新的域中的正交網格,可以被表示爲Mv1 and Mv2

 

換句話說,單位圓上的函數 |Mx| 在  v1 取得最大值,在 v2取得最小值. 這將單位圓上的函數優化問題簡化了。可以證明,這個函數的極值點就出現在MTM的特徵向量上,這個矩陣一定是對稱的,所以不同特徵值對應的特徵向量vi是正交的.

σi = |Mvi|就是奇異值,  ui 是 Mvi方向的單位向量.

Mvi = σiui
Mvj = σjuj.
Mvi Mvj = viTMT Mvj = vi MTMvj = λjvi vj = 0.
也就是

Mvi Mvj = σiσj ui uj = 0
因此, ui 和 uj 也是正交的。所以我們就把一組正交基 vi 變換到了另一組正交基 ui.

另一個例子

我們來看一個奇異矩陣(秩爲1,或只有一個非零奇異值)

 

它的效果如下

在這個例子中,第二個奇異值爲0,所以 M = u1σ1 v1T. 也就是說,如果有奇異值爲0,那麼這個矩陣就有降維的效果。因爲0奇異值對應的維度就不會出現在右邊。這對於計算機科學中的數據壓縮極其有用。例如我們想壓縮下面的15 25 像素的黑白圖像

我們可以看出這個圖像中只有三種列,即

  
把圖像表示成一個15  25 的矩陣,總共有 375 個元素.

然而當我們做了奇異值分解,會發現非零奇異值僅有3個,

σ1 = 14.72, σ2 = 5.22, σ3 = 3.31
 因此,這個矩陣就可以被表示爲   M=u1σ1 v1T + u2σ2 v2T + u3σ3 v3T

也就是說我們用三個長度爲15的向量vi,三個長度爲25的向量ui,以及三個奇異值,總共123個數字表示了這個375個元素組成的矩陣。奇異值分解找到了矩陣中的冗餘信息實現了降維。

可以看出,奇異值分解捕獲了圖像中的主要信息。因此,又假設上一個例子裏引入了噪聲,

當我們用同樣的方法做奇異值分解,我們得到如下非零奇異值

σ1 = 14.15,σ2 = 4.67,σ3 = 3.00,σ4 = 0.21,σ5 = 0.19,...,σ15 = 0.05
顯然,前三個奇異值比其他的大很多,說明其中包括了絕大部分信息。如果我們只要前三個,

M  u1σ1 v1T + u2σ2 v2T + u3σ3 v3T
 

我們就實現了圖像的降噪。

Noisy image Improved image


轉載:http://www.bfcat.com/index.php/2012/03/svd-tutorial/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章