繰り返しの掛け算で支配的な方向を見つける
1000×1000 の行列で特性多項式を解くのは現実的ではなく、しばしば最大の固有対だけ(たとえば第1主成分)が必要です。べき乗法は行列とベクトルの積だけでそれを求めます。任意のベクトル x0 から始め、xk+1=Axk/∥Axk∥ を繰り返します。掛けるたびに支配的な固有ベクトル方向の成分が他より大きく伸びるので、十分な回数の後にはベクトルがその方向を向きます。
xk+1=∥Axk∥Axk,λ≈xkTxkxkTAxk,ek∝λ1λ2k(1) x0=c1v1+c2v2+⋯ と固有ベクトルで展開します。k 回後には係数が λik 倍されるので、2番目と1番目の比は (λ2/λ1)k です。∣λ1∣>∣λ2∣ で、初期ベクトルが v1 方向の成分を持てば収束し、速さは ∣λ2/λ1∣ で決まります。固有値が近いと収束は遅くなります。正規化はオーバーフローを防ぐだけで、重要なのは方向です。固有値の推定にはレイリー商を使います。次の固有対は、対称行列 A から λ1v1v1T を引いて繰り返し、これを収縮(デフレーション)と呼びます。
手計算で数ステップA=(2112)(固有値3と1、支配的な固有ベクトルは
(1,1))を考えます。
x0=(1,0) から始めると
Ax0=(2,1) で、
(2,1) のレイリー商は
5(2,1)⋅(5,4)=514=2.8 とすでに3に近い値です。次の積は
A(2,1)=(5,4) で、ほぼ
(1,1) の方向です。誤差は1回ごとに
∣λ2/λ1∣=1/3 倍になるので、
10−6 まで縮めるには
3k≥106 となる
k=13 が必要です。
- 更新:A を掛けてノルムで割ることを繰り返す。1回あたり行列ベクトル積1回のコスト。
- 速さ:誤差は ∣λ2/λ1∣k で減る。上位の固有値が近いと収束は遅い。
- 条件:∣λ1∣>∣λ2∣ という差と、v1 に直交しない初期ベクトル。
同じ発想がウェブページの順位付けに使われるべき乗法はPageRankの背後にある手法で、共分散行列が巨大であったり明示的に作られず積 Ax しか使えなかったりする場合に、何千もの資産の第1主成分を安く計算する方法でもあります。完全な分解を行うライブラリのルーチンは約 n3 回の演算ですが、べき乗法の1ステップは密行列でも n2 です。 ラボ:採点される内容
- 何に収束するか15点
- レイリー商20点
- 収束比10点
- 反復回数15点
- アルゴリズムの順序15点
- 遅い・失敗する場合15点
- なぜ正規化するか10点