Bayesian Optimizationに関するメモ

先日のNL研で@issei_satoさんのBayesian Optimizationの講演を聞いてきたので、自分なりにメモをまとめておく。

Bayesian Optimizationは、関数をなんらかの確率分布で近似し、その確率分布を使って最適化を行う手法である。1回の評価にかかるコストがとても大きな問題に対してできるだけ少ない回数でいい解を得るための手法である。例えば、最近の流行である深層学習も含め、機械学習にはハイパーパラメーターがつきものだが、ハイパーパラメーターを1つ評価するためには学習をまるまる1回実行しなければならないので、当たり前だが評価コストがとても高い。このような場合にBayesian Optimizationを使う。

解くべき具体的な問題設定としては、0個以上の(最適化したい)目的関数の評価結果が手元にある場合に、次にどこを調べればいいかを考える、というものになる。Bayesian Optimizationではこの問題を以下の2つの問題に分割する。

  • 目的関数をなんか別の(計算しやすい)関数で近似する
  • どこらへんを調べればいいのかを考える

目的関数の近似には、典型的にはGaussian Process(以下GP)を使う。Nonparametric Bayesだ! GP以外を使う手法もあるが、計算がやりやすいとかメリットがあるので、GPが主流らしい。GPは平均と共分散をパラメーターとして取る。共分散を計算する際にはカーネルが必要になってくるので、カーネルとして何を使うかという問題が出てくる。Matern kernelというのを使うのがいいそうだ。

GP w/Matern kernelを使って関数を近似することに決めたとしよう。しかし、次にどこらへんを調べればいいのかは、まだ決まらない。ここには探索と活用のトレードオフがある。つまり、既にいい結果が得られた点の近傍を探す(活用)のと、まだあんまり調べてないところを探す(探索)のバランスをいい感じにとらないといけない。有名な手法として、Expected Improvement (Mockus, 1978), Confidence Bound (GP-UCB) (Srinivas+, 2010), Mutual Information (Contal+, 2014)がある。一番理解が簡単なConfidence Boundは、基本的には平均と分散の和がもっとも大きなところを次の探索点とする。基本的には、というのは、実際には分散の方に重み係数が付いているからである。また、この係数をいい感じに調整するのが難しいので、Confidence Boundはあまりおすすめではないらしい。Mutual Informationを使っておくのがいいそうである。

Expected Improvement, Confidence Boundなど、次の探索点を決める基準となる関数(これを獲得関数と呼ぶ)を決めると、次の探索点が自動的に決まる……というわけではない。当たり前だが、獲得関数自体も多峰性を持つので、どこらへんの値がいいのか、スコアが高い場所を、閉じた形では求められない。ただ、獲得関数の評価は目的関数の評価と違って一瞬なので、グリッドサーチするなり、大量サンプリングするなり、Latin Hypercube Samplingを使うなりで、大域最適ではないにせよ、かなりいいところを求めることができる。

これで話が終わればBayesian Optimizationは簡単で素晴らしい、ということになるのだろうが、いくつか残っている問題がある。まず、Bayesian Optimization自体にハイパーパラメーターがある。ハイパーパラメーターを最適化しようと思ったら別のハイパーパラメーターが出てくるとは、地獄を輪廻するような話であるが、これが現実である、致し方ない。こちらのハイパーパラメーターは経験ベイズ法やMCMC (Snoek+, 2012)を使って求めるらしい。経験ベイズ法は解析的に解が求まるが、性能的にはMCMCの方がいいので、MCMCを使ったほうがいいそうだ。

それと、パラメーターの最適値のスケールは、ぜんぜん違う事が多い。例えば、学習率は0.01とかそんな大きさだが、ニューラルネットのレイヤーの次元数は100とか200とかになる。この探索空間はあらかじめ、ある程度スケールを揃えておいた方がいいらしい。(Snoek, ICML2014)とかにもこの辺りの話題があるそうだ。

あと、Multitask Bayesian Optimizationとか、並列化をどうするのか言った話題があった。現実に人が解いている問題設定と同じものを解こうとするとシンプルなBayesian Optimiztionでは収まらない部分があったりするので、それに合わせてBayesian Optimization側も拡張するという話だと思ってよいと思う。

Bayesian Optimizationについての詳細な話が日本語で聴ける機会はなかなかないので、参加しててよかった。

このエントリーをはてなブックマークに追加

Latest articles