行列の特異値分解
📂行列代数行列の特異値分解
概要
行列を常に固有値対角化を通じて分解できたらいいと思うが、残念ながら提供される行列が正方行列でなければならないという制限がある。非正方行列である行列の分解を拡張しようとする。
ビルドアップ
二つの自然数 m>nについて、行列 A∈Cm×nの係数がrankA=nで与えられるとする。それならば、dimC(A)=dimC(AT)=nの正規直交ベクトルv1,⋯,vn∈C(A)とu1,⋯,un∈C(AT)を考えることができる。
固有値の幾何学的意味を考えるときと同様に
Avi=σiui
を満たすσi>0が存在すると仮定する。するとAはviの方向をuiと一致させる線形変換であり、σi>0はその大きさを合わせるものと見ることができる。このようなσiは固有値ではなく、Aの特異値と定義されるが、残念ながらその意味は特異値分解とは全く関係がない。ここで固有値の議論と異なるのはA∈Cm×n、つまりvi∈Cnであり、ui∈Cmであるため、Aがベクトルの次元も変えるということである。行列Aについて整理して、A=σiuivi∗であり、両辺の次元がm×n=(m×1)×(1×n)になることを確認してみよう。一方、固有ベクトルとは異なり、左右が区別されるため、uiは左特異ベクトル、viは右特異ベクトルと定義されることに注意しよう。今Avi=σiuiを1≤i≤nに対して展開して書くと
A[v1v2⋯vn]=[u1u2⋯un]σ10⋮00σ2⋱⋯⋯⋱⋱00⋮0σm
簡潔に表現するため、以下のように表すことにしよう。
V:=[v1v2⋯vn]∈Cn×nU:=[u1u2⋯un]∈Cm×nΣ:=diag(σ1,σ2,⋯,σn)
便宜上、σi≥σj>0としよう。整理すると
AV=UΣ
であり、VV∗=V∗V=Iであるため
A=UΣV∗
もちろんU∈ Cm×nであり、Uがユニタリ行列ではないが、正規直交性を持つため、U∗U=Inであり、
A∗A====(UΣV∗)∗(UΣV∗)VΣU∗UΣV∗VΣ2V∗VΣ2V−1
A=Sλ10⋮00λ2⋱⋯⋯⋱⋱00⋮0λmS−1
これは正方行列 A∗A∈Cm×mに対して固有値対角化を完了した結果と見ることができる。σi2はA∗Aの固有値であり、viがσi2に対応する固有ベクトルになる。これで数値計算のために、このプロセスを逆にたどってみよう。
アルゴリズム
行列 A∈Cm×n(m≥n)について、rankA=nであるとする。
ステップ 1.
A∗Aの固有値σ1≥σ2≥⋯≥σn>0を見つける。任意のx=0に対して
x∗A∗Ax=∣∣Ax∣∣2>0
つまりA∗Aが正定値であるため、σi>0が保証される。
ステップ 2.
見つかった固有値に対応する固有ベクトルとして正規直交ベクトルV=[v1v2⋯vn]を見つける。
ステップ 3.
ui=σi1Aviを通じてU=[u1u2⋯un]を見つける。
縮小特異値分解と全特異値分解
A=UΣV∗を満たす3つの行列にAを分割することを縮小reduced特異値分解(rSVD)と呼ぶ。
これを全体full特異値分解(fSVD)と区別するために、UやΣのような表記が使われた。全特異値分解のアイデアは、単に縮小特異値分解を少し拡張したものに過ぎない。行列
U:=[Uun+1⋯um]∈Cm×m
がユニタリ行列になるようなun+1,⋯,umを見つけて、Σの下部に0を追加する形で行列Σ:=[ΣO]
を構成し、A=UΣV∗の形で分解することである。
fSVDは理論的により堅牢であり、rSVDは実際の計算により有利であるだろう。fSVDであれrSVDであれ、SVDを行うということは、UまたはU、ΣまたはΣ、Vを求めるということだ。
参照