特異値分解の定義,性質,具体例

行列の特異値分解(singular value decomposition, SVD)について,定義・性質・具体例を整理しました。

特異値分解とは

特異値分解とは,m×nm\times n 行列 AA を A=UΣVA=U\Sigma Vと分解することです。ただし,

  • UU は m×mm\times m の直交行列(各列が互いに直交する行列 →直交行列の定義と性質)
  • VV は n×nn\times n の直交行列
  • Σ\Sigma は図のような行列 特異値分解 つまり「非対角成分は 00,対角成分は非負で大きさの順に並んだ行列。

です。任意の行列はこのように分解できます。また,Σ\Sigma の対角成分で 00 でないもの(00 を含めることもある)を特異値と言います。

特異値分解の具体例

A=(22221−11−1−11−11)A=\begin{pmatrix}2&2&2&2\\1&-1&1&-1\\-1&1&-1&1\end{pmatrix} の特異値分解(の1つ)は,

A=(100012120−1212)(4000022000000)(1212121212−1212−121212−12−1212−12−1212)A= \begin{pmatrix}1&0&0\\0&\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\\0&-\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{pmatrix}\begin{pmatrix}4&0&0&0\\0&2\sqrt{2}&0&0\\0&0&0&0\end{pmatrix}\begin{pmatrix}\frac{1}{2}&\frac{1}{2}&\frac{1}{2}&\frac{1}{2}\\\frac{1}{2}&-\frac{1}{2}&\frac{1}{2}&-\frac{1}{2}\\\frac{1}{2}&\frac{1}{2}&-\frac{1}{2}&-\frac{1}{2}\\\frac{1}{2}&-\frac{1}{2}&-\frac{1}{2}&\frac{1}{2}\end{pmatrix}

です。よって,AA の特異値は,44 と 222\sqrt{2} です。

なお,上の等式が正しいこと,および右辺の1つ目と3つ目の行列が直交行列であることは簡単な計算で確認できます。

特異値分解の性質

  • AA が与えられたとき,特異値を定める行列 Σ\Sigma は一意に決まりますが,直交行列 U,VU,V は一意に定まるとは限りません。

  • 行列の(00 でない)特異値の数は,その行列のランクと一致します。→行列のランクの意味(8通りの同値な定義)

  • 「行列の特異値の二乗和」は「その行列の全成分の二乗和」と等しいです。さきほどの具体例ではどちらも24になっています。この値の平方根を行列のフロベニウスノルムと言います。→行列のフロベニウスノルムとその性質)

固有値分解と特異値分解

  • 行列の固有値分解は正方行列に対してのみ定義されますが,特異値分解は正方行列でなくてもできます。

  • AA が半正定値対称行列のとき,AA の固有値と特異値は一致します。対称行列は直交行列で対角化できるからです。→対称行列の固有値と固有ベクトルの性質の証明

  • 「A⊤AA^{\top}A の 00 でない固有値の正の平方根」は AA の特異値です。理由は,A=UΣVA=U\Sigma V と特異値分解できるとき A⊤A=V⊤(Σ⊤Σ)VA^{\top}A=V^{\top}(\Sigma^{\top}\Sigma) V と固有値分解できるからです。同様に,AA⊤AA^{\top} の 00 でない固有値の正の平方根も AA の特異値です。後ほどもう少し詳しく説明します。

特異値分解の計算方法

A⊤AA^{\top}A の固有値分解と AA⊤AA^{\top} の固有値分解ができれば,AA の特異値分解 A=UΣVA=U\Sigma V が計算できる。

説明

任意の行列が特異値分解できることは認める。つまり,A=UΣVA=U\Sigma V と分解できるとして,U,Σ,VU,\Sigma,V の計算方法の例を示す。

A⊤A=(UΣV)⊤(UΣV)=V⊤Σ⊤ΣVA^{\top}A=(U\Sigma V)^{\top}(U\Sigma V)=V^{\top}\Sigma^{\top}\Sigma V

より,(A⊤A)V⊤=V⊤(Σ⊤Σ)(A^{\top}A)V^{\top}=V^{\top}(\Sigma^{\top}\Sigma)

これは,VV の ii 行目を v→i\overrightarrow{v}_i とおくと、 (A⊤A)v→i=σi2v→i(A^{\top}A)\overrightarrow{v}_i=\sigma_i^2\overrightarrow{v}_i と書ける。

つまり,対称行列 A⊤AA^{\top}A を直交行列で対角化したときの直交行列が V⊤V^{\top} で対角行列が Σ⊤Σ\Sigma^{\top}\Sigma となる。つまり,特異値と VV が分かる。ちなみに viv_i のことを右特異ベクトルと呼ぶ。

同様に,(AA⊤)U=U(ΣΣ⊤)(AA^{\top})U=U(\Sigma\Sigma^{\top}) より対称行列 AA⊤AA^{\top} を直交行列で対角化したときの直交行列が UU で対角行列が ΣΣ⊤\Sigma\Sigma^{\top} となる。つまり,特異値と UU が分かる。ちなみに UU の列ベクトルのことを左特異ベクトルと呼ぶ。

特異値分解は,行列の低ランク近似や擬似逆行列の計算などに使われます。