1. 程式人生 > 其它 >【陸勤踐行】奇異值分解 - 最清晰易懂的svd 科普

【陸勤踐行】奇異值分解 - 最清晰易懂的svd 科普

在這篇文章中,我們以幾何的視角去觀察矩陣奇異值分解的過程,並且列舉一些奇異值分解的應用。

介紹

矩陣奇異值分解是本科數學課程中的必學部分,但往往被大家忽略。這個分解除了很直觀,更重要的是非常具有實用價值。譬如,Netflix(線上電影租賃公司)對能夠提高其電影推薦系統準確率10%的人提供100萬美元的豐厚獎金。令人驚奇的是,這個看似簡單的問題卻非常具有挑戰性,相關的團隊正在使用非常複雜的技術解決之,而這些技術的本質都是奇異值分解。

奇異值分解簡單來講,就是以一種方便快捷的方式將我們感興趣的矩陣分解成更簡單且有直觀意義的矩陣的乘積。本文以幾何的視角去觀察奇異值分解的過程,並且列舉一些奇異值分解的應用。

******線性變換的幾何解釋**

首先,我們來看一個只有兩行兩列的簡單矩陣。第一個例子是對角矩陣

從幾何的角度,矩陣可以描述為一個變換:用矩陣乘法將平面上的點(x, y)變換成另外一個點(3x, y):

這種變換的效果如下:平面在水平方向被拉伸了3倍,在豎直方向無變化。

再看下這個矩陣

它會產生如下的效果

不過這張圖貌似也並沒有能夠簡潔、清晰的描述出上述矩陣變換的幾何效果。然而,如果我們把網格旋轉45度,再觀察一下。

啊哈!我們看到現在這個新的網格被轉換的方式與原始的網格被對角矩陣轉換的方式是完全一致的:網格在某一方向上被拉伸了3倍。

當然這是一種特殊的結果,因為矩陣_M_是對稱的,換句話說,M

的轉置(通過互換矩陣的對角項得到)還等於_M_。如果我們有一個2*2的對稱矩陣,可以證明,我們總是可以通過在平面上旋轉網格,使得矩陣變換的效果恰好是在兩個垂直的方向上對網格的拉伸或鏡面反射。換句話說,對稱矩陣表現得像對角矩陣一樣。

說的更數學化一些,給定一個對稱矩陣_M_,我們可以找到一組正交向量**vi使得_M_vi等於vi**和標量的乘積;那就是

Mvi = λivi

這裡λi是標量。從幾何意義上講,這意味著當**vi乘上矩陣_M_時被簡單地拉伸或者反射了。因為這個性質,我們稱vi**是_M_的特徵向量;標量λi被稱為特徵值。一個可以被證明的重要的事實是:對稱矩陣不同的特徵值對應的特徵向量是正交的。如果我們把對稱矩陣的特徵向量和網格對齊,那麼矩陣對網格的拉伸或反射的方式,與矩陣對特徵向量的拉伸或反射的方式,兩者是完全一致的。

上述線性變換的幾何解釋非常簡單:網格在某個方向上被簡單地拉伸了。對於更一般的矩陣,我們將要問的問題是: 能否能找到某個正交網格,在矩陣變換之下,變成另一個正交網格? 讓我們最後來考慮一個非對稱矩陣的例子:

這個矩陣產生的幾何效果是切變(shear)。

很容易找到一族沿水平軸的特徵向量。但是從上圖可以看出,這些特徵向量無法把某個正交網格變換到另外一個正交網格。儘管如此,我們先嚐試將網格旋轉30度,然後看看發生了什麼,

注意右側紅色平行四邊形在原點形成的夾角已經增加。(譯者注:這暗示了,如果我們增加旋轉角度,平行四邊形在原點形成的夾角可能增加到90度,從而變成正交網格。) 接下來將左側網格旋轉到60度:

右側的網格現在幾乎是正交的。事實上,如果將左側網格旋轉58.28度,左右兩個網格就都是正交的了。

奇異值分解

2*2矩陣奇異值分解的幾何實質是:對於任意2*2矩陣,總能找到某個正交網格到另一個正交網格的轉換與矩陣變換相對應。

用向量解釋這個現象:選擇適當的正交的單位向量**v1v2,向量_M_v1和_M_v2**也是正交的。

用**u1u2來表示_M_v1和_M_v2方向上的單位向量。Mv1和_M_v2**的長度用σ1 和 σ2來表示——量化了網格在特定方向上被拉伸的效果。σ1 和 σ2被稱為_M_的奇異值。(在本例中,奇異值就是黃金比例及其倒數,但它在此不是很重要。)

由此,我們有

Mv1= σ1u1

Mv2= σ2u2

現在給出矩陣_M_作用於向量**x**的簡單描述。因為向量**v1v2**是正交的單位向量,我們有

x= (v1·****x)v1+ (v2·****x)v2

這意味著

Mx= (v1·****x)Mv1+ (v2·****x)Mv2

Mx= (v1·****x) σ1u1+ (v2·****x) σ2u2

注意點積可以用向量的轉置來計算

v·x = vTx

我們有

Mx=u1σ1v1Tx+u2σ2v2Tx

M=u1σ1v1T+u2σ2v2T

通常表述成

M = UΣ_V_T

這裡_U_是列向量**u1u2組成的矩陣,Σ是非零項為σ1 和 σ2的對角矩陣,V是列向量v1v2**組成的矩陣。帶有上標T的矩陣_V_是矩陣_V_的轉置。

上面描述了怎樣將矩陣_M_分解成三個矩陣的乘積:V描述了原始空間中的正交基,U描述了相關空間的正交基,Σ描述了_V_中的向量變成_U_中的向量時被拉伸的倍數。

怎樣做奇異值分解?

奇異值分解的魅力在於任何矩陣都可以找到奇異值。怎麼做?讓我們來看下先前的例子,這回在空間中加入單位圓。在變換後的空間中,單位圓變成了橢圓,其長軸和短軸定義了正交網格。

注意長軸和短軸用_M_v1和_M_v2定義。這兩個向量因此成為單位圓裡的所有向量中最長的和最短的向量。

換句話講,單位圓上的向量函式|Mx|在**v1上有最大值而在v2上有最小值。這就把原始問題簡化為了一個標準的微積分問題:我們在單位圓上去優化一個函式的極值。而這個函式的極值點正好恰恰是矩陣_MTM_的特徵向量。由於該矩陣是對稱的,其不同的特徵值對應的特徵向量之間是正交的。這就產生了向量族vi**。

奇異值通過σi = |Mvi|得到,ui是_M_vi方向上的單位向量。但是**ui**之間為什麼是正交的呢?

為了解釋這個問題,我們假設σi和σj是不同的奇異值。我們有

Mvi= σiui

Mvj= σjuj

讓我們從表示式_M_viMvj開始,為了方便,假定奇異值是非零的。一方面,MviMvj是零,因為作為矩陣_MTM_的特徵向量**vi**之間是正交的:

Mvi·Mvj=viTMTMvj=vi·MTMvj= λjvi·****vj= 0

另一方面,我們有

Mvi·Mvj= σiσjui·****uj= 0

因此**uiuj是正交的,所以我們已經找到能夠轉換成某個正交向量集ui的正交向量集vi**。奇異值描述了在不同方向上拉伸的倍數。

在實踐中,這不是獲得矩陣奇異值分解的步驟,因為這個方法不是特別高效,或者在數值計算中的表現也不夠好。

另外一個例子

讓我們看一個奇異矩陣

矩陣的幾何效果如下:

在這個例子中,第二個奇異值是零,所以我們可以這樣寫:

M = u1σ1 v1T

換句話講,如果一些奇異值為零,相應的項將不會出現在_M_的分解中。因此,矩陣_M_的秩(即線性獨立的行或列的個數)等於非零奇異值的個數。

資料壓縮

奇異值分解可以高效的表示資料。例如,假設我們想傳送下列圖片,包含15*25個黑色或者白色的畫素陣列。

因為在影象中只有三種類型的列(如下),它可以以更緊湊的形式被表示。

我們用15*25的矩陣來表示這個影象,其中每個元素非0即1,0表示黑色畫素,1表示白色畫素。如下所示,共有375個元素。

如果對M進行奇異值分解的話,我們只會得到三個非零的奇異值。

σ1= 14.72

σ2= 5.22

σ3= 3.31

因此,矩陣可以如下表示

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

我們有三個包含15個元素的向量**vi,三個包含25個元素的向量ui**,以及三個奇異值σi。這意味著我們可以只用123個數字就能表示這個矩陣而不是出現在矩陣中的375個元素。在這種方式下,我們看到在矩陣中有3個線性獨立的列,也就是說矩陣的秩是3。

降噪

從之前的例子看出我們利用了矩陣中有很多奇異值為0的特殊性。通常來說,越大的奇異值對應的資訊越令人感興趣。例如,想象我們用掃描器將上面的圖片輸入到我們的計算機。但是,我們的掃描機會在圖片上產生一些缺陷(通常稱作“噪聲”)。

我們以同樣的方式處理:用15*25矩陣來表示影象,然後進行奇異值分解。我們得到以下奇異值:

σ1= 14.15 σ2= 4.67 σ3= 3.00 σ4= 0.21 σ5= 0.19 … σ15= 0.05

很明顯,頭三個奇異值是最重要的,所以我們假定其他的都是影象上的噪聲,並假設假設

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

這就產生了如下的優化後的圖片

Noisy image Improved image

資料分析

我們在收集資料的時候經常會遇到噪聲:無論工具多好,總有一些誤差在測量過程中。如果我們記得大的奇異值指向矩陣中重要的特徵,很自然地想到用奇異值分解去研究被收集的資料。

例如,我們收集了一些資料如下:

如下是我們獲得的資料,將其放入矩陣中:

-1.03	0.74	-0.02	0.51	-1.31	0.99	0.69	-0.12	-0.72	1.11
-2.23	1.61	-0.02	0.88	-2.39	2.02	1.62	-0.35	-1.67	2.46

然後進行奇異值分解。我們得到奇異值

σ1= 6.04 σ2= 0.22

其中第一個奇異值遠遠大於另外一個,很安全的假設小的奇異值σ2是資料中的噪聲並且可以理想地認為是0。這個例子中的矩陣的秩是1,意味著所有資料都位於**ui**定義的線上。

這個簡短的例子引出了主成分分析領域,展示了一系列用奇異值分解來檢測資料依賴和冗餘的技術。

同樣地,奇異值分解可以用來檢測資料中的簇,這就解釋了奇異值分解可以用來嘗試優化Netflix的電影推薦系統。程式會根據你看過的電影來對與你看過的電影相似的未看過的電影進行排序。推薦系統會挑選出你未看過的電影集合中預估分高的電影。

總結

如文章的開頭所述,奇異值分解應該是本科數學專業線性代數課程的核心部分。除了擁有無比簡單的幾何解釋,奇異值分解提供了將線性代數想法應用於現實的極其有效的技術。然而大家對本科線性代數課程的通常都缺乏足夠的重視。

本文可能有點印象派的風格:我的目的是為奇異值分解背後的中心思想提供直觀的解釋,並通過具體的例子來說明怎麼將奇異值分解的思想付諸實踐。

References:

  • Gilbert Strang, ** Linear Algebra and Its Applications**. Brooks Cole.Strang’s book is something of a classic though some may find it to be a little too formal.
  • William H. Press et al, Numercial Recipes in C: The Art of Scientific Computing. Cambridge University Press.Authoritative, yet highly readable. Older versions are available online.
  • Dan Kalman, A Singularly Valuable Decomposition: The SVD of a Matrix, The College Mathematics Journal ** 27** (1996), 2-23.Kalman’s article, like this one, aims to improve the profile of the singular value decomposition. It also a description of how least-squares computations are facilitated by the decomposition.
  • If You Liked This, You’re Sure to Love That, The New York Times, November 21, 2008.This article describes Netflix’s prize competition as well as some of the challenges associated with it.

原文作者:David Austin 原文連結: http://www.ams.org/samplings/feature-column/fcarc-svd1