特異値分解とは?SVDの仕組みと活用例をわかりやすく解説

特異値分解とは?SVDの仕組みと活用例をわかりやすく解説

AIの初心者

「特異値分解」って難しそうですが、何に使えるのですか?

AI専門家

画像のノイズ除去、データ圧縮、推薦システム、自然言語処理などで使われます。行列に含まれる重要な情報を取り出すための基本技術です。

AIの初心者

重要な情報を取り出す、というのは具体的にどういうことですか?

AI専門家

たとえば写真を数字の行列として見ると、全体の形や明暗を支える大きな成分と、細かな揺らぎやノイズに近い小さな成分に分けられます。特異値分解は、その重要度の違いを扱いやすくしてくれる方法です。

特異値分解は、英語では Singular Value Decomposition と呼ばれ、略して SVD と書かれます。ひと言でいうと、行列を「向きを変える」「伸ばす・縮める」「もう一度向きを変える」という三つの操作に分ける方法です。

AIや機械学習では、画像、文章、購買履歴、センサーデータなどを行列として扱う場面が多くあります。特異値分解を使うと、その行列に隠れている主要な特徴を取り出し、データ圧縮、ノイズ除去、次元削減、推薦、検索などに活用できます。

特異値分解で行列を回転、伸縮、回転の要素に分ける概念図

特異値分解とは何か

特異値分解とは、任意の行列を三つの行列の積に分解する線形代数の手法です。正方行列だけでなく、縦長や横長の長方形行列にも使えるため、現実のデータ分析と相性がよいのが特徴です。

元の行列を \(A\) とすると、特異値分解は次の形で表されます。

\(A = U\Sigma V^*\)

ここで \(U\) と \(V^*\) は向きの変換に関わる行列、\(\Sigma\) は伸縮の大きさを並べた行列です。幾何学的には、行列による複雑な変換を、回転や反転、軸方向の伸縮、さらに回転や反転という基本操作に分けて見ていると考えられます。

この分解が便利なのは、単に式をきれいにするためではありません。行列の中でどの成分が大きな役割を持つのかを、特異値の大きさとして確認できるためです。これにより、必要な情報だけを残す近似や、不要な揺らぎを抑える処理がしやすくなります。

式 \(A = U\Sigma V^*\) の読み方

特異値分解の式は難しく見えますが、それぞれの役割を分けて読むと理解しやすくなります。\(U\) は左特異ベクトルを並べた行列、\(\Sigma\) は特異値を対角線上に並べた行列、\(V^*\) は右特異ベクトルを並べた行列 \(V\) の共役転置です。

\(\Sigma\) は対角行列なので、対角線以外の成分は基本的にゼロです。対角線上に並ぶ値が特異値で、通常は大きい順に並べられます。特異値は負にならない値で、データの変化や情報量の強さを表す指標として使われます。

\(V^*\) の星印は、複素数を含む行列では共役転置を意味します。ただし、機械学習の入門でよく扱う実数行列では、行と列を入れ替える転置行列だと考えて問題ない場面が多いです。

初心者は、まず「\(V^*\) で入力側の向きを整え、\(\Sigma\) で重要な方向に伸縮し、\(U\) で出力側の向きに戻す」と捉えると、式の意味を追いやすくなります。

特異値の大きさが情報の重要度を表す様子

特異値が「重要度」を表す理由

特異値は、元の行列がどの方向にどれだけ強くデータを伸ばすかを表します。大きな特異値に対応する成分は、行列全体の形や傾向に強く影響します。一方、小さな特異値に対応する成分は、細部の変化やノイズに近い情報を表すことがあります。

この性質を利用すると、特異値の大きいものだけを残して行列を近似できます。たとえば、\(k\) 個の大きな特異値だけを使って再構成した行列は、元の行列を完全には再現しないものの、主要な特徴を保ったままデータ量を減らせます。

この考え方は、低ランク近似と呼ばれます。低ランク近似は、画像圧縮やノイズ除去だけでなく、データの次元削減にも使われます。高次元のデータをそのまま扱うと計算量が増え、可視化もしにくくなりますが、主要な特異値に基づいて表現を小さくすれば、データの構造を見通しやすくなります。

ただし、小さい特異値をすべてノイズと決めつけるのは危険です。細部に重要な情報が含まれる問題もあります。どこまで残すかは、圧縮率、予測精度、復元誤差、目的に応じた検証で決める必要があります。

画像処理での使いどころ

画像は、ピクセルの明るさや色の値を並べた行列として扱えます。白黒画像であれば明るさの行列、カラー画像であれば赤、緑、青などのチャンネルごとの行列として考えられます。

この画像行列に特異値分解を適用し、大きな特異値だけを使って再構成すると、画像の大まかな形や明暗を保ちながらデータ量を減らせます。これが画像圧縮に使える理由です。小さな特異値を捨てるほどファイルサイズは小さくなりやすい一方、細部は失われやすくなります。

ノイズ除去でも考え方は似ています。ランダムなノイズは小さな成分として現れやすいため、主要な特異値を残して再構成すると、細かなざらつきが抑えられることがあります。ただし、輪郭や質感のような重要な細部まで消してしまう可能性があるため、残す特異値の数を調整することが大切です。

顔認識や画像検索でも、特異値分解は特徴抽出の考え方と関係します。画像そのものをそのまま比較するのではなく、主要な特徴量に変換して比べることで、計算を軽くし、データの傾向を扱いやすくできます。

特異値分解を使った画像圧縮とノイズ除去の流れ

応用例 特異値分解の使い方 注意点
画像圧縮 大きな特異値を残して低ランク近似する 圧縮しすぎると輪郭や質感が崩れる
ノイズ除去 小さな特異値に対応する成分を抑える 細部までノイズとして消す可能性がある
特徴抽出 画像の主要な構造を少ない成分で表す 前処理や正規化で結果が変わる

推薦システムでの使いどころ

推薦システムでは、ユーザーと商品、映画、記事などの関係を行列で表すことがあります。行をユーザー、列を商品とし、評価点、購入回数、閲覧履歴などを入れると、ユーザー商品行列ができます。

この行列には、明示されていない好みが隠れています。たとえば、あるユーザーが複数のSF映画を高く評価していれば、行列の背後には「SFを好む」「特定の俳優を好む」「短い作品を好む」といった潜在的な特徴があるかもしれません。

特異値分解やその発展的な行列分解を使うと、こうした潜在特徴を低次元のベクトルとして表せます。ユーザーと商品のベクトルが近ければ、その商品を好む可能性が高いと考え、まだ見ていない商品を推薦できます。

実務では、評価が空欄だらけの疎な行列になることが多いため、単純な特異値分解だけで済まない場合もあります。欠損値の扱い、過学習の防止、評価の偏り、人気商品の影響などを調整することが、推薦精度を左右します。

ユーザー商品行列から潜在的な好みを取り出す推薦システムの概念図

自然言語処理での使いどころ

自然言語処理でも、文章や単語を行列として扱う場面があります。たとえば、行を文書、列を単語とし、各単語の出現回数や重みを入れると、文書単語行列ができます。また、単語同士がどれくらい一緒に現れるかを表す共起行列もよく使われます。

こうした行列に特異値分解を適用すると、表面的な単語の出現だけでなく、文書や単語の背後にある潜在的な話題を取り出せます。これは潜在意味解析と呼ばれる考え方に近く、検索、文書分類、類義語の発見、要約などの土台になります。

たとえば「自動車」と「車」は文字としては異なりますが、似た文脈で使われることが多ければ、低次元の意味空間では近い位置に配置されやすくなります。特異値分解は、このような意味の近さを数値的に扱うための手段になります。

一方で、現代の自然言語処理ではニューラルネットワークによる埋め込み表現も広く使われています。それでも、特異値分解は「高次元の言語データから主要な構造を取り出す」という基本発想を学ぶうえで重要です。

文書単語行列から低次元の意味空間を作る自然言語処理の概念図

固有値分解・PCAとの違い

特異値分解と混同されやすいものに、固有値分解と主成分分析があります。固有値分解は、主に正方行列を対象に、行列の変換方向と伸縮率を調べる方法です。一方、特異値分解は長方形行列にも使えるため、データ分析で扱う表形式のデータに適用しやすいという強みがあります。

主成分分析は、データのばらつきが大きい方向を見つけ、少ない軸でデータを表す方法です。実装や理解の面では、中心化したデータ行列に対する特異値分解として説明できることがあります。つまり、PCAは特異値分解の応用先の一つとして理解すると、関係がつかみやすくなります。

整理すると、固有値分解は正方行列の性質を調べるための基本手法、特異値分解はより広い形の行列に使える分解、PCAはデータの次元削減を目的とする分析手法です。目的と対象の行列が違うため、名前が似ていても使い分けが必要です。

学習時と実務利用時の注意点

特異値分解を学ぶときは、まず式を丸暗記するよりも、行列を変換として見ることが大切です。入力の向きを整え、重要な方向に伸縮し、出力の向きに合わせるという流れを押さえると、\(U\)、\(\Sigma\)、\(V^*\) の役割が見えやすくなります。

実務で使う場合は、データの前処理にも注意が必要です。画像であれば明るさやスケール、推薦であれば評価の偏り、自然言語処理であれば頻出語の重みづけが結果に影響します。特異値分解そのものが強力でも、入力行列の作り方が目的に合っていなければ、得られる特徴もずれてしまいます。

また、残す特異値の数は自動的に決まるものではありません。圧縮なら復元品質、推薦なら予測精度、分析なら解釈のしやすさを見ながら決めます。特異値分解は答えを直接出す魔法ではなく、データの構造を扱いやすい形に整理する道具だと考えると、過度な期待や誤用を避けやすくなります。

まとめ

特異値分解は、行列を \(A = U\Sigma V^*\) の形に分解し、データの主要な構造を見つけやすくする手法です。\(U\) と \(V^*\) は向きの変換、\(\Sigma\) は特異値による伸縮を表します。

大きな特異値は重要な特徴、小さな特異値は細部やノイズに近い成分を表すことが多いため、特異値分解は画像圧縮、ノイズ除去、推薦システム、自然言語処理、PCAなどの次元削減に応用されます。

初心者は、まず「行列を三つの扱いやすい部品に分け、重要な成分を見つける方法」と理解すると十分です。そのうえで、式の意味、特異値の大きさ、残す成分数の決め方を順に学ぶと、AIやデータ分析での使いどころが見えてきます。

更新履歴

日付 内容
2025年2月1日 初回公開
2026年5月27日 式の読み方、応用例、関連手法との差分を追記