3.4 Singular Value Decomposition 閱讀筆記
奇異值分解
reference的內容為唯一教程, 接下來的內容僅為本人的課後感悟, 對他人或無法起到任何指導作用.
Reference
- Course website: Singular Value Decomposition | Linear Algebra | Mathematics | MIT OpenCourseWare
- Course video: 【完整版-麻省理工-線性代數】全34講 配套教材_嗶哩嗶哩_bilibili
- Course summary: Lecture 29: Singular value decomposition (mit.edu)
-
Extra reading:
本講內容為奇異值分解 (Singular Value Decomposition), 它適用於任何矩陣. 我沒有深入學習, 在這一講留下了兩三個遺留問題.
奇異值分解是最好的一種矩陣分解. 任意一個矩陣 (任意 size, 不限方陣, 不限其他條件) 都可以寫為:
\[A=U\Sigma V^{\mathrm{T}} \]其中 \(A\) 是 \(m \times n\) 矩陣, \(U\), \(V\)
有幾個跟 SVD 長得很像的形式:
-
當 \(A\) 為實對稱矩陣時, \(A=Q\Lambda Q^{\mathrm{T}}\). 這是 SVD 的一種特殊情況.
-
當 \(A\) 可對角化時, \(A=S\Lambda S^{\mathrm{T}}\). 但是 \(S\) 並不是正交矩陣, 因此不屬於 SVD.
假設我們已知任何矩陣都可以經如上形式的 SVD 分解.
How It Works
介紹具體求解方式之前, 先描述其意義.
很容易在 \(A\) 的行空間找到一組 orthonormal 的向量 (使用 Gram-Schmidt). 接下來經過線性變換 \(A\) 來到列空間, 設 \(\sigma_i \bm{u}_i = A \bm{v}_i\). 那麼經過線性變換後的向量是否正交呢? 不一定, 需要特殊選擇行空間的標準正交基.
用矩陣語言表述:
\[A \begin{bmatrix} \bm{v_1} & \cdots & \bm{v_r} \\\end{bmatrix} = \begin{bmatrix} \sigma_1 \bm{u_1} & \cdots & \sigma_r \bm{u_r} \\\end{bmatrix} \]v 相互標準正交, u 相互標準正交. 我們的任務便是找到這樣一組 u, v, 和 σ, 滿足上面的式子.
此外零空間也可以找出一組標準正交的向量 \(\begin{bmatrix} \bm{v_{r+1}} & \cdots & \bm{v_n} \\\end{bmatrix}\), 如果想對映過去, 則 \(\sigma_i\) 為 0, 此時 \(\bm{u}\) 取什麼都好, 但是我們需要找到一個正交矩陣 \(U\), 已經在列空間取了 r 個, 於是剩下的在左零空間取 m-r 個, 湊成 m 個標準正交向量.
最終用矩陣語言描述為:
\[\begin{align*} AV &= A\Bigg[\bm{v}_1\ \bm{v}_2\ \cdots\ \bm{v}_r\ \bm{v}_{r+1}\ \cdots\ \bm{v}_m\Bigg] \\ &= \Bigg[\sigma_1\bm{u}_1\ \sigma_2\bm{u}_2\ \cdots\ \sigma_r\bm{u}_r\ 0\bm{u}_{r+1}\ \cdots\ 0\bm{u}_m\Bigg]\\ &= \Bigg[\bm{u}_1\ \bm{u}_2\ \cdots\ \bm{u}_r\ \bm{u}_{r+1}\ \cdots \ \bm{u}_n\Bigg]\left[\begin{array}{c c c|c}\sigma_1&&&\\&\ddots&&\\&&\sigma_r&\\\hline&&&\begin{bmatrix}0\end{bmatrix}\end{array}\right]\\ &= U \Sigma \end{align*} \]此時 \(U\) 是 \(m\times m\) 正交矩陣, \(\Sigma\) 是 \(m\times n\) 對角矩陣, \(V^{\mathrm{T}}\) 是 \(n\times n\) 正交矩陣.
最終可以寫為 \(AV=U\Sigma\), 進一步可以寫作 \(A=U\Sigma V^{-1}\), 因為 \(V\) 是標準正交矩陣所以可以寫為 \(A=U\Sigma V^{\mathrm{T}}\).
我們的任務便是找到這樣一組 u, v, 和 σ, 滿足上面的式子. 此時仍然假設我們已知任何矩陣都可以經如上形式的 SVD 分解.
How to Find \(U\), \(V\), and \(\Sigma\)?
如果已知任何矩陣都可以經如上形式的 SVD 分解: \(A=U\Sigma V^{\mathrm{T}}\).
則 \(A^{\mathrm{T}}A = V \Sigma^{\mathrm{T}} U^{\mathrm{T}}U \Sigma V^{\mathrm{T}} = V \Sigma^{\mathrm{T}}\Sigma V^{\mathrm{T}}=V \Sigma'^{2}V^{\mathrm{T}}\).
這裡 \(\Sigma\) 不是方陣, 但是轉置乘自身, 最終仍然會得到一個對角陣. (有的元素可能是零).
同理有 \(AA^{\mathrm{T}} = U\Sigma\Sigma^{\mathrm{T}}U^{\mathrm{T}}=U\Sigma''^{\mathrm{T}}U^{\mathrm{T}}\).
假設 \(A\) 行滿秩, 列也滿秩 (滿秩方陣), 那麼 \(A A^{\mathrm{T}}\) 和 \(A^{\mathrm{T}} A\) 全都是實對稱正定矩陣.
- \(A^{\mathrm{T}} A\) 的特徵值滿足 \(\sigma_i=\sqrt{\lambda_i}\), 特徵向量組成正交矩陣 \(V\).
- \(A A^{\mathrm{T}}\) 的特徵值滿足 \(\sigma_i=\sqrt{\lambda_i}\), 特徵向量組成正交矩陣 \(U\).
Example
Invertible
計算一個例子, \(A=\begin{bmatrix}4&4\\-3&3\end{bmatrix}\), 我們需要找到:
我們來計算 \(A^{\mathrm{T}}A=\begin{bmatrix}4&-3\\4&3\end{bmatrix}\begin{bmatrix}4&4\\-3&3\end{bmatrix}=\begin{bmatrix}25&7\\7&25\end{bmatrix}\).
可以直接觀察得到特徵向量 \(A^{\mathrm{T}}A\begin{bmatrix}1\\1\end{bmatrix}=32\begin{bmatrix}1\\1\end{bmatrix},\ A^{\mathrm{T}}A\begin{bmatrix}1\\-1\end{bmatrix}=18\begin{bmatrix}1\\-1\end{bmatrix}\), 化為單位向量有 \(\sigma_1=32,\ \bm{v}_1=\begin{bmatrix}\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\end{bmatrix},\ \sigma_2=18,\ \bm{v}_2=\begin{bmatrix}\frac{1}{\sqrt{2}}\\-\frac{1}{\sqrt{2}}\end{bmatrix}\).
到目前為止, 我們得到 \(\begin{bmatrix}4&4\\-3&3\end{bmatrix}=\begin{bmatrix}u_?&u_?\\u_?&u_?\end{bmatrix}\begin{bmatrix}\sqrt{32}&0\\0&\sqrt{18}\end{bmatrix}\begin{bmatrix}\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}}\end{bmatrix}\), 接下來繼續求解 \(U\).
\(AA^{\mathrm{T}}=U\Sigma V^{\mathrm{T}}V\Sigma^{\mathrm{T}}U^{\mathrm{T}}=U\Sigma^2U^{\mathrm{T}}\), 求出 \(AA^{\mathrm{T}}\) 的特徵向量即可得到 \(U\), \(\begin{bmatrix}4&4\\-3&3\end{bmatrix}\begin{bmatrix}4&-3\\4&3\end{bmatrix}=\begin{bmatrix}32&0\\0&18\end{bmatrix}\), 觀察得 \(AA^{\mathrm{T}}\begin{bmatrix}1\\0\end{bmatrix}=32\begin{bmatrix}1\\0\end{bmatrix},\ AA^{\mathrm{T}}\begin{bmatrix}0\\1\end{bmatrix}=18\begin{bmatrix}0\\1\end{bmatrix}\). 但是我們不能直接使用這一組特徵向量, 因為式子 \(AV=U\Sigma\) 明確告訴我們, 一旦\(V\)確定下來, \(U\)也必須取能夠滿足該式的向量, 所以此處 \(\bm{Av}_2=\begin{bmatrix}0\\-\sqrt{18}\end{bmatrix}=\bm{u}_2\sigma_2=\begin{bmatrix}0\\-1\end{bmatrix}\sqrt{18}\), 則 \(\bm{u}_1=\begin{bmatrix}1\\0\end{bmatrix},\ \bm{u}_2=\begin{bmatrix}0\\-1\end{bmatrix}\). (這個問題在本講的官方筆記中有詳細說明. )
如果取 \(\bm{v}_2=\begin{bmatrix}-\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\end{bmatrix}\), 則可以取 \(\bm{u}_1=\begin{bmatrix} 1 \\ 0 \\\end{bmatrix}, \bm{u}_2=\begin{bmatrix} 0 \\ 1 \\\end{bmatrix}\).
\(U\) 和 \(V\) 是相關的, 標準正交基到底該怎麼取呢? 這又是一個問題.
Singular
再做一個例子, \(A=\begin{bmatrix}4&3\\8&6\end{bmatrix}\), 這是個秩一矩陣, 有零空間.
我們按照最初的原理去看行列空間. \(A\) 的行空間為 \(\begin{bmatrix}4\\3\end{bmatrix}\) 的倍數, \(A\) 的列空間為 \(\begin{bmatrix}4\\8\end{bmatrix}\) 的倍數.
標準化向量得 \(\bm{v}_1=\begin{bmatrix}0.8\\0.6\end{bmatrix},\ \bm{u}_1=\frac{1}{\sqrt{5}}\begin{bmatrix}1\\2\end{bmatrix}\).
\(A^{\mathrm{T}}A=\begin{bmatrix}4&8\\3&6\end{bmatrix}\begin{bmatrix}4&3\\8&6\end{bmatrix}=\begin{bmatrix}80&60\\60&45\end{bmatrix}\), 由於 \(A\) 是秩一矩陣, 則 \(A^{\mathrm{T}}A\) 也不滿秩, 所以必有特徵值 \(0\), 則另特徵值一個由跡可知為 \(125\).
繼續求零空間的特徵向量, 有 \(\bm{v}_2=\begin{bmatrix}0.6\\-0,8\end{bmatrix},\ \bm{u}_2=\frac{1}{\sqrt{5}}\begin{bmatrix}2\\-1\end{bmatrix}\).
最終得到\(\begin{bmatrix}4&3\\8&6\end{bmatrix}=\displaystyle \frac{1}{\sqrt{5}}\begin{bmatrix}1&\bm{2}\\2&\bm{-1}\end{bmatrix}\begin{bmatrix}\sqrt{125}&0\\0&\bm{0}\end{bmatrix}\begin{bmatrix}0.8&0.6\\\bm{0.6}&\bm{-0.8}\end{bmatrix}\), 其中加粗部分都是與零空間相關的部分.
最終得出 SVD 的結論:
- \(\bm{v}_1,\ \cdots,\ \bm{v}_r\) 是行空間的標準正交基
- \(\bm{u}_1,\ \cdots,\ \bm{u}_r\) 是列空間的標準正交基
- \(\bm{v}_{r+1},\ \cdots,\ \bm{v}_n\) 是零空間的標準正交基
- \(\bm{u}_{r+1},\ \cdots,\ \bm{u}_m\) 是左零空間的標準正交基
通過將矩陣寫為\(Av_i=\sigma_iu_i\)形式, 將矩陣對角化, 便可以得到 SVD 分解.
Question Unsolved
目前仍有很多問題:
- 為什麼矩陣 \(A\) 一定能分解為 \(U \Sigma V^{\mathrm{T}}\)?
- 既然 \(U\) 和 \(V\) 是有聯絡的, 怎麼選特徵向量的方向, 怎麼求?
- 第二個例子能否採用求 \(A^{\mathrm{T}}A\) 和 \(A A^{\mathrm{T}}\) 的特徵值特徵向量算出 SVD?
- 非滿秩的矩陣的 SVD, 算出 \(\sigma_i=0\) 對應的零空間/左零空間的向量有意義嗎?
- SVD 本身是用來做什麼的?
Properties and Applications
這一部分直接截圖別人寫的了:
Properties
上面幾節我們對SVD的定義和計算做了詳細的描述,似乎看不出我們費這麼大的力氣做SVD有什麼好處。那麼SVD有什麼重要的性質值得我們注意呢?
對於奇異值,它跟我們特徵分解中的特徵值類似,在奇異值矩陣中也是按照從大到小排列,而且奇異值的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上的比例。也就是說,我們也可以用最大的k個的奇異值和對應的左右奇異向量來近似描述矩陣。也就是說:
\[\begin{align*} A_{m×n}&=U_{m×m}\Sigma_{m×n}V^{\mathrm{T}}_{n×n}\\ &≈U_{m×k}\Sigma_{k×k}V^{\mathrm{T}}_{k×n}A_{m×n}\\ &=U_{m×m}Σ_{m×n}V_{n×n}^{\mathrm{T}}\\ &≈U_{m×k}Σ_{k×k}V_{k×n}^{\mathrm{T}}\\ \end{align*} \]其中 \(k\) 要比 \(n\) 小很多,也就是一個大的矩陣 \(A\) 可以用三個小的矩陣 \(U_{m×k}\), \(\Sigma_{k×k}\), \(V^{\mathrm{T}}_{k \times n}\) 來表示。如下圖所示,現在我們的矩陣 \(A\) 只需要灰色的部分的三個小矩陣就可以近似描述了。
由於這個重要的性質,SVD 可以用於 PCA 降維,來做資料壓縮和去噪。也可以用於推薦演算法,將使用者和喜好對應的矩陣做特徵分解,進而得到隱含的使用者需求來做推薦。同時也可以用於 NLP 中的演算法,比如潛在語義索引(LSI)。下面我們就對 SVD 用於 PCA 降維做一個介紹。
Application: PCA
在主成分分析(PCA)原理總結中,我們講到要用PCA降維,需要找到樣本協方差矩陣 \(X^{\mathrm{T}}X\) 的最大的d個特徵向量,然後用這最大的d個特徵向量張成的矩陣來做低維投影降維。可以看出,在這個過程中需要先求出協方差矩陣 \(X^{\mathrm{T}}X\),當樣本數多樣本特徵數也多的時候,這個計算量是很大的。
注意到我們的SVD也可以得到協方差矩陣 \(X^{\mathrm{T}}X\) 最大的d個特徵向量張成的矩陣,但是SVD有個好處,有一些SVD的實現演算法可以不求先求出協方差矩陣 \(X^{\mathrm{T}}X\),也能求出我們的右奇異矩陣V。也就是說,我們的PCA演算法可以不用做特徵分解,而是做SVD來完成。這個方法在樣本量很大的時候很有效。實際上,scikit-learn的PCA演算法的背後真正的實現就是用的SVD,而不是我們我們認為的暴力特徵分解。
另一方面,注意到PCA僅僅使用了我們SVD的右奇異矩陣,沒有使用左奇異矩陣,那麼左奇異矩陣有什麼用呢?