SVD——奇異值分解概述

前言

奇異值分解(Singular Value Decomposition,簡稱 SVD)
奇異值分解是一個有着很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要特性。
這是一個很著名的定理,廣泛應用於圖像壓縮,矩陣填充,推薦系統和潛在語義索引(有時稱爲潛在語義分析)。
此文主要關注奇異值的一些特性,還會提及一些奇異值的計算以及相關的數學基礎知識。之後還會涉及PCA。

特徵值

特徵值分解和奇異值分解兩者有着很緊密的關係,特徵值分解和奇異值分解的目的都是一樣,即提取出一個矩陣最重要的特徵。因此,首先從特徵值分解講起。(此部分主要參考資料1)
如果說一個向量ν\nu是方陣A的特徵向量,則一定可以表示成下面的形式:
Aν=λνA \nu =\lambda \nu
其中λ\lambda被稱爲特徵向量ν\nu對應的特徵值,一個矩陣的一組特徵向量爲一組正交向量。計算特徵值要求矩陣爲方陣

特徵值分解則是將一個矩陣分解成下面的形式:
A=QQ1A =Q \sum Q^{-1}
這其中Q是這個矩陣A的特徵向量組成的矩陣,\sum是一個對角矩陣,每一個對角線上的元素就是一個特徵值。
一個矩陣其實就是一個線性變換,因爲一個矩陣乘以一個向量後得到的向量,其實就相當於將這個向量進行了線性變換。從幾何意義上來說,特徵值和特徵向量代表了主要方向及其大小。舉一個具體的例子來說:
在這裏插入圖片描述
它對應的線性變換實際爲下面的形式:
在這裏插入圖片描述
這是因爲矩陣M乘以一個向量(x,y)的結果是:
在這裏插入圖片描述
上面的矩陣是對稱的,所以這個變換是一個對x,y軸的方向一個拉伸變換(每一個對角線上的元素將會對一個維度進行拉伸變換,當值>1時,是拉長,當值<1時時縮短),當矩陣不是對稱的時候,假如說矩陣是下面的樣子:
在這裏插入圖片描述
它所描述的變換是下面的樣子:
在這裏插入圖片描述
這其實是在平面上對一個軸進行的拉伸變換(如藍色的箭頭所示),在圖中,藍色的箭頭是一個最主要的變化方向(變化方向可能有不止一個),如果我們想要描述好一個變換,那我們就描述好這個變換主要的變化方向就好了。反過頭來看看之前特徵值分解的式子,分解得到的Σ矩陣是一個對角陣,裏面的特徵值是由大到小排列的,這些特徵值所對應的特徵向量就是描述這個矩陣變化方向(從主要的變化到次要的變化排列)。
 

奇異值分解

特徵值分解是一個提取矩陣特徵很不錯的方法,但是它只是對方陣而言的。那麼如果A不是方陣,即行和列不相同時,我們還可以對矩陣進行分解嗎?答案當然是可以,我們可以使用SVD。

奇異值分解:定義

奇異值分解是一個能適用於任意矩陣的一種分解方法。假設矩陣A是一個m×\timesn的矩陣,那麼我們定義矩陣A的SVD爲:
A = UΣVTA \ = \ U \Sigma V^T
其中 U 是一個 m×\times m 的矩陣,U裏面的向量稱爲左奇異向量,Σ\Sigma 是一個 m×\times n 的矩陣,除了主對角線上的元素以外全爲0,主對角線上的每個元素都稱爲奇異值, V 是一個 n×\times n 的矩陣,V 裏面的向量稱爲右奇異向量。 U 和 V 都是酉矩陣(正交矩陣),即滿足UTU=IU^T U = I, VTV=IV^T V = I。下圖可以很形象地看出上面SVD的定義:
在這裏插入圖片描述

奇異值分解:求解過程

SVD分解後的U, Σ\Sigma, V這三個矩陣的具體求解過程爲:
首先,我們將A的轉置和A做矩陣乘法,那麼會得到 n×\times n 的矩陣的一個方陣ATAA^T A。先對ATAA^T A進行特徵值分解:
ATAvi = λvi(A^T A)\vec {v_i} \ = \ \lambda \vec {v_i}
這樣我們就可以得到矩陣ATAA^T A 的n個特徵值和對應的n個特徵向量V\vec V了。將 ATAA^T A 的所有特徵向量張成一個n×n的矩陣VV,就是我們SVD公式裏面的V矩陣了。一般我們將VV中的每個特徵向量叫做A的右奇異向量。
證明過程爲:
A = UΣVTAT=VΣUTATA=VΣUTUΣVT=VΣ2VTA \ = \ U \Sigma V^T \Rightarrow A^T =V \Sigma U^T \Rightarrow A^T A=V \Sigma U^T U \Sigma V^T =V\Sigma^2 V^T
從而可以看出ATAA^T A 的特徵向量組成的的確就是我們SVD中的V矩陣。
 
同理,我們將A與A的轉置做矩陣乘法,那麼會得到m×m的一個方陣 AATA A^T 。對方陣AATA A^T 進行特徵分解,得到的特徵值和特徵向量滿足下式:
AATui = λui(A A^T)\vec {u_i} \ = \ \lambda \vec {u_i}
這樣我們就可以得到矩陣 AATA A^T的m個特徵值和對應的m個特徵向量u了。將AATA A^T 的所有特徵向量張成一個m×m的矩陣U,就是我們SVD公式裏面的U矩陣了。一般我們將U中的每個特徵向量叫做A的左奇異向量。
奇異值矩陣Σ\Sigma 除了對角線上是奇異值外,其它位置均爲0,那我們只需要求出每個奇異值σ就可以了。具體的推導過程來說:
A=UΣVTAV=UΣVTVAV=UΣAvi=σiuiσi=Avi/uiA = U \Sigma V^T \Rightarrow AV = U\Sigma V^T V \Rightarrow AV=U \Sigma \Rightarrow Av_i = σ_i u_i \Rightarrow σ_i = Av_i/u_i
由此,我們可以求出每個奇異值,進而求出奇異值矩陣Σ\Sigma

進一步我們還可以看出我們的特徵值矩陣等於奇異值矩陣的平方,也就是說特徵值和奇異值滿足如下關係:
σi=λiσ_i = \sqrt{\lambda_i}
這樣也就是說,我們可以不用σi=Avi/uiσ_i = Av_i/u_i 來計算奇異值,也可以通過求出ATA 的特徵值取平方根來求奇異值。
 

SVD的幾何性質

奇異值的特點是衰減特別快,也就是說僅僅有前幾個奇異值特別大,後面的值都很小。在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上的比例。
也就是說,我們也可以用最大的k個的奇異值和對應的左右奇異向量來近似描述矩陣。
Am×n=Um×mΣm×nVn×nTUm×kΣk×kVk×nTA_{m \times n} = U_{m \times m} \Sigma_{m \times n} V_{n \times n} ^T\approx U_{m \times k} \Sigma_{k \times k} V_{k \times n}^T
其中k比n小很多。
因此,奇異值分解可以把一個大矩陣,分解成三個小矩陣相乘。如下圖所示,現在我們的矩陣A只需要灰色的部分的三個小矩陣就可以近似描述了。
在這裏插入圖片描述
由於這個重要的性質,SVD可以用於PCA降維,來做數據壓縮和去噪。也可以用於推薦算法,將用戶和喜好對應的矩陣做特徵分解,進而得到隱含的用戶需求來做推薦。同時也可以用於NLP中的算法,比如潛在語義索引(LSI)。

特徵值分解和SVD的區別:幾何意義

正如之前提到的,矩陣可以認爲是一種線性變換,而且這種線性變換的作用效果與基的選擇有關。
一個線性變換的作用可以包含旋轉、縮放和投影三種類型的效應。奇異值分解正是對線性變換這三種效應的一個析構。
A = UΣVTA \ = \ U \Sigma V^T,其中,UUVV是兩組正交單位向量,Σ\Sigma是對角陣,表示奇異值, 它表示我們找到了UUVV這樣兩組基,A矩陣的作用是將一個向量從VV這組正交基向量的空間旋轉到UU這組正交基向量空間,並對每個方向進行了一定的縮放,縮放因子就是各個奇異值。如果維度比大,則表示還進行了投影。可以說奇異值分解將一個矩陣原本混合在一起的三種作用效果,分解出來了。
而特徵值分解其實是對旋轉縮放兩種效應的歸併。特徵值,特徵向量由Ax=λ\lambdax得到,它表示如果一個向量v處於A的特徵向量方向,那麼Av對v的線性變換作用只是一個縮放。也就是說,求特徵向量和特徵值的過程,我們找到了這樣一組基,在這組基下,矩陣的作用效果僅僅是存粹的縮放。對於實對稱矩陣,特徵向量正交,我們可以將特徵向量式子寫成A=xλ\lambdaxTx^T,這樣就和奇異值分解類似了,就是A矩陣將一個向量從x這組基的空間旋轉到x這組基的空間,並在每個方向進行了縮放,由於前後都是x,就是沒有旋轉或者理解爲旋轉了0度。
總結來說,特徵值分解和奇異值分解都是給一個矩陣(線性變換)找一組特殊的基,特徵值分解找到了特徵向量這組基,在這組基下該線性變換隻有縮放效果。而奇異值分解則是找到另一組基,這組基下線性變換的旋轉、縮放、投影三種功能獨立地展示出來了。

參考資料

奇異值分解(SVD)詳解及其應用
特徵值分解和奇異值分解的區別
知乎專欄——奇異值分解

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