大きな共分散行列を、低ランク更新で高速に扱う方法

大きな共分散行列を、低ランク更新で高速に扱う方法

記事
IT・テクノロジー
今回は、CMB、つまり宇宙マイクロ波背景放射の解析で使われるような「大きな共分散行列」を題材に、数値計算の安定性と高速化のテストを行いました。

ただし、ここで先に大事な点を明確にしておきます。

今回使ったのは、実際のPlanck衛星データそのものではありません。
Planck/CMB解析で出てくるような行列構造を参考にした、合成データです。

そのため、この記事は宇宙論の新しい結果を出すものではありません。
Planckの解析結果を更新するものでも、CMBの尤度計算を改良したと主張するものでもありません。

あくまで、公開されているCMB解析の数理構造を参考にした、数値線形代数の実装テストです。

何をしたのか
CMB解析では、観測されたパワースペクトルや前景放射、装置ノイズなどの不確かさを扱うために、共分散行列が重要になります。

共分散行列とは、複数の量がどのように一緒に変動するかを表す行列です。

データ点が増えると、この行列はどんどん大きくなります。
行列が大きくなると、毎回まるごと分解したり逆行列を計算したりする処理は、重くなります。

そこで今回は、次のような形の行列を用意しました。
C = C_base + U A U^T
これは、

C_base: もとの共分散行列

U A U^T: 低ランクの追加成分

という意味です。

低ランクとは、ざっくり言えば「全体に比べて小さい次元で表現できる変化」のことです。

たとえば、ある系統誤差やテンプレート成分が、全データ点に影響するものの、その自由度自体は少ない場合、このような形で扱えることがあります。

なぜ Woodbury が効くのか
通常、共分散行列が少し変わるたびに、行列全体を直接解くと計算が重くなります。

しかし、変化が低ランクの形で書ける場合、Woodbury の公式を使うことで、あらかじめ計算してあるベース行列の分解結果を再利用し、全体を毎回まるごと解き直さずに計算できます。

Woodbury の公式は、線形代数でよく使われる恒等式です。
近似ではなく、条件が合えば数学的には同じ答えを別の形で計算できます。

今回の目的は、この Woodbury 経路が、通常の dense、つまり行列全体を直接扱う経路と一致するかを確認することでした。

今回のテスト条件
今回使った行列は、Planck/CMB foreground 解析のような構造を参考にした合成データです。

条件は以下です。

source_mode:
SYNTHETIC_PUBLIC_SHAPE_FIXTURE

matrix dimension:
384

low-rank update dimension:
8

つまり、384次元の共分散行列に対して、8次元の低ランク更新を加えた形です。

実データではなく合成データなので、ここから宇宙論的な結論は出しません。
見るのは、あくまで数値計算としての一致性です。

結果
通常の dense 経路と、Woodbury 経路で、同じ二次形式の値を計算しました。

結果は以下です。

dense chi-square:
13.761884809775902

Woodbury chi-square:
13.761884809775905

差は次の通りです。

absolute chi-square difference:
3.552713678800501e-15

relative solution difference:
8.896851625720821e-16

これは、実質的には浮動小数点の丸め誤差レベルです。

つまり、この条件では、Woodbury 経路は dense 経路と同じ結果を再現できました。

実行時間

今回の小さなテストでは、実行時間も比較しました。

dense seconds:
0.05336820799857378

Woodbury seconds:
0.012587749981321394
このケースでは、Woodbury 経路の方が速くなりました。

もちろん、これは384次元の合成テストでの結果です。
実データや大規模データでは、行列サイズ、低ランク成分の次元、メモリ配置、実装方法によって速度差は変わります。

それでも、「低ランク更新として明示できる構造なら、全体を毎回解き直さなくてよい」という方向性は確認できました。

この結果から言えること
今回言えるのは、かなり限定された数値計算上の結果です。

CMB解析のように、大きな共分散行列と低ランクの追加成分が出てくる問題では、Woodbury の公式を使った計算経路を検証する価値があります。

今回の合成データでは、Woodbury 経路が dense 経路と丸め誤差レベルで一致しました。

これは、低ランク更新つき共分散行列を扱う数値計算としては、非常に良い確認結果です。

一方で、次のような主張はしていません。

実際のPlanckデータを解析した

Planckの結果を更新した

CMB尤度計算を改良した

foreground marginalization を実行した

宇宙論パラメータを推定した

Hubble tension に関する結論を出した

今回の作業は、あくまで合成データによる数値線形代数ベンチマークです。

どんな仕事に使えるか
Woodbury のような低ランク更新は、CMB解析だけでなく、さまざまな分野で使えます。

たとえば、

センサー群の共分散更新

金融リスクモデルのファクター共分散

画像・信号処理のノイズモデル

実験データの系統誤差テンプレート

大規模シミュレーションの近似更新

機械学習のカーネル行列やガウス過程

などです。

共通しているのは、「全体の行列は大きいが、変化の自由度は小さい」という構造です。

この構造を見つけられると、計算を大きく軽くできる可能性があります。

まとめ

今回は、Planck/CMB foreground 解析のような構造を参考にした合成共分散行列を使い、Woodbury の低ランク更新経路を検証しました。

384次元の共分散行列に8次元の低ランク更新を加え、通常の dense 計算と Woodbury 計算を比較したところ、差は 3.55e-15 程度でした。

これは、浮動小数点の丸め誤差レベルです。

つまり、明示的に低ランク構造が与えられている場合、Woodbury 経路は dense 経路と同じ結果を、より軽い計算で再現できることを確認できました。

大きな行列を扱う現場では、「毎回まるごと解く」だけが選択肢ではありません。

データの変化が低ランクで表せるなら、計算の組み方そのものを変えることで、安定性と速度の両方を改善できる可能性があります。




サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す