特異値分解の入口
mathlinear-algebraundergraduatelecture
導入
この講義で重要なのは、特異値分解は、正方行列に限定されない行列を、直交変換と軸方向の伸縮へ分解する方法であるということである。
固有値と対角化は正方行列を主対象にする。一方、実務や応用では、縦横の大きさが異なる行列が頻出する。特異値分解は、そのような長方行列にも適用できる標準的な分解である。
SVD は、一般の行列に対する「直交基底つきの最も安定した分解」と位置付けられる。入力側の正規直交基底、出力側の正規直交基底、軸方向の非負の伸縮率を分離するため、階数、最小二乗法、擬似逆行列、低階数近似を同一の枠組みで記述できる。
用語と定義
特異値分解 とは、実の m\times n 行列 A を
A=U\Sigma V^T
と表示することである。ここで U は m\times m 直交行列、V は n\times n 直交行列、\Sigma は対角方向に非負数を並べた m\times n 行列である。
\Sigma の対角成分
\sigma_1\ge\sigma_2\ge\cdots\ge0
を A の特異値という。複素行列では
A=U\Sigma V^*
と表示する。
方針
方針は、実行列では A^TA、複素行列では A^*A を解析することである。A^TA は実対称かつ非負定値であり、A^*A はエルミート行列かつ非負定値であるため、直交またはユニタリに対角化できる。
なぜ A^*A を見るかというと、任意の x に対して
\langle A^*Ax,x\rangle=\langle Ax,Ax\rangle=\|Ax\|^2\ge0
となるからである。したがって A^*A はエルミート行列かつ非負定値であり、固有値は 0 以上の実数になる。この固有値の平方根が特異値である。
A^TA=V\Lambda V^T
複素の場合は
A^*A=V\Lambda V^*
である。この固有値 \lambda_i は非負であり、\sigma_i=\sqrt{\lambda_i} が特異値になる。
data/lecture/math/linear-algebra/対称行列と直交対角化-講義.n.md
data/lecture/math/linear-algebra/複素内積とユニタリ行列-講義.n.md
直感的な説明
特異値分解は、行列 A の作用を
\text{直交変換}\quad\longrightarrow\quad\text{軸方向の伸縮}\quad\longrightarrow\quad\text{直交変換}
に分解する。直交変換は長さと角度を保存し、\Sigma だけが長さを変更する。したがって特異値は、行列が各主方向をどれだけ伸縮するかを表す。
厳密な説明
1. A^TA または A^*A から右特異ベクトルを得る
実行列では A^TA が実対称行列である。したがって正規直交固有ベクトル v_1,\dots,v_n を選択できる。
A^TAv_i=\sigma_i^2 v_i
である。この v_i が右特異ベクトルである。複素行列では A^*A を用い、
A^*Av_i=\sigma_i^2v_i
と記述する。この変更により、定義の A=U\Sigma V^* と導出の記法が整合する。
2. 左特異ベクトルを構成する
\sigma_i>0 のとき
u_i=\frac{Av_i}{\sigma_i}
と定義する。この u_i は互いに直交し、長さ 1 である。これを補完して \mathbb R^m の正規直交基底にすると、U が得られる。
左特異ベクトルは AA^T からも特徴付けられる。実行列では
AA^Tu_i=\sigma_i^2u_i
であり、複素行列では
AA^*u_i=\sigma_i^2u_i
である。つまり、A^TA または A^*A は入力側の主方向を与え、AA^T または AA^* は出力側の主方向を与える。
3. 階数との関係
非零特異値の個数は A の階数に等しい。
\boxed{\operatorname{rank}(A)=\#\{i\mid \sigma_i>0\}}
小さい特異値は、行列が情報を強く圧縮する方向を示す。
4. コンパクト SVD と基本部分空間
A の階数を r とし、正の特異値だけを残すと
A=U_r\Sigma_rV_r^T
と表示できる。これをコンパクト SVDという。複素の場合は V_r^* を用いる。
この表示では、U_r の列が \operatorname{Col}(A) の正規直交基底を与え、V_r の列が \operatorname{Row}(A) の正規直交基底を与える。さらに、零特異値に対応する右特異ベクトルは \ker(A) を、零特異値に対応する左特異ベクトルは \ker(A^T) または \ker(A^*) を記述する。
5. 低階数近似への接続
特異値を大きい順に並べ、上位 k 個だけを残すと
A_k=\sum_{i=1}^k \sigma_i u_i v_i^T
を得る。複素の場合は v_i^* を用いる。Eckart-Young の定理により、A_k は階数 k 以下の行列の中で A に最も近い近似を与える。
\|A-A_k\|_F=\sqrt{\sigma_{k+1}^2+\cdots+\sigma_r^2},\qquad
\|A-A_k\|_2=\sigma_{k+1}
である。この事実により、SVD は分解の存在だけでなく、圧縮や雑音除去の基礎にもなる。
具体例
A=\begin{pmatrix}
3&0\\
0&1
\end{pmatrix}
では、すでに軸方向の伸縮が分離されている。したがって
U=I,\qquad \Sigma=\begin{pmatrix}3&0\\0&1\end{pmatrix},\qquad V=I
とでき、特異値は 3,1 である。
一般の行列では、まず V^T が入力空間を主方向へ回転し、\Sigma が伸縮し、U が出力空間へ配置する。
別の観点
特異値分解は、最小二乗法と擬似逆行列の基礎である。A が正則でなくても、非零特異値の方向だけを反転することで、最小ノルム解を定義できる。
判定基準
- 特異値は A^TA の固有値の平方根である。
- 非零特異値の個数は階数である。
- 特異値分解は長方行列にも適用できる。
- 小さい特異値は情報の圧縮や数値的不安定性と関係する。
- コンパクト SVD は、列空間・行空間・核を同時に記述する。
どこまで成り立つか
特異値分解は任意の実行列・複素行列に成立する。固有値分解とは異なり、正方行列や対角化可能性を前提にしない。
最終形
\boxed{A=U\Sigma V^T}
\boxed{A=U\Sigma V^*\quad(\text{complex case})}
\boxed{\sigma_i=\sqrt{\lambda_i(A^TA)}}
\boxed{\operatorname{rank}(A)=\#\{i:\sigma_i>0\}}
\boxed{A_k=\sum_{i=1}^k\sigma_i u_i v_i^T}
一言でいうと
- 特異値分解は、任意の行列を直交変換と軸方向の伸縮へ分解する標準形である。