ベイズ的最適化でパラメータチューニング
ブラックボックスな関数のパラメータを最適化するときに使えると噂のベイズ的最適化のアルゴリズムを実装してみたというはなし。
論文ザッと流し読んでサクッと実装しただけ。
こないだパラメータ6種類くらいあって適切な値の組を探したいみたいなことがあったのだけど、計算機パワーで6重forループ全探索して探すみたいな、ナイーヴのカタマリみたいなことをしていてツラかった。*1
ので、そういうときに使えるかも?なベイズ的最適化のアルゴリズムを実装してみた*2
ベイズ的最適化に関しては、こちらのご講演の動画が初心者にもわかりやすい印象。
実装してみたのは、動画で紹介されていた
のGaussian Processs Upper Confidence Bound (GP-UCB)アルゴリズム。
パラメータに従うブラックボックス関数を最大化する
というような確率的な最適化問題を考えたいのだけど、
を評価するのはexpensiveなので
別の目的関数を用意して、強化学習の要領でパラメータ探索をしてみようというストーリー。
論文では、ブラックボックス関数をGaussian Process(GP)に従うサンプルとしてモデル化し、既にを評価した際のの集合との集合 ]についてのposteriorを考えることで、パラメータ探索のための目的関数を導いている。
に対するpriorを
とすると、に対するposteriorは、
と書ける。ここで平均は
分散は
where
であり、]、はカーネルのグラム行列() 。
このposteriorのGPの平均と分散を用いて、探索の戦略を
としてみましたというのがこの論文。
これは強化学習っぽい戦略で、今までパラメータ評価して得た知識を「活用」するための項がの項で、新しいパラメータを「探索」するための項がの項になっている。が小さければあまり「探索」しないし、が大きいとどんどん「探索」するカンジになる。
やることとしては、
- 目的関数の値を全てのパラメータ候補について求める
- 目的関数を最大化するパラメータをとして選ぶ
- を用いてブラックボックス関数を評価してを得る
- posterior更新
- 1.〜4.を繰り返す
というただそれだけ(だとおもう、多分)。実装カンタン、ヨカッタ!
パラメータ1次元としてブラックボックス関数をとしててきとーに実装してみたけれど、思ったのは、GPのposteriorの平均・分散の計算が計算量小さいという前提なんだろうなということと、が小さいとソッコーでlocal optimaにドボンすること。探索と活用のトレードオフというやつですね。*3
ベイズ的最適化、もっと難しいモノだと思っていたけど、少なくともこのアルゴリズムに関しては、なんのことはないGPのposterior使って探索するだけというカンジでした。逆に言うとsimpleで美しいとも言えるような。