LoginSignup
1
0

特異値分解と低ランク近似

Last updated at Posted at 2023-06-06

テンソルネットワークを学ぶ上で基本となるのが特異値分解です。
この記事では特異値分解(SVD)とその応用である低ランク近似(LRA)について、自分用に簡単にまとめておきます。

特異値分解 (Singular Value Decomposition)

特異値分解(SVD)とは、任意のm行n列の行列M(rank R)を次のように3つの行列に分解することです。

    M = UΣV^{\dagger}

Vはm行m列、Uはn行n列のユニタリ行列です。またΣはm行n列の対角行列です。Σの対角成分は行列Mの特異値と呼び、R個の非負の実数が並んだ対角行列です。
上式を成分表示でも書いておきます。(特異値は小文字のσを使います)

    M_{ij} = \sum_{k=1}^{R}U_{ik}\sigma_{k}V_{jk}^{*}

任意の行列Mが一意なΣを用いて分解できるのが味噌です。(UとVは一意でない)

低ランク近似 (Low-Rank Approximation)

低ランク近似(LRA)は、先ほどの行列MをSVDした後に行います。例えば行列MにSVDを施し、特異値σ(R個)を大きな値から順に得たとします。小さな特異値の値がほとんど0である時、それを捨ててしまうことを低ランク近似と言います。あるS番目からR番目まで(S<R)特異値を捨てるとして、成分表示で上記の操作を書くと、

M=\sum_{k=1}^{R}U_{ik}\sigma_{k}V_{jk}^{*}\simeq\sum_{k=1}^{S}U_{ik}\sigma_{k}V_{jk}^{*}=\widetilde{M}

となります。近似の際に元のrank Rからrank Sへ落ちるのでLRAと呼ぶわけです。
近似された行列$\widetilde{M}$と元の行列$M$の間にどの程度エラーがあるのか、全成分の絶対二乗誤差を計算することで評価してみます。

\begin{align*}
\sum_{i,j}|M_{ij} - \widetilde{M_{ij}}|^2 &= \sum_{i,j}(M_{ij} - \widetilde{M_{ij}})(M_{ij} - \widetilde{M_{ij}})^{*} \\
&= \sum_{i,j}(\sum_{k=S+1}^{R}U_{ik}\sigma_{k}V_{jk}^{*})(\sum_{k'=S+1}^{R}U_{ik'}\sigma_{k'}V_{jk'}^{*})^{*} \\
&= \sum_{k=S+1}^{R}\sum_{k'=S+1}^{R}\sigma_{k}\sigma_{k'}\sum_{i}U_{ik}U_{ik'}^
{*}\sum_{j}V_{jk}^{*}V_{jk'} \\
&= \sum_{k=S+1}^{R}\sum_{k'=S+1}^{R}\sigma_{k}\sigma_{k'}\delta_{kk'}\delta_{kk'} \\
&= \sum_{k=S+1}^{R}\sigma_{k}^2
\end{align*}

よって「全成分の絶対二乗誤差は、捨てた特異値の2乗和と等しい」ことが分かります。(Eckart-Youngの定理を参照)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0