行列分解とSVD — どんな変換も「回転・伸縮・回転」

第2章で「行列=空間の変換」と見ました。特異値分解(SVD)はその到達点 — どんな行列も、回転 → 軸に沿った伸縮 → 回転、というたった3つの単純な部品に分解できるという定理です。分解して出てくる「特異値」が、圧縮・推薦・ノイズ除去・LoRA まで、現代AIの至るところで働いています。

1. SVDの主張 — 変換を3つの部品にばらす

2×2行列によるどんな変換も、一見すると「回転しながら歪む」複雑な動きに見えます。しかし特異値分解は、それが必ず VT(回転)→ Σ(軸に沿った伸縮)→ U(回転) の3段階の合成で書けることを保証します。

A = U Σ VT U, V は直交行列(回転・鏡映)、Σ = diag(σ1, σ2, …)、σ1 ≥ σ2 ≥ … ≥ 0 を特異値と呼ぶ。m×n のどんな行列にも存在する

下のデモで行列 A の4つの成分を自由に動かし、「ステップ実行」で3段階を1つずつ確かめてください。どんな値にしても、格子の変形が「回転・伸縮・回転」の積み重ねとして再現されます。

どんな変換も「回転・伸縮・回転」— A = UΣVT を目で見る
上部に3つの部品の行列値を表示(オレンジ=いま適用中、緑=適用済み)。適用順は右から、① VT の回転 → ② Σ の軸伸縮 → ③ U の回転。行列スライダーをどう動かしても、この3段構成が崩れないことを確かめてください。det(A) が負のときは鏡映(反転)が入り、Σ の第2成分が負として表示されます。
POINT — 固有値分解との違い 第6章の固有値分解 A = PDP−1 は「正方行列で、対角化可能なもの」にしか使えず、固有ベクトルは一般に直交しません。SVD は長方形でもランク落ちでも、どんな行列にも必ず存在し、U と V の軸は常に直交します。対称行列(例: 共分散行列)では両者は本質的に一致します — これが PCA と SVD がつながる理由です。

2. 特異値は「楕円の半径」

特異値の幾何的な正体はシンプルです。単位円を A で写すと必ず楕円になり、その長半径が σ1、短半径が σ2。つまり σ1 は「A が空間を最も強く引き伸ばす倍率」(max ‖Ax‖/‖x‖、作用素ノルム)、σ2 は最も弱い方向の倍率です。

単位円の像 — 楕円の半径が σ₁, σ₂ に一致する
破線の円=単位円、水色=その像(楕円)。白い点が円上を回り、オレンジの点がその行き先です。オレンジ矢印=長軸 σ₁u₁、緑矢印=短軸 σ₂u₂、紫の破線=その元になる入力方向 v₁, v₂。「σ₂→0 の行列にする」を押すと楕円が線分に潰れ、右のバーで σ₂ = 0、つまり det = σ₁σ₂ = 0(第5章の「つぶれる変換は戻せない」)になるのが分かります。
σ1 σ2 = |det A| 面積の拡大率(det)は「各軸の伸縮率の積」。σ2 = 0 ⇔ det = 0 ⇔ ランク落ち(逆行列なし)
注意 — 固有値と特異値を混同しない 90°回転行列の固有値は複素数 ±i ですが、特異値は σ1 = σ2 = 1(単位円は単位円のまま)。一般の行列では固有値と特異値は別物です。正確な関係は「σi2 = ATA の固有値」— 特異値は常に非負の実数で、どんな行列にも定義できます。

3. 低ランク近似 — 大事な軸だけ k 本残す

SVD は行列を「重み σi 付きのランク1部品の和」に書き直したものとも読めます。特異値は大きい順に並んでいるので、先頭の k 個だけ残して打ち切れば、少ない数値で A をよく近似できる — これが低ランク近似です。

A = Σi σi ui viT  →  Ak = σ1u1v1T + … + σkukvkT エッカート・ヤングの定理: Ak は「ランク k 以下の行列」の中で A との誤差が最小 — 打ち切りは手抜きではなく最適解
ランク k でどこまで再現できるか — 24×24 画像の圧縮実験
保存する数値:
エネルギー:
左=元画像(24×24 = 576個の数値)、中央=ランク k の再構成、右=特異値の減衰(青バー、明るい青が使用中の k 個)と累積エネルギー Σσ²(緑の線)。なめらかな背景や四角はごく少ない k で再現される一方、細い斜め線は高ランク成分なので最後まで残ります。保存量は k(24+24+1) = 49k 個 — k≈12 で元の576個を超えるので、「得」なのは特異値が急減する小さい k のときだけです。

これはそのまま画像圧縮の原理です。実際の JPEG は SVD ではなく DCT を使いますが、「情報を重要な成分に集めて、小さい成分を捨てる」という発想は共通です(画像処理 第12章「画像圧縮とJPEG」)。また機械学習 第10章の PCA は、データ行列の SVD そのものです。

4. まとめと応用 — AIの中のSVD

一歩先へ — 推薦・ノイズ除去・LoRA 「ユーザー×映画」の評価行列は巨大でも本質は低ランク(好みのパターンは少数)— 欠損だらけの行列を低ランクで埋めるのが推薦システムの古典的手法。小さい特異値成分だけを捨てればノイズ除去(信号は上位に、ノイズは全成分に薄く広がる)。そして LLM の微調整で使われる LoRA は「重みの更新分 ΔW は低ランクで十分」という仮説そのもので、ΔW を2つの細長い行列の積で持ちます(DNN 第15章)。なお数値計算では ATA を作ってから固有値を解くと桁落ちするため、実務のSVDルーチンは A を直接分解します。