この記事では, 行列の特異値分解(SVD:singular value decomposition)の数学的な理論や証明について詳しく解説します。
pythonによる計算方法などは, 以下の記事で解説しています.
前置き(スペクトル分解)
特異値分解は, 最近流行りの機械学習(主成分分析)などで用いられる行列の計算です. 実はこれはスペクトル分解というものの一般化になっています. 数学が専門の方にとってはこちらの方が馴染み深いかもしれません.
スペクトル分解は対角化に対応している.
また, \(A\) が対称行列であるこの場合は, 直交行列による対角化に対応しています. \(\boldsymbol{v}_1, \cdots , \boldsymbol{v}_n\) は正規直交系ですから, \(P=\begin{pmatrix} \boldsymbol{v}_1 &\cdots & \boldsymbol{v}_n \end{pmatrix}\) とおけば, \(P\) は直交行列であり, つまり \(P^TP=PP^T=E\) を満たし, \begin{align}&A=P \begin{pmatrix}\lambda_1 && \\ &\ddots&\\ &&\lambda_n\end{pmatrix}P^T\\ &\text{つまり}\quad P^{-1}AP=\begin{pmatrix}\lambda_1 && \\ &\ddots&\\ &&\lambda_n\end{pmatrix}\end{align} とも書けます.
補足. 一般にスペクトル分解は正規行列に対して定めることができます. 正規行列とは \(A A^* =A^* A\) となる行列のことです( \(A^*\) は随伴行列). また, \[\displaystyle P_{\lambda}=\sum_{\lambda_i=\lambda}\boldsymbol{v}_i \, \boldsymbol{v}_i^T\] は固有値 \(\lambda\) の固有空間への射影作用素になっています. ( \(\sum_{\lambda_i=\lambda}\) は \(\lambda_i=\lambda\) となる番号 \(i\) についての和を表す. ) さらに関数解析を学ぶと, 行列だけでなく, ヒルベルト空間上の自己共役作用素などに対してもスペクトル分解を考えたりします.
この考え方を任意の \(n\times m\) 行列に一般化したものが特異値分解です.
特異値・特異ベクトルの定義と基本性質
以下, 行列の成分は全て実数であると仮定します.
次の命題のように, \(A\) の特異値, その右特異ベクトル, 左特異ベクトルは \(A^T A\) , \(A A^T\) の固有値・固有ベクトルと対応します.
①対称行列であることは自明である. \(A^T A \, \boldsymbol{v}=\lambda\, \boldsymbol{v}\) ( \(\boldsymbol{v}\neq 0\) )のとき, \[\begin{aligned} \boldsymbol{v}^T A^T A \, \boldsymbol{v}=\lambda \boldsymbol{v}^T\boldsymbol{v}=\lambda |\boldsymbol{v}|^2. \end{aligned}\] また \[\begin{aligned} \boldsymbol{v}^T A^T A \, \boldsymbol{v}= (A\boldsymbol{v}, A\boldsymbol{v})=|A\boldsymbol{v}|^2. \end{aligned}\] したがって, \(\lambda \geq 0\) である. \(A A^T\) についても同様.
②( \(\Rightarrow\) について.)
\(\boldsymbol{v}\) が特異値 \(\sigma\) の右特異ベクトルであるとき, 特異ベクトルの定義から, ベクトル \(\boldsymbol{u}\) が存在して, \[A \boldsymbol{v} =\sigma \, \boldsymbol{u}, \quad A^T \boldsymbol{u} =\sigma \, \boldsymbol{v}\] と書ける. 同様に, \(\boldsymbol{u}\) が左特異ベクトルであるときも, ベクトル \(\boldsymbol{v}\) が存在して, 同じ式が成り立つ. 両辺にそれぞれ \(A^T, A\) をかければ \[\begin{aligned} A^T A \boldsymbol{v} =\sigma^2 \boldsymbol{v}, \quad A A^T \boldsymbol{u} =\sigma^2 \boldsymbol{u}. \end{aligned}\]
( \(\Leftarrow\) について.)
\(A^T A \, \boldsymbol{v}=\sigma^2\, \boldsymbol{v}\) のとき, \[\begin{aligned} A A^T A \, \boldsymbol{v}= \sigma^2 \, A \boldsymbol{v}. \end{aligned}\] \(\boldsymbol{u}=\sigma^{-1} A \boldsymbol{v}\) とおくと, \[\begin{aligned} &\sigma\, A A^T \boldsymbol{u} = \sigma^3 \, \boldsymbol{u}\\ & A A^T \boldsymbol{u} = \sigma^2\, \boldsymbol{u} \end{aligned}\] となる. よって, \(A A^T\) の固有値は \(A^T A\) の固有値でもある. 同様にして, \(A^T A\) の固有値は \(A A^T\) の固有値でもあるので, 両者の固有値は一致する. また \[\begin{aligned} A^T \boldsymbol{u}=\sigma^{-1} A^{T}A \boldsymbol{v}=\sigma \boldsymbol{v} \end{aligned}\] より, \(\boldsymbol{u}^T\, A =\sigma\, \boldsymbol{v}^T\) をみたす. したがって \(\boldsymbol{v}\) は \(A\) の右特異ベクトルになっている. 同様にして, \(A A^T \, \boldsymbol{u}=\sigma^2\, \boldsymbol{u}\) のとき, \(\boldsymbol{u}\) は \(A\) の左特異ベクトルになる.
注意. 細かい補足になりますが, \[\begin{aligned} &A^T A\, \boldsymbol{v} =\sigma^2 \, \boldsymbol{v}, \quad A A^T \, \boldsymbol{u} =\sigma^2 \, \boldsymbol{u}\\ &\text{ならば} \quad A \boldsymbol{v} =\sigma \, \boldsymbol{u}, \quad \boldsymbol{u}^T\, A =\sigma \, \boldsymbol{v}^T \end{aligned}\] は一般には成り立たないことに注意してください. 仮定部分は \(\boldsymbol{v}, \boldsymbol{u}\) の規格化に触れていないですし, 固有値が重複する場合には, 線形独立な固有ベクトルが複数存在するので, 必ずしも結論部分の関係式が \(\boldsymbol{v}\) と \(\boldsymbol{u}\) の間に成り立つとは限りません. \(A \boldsymbol{v} =\sigma \, \boldsymbol{u}, \; \boldsymbol{u}^T\, A =\sigma \, \boldsymbol{v}^T\) という条件は \(\boldsymbol{v}, \boldsymbol{u}\) の規格化の情報なども含めたより 強い条件になっています.
\(\boldsymbol{v}\) と \(\boldsymbol{u}\) の規格化や直交性の関係については, 次の性質が成り立ちます.
特異ベクトルは対称行列 \(A A^T\) , \(A^T A\) における固有ベクトルだから, 固有値が異なれば直交する. したがって, \(\sigma_i \neq \sigma_j\) ならば \((\boldsymbol{v}_i, \boldsymbol{v}_j)=(\boldsymbol{u}_i, \boldsymbol{u}_j)=0\) となる. 一方, \(\sigma_i =\sigma_j\) のとき, \[\begin{aligned} &(\boldsymbol{v}_i, \boldsymbol{v}_j)= \boldsymbol{v}_i^T \boldsymbol{v}_j =(\sigma_i^{-1} \boldsymbol{u}_i^T A) (\sigma_j^{-1}A^T \boldsymbol{u}_j)\\ &=\sigma_i^{-1} \sigma_j^{-1} \boldsymbol{u}_i^T A A^T \boldsymbol{u}_j =\sigma_j^{-2} \boldsymbol{u}_i^T (\sigma_j^2 \boldsymbol{u}_j)=(\boldsymbol{u}_i, \boldsymbol{u}_j). \end{aligned}\] ここで, 4つ目の等式では上の命題から \(A A^T \, \boldsymbol{u}_j =\sigma_j^2 \, \boldsymbol{u}_j\) を用いた.
注意. この命題から右特異ベクトルの集合 \(\{\boldsymbol{v}_i\}\) と 左特異ベクトルの集合 \(\{\boldsymbol{u}_i\}\) は \(A \boldsymbol{v}_i =\sigma_i \, \boldsymbol{u}_i, \boldsymbol{u}_i^T\, A =\sigma_i \, \boldsymbol{v}_i^T\) の関係を満たしながら, それぞれ, 正規直交系になるようにとることができる.
特異値分解
以下, 行列 \(A\) に対し,
\(r=\) 線形独立な右(または左)特異ベクトルの最大個数
とします. つまり上の命題から,
\(r=A^TA\) の 0 でない固有値の数(重複を含める)
としても同じです. 実際には \(r= \mathop{\mathrm{rank}}A\) となりますが, 証明については後述します.
※文献によっては, \(\sigma_1 \geq \sigma_2 \geq \cdots \geq \sigma_r\) を仮定することがあります.
※ \(U\), \(V\) は直交行列になっています.
\(A\) を \(n\times m\) 行列とする. \(A^T A\) は \(m\) 次対称行列だから, 固有ベクトルで \(\mathbb{R}^m\) 上の正規直交基底を作ることができる. \(( \boldsymbol{v}_1, \ldots, \boldsymbol{v}_r )\) は \(A^T A\) の固有値が \(0\) でない固有空間全体を張るから, ここに, 固有値が \(0\) であるベクトルを付け加えて, \(\mathbb{R}^m\) 上の正規直交基底 \[( \boldsymbol{v}_1, \ldots, \boldsymbol{v}_r, \boldsymbol{v}_{r+1}, \ldots, \boldsymbol{v}_m )\] を得ることができる. \(i\geq r+1\) に対して, \(\boldsymbol{v}_i\) は \(A^T A\) の固有値 \(0\) の固有ベクトルだから \[\begin{aligned} &A^T A \boldsymbol{v}_i=\boldsymbol{0},\\ &\boldsymbol{v}_i^T A^T A \boldsymbol{v}_i=0, \\ &(A\boldsymbol{v}_i, A \boldsymbol{v}_i)=0,\\ &A \boldsymbol{v}_i=\boldsymbol{0}\quad (i\geq r+1). \end{aligned}\] また \(\displaystyle E=\sum_{i=1}^m \boldsymbol{v}_i \boldsymbol{v}_i^T\) だから, これに \(A\) を掛けると, \(A \boldsymbol{v}_i=\boldsymbol{0}\quad (i\geq r+1)\) から \[A= \sigma_1 \boldsymbol{u}_1 \boldsymbol{v}_1^T+\sigma_2 \boldsymbol{u}_2 \boldsymbol{v}_2^T+\cdots +\sigma_r \boldsymbol{u}_r \boldsymbol{v}_r^T\] となる.
特異値分解のイメージ
\(A\) が \(n\times m\) 行列のとき, \(A\) は \(\mathbb{R}^m\) から \(\mathbb{R}^n\) への線形写像を与えます. \(A\) による線形写像は, \(\mathbb{R}^m\) のベクトルを, 各右特異ベクトル \(\boldsymbol{v}_i\) の方向に射影した成分を考え, それを \(\sigma_i \boldsymbol{u}_i\) に移して和をとったものに一致します. \(A\) をこの考え方に書き換えたものが特異値分解です.
\(A\) の列の数を \(m\) とし, \(A\) の列ベクトルを \(\boldsymbol{a}_1, \ldots , \boldsymbol{a}_m\) とする. つまり \[A=\begin{pmatrix}\boldsymbol{a}_1 &\cdots & \boldsymbol{a}_m\end{pmatrix}.\] ここで \(\boldsymbol{c}=\begin{pmatrix}c_1\\ \vdots \\ c_m\end{pmatrix}\) を定数ベクトルとし, 上の定理(特異値分解)と同じ記号を用いると \[\begin{aligned} &\sum_{k=1}^m c_k \boldsymbol{a}_k=A \boldsymbol{c}\\ &=\sum_{i=1}^r \sigma_i \boldsymbol{u}_i \boldsymbol{v}_i^T \boldsymbol{c}\\ &=\sum_{i=1}^r \sigma_i (\boldsymbol{v}_i, \boldsymbol{c}) \, \boldsymbol{u}_i. \qquad \cdots (\mbox{ア}) \end{aligned}\] よって, \(\boldsymbol{a}_1, \ldots , \boldsymbol{a}_m\) の任意の線形結合は \(r\) 個のベクトル \(\boldsymbol{u}_1, \ldots , \boldsymbol{u}_r\) の線形結合で書ける. よって, \(\mathop{\mathrm{rank}}A\) は \(A\) の線形独立な列ベクトルの最大個数であるから, \[\mathop{\mathrm{rank}}A\leq r.\] 一方, \(\boldsymbol{u}_1, \ldots , \boldsymbol{u}_r\) の任意の線形結合 \(\displaystyle\sum_{i=1}^r d_i \boldsymbol{u}_i\) ( \(d_i\) は定数)は \(\boldsymbol{a}_1, \ldots , \boldsymbol{a}_m\) の線形結合で書ける. 実際, \(c_1, \ldots , c_m\) についての連立方程式 \[V^T \boldsymbol{c}=\begin{pmatrix}\sigma_1^{-1}d_1 \\ \vdots \\ \sigma_r^{-1}d_r\end{pmatrix}, \quad V=\begin{pmatrix}\boldsymbol{v}_1 &\cdots & \boldsymbol{v}_r\end{pmatrix}\] は, \(\boldsymbol{v}_1, \ldots , \boldsymbol{v}_r\) が線形独立だから解をもち, (ア) より, この解を用いれば \(\displaystyle\sum_{k=1}^m c_k \boldsymbol{a}_k=\sum_{i=1}^r d_i \boldsymbol{u}_i\) となることが分かる.
\(\boldsymbol{u}_1, \ldots , \boldsymbol{u}_r\) は線形独立であり, \(r\) 次元空間を張るから, 以上より \(\mathop{\mathrm{rank}}A= r\) となる.
参考文献
・線形代数セミナー 共立出版 金谷健一(著)
内容の重い数学の本ではなく, 機械学習・情報処理系の専門家が書いた本で分かりやすいです. この記事では細かい数学的な部分についても補足しておきました.
コメント