seegongsik
工業数学 わかりやすく

特異値分解 SVD わかりやすく

どんな行列も回転・軸の伸ばし・回転の三段階、単位円は楕円になり特異値がその半径だ

どれほどごちゃごちゃした行列も、わかってみれば三つのすっきりした動作にすぎません。まず一回回し (Vᵀ)、二つの軸の向きにそれぞれ別々に伸ばし (Σ)、もう一回回します (U)。この行列に単位円を丸ごと入れると、きれいな楕円が一つ出てきます。その楕円の半軸の長さこそが特異値です。そして、いちばん大きい特異値一つが、その楕円の形をほとんどすべて受け持ちます。画像の圧縮も PCA も、まさにこの一つの事実の上に立っています。最初の図で段階を一つずつ踏みながら、円がどうやって楕円になるのかをたどります。

ボタンで段階を一つずつ進めます。0 段階はただの単位円で、その上に右特異ベクトル v1, v2 が表示されています。1 段階の Vᵀ は円を回しますが、円は円なので形は変わりません。そのかわり v1, v2 がちょうど x, y 軸の上に来て座ります。2 段階の Σ はその二つの軸の向きにだけ別々に伸ばし、x 軸に σ1、y 軸に σ2 のきれいな楕円をつくります。3 段階の U はその楕円をもう一回回して傾けた最後の楕円、つまり行列が単位円を送った姿をつくります。その楕円の二つの半軸が σ1·u1, σ2·u2 です。回転・伸ばし・回転、この三つの動作が、どんな行列でもつくり出すのです。

今度は回転をすべて取り除いて、伸ばしだけを残します (U = V = I)。スライダー σ1 は横軸の向きに、σ2 は縦軸の向きに、点線の単位円をどれだけ引っぱるかを決め、二つの値がそのまま金色の楕円の半軸の長さになります。特異値とは結局、その軸が何倍に伸びるかなのです。σ1 を大きくすると楕円は横に長くなり、σ2 を小さくすると縦につぶれます。片方のスライダーを 0 近くまで下げると、楕円はその軸の向きに完全につぶれて一本の線分になります。その瞬間、行列の階数が 2 から 1 に落ち、楕円が赤く変わって警告が出ます。

いよいよ三つの部品を自分の手に取ります。スライダーで最初の回転角 (V)、二つの伸ばしの倍率 (σ1, σ2)、最後の回転角 (U) を決めると、それがそのまま A = U Σ Vᵀ になります。舞台には格子がどう変形するかと、単位円がどの金色の楕円へ行くかがいっしょに描かれ、下の数字の欄にはその行列の四つの成分が表示されます。角度と倍率をあれこれ回してみると、どれほどでたらめに見える行列の値でも、結局すっきりした回転二回と軸の伸ばし一回から生まれることがわかります。どんな 2×2 行列も、回転 → 軸の伸ばし → 回転というこの分解からは逃れられません。

この分解には、向きが二組あります。入るほうの v1, v2 (右特異ベクトル)と、出るほうの u1, u2 (左特異ベクトル)です。トグルで組を選べます。v1 を行列に入れるとちょうど σ1·u1 が出てきて、v2 を入れると σ2·u2 が出てきます。つまり入力の向きは出力の向きに変わり、その長さが特異値の分だけ掛けられるのです。点線の単位円の上の青い矢印が入力 v、金色の楕円の上の矢印がその出力で、二つのあいだを薄い点線が結んでいます。V の向きが入って U の向きが出てきて、特異値がその大きさを決める。これが SVD の一行の要約です。

最後に、楕円の形が本当に大きな特異値一つにほとんど収まるのかを見ます。トグルの「ランク 2」は完全な A、つまり傾いた楕円の全体です。「ランク 1」に切り替えると σ1·u1·v1ᵀ の一切れだけが残り、楕円はいちばん長い長軸の上にすっかり降りて、長さ σ1 の線分になります。小さい σ2 の一切れを捨てたのです。下には、その大きな一切れが抱えるエネルギーの割合 σ1²/(σ1²+σ2²) がパーセントで表示されます。たいていは、この一切れだけで形の大部分が生き残ります。いちばん大きい特異値だけを残しても形がほとんど保たれること、これが圧縮と PCA の核心の発想です。

実際に使うSVD は、あらゆる行列を A = U Σ Vᵀ、つまり回転 → 軸の伸ばし → 回転に分けます。単位円を入れると楕円が出てきて、その半軸の長さが特異値 σ1 ≥ σ2 です。Σ は各軸を σ だけ伸ばす純粋な伸ばしで、U と V は純粋な回転です。右特異ベクトルは入力の向き、左特異ベクトルは出力の向きなので、A·vi = σi·ui が成り立ちます。σ が 0 ならその軸が死んで階数が落ち、いちばん大きい σ だけを残す低階数近似が形の大部分を生かします。画像の圧縮、PCA、推薦システム、雑音の除去は、どれもこの一つから生まれます。でたらめに見えるデータも、結局は回転・伸ばし・回転なのです。
← 工業数学 わかりやすく
このページがお役に立ったなら支援する