特異値分解(SVD)の覚え方|「回して、伸ばして、回す」で意味と計算手順を教える方法

こんにちは。ゆうせいです。

特異値分解(SVD:Singular Value Decomposition)は、E資格やデータサイエンスの研修で必ずといってよいほど登場する単元です。一方で、A = UΣV^T という式に3つの行列が並ぶため、受講者から「どの行列が何を表しているのか分からない」「固有値分解と何が違うのか」という声がよく上がります。

今回は、特異値分解を「回して、伸ばして、回す」という覚え方で教える方法を紹介します。式を右から読むと、3つの行列の役割がそのまま図形の動きに対応します。図形の変化と各行列の役割を1枚にまとめた図と、受講者に解いてもらう練習問題も用意しました。

特異値分解の覚え方「回して、伸ばして、回す」:A=UΣVᵀを右から読み、Vᵀで回し、Σで伸ばし、Uで回す

特異値分解とは何か

式と覚え方

特異値分解は、どんな行列 A も、次の3つの行列の積に分けられるという定理です。

A = U \Sigma V^{T}

各記号の意味は次のとおりです。

  • U:左特異ベクトルを列に並べた直交行列。図形を回す(または裏返す)働きをする
  • Σ(シグマ):特異値を対角線上に大きい順に並べた行列。図形を縦横に伸び縮みさせる働きをする
  • V^T:右特異ベクトルを列に並べた直交行列 V の転置。図形を回す(または裏返す)働きをする
  • 特異値 σ1, σ2, …:0 以上の数で、σ1 ≥ σ2 ≥ … の順に並べる

直交行列は、長さや角度を変えずに向きだけを変える行列です。そのため、U と V^T は「回す」、対角行列 Σ は「伸ばす」と覚えられます。

右から読むのがポイント

行列をベクトル x に掛けるとき、Ax = UΣV^T x は、x に近い右側の行列から順に作用します。そのため、式は右から読みます。

  1. V^T で回す:図形のななめの2方向を、縦と横の方向にそろえる
  2. Σ で伸ばす:縦と横に、それぞれ σ1 倍・σ2 倍する
  3. U で回す:伸ばした図形を、最終的な向きに回す

円にこの3つの操作をすると、円は楕円になります。つまり、どんな行列の働きも「回して、伸ばして、回す」の組み合わせで説明できるというのが、特異値分解の意味です。楕円の長い半径が σ1、短い半径が σ2 にあたります。

研修では、紙に円を描いて「回して、伸ばして、回す」を手で動かして見せると、式の意味が直感的に伝わります。

固有値分解との違い

受講者からよく出る質問が、固有値分解との違いです。主な違いは次のとおりです。

  • 対象:固有値分解は正方行列が対象で、行列によっては分解できない。特異値分解は、正方行列でない行列(m 行 n 列)も含め、どんな行列でも分解できる
  • 値の符号:固有値は負の値や複素数になることがある。特異値は必ず 0 以上の実数になる
  • 両側の行列:固有値分解は左右に同じ行列(とその逆行列)を使う。特異値分解は左右に別々の直交行列 U と V を使う

データ分析で扱う表(行がデータ数、列が特徴量数)は正方行列でないことがほとんどです。どんな形の行列にも使える点が、特異値分解がデータ分析で広く使われる理由です。

特異値の求め方

覚え方は「A^T A の固有値の平方根」

特異値は、次の手順で求められます。

  1. A の転置 A^T と A の積 A^T A を計算する
  2. A^T A の固有値を求める
  3. 固有値の平方根を、大きい順に並べたものが特異値になる

\sigma_i = \sqrt{\lambda_i}

ここで λi は A^T A の固有値です。A^T A の固有値は必ず 0 以上になるため、平方根を取ることができます。固有値の記事で紹介した「対角から λ を引いて、行列式を 0 にする」が、ここでそのまま使えます。

数値で確認する

A = \begin{pmatrix} 3 & 0 \\ 4 & 5 \end{pmatrix}

ステップ1:A^T A を計算します。

A^{T}A = \begin{pmatrix} 3 & 4 \\ 0 & 5 \end{pmatrix} \begin{pmatrix} 3 & 0 \\ 4 & 5 \end{pmatrix} = \begin{pmatrix} 25 & 20 \\ 20 & 25 \end{pmatrix}

ステップ2:A^T A の固有値を求めます。対角から λ を引いて行列式を 0 とおくと、(25 - λ)(25 - λ) - 20 × 20 = 0 です。展開すると次のようになります。

\lambda^2 - 50\lambda + 225 = 0

(\lambda - 45)(\lambda - 5) = 0

固有値は 45 と 5 です。和は 50 で対角成分の和 25 + 25 と一致し、積は 225 で行列式 625 - 400 と一致するので、検算もできます。

ステップ3:平方根を取ります。

  • σ1 = √45 = 3√5(約 6.71)
  • σ2 = √5(約 2.24)

元の行列 A の行列式は 3 × 5 - 0 × 4 = 15 で、σ1 × σ2 = 3√5 × √5 = 15 と一致します。2×2の行列では、特異値の積は行列式の絶対値に等しくなります。面積が何倍になるかを、伸ばす操作 Σ だけが決めているためです(回す操作は面積を変えません)。

受講者がつまずきやすい点

  • A の固有値を求めてしまう:特異値は A^T A の固有値から求めます。A の固有値とは一般に異なります
  • 平方根を取り忘れる:A^T A の固有値 45 と 5 をそのまま特異値にしてしまう誤りです
  • 並べる順番を逆にする:特異値は大きい順に並べるのが約束です

練習問題1

次の行列の特異値を求めてください。

A = \begin{pmatrix} 2 & 0 \\ 0 & -3 \end{pmatrix}

解答と解説

A^T A を計算すると、次のようになります。

A^{T}A = \begin{pmatrix} 4 & 0 \\ 0 & 9 \end{pmatrix}

対角行列なので、固有値は対角成分の 4 と 9 です。平方根を取って大きい順に並べると、特異値は σ1 = 3、σ2 = 2 です。

この問題のポイントは2つあります。1つ目は、A の成分に -3 があっても、特異値は 3 という正の値になることです。符号の反転は U や V の「裏返し」に含まれ、Σ には大きさだけが残ります。2つ目は、元の行列では 2 が先、-3 が後に並んでいても、特異値は大きい順に 3, 2 と並べることです。

特異ベクトルの求め方

V と U の求め方

特異値が分かったら、V と U を求めます。

  • V の列(右特異ベクトル v1, v2):A^T A の固有ベクトルを、長さ 1 にそろえたもの
  • U の列(左特異ベクトル u1, u2):次の式で計算する

\mathbf{u}_i = \frac{1}{\sigma_i} A \mathbf{v}_i

先ほどの例で、A^T A = (25 20 / 20 25) の固有ベクトルを求めます。固有ベクトルの記事で紹介した近道 (b, λ - a) を使うと、λ = 45 のとき (20, 20)、λ = 5 のとき (20, -20) です。長さ 1 にそろえると、v1 = (1, 1)/√2、v2 = (1, -1)/√2 になります。

次に U を求めます。A v1 = (3, 9)/√2 を σ1 = 3√5 で割ると、u1 = (1, 3)/√10 です。A v2 = (3, -1)/√2 を σ2 = √5 で割ると、u2 = (3, -1)/√10 です。

まとめると、A は次のように分解できます。

\begin{pmatrix} 3 & 0 \\ 4 & 5 \end{pmatrix} = \frac{1}{\sqrt{10}} \begin{pmatrix} 1 & 3 \\ 3 & -1 \end{pmatrix} \begin{pmatrix} 3\sqrt{5} & 0 \\ 0 & \sqrt{5} \end{pmatrix} \frac{1}{\sqrt{2}} \begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix}

右辺を実際に掛け算すると、元の行列 (3 0 / 4 5) に戻ります。研修では、この検算を受講者に行列の積の練習として取り組ませると、行列の積・固有値・固有ベクトルの復習を兼ねられます。

低ランク近似:大きい特異値だけを残す

行列を「部品の足し算」で表す

特異値分解は、次のように「特異値 × 縦ベクトル × 横ベクトル」の足し算としても書けます。

A = \sigma_1 \mathbf{u}_1 \mathbf{v}_1^{T} + \sigma_2 \mathbf{u}_2 \mathbf{v}_2^{T} + \cdots

特異値は大きい順に並んでいるので、前の項ほど行列 A への影響が大きくなります。そこで、大きい特異値の項だけを残し、小さい項を捨てると、元の行列をより少ない情報で近似できます。この方法を低ランク近似と呼びます。

数値で確認する

先ほどの例で、σ1 の項だけを残すと次のようになります。

A_1 = \sigma_1 \mathbf{u}_1 \mathbf{v}_1^{T} = \begin{pmatrix} 1.5 & 1.5 \\ 4.5 & 4.5 \end{pmatrix}

元の行列 (3 0 / 4 5) と比べると、細かい違いはありますが、「2行目の値が1行目より大きい」という大まかな特徴は残っています。捨てた σ2 の項は、差の (1.5 -1.5 / -0.5 0.5) にあたります。

画像圧縮で考える

低ランク近似の効果は、画像で考えると分かりやすくなります。1000 × 1000 画素の白黒画像は、100万個の数を持つ行列です。大きい特異値を50個だけ残すと、必要な数は 50 × (1000 + 1000 + 1) = 100,050 個になり、元の約10分の1で済みます。

研修では、Python の NumPy(numpy.linalg.svd)で画像の行列を特異値分解し、残す特異値の数を 5、20、50 と変えて画像を表示させる演習がおすすめです。少ない特異値でも画像の輪郭が残る様子を見ると、「大きい特異値が主要な情報を持っている」ことを実感できます。

練習問題2

次の行列の特異値を求め、0 でない特異値がいくつあるかを答えてください。

A = \begin{pmatrix} 1 & 1 \\ 1 & 1 \end{pmatrix}

解答と解説

A^T A を計算すると (2 2 / 2 2) です。対角から λ を引いて行列式を 0 とおくと、(2 - λ)(2 - λ) - 4 = 0、つまり λ² - 4λ = 0 なので、固有値は 4 と 0 です。特異値は σ1 = 2、σ2 = 0 で、0 でない特異値は1つです。

0 でない特異値の個数は、行列のランク(独立な行や列の数)に等しくなります。この行列は2行がまったく同じなので、実質的な情報は1行分しかなく、ランクは 1 です。σ2 = 0 の項は捨てても何も失われないため、σ1 の項1つだけで A を完全に表せます。低ランク近似の考え方を、極端な例で確認できる問題です。

AI・データ分析での使われ方

特異値分解は、AIやデータ分析で次のように使われています。

  • 主成分分析(PCA):中心化したデータ行列を特異値分解すると、V の列が主成分の方向、特異値の2乗が各方向の分散の大きさに対応する
  • 推薦システム:利用者 × 商品の評価表を低ランク近似し、まだ評価していない商品への好みを推定する考え方がある
  • 自然言語処理:単語 × 文書の出現頻度の表を特異値分解し、少ない次元で意味の近さを表す手法(潜在意味解析:LSA)がある
  • 画像の圧縮やノイズ除去:小さい特異値に含まれる細かい成分を捨てることで、データ量を減らしたりノイズを取り除いたりする

E資格の研修では、主成分分析を固有値分解と特異値分解の両方の視点から説明すると、2つの分解の関係が整理できます。

確認問題

特異値分解について、正しい説明を1つ選んでください。

  1. 特異値分解は、正方行列にしか使えない
  2. 特異値は、行列 A の固有値と常に等しい
  3. 特異値は 0 以上で、大きい順に並べる
  4. A = UΣV^T は、U から順に左から作用する

解答と解説

正解は 3 です。

  • 1 は誤りです。特異値分解は、正方行列でない行列も含め、どんな行列にも使えます
  • 2 は誤りです。特異値は A^T A の固有値の平方根で、A の固有値とは一般に異なります
  • 3 は正しい説明です。特異値は 0 以上の実数で、σ1 ≥ σ2 ≥ … と並べます
  • 4 は誤りです。ベクトルに掛けるときは右から作用するため、V^T で回し、Σ で伸ばし、U で回す順になります

研修で教えるときの進め方

講師向けに、特異値分解を扱うときの進め方の一例を示します。

  1. 「どんな行列も、回して、伸ばして、回すに分けられる」という結論を最初に示す
  2. 円が楕円になる図で、V^T・Σ・U の役割を右から順に説明する
  3. 固有値分解との違いを整理し、正方行列でない行列にも使えることを強調する
  4. 「A^T A の固有値の平方根」で特異値を求め、練習問題1を解いてもらう
  5. 例題で U と V を求め、行列の積で元に戻ることを検算する
  6. 低ランク近似と練習問題2で、特異値の大きさが情報の大きさを表すことを確認する
  7. 可能であれば、NumPy で画像を圧縮する演習を行う

ペアワークとして、1人が特異値を計算し、もう1人が「特異値の積 = 行列式の絶対値」で検算する役割分担にすると、計算ミスにその場で気付けます。

まとめ

  • 特異値分解は A = UΣV^T で、どんな形の行列にも使える
  • 式は右から読み、「V^T で回して、Σ で伸ばして、U で回す」と覚える
  • 特異値は A^T A の固有値の平方根で、0 以上の値を大きい順に並べる
  • 0 でない特異値の個数は、行列のランクに等しい
  • 大きい特異値だけを残す低ランク近似は、画像圧縮、推薦、主成分分析などで使われている

次の学習ステップとしては、特異値分解と主成分分析の関係を、実際のデータで確かめる流れをおすすめします。データ行列を特異値分解して主成分を求め、固有値分解で求めた結果と一致することを確認すると、2つの分解の関係が具体的に理解できます。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。