摘要

SVD(Singular Value Decomposition, 奇異值分解)是線性代數中既優雅又強大的工具, 它揭示了矩陣最本質的變換. 使用SVD對矩陣進行分解, 能得到代表矩陣最本質變化的矩陣元素. 這就好比一個合數能表示為若干質數之積, 分解合數能得到表示該合數的質因數

; 複雜周期信號可以表示為若干簡單的正弦波和餘弦波之和, 使用傅里葉變換能得到表示該信號的簡單波; 複雜矩陣所代表的線性變換可由若干個簡單矩陣所代表的線性變換組合起來, 使用SVD能找到這些簡單矩陣. 本文由以下章節, 對SVD進行闡述:

  1. 闡述SVD的數學涵義;
  2. 闡述SVD的幾何涵義;
  3. 闡述SVD的求解過程;
  4. 闡述SVD的具體應用;
  5. 總結.

SVD的數學涵義

矩陣在線性代數系統中是一個核心的概念, 其從不同的角度出發都能擁豐富的內涵. 對於矩陣 mathbf{A_{m 	imes n}} , 當其參與運算

mathbf{A} mathbf{x} = mathbf{b} 	ag1

時, 我們可以從以下三個角度看待其角色:

  1. 矩陣 mathbf{A} 是線性方程組(1)的係數組成的矩陣, 其每一行是(1)中每一個方程式的係數部分, 通過分析矩陣的秩 rank(mathbf{A}) 和其極大線性無關組的情況, 我們可以了解(1)的解的情況, 同時, 對於使用高斯消元法等進行求解也比較方便;
  2. m geq n land rank(mathbf{A}) = n 時, 矩陣 mathbf{A}R^{n} 空間中的一個基, 在這個基上面, 有向量 vec{x} = mathbf{[x_{1}, cdots, x_{n}] ^	op}, 而此向量在標準正交基上表示為 vec{b} = mathbf{[b_{1}, cdots, b_{m}]^	op}, 此時(1)隱含著一個基變換的關係, 即 mathbf{A} x = mathbf{I} b, mathbf{I} 為標準正交基;
  3. 矩陣 mathbf{A} 本身表示一個線性變換, (1)表示其對向量 vec{x} 進行線性變換得到向量 vec{b} 的過程.

上述的關於矩陣的各種角色與我們闡述SVD有什麼關係呢? 當我們將矩陣視為一種線性變換時, SVD可以幫我們揭示組成該線性變換的最本質的變換, 具體地, SVD揭示了這樣的一個事實: 對於任意的矩陣 mathbf{A} , 我們總能找到一組單位正交基, 使得 mathbf{A} 對其進行變換之後, 得到的向量組仍然是正交的. 這樣的表述還是相當地晦澀, 我們不妨在二維平面中舉一個例子.

設有矩陣 mathbf{A} , 其對單位正交基 mathbf{vec{upsilon}_1}, mathbf{vec{upsilon}_2} 進行線性變換, 得到的向量仍然是彼此正交的, 即 mathbf{A} mathbf{vec{upsilon_1}}, mathbf{A} mathbf{vec{upsilon_2}} 仍然是正交的. 設 mathbf{A} mathbf{vec{upsilon_1}}, mathbf{A} mathbf{vec{upsilon_2}} 方向上的單位向量是 mathbf{vec{mu}_1}, mathbf{vec{mu}_2} , 長度是 sigma_1, sigma_2 , 則我們可得

egin{align} mathbf{A} mathbf{vec{upsilon_1}} = sigma_1 vec{mu_1} 	ag2 \  mathbf{A} mathbf{vec{upsilon_2}} = sigma_2 vec{mu_2} 	ag3 end{align}

現在利用矩陣 mathbf{A} 對向量 mathbf{vec{x}} 進行線性變換. 我們先將向量 mathbf{vec{x}} 在單位正交基 mathbf{vec{upsilon}_1}, mathbf{vec{upsilon}_2} 上進行表示, 即

egin{align} mathbf{vec{x}} & = [mathbf{upsilon_1}, mathbf{upsilon_2}] cdot egin{bmatrix} mathbf{upsilon_1^	op} \ mathbf{upsilon_2^	op} end{bmatrix} cdot mathbf{vec{x}} \ & = [mathbf{upsilon_1}, mathbf{upsilon_2}] cdot egin{bmatrix} mathbf{upsilon_1^	op} mathbf{vec{x}} \ mathbf{upsilon_2^	op} mathbf{vec{x}} end{bmatrix} 	ag4 end{align}

由(2), (3), (4), 我們有

egin{align} ecause  mathbf{A} mathbf{vec{x}} & = mathbf{A} cdot [mathbf{upsilon_1}, mathbf{upsilon_2}] cdot egin{bmatrix} mathbf{upsilon_1^	op} \ mathbf{upsilon_2^	op} end{bmatrix} cdot mathbf{vec{x}} \ & = [mathbf{A} upsilon_1, mathbf{A} upsilon_2] cdot egin{bmatrix} mathbf{upsilon_1^	op} \ mathbf{upsilon_2^	op} end{bmatrix} cdot mathbf{vec{x}} \ & = [sigma_1 mu_1, sigma_2 mu_2] cdot egin{bmatrix} mathbf{upsilon_1^	op} \ mathbf{upsilon_2^	op} end{bmatrix} cdot mathbf{vec{x}} \ & = [mu_1, mu_2] cdot egin{bmatrix} sigma_1 & 0 \ 0 & sigma2 end{bmatrix} cdot egin{bmatrix} mathbf{upsilon_1^	op} \ mathbf{upsilon_2^	op} end{bmatrix} cdot mathbf{vec{x}} \ & = mathbf{U} mathbf{Sigma} mathbf{V^	op} cdot mathbf{vec{x}} 	ag5 \ 	herefore mathbf{A} & = mathbf{U} mathbf{Sigma} mathbf{V^	op} 	ag6    end{align}

至此, 我們由"對於任意的矩陣 mathbf{A} , 我們總能找到一組單位正交基, 使得 mathbf{A} 對其進行變換之後, 得到的向量組仍然是正交的", 即(2)(3)出發, 得到了矩陣 mathbf{A} 最終的分解形式(6). (6)表達了這樣一個事實, 對於任意的矩陣 mathbf{A} , 我們總可以將其分解為一個酉矩陣 mathbf{U} , 一個對角矩陣 mathbf{Sigma} 和另一個酉矩陣的轉置 mathbf{V^	op} 的乘積, 這便是SVD的核心內容.

SVD的幾何涵義

現在我們知道, 對於任意的矩陣 mathbf{A} , 我們總可以將其分解為一個酉矩陣 mathbf{U} , 一個對角矩陣 mathbf{Sigma} 和另一個酉矩陣的轉置 mathbf{V^	op} 的乘積, 即等式(6)所表述的內容. mathbf{A} = mathbf{U} mathbf{Sigma} mathbf{V^	op} 表示矩陣 mathbf{A} 所代表的線性變換可以由更簡單的旋轉, 拉伸變換進行合成. 這些更簡單的變換是怎麼進行生效的呢? 我們還是在二維平面中舉例說明.

當使用矩陣 mathbf{A} 對向量 mathbf{vec{x}} 進行變化時, 我們可以先將向量 mathbf{vec{x}} 在單位正交基 mathbf{vec{upsilon}_1}, mathbf{vec{upsilon}_2} 上進行表示, 即(4)所表述. 我們不妨令 mathbf{xi_1} =  mathbf{upsilon_1^	op} mathbf{vec{x}}, mathbf{xi_2} =  mathbf{upsilon_2^	op} mathbf{vec{x}} , 則 xi_1, xi_2 是向量 mathbf{vec{x}} 在單位正交基 mathbf{vec{upsilon}_1}, mathbf{vec{upsilon}_2} 上的坐標, 即

egin{align} mathbf{vec{x}} & = [mathbf{upsilon_1}, mathbf{upsilon_2}] cdot egin{bmatrix} mathbf{upsilon_1^	op} \ mathbf{upsilon_2^	op} end{bmatrix} cdot mathbf{vec{x}} \ & = [mathbf{upsilon_1}, mathbf{upsilon_2}] cdot egin{bmatrix} mathbf{upsilon_1^	op} mathbf{vec{x}} \ mathbf{upsilon_2^	op} mathbf{vec{x}} end{bmatrix} \  & = [mathbf{upsilon_1}, mathbf{upsilon_2}] cdot egin{bmatrix} xi_1 \ xi_2end{bmatrix} 	ag7 end{align}

由(6), (7)我們有

egin{align} mathbf{A} mathbf{vec{x}} & = mathbf{U} mathbf{Sigma} mathbf{V^	op} cdot mathbf{vec{x}} \ & = [mu_1, mu_2] cdot egin{bmatrix} sigma_1 & 0 \ 0 & sigma_2 end{bmatrix} cdot egin{bmatrix} mathbf{upsilon_1^	op} \ mathbf{upsilon_2^	op} end{bmatrix} cdot mathbf{vec{x}} \ & = [mu_1, mu_2] cdot egin{bmatrix} sigma_1 & 0 \ 0 & sigma_2 end{bmatrix} cdot egin{bmatrix} mathbf{upsilon_1^	op} \ mathbf{upsilon_2^	op} end{bmatrix} cdot [mathbf{upsilon_1}, mathbf{upsilon_2}] cdot egin{bmatrix} xi_1 \ xi_2end{bmatrix} 	ag8 end{align}

現在我們仔細地來分析(8)中各矩陣的具體操作效果.

egin{align} mathbf{A} mathbf{vec{x}} & = underbrace{underbrace{[mu_1, mu_2]}_{旋轉} underbrace{cdot underbrace{egin{bmatrix} sigma_1 & 0 \ 0 & sigma_2 end{bmatrix}}_{拉伸} cdot underbrace{underbrace{egin{bmatrix} mathbf{upsilon_1^	op} \ mathbf{upsilon_2^	op} end{bmatrix}}_{旋轉} cdot underbrace{underbrace{[mathbf{upsilon_1}, mathbf{upsilon_2}]}_{單位正交基mathbf{V}} cdot underbrace{egin{bmatrix} xi_1 \ xi_2end{bmatrix}}_{x在mathbf{V}坐標}}_{x用單位正交基mathbf{V}表示}}_{對單位正交基mathbf{V}進行旋轉, \ 使之變為標準正交基mathbf{I}}}_{對標準正交基進行拉伸}}_{對拉伸後的正交基進行旋轉} 	ag9 end{align}

如(9)所示, 矩陣 mathbf{A} 對向量 mathbf{vec{x}} 進行線性變換, 其先將向量 mathbf{vec{x}} 用單位正交基 mathbf{V} 進行表示. 然後使用酉矩陣 mathbf{V^	op} 進行旋轉, 由酉矩陣的性質我們可知 mathbf{V}mathbf{V^	op} = mathbf{V^	op}mathbf{V} = mathbf{I} , 所以旋轉之後我們可得到標準正交基 mathbf{I} . 然後使用矩陣 mathbf{Sigma} 對標準正交基 mathbf{I} 進行拉伸, 使得 x-axis, y-axis 分別拉伸 sigma_1, sigma_2 倍的長度. 最後再使用酉矩陣 mathbf{U} 對拉伸之後的正交基進行旋轉, 得到最終的基, 從而得到最終的向量為

egin{align} mathbf{A} mathbf{vec{x}} & = [sigma_1 mu_1, sigma_2 mu_2] cdot egin{bmatrix} xi_1 \ xi_2 end{bmatrix} \ & = xi_1 sigma_1 mu_1 + xi_2 sigma_2 mu_2 	ag{10} end{align}

上述過程可表示為下圖

SVD對矩陣A分解得到旋轉拉伸操作示意圖

通過SVD, 我們找到了能代表矩陣 mathbf{A} 作為線性變換時最本質的操作. sigma_1, sigma_2 就是所謂的奇異值, 表示對標準正交基各個軸進行拉伸的程度.

SVD的求解過程

上述關於SVD在二維平面上的結論可以輕易地推廣到多維情況. 那SVD具體如何求解呢? 由(6)我們知道SVD能使矩陣 mathbf{A} 進行分解, 現在由(6)出發我們來構造矩陣 mathbf{U}, mathbf{Sigma}, mathbf{V} , 具體地, 我們有

egin{align} mathbf{A} mathbf{A^	op} & = mathbf{U} Sigma mathbf{V^	op} mathbf{V} Sigma^	op mathbf{U^	op} \ & = mathbf{U} Sigma^2 mathbf{U^	op} 	ag{11} \ mathbf{A^	op} mathbf{A} & = mathbf{V} Sigma^	op mathbf{U^	op} mathbf{U} Sigma mathbf{V^	op} \ & = mathbf{V} Sigma^2 mathbf{V^	op} 	ag{12}  end{align}

由實對稱矩陣必可正交對角化, 即

mathbf{A} = mathbf{Q} mathbf{Lambda} mathbf{Q^	op} 	ag{13}

其中矩陣 mathbf{Q} 為酉矩陣, 即滿足 mathbf{Q^	op} = mathbf{Q^{-1}} . 矩陣 mathbf{Lambda} = mathbf{diag(lambda_1, cdots, lambda_n)} 為矩陣 mathbf{A} 的特徵值所組成的對角矩陣. 而矩陣 mathbf{A} mathbf{A^	op}, mathbf{A^	op} mathbf{A} 是實對稱矩陣, 矩陣 mathbf{U}, mathbf{V} 是酉矩陣, 矩陣 mathbf{Sigma^2} 是對角矩陣, 所以由(11), (12), (13), 我們對矩陣 mathbf{A} mathbf{A^	op}, mathbf{A^	op} mathbf{A} 進行正交對角化, 即可得到矩陣 mathbf{U}, mathbf{V} . 再由

egin{align} ecause  & mathbf{A} = mathbf{U} mathbf{Sigma} mathbf{V^	op} \ & mathbf{A} mathbf{V} = mathbf{U} mathbf{Sigma} \ & mathbf{A} upsilon_i = sigma_i mu_i \ \ 	herefore  & sigma_{i} = frac{mathbf{A} v_i}{mu_i} 	ag{14} end{align}

由(14)我們便可得到矩陣 mathbf{Sigma} . 由(11), (12), (13), (14)即可得完整的SVD分解.

SVD的具體應用

除了前文所述, SVD揭示了矩陣進行線性變換時最本質的變換, 使我們能了解矩陣的具體操作, 這是SVD最直接的應用. 除此之外, SVD還有許多其他方面的應用, 下面舉例說明.

壓縮

許多存儲在計算機中的數據都是以矩陣的形式存在的, 進行合理的矩陣壓縮能把存儲矩陣所佔的空間縮減下來. 例如圖像, 事實上一個灰度圖像就是一個矩陣, 矩陣中的每個元素就是灰度圖像的像素值. 如果我們有灰度圖 mathbf{A_{m 	imes n}} , 由(6)我們有

egin{align} mathbf{A_{m 	imes n}} & = mathbf{U_{m 	imes m}} cdot mathbf{Sigma_{m 	imes n}} cdot mathbf{V^	op_{n 	imes n}} \ & = sum_{i=1}^{n}{sigma_i mu_i upsilon_i^	op} 	ag{15} end{align}

奇異值 sigma_i, i = 1, cdots, n 有一定的大小關係, 我們不妨設 sigma_1 geq sigma_2 geq cdots geq sigma_n , 取前 k 個分量, 則由(15)可知, 若一個像素為1位元組, 原始圖像需 m 	imes n 位元組的存儲空間, 而使用SVD分解後只需 k 	imes (1 + m + n) 位元組的存儲空間, 以此達到壓縮圖像(矩陣)的目的.

降維

數據降維在機器學習, 數據挖掘等領域是一個重要的技術, 通過數據降維可以挖掘數據的關鍵信息, 降低運算的成本. 使用SVD進行降維的核心思想是, 只保留奇異值最大的若干個維度的信息. 由(7), (8)我們有

egin{align}  當 m & geq n時, \ mathbf{A} mathbf{vec{x}} & = [mu_1, cdots, mu_m] cdot egin{bmatrix} sigma_1 & cdots & 0 \ 0 & ddots & 0 \ vdots & 0 & sigma_n \ 0 & 0 & 0 end{bmatrix} cdot egin{bmatrix} mathbf{upsilon_1^	op} \ vdots \ mathbf{upsilon_n^	op} end{bmatrix} cdot mathbf{vec{x}} \  & =  [mu_1, cdots, mu_m] cdot egin{bmatrix} sigma_1 & cdots & 0 \ 0 & ddots & 0 \ vdots & 0 & sigma_n \ 0 & 0 & 0 end{bmatrix} cdot egin{bmatrix} mathbf{upsilon_1^	op} \ vdots \ mathbf{upsilon_n^	op} end{bmatrix} cdot [mathbf{upsilon_1}, cdots, mathbf{upsilon_n}] cdot egin{bmatrix} mathbf{upsilon_1^	op} mathbf{vec{x}} \ vdots \ mathbf{upsilon_n^	op} mathbf{vec{x}} end{bmatrix} \  &= [sigma_1 mu_1 , cdots, sigma_n mu_n] cdot egin{bmatrix} mathbf{upsilon_1^	op} mathbf{vec{x}} \ vdots \ mathbf{upsilon_n^	op} mathbf{vec{x}} end{bmatrix} 	ag{16} end{align}

只選取若干 sigma 即可達到降維的效果.

總結

本文從SVD的數學原理出發, 推導出其一般形式, 並在此基礎上給出了幾何解釋. 然後介紹了SVD的求解方法和具體應用. SVD是一個非常優雅且實用的方法, 其應用場景頗多, 是構成許多現代計算系統的核心部件.


引用

[1] Austin, D. (2019).We Recommend a Singular Value Decomposition. [online] Ams.org. Available at: ams.org/publicoutreach/ [Accessed 27 Feb. 2019].

[2] Wikipedia contributors. "酉矩陣."維基百科, 自由的百科全書. 維基百科, 自由的百科全書, 15 Nov. 2018. Web. 15 Nov. 2018.?zh.wikipedia.org/w/inde?.

[3] Cnblogs.com. (2017).奇異值分解(SVD)原理與在降維中的應用 - 劉建平Pinard - 博客園. [online] Available at: cnblogs.com/pinard/p/62 [Accessed 4 Mar. 2019].

[4] 線代啟示錄. (2011). 實對稱矩陣可正交對角化的證明. [online] Available at: ccjou.wordpress.com/201 [Accessed 4 Mar. 2019].


推薦閱讀:
相关文章