Singular Value Decomposition (SVD)是線性代數中十分重要的矩陣分解方法,被稱爲「線性代數的基本理論」,由於它不只能夠運用於全部矩陣(不像特徵值分解只能用於方陣),並且奇異值老是存在的。app
SVD定理dom
設一個矩陣\(A^{m×n}\)的秩爲\(r∈[0,min(m,n)]\),矩陣\(A\)的奇異值分解形式以下:
\[A=U\Sigma V^T \tag{1.1.1}\]spa
其中\(U∈R^{m×m}\)是一個正交矩陣(即列向量\(u_i,i=1,...,m\)互相正交),\(V∈R^{n×n}\)也是一個正交矩陣(即列向量\(v_i,i=1,...,n\)互相正交),\(\Sigma\)是一個\(m×n\)的矩陣,且知足\[\Sigma_{ii}=\sigma_i≥0 \\ \Sigma_{ij}=0,i≠j\]3d
上面的\(\sigma_i\)稱爲奇異值(singular values),\(u_i\)稱爲左奇異值(left-singular values),\(v_i\)稱爲右奇異值(right-singular values)。另外一般默認有\(\sigma_1≥...≥\sigma_r≥0\) 。htm
注意:矩陣\(A\)是一個長方形矩陣,不必定是方陣,另外\(\Sigma\)和矩陣\(A\)的維度相同,而且其包含一個對角子矩陣(diagonal submatrix)。blog
對於奇異值分解能夠從兩個角度進行理解:一是將SVD視爲對基向量組(bases),即座標系的一順序變換,二是將SVD視爲對於數據點的變換。排序
通常來講要讓矩陣\(A\)做用於另外一個矩陣,都是左乘\(A\),因此由公式(1)可知道首先是\(V^T\),而後是\(\Sigma\),最後是矩陣\(U\)變換。因此矩陣\(A\)的變換其實是通過了三個步驟,以下圖所示(爲方便理解使用了二維和三維圖像進行說明):get
假設左上角的單位圓是在\(R^n\)空間,其標準基用\(B=[v_1,v_2]\)表示。左下角的圓也在\(R^n\)空間裏,其標準基用\(\tilde{B}=[e_1,e_2]\)表示,右下角的圓在\(R^m\)空間裏,其標準基用\(\tilde{C}\)表示。右上角的圓在\(R^m\)空間裏。it
下圖更加形象地展現了奇異值分解的做用,變換過程和上面同樣,故再也不贅述:
本小節內容不證實SVD的存在性。
在介紹SVD如何計算以前,首先回顧一下【Math for ML】矩陣分解(Matrix Decompositions) (下)中介紹過任何對稱矩陣都能對角化,其公式以下:
\[S=S^T=PDP^T\]
因此一個對稱矩陣的奇異值分解是十分類似的,即
\[S=U\Sigma V^T\]
對比以後可知有\(U=P,V=P,\Sigma=D\)
另外咱們還須要知道的是對於任意矩陣\(A∈R^{m×n}\),其轉置矩陣和其自己相乘以後獲得的矩陣都是對稱矩陣,即\(A^TA∈R^{n×n}\)和\(AA^T∈R^{m×m}\)均爲對稱矩陣。(證實略)
接下來結合SVD公式給出對任意矩陣\(A∈R^{m×n}\)SVD計算的推導過程:
已知\(A^TA\)可做以下對角化運算,且其特徵值\(λ_i≥0\)
\[ \begin{align} A^TA=PDP^T=P \left[ \begin{matrix} λ_1 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & λ_n \end{matrix} \right] P^T \tag{1.3.1} \\ \end{align} \]
由於任何矩陣均可作奇異值分解,故有
\[ A^TA=(U\Sigma V^T)^T(U\Sigma V^T)=V\Sigma^TU^TU\Sigma V^T \tag{1.3.2} \]
由於\(U\)爲正交矩陣,因此\(U^TU=I\),因此(1.3.2)式進一步簡化可得
\[ \begin{align} A^TA=V\Sigma^T\Sigma V^T=V \left[ \begin{matrix} \sigma_1^2 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & \sigma_n^2 \end{matrix} \right] V^T \tag{1.3.3} \\ \end{align} \]
由(1.3.1)和(1.3.3)可得
\[ V=P \\ \sigma_i^2=\lambda_i \tag{1.3.4} \]
因此任意矩陣\(A\)的右奇異矩陣\(V\)是\(A^TA\)的特徵矩陣\(P\)。
和求\(V\)相似,這裏再也不贅述。\(U\)即爲\(AA^T\)的特徵矩陣。
注意上面兩步中已經求出了\(\sigma_i^2\),接下來要作的就是把上面所求出的\(\sigma_i^2\)從大到小排序並開根號,且\(\Sigma\)要與\(A\)的維度保持一致
具體的SVD計算示例可參見奇異值分解(SVD)計算過程示例。
下面對特徵值分解\(A=PDP^{-1}\)和奇異值分解\(A=U\Sigma V^T\)做以下總結和對比: