SVD分解(奇異值分解),本應是本科生就掌握的方法,然而卻經常被忽視。實際上,SVD分解不但很直觀,而且極其有用。SVD分解提供了一種方法將一個矩陣拆分成簡單的,並且有意義的幾塊。它的幾何解釋可以看做將一個空間進行旋轉,尺度拉伸,再旋轉三步過程。
首先來看一個對角矩陣,
對於另一個矩陣
這樣一個變化並不是很好描述,然而當我們將座標系旋轉45度後,我們可以看出
這時,我們發現這個新的網格上發生的變化和網格在對角陣下發生變化的效果相似。
這是一個對稱矩陣的例子,可以看出,對稱矩陣經過旋轉後,其作用就和對角陣類似了。數學上,對於一個對稱矩陣M, 我們可以找到一組正交向量 vi 從而 Mvi 相當於 vi上的標量乘積; 也就是
對於更廣泛的情況,我們看看是否能從一個正交網格轉換到另一個正交網格. 考慮一個非對稱矩陣:
這個矩陣將網格在水平方向拉伸了,而垂直方向沒有變化。如果我們將網格旋轉大約58度,這兩個網格就又會都變爲正交的了。
奇異值分解:
考慮一個 2 *2 矩陣, 我們可以找到兩組網格的對應關係。用向量表示,那就是當我們選擇合適的單位正交向量 v1 和v2, Mv1 和 Mv2 也是正交的.
我們使用 u1 和 u2 代表 Mv1 和 Mv2的方向. Mv1 和 Mv2 的長度表示爲 σ1 和 σ2,也就是網格在每個方向的拉伸.這兩個拉伸值叫做M的 奇異值(sigular value)
Mv1 = σ1u1
Mv2 = σ2u2
我們一直討論的 v1 和 v2 是一對正交向量, 對於一般的向量 x,我們有這樣的投影關係
即
Mx = u1σ1 v1Tx + u2σ2 v2Tx ---> M = u1σ1 v1T + u2σ2 v2T
這個關係可以寫成矩陣形式
尋找奇異值分解
奇異值分解可以應用於任何矩陣,對於前面的例子,如果我們加上一個圓,那它會映射成一個橢圓,橢圓的長軸和短軸定義了新的域中的正交網格,可以被表示爲Mv1 and Mv2。
換句話說,單位圓上的函數 |Mx| 在 v1 取得最大值,在 v2取得最小值. 這將單位圓上的函數優化問題簡化了。可以證明,這個函數的極值點就出現在MTM的特徵向量上,這個矩陣一定是對稱的,所以不同特徵值對應的特徵向量vi是正交的.
σi = |Mvi|就是奇異值, ui 是 Mvi方向的單位向量.
另一個例子
我們來看一個奇異矩陣(秩爲1,或只有一個非零奇異值)
在這個例子中,第二個奇異值爲0,所以 M = u1σ1 v1T. 也就是說,如果有奇異值爲0,那麼這個矩陣就有降維的效果。因爲0奇異值對應的維度就不會出現在右邊。這對於計算機科學中的數據壓縮極其有用。例如我們想壓縮下面的15 25 像素的黑白圖像
也就是說我們用三個長度爲15的向量vi,三個長度爲25的向量ui,以及三個奇異值,總共123個數字表示了這個375個元素組成的矩陣。奇異值分解找到了矩陣中的冗餘信息實現了降維。
可以看出,奇異值分解捕獲了圖像中的主要信息。因此,又假設上一個例子裏引入了噪聲,
我們就實現了圖像的降噪。
Noisy image | Improved image |
轉載:http://www.bfcat.com/index.php/2012/03/svd-tutorial/