固有値分解・特異値分解¶
キーワード:固有値、固有ベクトル、対角化、特異値、特異ベクトル、固有値分解、特異値分解、低ランク近似
要点
- 固有ベクトルは、行列をかけても向きが変わらない方向。伸びる倍率が固有値。正方行列を \(A=P\Lambda P^{-1}\) と分けるのが固有値分解(対角化)。
- 特異値分解は任意の \(m\times n\) 行列を \(A=U\Sigma V^{\top}\)(回転・伸縮・回転)と分ける。特異値は \(\sigma_i=\sqrt{\lambda_i(A^{\top}A)}\)。
- 特異値を大きい順に \(k\) 個だけ残すと、最良の低ランク近似になる。共分散行列の固有値分解が主成分分析。
固有値と固有ベクトル¶
\[
A\mathbf{u}=\lambda\mathbf{u}\ \ (\mathbf{u}\ne\mathbf{0}),\qquad
\det(A-\lambda I)=0\ \ (\text{固有方程式})
\]
- \(\mathbf{u}\) は \((A-\lambda I)\mathbf{u}=\mathbf{0}\) の自明でない解。向きだけが決まり、定数倍も固有ベクトルになる。
- \(n\) 次正方行列には、重複や複素数を含めて \(n\) 個の固有値がある。
- \(\operatorname{tr}A=\sum_i\lambda_i\)、\(\det A=\prod_i\lambda_i\)。2×2 なら固有方程式は \(\lambda^2-\operatorname{tr}(A)\,\lambda+\det A=0\)。
| \(A\) | 固有値 | 固有ベクトル |
|---|---|---|
| \(\begin{pmatrix}4&1\\-2&1\end{pmatrix}\) | \(2,\ 3\) | \((1,-2)^{\top},\ (1,-1)^{\top}\) |
| \(\begin{pmatrix}1&4\\2&3\end{pmatrix}\) | \(5,\ -1\) | \((1,1)^{\top},\ (-2,1)^{\top}\) |
| \(\begin{pmatrix}3&4\\4&3\end{pmatrix}\)(対称) | \(7,\ -1\) | \((1,1)^{\top},\ (1,-1)^{\top}\)(直交する) |
例:固有値と固有ベクトルの計算
\(A=\begin{pmatrix}4&1\\-2&1\end{pmatrix}\) のとき。
\[
\begin{aligned}
\det(A-\lambda I)&=(4-\lambda)(1-\lambda)-(1)(-2)=\lambda^2-5\lambda+6=(\lambda-2)(\lambda-3)=0\\[2mm]
\lambda=2:&\ \begin{pmatrix}2&1\\-2&-1\end{pmatrix}\mathbf{u}=\mathbf{0}\Rightarrow 2u_1+u_2=0\Rightarrow \mathbf{u}=\begin{pmatrix}1\\-2\end{pmatrix}\\[2mm]
\lambda=3:&\ \begin{pmatrix}1&1\\-2&-2\end{pmatrix}\mathbf{v}=\mathbf{0}\Rightarrow v_1+v_2=0\Rightarrow \mathbf{v}=\begin{pmatrix}1\\-1\end{pmatrix}
\end{aligned}
\]
検算:\(\operatorname{tr}A=5=2+3\)、\(\det A=6=2\cdot3\)、\(A\mathbf{u}=(2,-4)^{\top}=2\mathbf{u}\)。
固有値分解(対角化)¶
\[
A=P\Lambda P^{-1},\qquad P^{-1}AP=\Lambda,\qquad
P=(\mathbf{u}_1\ \cdots\ \mathbf{u}_n),\quad \Lambda=\operatorname{diag}(\lambda_1,\dots,\lambda_n)
\]
- 上の例では \(P=\begin{pmatrix}1&1\\-2&-1\end{pmatrix}\)、\(\Lambda=\begin{pmatrix}2&0\\0&3\end{pmatrix}\)、\(P^{-1}=\begin{pmatrix}-1&-1\\2&1\end{pmatrix}\) で、\(P\Lambda P^{-1}=A\) が確かめられる。
- \(P\) は固有ベクトルを列に並べる(行ではない)。
- 対角化できる条件は、線形独立な固有ベクトルが \(n\) 本あること。固有値がすべて異なれば必ず可能。重解で固有ベクトルが足りない行列(例:\(\begin{pmatrix}1&1\\0&1\end{pmatrix}\))は対角化できない。
- うれしさ:\(A^{k}=P\Lambda^{k}P^{-1}\)(べき乗が対角成分のべき乗になる)。\(A^{-1}=P\Lambda^{-1}P^{-1}\)(固有値に 0 がなければ)。
- 同じ行列を何度もかける RNN で、勾配が消えたり爆発したりするのは、重み行列の固有値の絶対値が 1 より小さい・大きいため(RNN)。
対称行列と半正定値¶
- 実対称行列の固有値はすべて実数。異なる固有値の固有ベクトルは直交し、直交行列 \(Q\) で \(A=Q\Lambda Q^{\top}\)(スペクトル分解)と書ける(\(Q^{-1}=Q^{\top}\))。
- \(\mathbf{x}^{\top}A\mathbf{x}\ge0\)(\(\forall\mathbf{x}\))となる半正定値行列は、固有値がすべて非負(正定値なら正)。共分散行列は半正定値。
- 最適化では、ヘッセ行列が正定値なら極小点(最適化理論)。
- 実装では
np.linalg.eigが固有値と、固有ベクトル(列)を返す。対称行列にはeighを使う。データと固有ベクトルの内積をとると、新しい座標(主成分得点)になる。
共分散行列の固有値分解と PCA¶
\[
\boldsymbol{\Sigma}=Q\Lambda Q^{\top},\qquad
\text{寄与率}_i=\frac{\lambda_i}{\sum_{j}\lambda_j},\qquad
\text{累積寄与率}_k=\frac{\sum_{j=1}^{k}\lambda_j}{\sum_{j}\lambda_j}
\]
- 固有ベクトル \(\mathbf{u}_i\) は主成分の方向、固有値 \(\lambda_i\) はその方向の分散。
- 固有値の大きい順に \(k\) 個の固有ベクトルを選んで射影すると、次元削減になる(次元圧縮)。
- 共分散行列の固有ベクトルは、正規分布の等高線(楕円)の主軸の向きでもある(多変量正規分布)。
- 記号に注意:共分散行列は太字の \(\boldsymbol{\Sigma}\)、特異値分解の対角行列は細字の \(\Sigma\)。
特異値分解¶
任意の \(m\times n\) 行列 \(A\) について、次を満たす \(\sigma\ge0\) と \(\mathbf{u},\mathbf{v}\ne\mathbf{0}\) を特異値・左特異ベクトル・右特異ベクトルという。
\[
A\mathbf{v}_i=\sigma_i\mathbf{u}_i,\quad A^{\top}\mathbf{u}_i=\sigma_i\mathbf{v}_i
\qquad\Longrightarrow\qquad
A=U\Sigma V^{\top},\quad U^{\top}U=I_m,\ \ V^{\top}V=I_n
\]
- \(U\):\(m\times m\) の直交行列(左特異ベクトル)、\(V\):\(n\times n\) の直交行列(右特異ベクトル)。
- \(\Sigma\):\(m\times n\) で、対角成分に \(\sigma_1\ge\sigma_2\ge\dots\ge\sigma_r>0\) が並び、残りは 0。\(r=\operatorname{rank}A\)。
| 固有値分解 | 特異値分解 | |
|---|---|---|
| 対象 | 正方行列(対角化できるもの) | 任意の \(m\times n\) 行列 |
| 式 | \(A=P\Lambda P^{-1}\) | \(A=U\Sigma V^{\top}\) |
| 左右の行列 | 同じ基底 \(P\) と \(P^{-1}\) | 別々の直交行列 \(U,V\) |
| 値 | 固有値 \(\lambda\)(負・複素もある) | 特異値 \(\sigma\ge0\) |
| 幾何 | 向きが変わらない方向が \(\lambda\) 倍 | 回転 \(V^{\top}\) → 軸ごとに \(\sigma\) 倍 → 回転 \(U\) |
求め方¶
\[
A^{\top}A=V(\Sigma^{\top}\Sigma)V^{\top}
\quad\Longrightarrow\quad
\sigma_i=\sqrt{\lambda_i(A^{\top}A)},\qquad
\mathbf{v}_i=(A^{\top}A\text{ の固有ベクトル}),\qquad
\mathbf{u}_i=\frac{A\mathbf{v}_i}{\sigma_i}
\]
例:特異値分解の計算
\(A=\begin{pmatrix}3&0\\0&2\\0&0\end{pmatrix}\) のとき。
\[
A^{\top}A=\begin{pmatrix}9&0\\0&4\end{pmatrix}\ \Rightarrow\ \lambda=9,\,4\ \Rightarrow\ \sigma_1=3,\ \sigma_2=2,\qquad
\mathbf{v}_1=\begin{pmatrix}1\\0\end{pmatrix},\ \mathbf{v}_2=\begin{pmatrix}0\\1\end{pmatrix}
\]
\[
\mathbf{u}_1=\tfrac13A\mathbf{v}_1=\begin{pmatrix}1\\0\\0\end{pmatrix},\quad
\mathbf{u}_2=\tfrac12A\mathbf{v}_2=\begin{pmatrix}0\\1\\0\end{pmatrix},\qquad
A=\begin{pmatrix}1&0\\0&1\\0&0\end{pmatrix}\begin{pmatrix}3&0\\0&2\end{pmatrix}\begin{pmatrix}1&0\\0&1\end{pmatrix}
\]
ここでは \(r=2\) 個だけの形(コンパクト SVD)。\(\mathbf{u}_3=(0,0,1)^{\top}\) を足せば \(U\) が \(3\times3\) の完全な SVD になる。
性質¶
- \(\operatorname{rank}A=\) 0 でない特異値の個数。
- \(\|A\|_F^2=\sum_i\sigma_i^2\)、\(\|A\|_2=\sigma_1\)(スペクトルノルム)。
- 条件数 \(\kappa=\sigma_{\max}/\sigma_{\min}\) が大きいと、逆問題が数値的に不安定になる。
- 疑似逆行列 \(A^{+}=V\Sigma^{+}U^{\top}\)(\(\Sigma^{+}\) は 0 でない \(\sigma\) を逆数にして転置)。最小二乗解は \(\mathbf{x}=A^{+}\mathbf{b}\)。
- 半正定値な対称行列では、特異値は固有値に一致する。一般の対称行列では \(\sigma_i=|\lambda_i|\)。
動かしてみる
- 「特異値分解」では、円が楕円に変わります。楕円の軸が \(\sigma_1\mathbf{u}_1,\ \sigma_2\mathbf{u}_2\) で、円の上の \(\mathbf{v}_1,\mathbf{v}_2\) がそこへ写ります。\(|\det A|=\sigma_1\sigma_2\) も確かめられます。
- \(a=b=c=d=1\) のようにすると \(\sigma_2=0\) になり、楕円が線につぶれます(ランク 1)。0 でない特異値は 1 個だけです。
- 「固有値分解」に切り替えると、向きが変わらない直線(灰の点線)が見えます。その上の点 \(\mathbf{v}\) は \(\lambda\mathbf{v}\) に写ります。\(A\) を対称にする(\(b=c\))と、2 本の直線が直交します。
- \(a=d=0,\ b=-1,\ c=1\)(90° 回転)では実の固有ベクトルがなく、\(a=b=d=1,\ c=0\) では固有ベクトルが 1 本しかなく対角化できません。
低ランク近似¶
特異値を大きい順に \(k\) 個だけ残して、行列を近似する。
\[
A_k=\sum_{i=1}^{k}\sigma_i\mathbf{u}_i\mathbf{v}_i^{\top}=U_k\Sigma_kV_k^{\top},\qquad
\|A-A_k\|_F=\sqrt{\sum_{i=k+1}^{r}\sigma_i^2},\qquad
\|A-A_k\|_2=\sigma_{k+1}
\]
- Eckart–Young の定理:\(A_k\) は、ランクが \(k\) 以下の行列の中で、フロベニウスノルムでもスペクトルノルムでも \(A\) に最も近い。
- 保存する数は \(mn\) 個から \(k(m+n+1)\) 個に減る。
- 応用:画像の圧縮、PCA(中心化したデータ行列 \(X_c=U\Sigma V^{\top}\) の \(V\) が主成分、分散は \(\sigma_i^2/(N-1)\))、潜在意味解析、推薦の行列分解。
- 大規模モデルの微調整で、重みの更新を低ランク行列 \(\Delta W=BA\) で表す LoRA もこの考え方(軽量化・高速化)。
動かしてみる
- \(k=1\) でも棒グラフの 1 本目が圧倒的に大きく、累積寄与率が約 97 % あります。\(k=4\) ごろで元の行列とほとんど区別がつきません。
- 誤差 \(\|A-A_k\|_F\) は、切り捨てた特異値だけから計算できます(右の「直接計算」と一致します)。
- この 12×12 の行列は、\(k=7\) 以降の特異値がほぼ 0 です。つまり実質的なランクは 6 で、残りの次元は冗長です。
試験の着眼点¶
- 固有値分解は正方行列だけ、特異値分解は任意の形の行列に使える。
- \(\sigma_i=\sqrt{\lambda_i(A^{\top}A)}\)。右特異ベクトルは \(A^{\top}A\)、左特異ベクトルは \(AA^{\top}\) の固有ベクトル。
- ランク = 0 でない特異値の個数。低ランク近似の誤差は、切り捨てた特異値の二乗和の平方根。
- 対称行列の固有ベクトルは直交。半正定値 ⇔ 固有値が非負。
- 共分散行列の固有値分解が PCA。寄与率は \(\lambda_i/\sum_j\lambda_j\)。
- \(\operatorname{tr}A=\sum\lambda_i\)、\(\det A=\prod\lambda_i\) で、固有値の計算を検算する。