最適化アルゴリズム概観

デリバティブプライシングでは、モデルをマーケットにフィッティングさせるために、モデル価格とマーケット価格の差の二乗和を最小化する際、最適化アルゴリズムを回す必要がある。

加えて、最近流行りの機会学習の応用においても、計算エンジンのコアとなる部分では必ずといっていいほど最適化アルゴリズムを回している。

 

 
この最適化アルゴリズムにはおびただしい数がある。

 

QuantLibではたいていLevenberg-Marquardt法が用いられているが、他にも筆者が実務で使われているのを確認したものとしては、
・Nelder Mead
・BFGS
・Differential Evolution
・Simulated Annealing
などがある。
 
これらの特徴を比較していきたいところだが、まずは最適化アルゴリズムを大まかに分類しておく。
 
ここでは、連続的な値をとる目的関数の最適化に限定する。つまり、いわゆる組み合わせ最適化の話はいったん除外しておく。
 
分類の軸としては、以下のようなものがある。
⑴微分情報を使うかどうか
⑵大域的最適化に向いているかどうか
 
⑴については、
・目的関数の微分情報を使うものの方が収束は速い
・しかし、そもそも微分情報が正確に得られるケースは実務ではまれである
・微分情報をメモリーに格納しないといけないので、メモリ効率が悪い
・収束が速いということは、解が誤った方向にすっ飛んでいってしまうことも多い
といったことがいえるだろう。
 
⑵については、
・大域的最適化が目的のアルゴリズムは、可能性のあるパラメーター空間をくまなく探すため、収束は遅い
・また、いったん収束したように見えても、そこからあえて結果が悪くなる方向に動いたりするので、計算が遅くなる
・大域的最適化に向いていないアルゴリズムは、計算は速いが、局所最適解におちいっている可能性がある
といったことがいえるだろう。
 

—–