1. 程式人生 > 其它 >3.4 Singular Value Decomposition 閱讀筆記

3.4 Singular Value Decomposition 閱讀筆記

奇異值分解

reference的內容為唯一教程, 接下來的內容僅為本人的課後感悟, 對他人或無法起到任何指導作用.

Reference

  1. Course website: Singular Value Decomposition | Linear Algebra | Mathematics | MIT OpenCourseWare
  2. Course video: 【完整版-麻省理工-線性代數】全34講 配套教材_嗶哩嗶哩_bilibili
  3. Course summary: Lecture 29: Singular value decomposition (mit.edu)
  4. Extra reading:
    奇異值分解 SVD 原理與在降維中的應用 - 劉建平Pinard - 部落格園 (cnblogs.com) and MIT—線性代數筆記 29 奇異值分解 - 知乎 (zhihu.com)

本講內容為奇異值分解 (Singular Value Decomposition), 它適用於任何矩陣. 我沒有深入學習, 在這一講留下了兩三個遺留問題.

奇異值分解是最好的一種矩陣分解. 任意一個矩陣 (任意 size, 不限方陣, 不限其他條件) 都可以寫為:

\[A=U\Sigma V^{\mathrm{T}} \]

其中 \(A\)\(m \times n\) 矩陣, \(U\), \(V\)

\(m \times m\)\(n \times n\) 的正交矩陣. \(\Sigma\)\(m \times n\) 的對角陣 (主對角線元素有值). 這一講姑且假設 \(A\) 為方陣.

有幾個跟 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的右奇異矩陣,沒有使用左奇異矩陣,那麼左奇異矩陣有什麼用呢?