固有値分解と白色化

固有値分解と白色化

執筆済 最適化CMA-ES線形代数

共分散行列 C を実際に使うには、 固有値分解しておく必要がある。

C=BD2B
  • B直交行列。列が C の固有ベクトル(楕円の軸の向き)
  • D … 対角行列。対角成分が固有値の平方根(各軸の長さ)

使い道 1 — 候補の生成#

標準正規から引いた z𝒩(0,I) を変換すれば、 目的の分布から引いたことになる。

y=BDzy𝒩(0,C)

D で各軸方向に伸ばし、B で回す、という順序。

使い道 2 — 白色化#

逆向きの変換が行列の逆平方根

C1/2=BD1B

これを掛けると、分布が球状に戻る(白色化)。 ステップサイズ適応pσ をこの空間で測るのは、分布が細長いせいで長さの判定が 歪むのを避けるため。球に戻してから測れば、 「でたらめなら長さはこれくらい」という基準がそのまま使える。

計算コストという問題#

固有値分解は 𝒪(n3) かかる。毎世代やると、 次元が上がったときにここが支配的になる。

実装では 𝒪(n2) 世代に 1 回だけ分解を行い、 その間は前回の B,D を使い回す。C の学習率が小さく、 1 世代での変化がわずかであることを利用した近似で、 Hansen らの 2003 年の論文が計算量をこの形に落とした。

数値的な注意

C は理論上は対称正定値だが、浮動小数点の丸め誤差で 対称性が崩れることがある。実装では上三角だけを保持して 明示的に対称化するのが定石。

参考文献#

ノート一覧を閉じる