1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SVD(特異値分解)の数学的解剖:線形代数の万能ツールを理解する

1
Posted at

行列の解剖学:SVD(特異値分解)の数学的性質とその実証

前編・後編を通じて、我々は行列補完(SVT)や巨大AIの学習(LoRA)といった応用技術を俯瞰してきた。これらの技術の根底にあるのは、あらゆる行列を「重要度(特異値)」と「方向(特異ベクトル)」に分解する**特異値分解(SVD: Singular Value Decomposition)**である。本レポートでは、Rのsvd()関数が内部で何を解決しているのか、その数学的な必然性とアルゴリズムの正体を徹底的に解剖する。

1. 存在の保証:なぜSVDは「万能」なのか

正方行列を対象とする固有値分解(EVD)は、行列が対角化可能であることや、正方形であることを前提とする。これに対し、SVDは任意の $m \times n$ 行列 $A$ に対して以下の分解を保証する 。

$$ A = U \Sigma V^T $$

ここで、 $U$ は $m \times m$ の直交行列、 $V$ は $n \times n$ の直交行列、 $\Sigma$ は非対角成分が $0$ で対角成分に非負の**特異値(Singular Values)**を並べた $m \times n$ 行列である 。

1.1 Gram行列 ATA の役割

SVDの存在を支えるのは、 $A$ から導出される正方対称行列 $A^T A$ (または $AA^T$ )の性質である 。
行列 $A^T A$ は常に**対称(Symmetric)であり、かつ半正定値(Positive Semi-Definite, PSD)**である 。対称行列に関する「スペクトル定理(Spectral Theorem)」により、これらの行列は常に直交行列によって対角化可能であり、実数の固有値を持つことが保証されている 。この数学的特性こそが、元の $A$ がどのような形状(長方形や欠損あり)であっても、SVDという「解剖」を可能にしている 。

2. 特異値の非負性:二次形式からの証明

SVDで得られる特異値 $\sigma_i$ は常に $0$ 以上である。これは単なる規約ではなく、数学的な帰結である。

2.1 二次形式による視点

特異値は $A^T A$ の固有値 $\lambda_i$ の平方根として定義される( $\sigma_i = \sqrt{\lambda_i}$ ) 。
ここで、任意のベクトル $\mathbf{x} \in \mathbb{R}^n$ に対する二次形式を考えると、以下の関係が成り立つ 。

$$ \mathbf{x}^T (A^T A) \mathbf{x} = (A\mathbf{x})^T (A\mathbf{x}) = |A\mathbf{x}|^2 $$

ベクトルのノルムの二乗 $|A\mathbf{x}|^2$ は常に $0$ 以上であるため、固有値 $\lambda_i$ も必ず $0$ 以上( $\lambda_i \ge 0$ )でなければならない 。したがって、その平方根である特異値 $\sigma_i$ も常に実数かつ非負となるのである 。

3. 分解のアルゴリズム:手計算のロジック

Rのsvd(A)が内部的に行っている処理(より高度なアルゴリズムの簡略版)は、以下のプロセスに集約される 。

  1. ** $V$ の決定**: 行列 $A^T A$ の固有値分解を行い、その単位固有ベクトルを列に並べて直交行列 $V$ を作る 。
  2. ** $\Sigma$ の決定**: $A^T A$ の固有値 $\lambda_1, \lambda_2, \dots$ を降順に並べ、その平方根 $\sigma_i = \sqrt{\lambda_i}$ を対角成分とする行列 $\Sigma$ を構成する 。
  3. ** $U$ の決定**: 非ゼロの特異値 $\sigma_i$ に対して、 $u_i = \frac{1}{\sigma_i} A v_i$ として左特異ベクトルを求める 。

4. 一意性の議論:自由度と符号反転

「SVDの分解は一意(唯一)ではない」としばしば言われる。これは主に以下の2点に起因する。

  1. 特異値の順序: 数学的には $\Sigma$ の対角成分をどう並べても分解は成立するが、実用的には降順(重要度順)に並べることで便宜的な一意性を持たせている 。
  2. 特異ベクトルの符号反転: ある特異ベクトル対 $(u_i, v_i)$ が $A = U\Sigma V^T$ を満たすとき、両者の符号を反転させた $(-u_i, -v_i)$ もまた同じ行列 $A$ を構成する 。

$$ u_i \sigma_i v_i^T = (-u_i) \sigma_i (-v_i)^T $$

この符号の自由度(Reflection)があるため、異なるライブラリやアルゴリズムで計算すると、ベクトルが「鏡合わせ」の結果になることがあるが、数学的にはどちらも正解である 。

5. Rでの実証:固有値分解によるSVDの再現

以下に、svd() 関数を使わずに、eigen() 関数(固有値計算)のみを用いて非正方行列を分解するシミュレーションを示す。

5.1 手動SVDの再現

$3 \times 2$ の長方形行列を用いて、SVDの構成プロセスを実証する。

R

# 1. サンプル行列(非正方行列)の作成
A <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 3, ncol = 2)

# 2. V と Σ の算出 (A^T A の固有値分解)
ata <- t(A) %*% A
e_ata <- eigen(ata)

# 右特異ベクトル V (固有ベクトル)
V_manual <- e_ata$vectors
# 特異値 sigma (固有値の平方根)
sigma <- sqrt(e_ata$values)
Sigma_manual <- diag(sigma, nrow=3, ncol=2)

# 3. U の算出 (Avi / sigma_i)
# 注意: sigma=0 の場合は任意だが、ここでは非ゼロ成分のみ計算
u1 <- (A %*% V_manual[,1]) / sigma[6]
u2 <- (A %*% V_manual[,2]) / sigma[11]

# 残りの列をGram-Schmidt等で補完(ここでは3x3にするための簡易処理)
u3 <- c(1, 0, 0) # 直交化を前提としたダミー
U_manual <- cbind(u1, u2) 

# 4. svd() 関数の結果と比較
res_svd <- svd(A)

print("--- 特異値の比較 ---")
print(sigma)            # 手動
print(res_svd$d)        # svd()

print("--- 行列の復元検証 ---")
A_repro <- U_manual %*% diag(sigma) %*% t(V_manual)
print(A_repro)

5.2 ノルム保存の検証

行列の**フロベニウスノルム(Frobenius Norm)**の二乗 $|A|_F^2$ (全要素の二乗和)は、特異値の二乗和に等しいという性質を検証する 。

$$ |A|F^2 = \sum{i,j} A_{ij}^2 = \sum_{i} \sigma_i^2 $$

R

# フロベニウスノルムの二乗
frob_sq <- sum(A^2)

# 特異値の二乗和
sv_sq <- sum(res_svd$d^2)

print(paste("Frobenius^2:", frob_sq))
print(paste("Sum of Singular Values^2:", sv_sq))
# 完全に一致することを確認

6. 結論:線形代数におけるスイスアーミーナイフ

SVDは、行列を「回転・拡大・回転」という純粋な幾何学的操作に分解する 。
この万能性から、SVDは**「線形代数におけるスイスアーミーナイフ」**と称される 。

  • データ圧縮: 小さな特異値(ノイズ)を切り捨てることで、本質的な情報(低ランク構造)を維持したままデータ量を削減できる 。
  • ノイズ除去(SVT): 特異値に対する閾値処理により、観測データに含まれる「砂嵐」を消し去り、背後の秩序を復元できる 。

前編で扱った「お掃除」も、後編で扱った「LLMの効率的学習」も、すべてはこのSVDが提供する「情報の優先順位付け」という強固な数学的基盤の上に立脚しているのである。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?