Blog

シンプルなベイズ最適化について


みなさんこんにちは! 6月からAI Labに異動してきた野村(@nmasahiro_)と申します.

先月まではSparkで集計基盤を作ったりといったデータエンジニアリング業務に従事していましたが,現在は数理最適化の研究を行っています.

今回は機械学習手法のハイパーパラメータ最適化によく利用されているベイズ最適化について勉強してみたので,自分なりの理解をまとめておこうと思います.

まだ勉強中の身ですので,もし気になる点などあればご指摘いただけると嬉しいです!

 

はじめに

Black-box関数最適化問題というのは,目的関数の代数的な表現,つまり,数式自体が与えられず,解に対する目的関数値のみを利用することができる問題です.

機械学習手法のハイパーパラメータ最適化などがBlack-box関数最適化問題の枠組みに属します.例としてDeep Learningのハイパーパラメータ最適化問題を考えた場合,バッチサイズ,ネットワーク構造(中間層の数,各層のユニット数,活性化関数の種類など),ドロップアウト率,最適化手法の種類,学習率などが最適化すべきハイパーパラメータに対応します.

Black-box関数最適化では解の1回の評価の計算コストが大きいことを前提としていることが特徴です.前述のDeep Learningの例を考えると,1回の評価に数時間かかることが容易に考えられると思います.よって,探索にかかる評価回数をいかに少なくできるかが重要となります.

なお,本記事では常に最小化問題を仮定します.

 

ベイズ最適化

ベイズ最適化(Bayesian Optimization)は有力なBlack-box関数最適化手法の1つであり,近年では機械学習手法のハイパーパラメータ最適化によく利用されています.ベイズ最適化は,Grid Search,Random Searchと比較して効率よく優れた解を求められることが報告されています[Snoek, 2015]. Googleはベイズ最適化でクッキーを作ったりしてます.楽しそう.

ベイズ最適化では評価に大きな計算コストのかかる目的関数の代わりにAcquisition functionと呼ばれる代理関数を最適化することで,次の探索点を選択します.このAcquisition functionを構築するために,Gaussian Processが使われることが多いです.ベイズ最適化には様々なvariantが存在しますが,本記事では,文献[Brochu, 2010]で説明されているシンプルなベイズ最適化のモデルを説明しようと思います.

 

全体のアルゴリズム

ベイズ最適化は,以下の操作を繰り返すことで探索を行います.

  • Gaussian Processによって予測した平均,分散を使って計算したAcquisition functionを最適化して,次の探索点を得る
  • 得られた探索点を評価し,評価値を得る
  • 探索点と評価値の組を保存し,Gaussian Processを更新する

つまり,ベイズ最適化では,ある解の”良さ”をAcquisition functionを通して評価し,そのAcquisition functionをGaussian Processによって更新するという訳です.それでは,このGaussian ProcessとAcquisition functionが何者なのかを見ていきます.

 

Gaussian Process

Gaussian Processは関数の空間で議論をすることから,正規分布の無限次元への拡張と言われることがあります.正規分布が確率変数上の分布であり,平均ベクトルと共分散行列により一意に定められるのに対し,Gaussian Processは関数上の分布であり,平均関数と共分散関数により定められます.

f(x)GP(m(x),k(x,x))

直感的には,Gaussian Processは,あるxに対してスカラーf(x)を返すのではなく,xにおけるfの値f(x)が従う正規分布(つまり,平均と分散)を返すイメージです.

共分散行列(カーネル関数)kとしてよく使われるのがsquared exponential functionであり,以下の式で表されます.x,xが似ていると1,似てないと0に近くなるので,類似度を表現するようなものと考えることができます.カーネル関数にハイパーパラメータを導入したり,squared exponential function以外のカーネル関数を使ったりといったことをよくするのですが,ここでは省略します.ハイパーパラメータ最適化手法のハイパーパラメータを決定するのが難しい問題は根強いですね...

k(x,x)=exp(12xx2).

今,観測データD1:t={x1:t,y1:t}があるとします.求めたいのはft+1=f(xt+1)の予測分布P(ft+1|D1:t,xt+1)です.

まず,ガウス過程の性質より,f1:tft+1の同時分布は以下で与えられます.

P(f1:t+1)=P(f1:t,ft+1)=N(0,[KkTkk(xt+1,xt+1)])

ここで,

k=[k(xt+1,x1),k(xt+1,x2),,k(xt+1,xt)]

です.

それでは,予測分布P(ft+1|D1:t,xt+1)=N(μxt+1|x1:t,σ2xt+1|x1:t)μ,σを求めていこうと思います.

ここで,以下の条件つき正規分布についての補題を証明なしで使います(詳細はPRML上巻のpp.82-85参照)

μa|b=μa+ΣabΣ1bb(xbμb),Σa|b=ΣaaΣabΣ1bbΣba.

すると,μxt+1|x1:t,σ2xt+1|x1:tは以下の式で求められます.

μxt+1|x1:t=kTK1f1:t,σ2xt+1|x1:t=k(xt+1,xt+1)kTK1k.

結果をまとめると,以下のようになります.

P(ft+1|D1:t,xt+1)=N(μxt+1|x1:t,σ2xt+1|x1:t)=N(kTK1f1:t,k(xt+1,xt+1)kTK1k).

 

サンプル数2のとき,3つ目の予測値はどうなるか

上の式だけ見ても,イマイチGaussian Processが予測しようとしているものがわからなかったので,サンプル数が2,つまりx1:2が得られているとき,3つ目の解の評価値f(x3)の平均μx3|x1:2を具体的に計算してみます.

まず,Kについて,k(x1,x1)=k(x2,x2)=1であり,

K=[1k(x1,x2)k(x1,x2)1]
となるので,

K1=11k(x1,x2)2[1k(x1,x2)k(x1,x2)1].

よって,

kTK1f1:2=11k(x1,x2)2{(k(x3,x1)k(x3,x2)k(x1,x2))f(x1)+(k(x3,x2)k(x3,x1)k(x1,x2))f(x2)}

上式から,以下のように考えることができます.

  • f(x3)の平均であるμx3|x1:2f(x1),f(x2)の線形和になっている.
  • カーネル関数について,近いほど大きい値を取ったことを思い出すと,x3x1に近いほどf(x1)を考慮し,x3x2に近いほどf(x2)を考慮しているように見える.

 

Acquisition function

ついにGaussian Processによって予測された評価値の平均,分散を使うときがやってきました.目的関数の代わりになるようなAcquisition functionを定義する必要があるのですが,それには以下のような性質を満たしていることが理想であると考えられます.

  • 良いかもしれないけどまだ探していないところに評価を与える(探索)
  • ある程度良いということがわかってるところに評価を与える(活用)

よく知られているAcquisition functionとして以下の3つがあるので,それぞれについて説明していきます.

  • Probability of Improvement (PI)
  • Expected Improvement (EI)
  • Lower Confidence Bound (LCB)

 

Probability of Improvement (PI)
PIでは改善確率を指標として用います. 1:tでのベストな探索点をx=argminxix1:tf(xi)とすると,
新たな探索点xxを改善する確率PI(x)は以下で計算されます.

PI(x)=P(f(x)f(x))=f(x)N(f(x)|μx,σ2x)df=Φ(f(x)μ(x)σ(x))

ここでΦは標準正規分布の累積分布関数(cdf)です.

しかし,この方法には注意点があります.それは,改善さえすればPIが良くなってしまうという点です.
つまり,無限小の改善であってもPIは良くなってしまうため,不確実だがもっといいかもしれないところより,
無限小の改善だけど改善はしそうというところに探索が集まってしまうのです.つまり,活用に振りすぎているということになります.
これを改善しようとして,trade-off parameter ξ0を用いる方法が提案されています.

PI(x)=P(f(x)f(xξ))=f(x)ξN(f(x)|μx,σ2x)=Φ(f(x)ξμ(x)σ(x))

ξはユーザパラメータなので決めるのは(個人的には)なかなか難しいと思ってます.先ほども少し書かせていただいた「ハイパーパラメータ最適化手法のハイパーパラメータ設定難しい説」ですね.

最初はξを大きくして探索をさせるようにし,だんだんξを小さくして活用に振らせるスケジューリングが経験的に良いと報告されているようです.

 

Expected Improvement (EI)
PIは改善確率だけを見ていたことにより,無限小の改善だけど改善はしそうというところが評価されやすくなるという問題点が存在しました.

EIは改善確率に加えて改善量(の期待値)も見るということがPIと異なります.以下で具体的に計算をしていきます.

 

改善量I(x)を以下の式で定義します.

I(x)=max{0,fxft+1(x)}

ここで,maxオペレータによりIの取り得る値の範囲は0以上となるため,最終的に改善量Iの期待値を計算する際には0以上の範囲のみを考えれば良いことになります.よって,Iが従う分布についても0以上の範囲のみについて考えることにします.

すると,ft+1(x)N(μ(x),σ2(x))より,
I(x)N(f(x)μ(x),σ2(x))
よって,Iの尤度は,

P(I)=12πσ(x)exp(12(If(x)+μ(x))2σ2(x))

となる.

よって,Iの期待値は,

E(I)=I=I=0I12πσ(x)exp(12(If(x)+μ(x))2σ2(x))dI

ここで,t=If(x)+μ(x)σ(x)とおくと,
I=0t=f(x)+μ(x)σ(x)I=t=
また,dt=1σ(x)dI,I=σ(x)t+f(x)μ(x)より,

E(I)=t=t=f(x)+μ(x)σ(x)(σ(x)t+f(x)μ(x))12πσ(x)exp(12t2)σ(x)dt=σ(x)t=t=f(x)+μ(x)σ(x)t2πexp(12t2)dt    +(f(x)μ(x))t=t=f(x)+μ(x)σ(x)12πexp(12t2)dt

ここで,上式について,t2=uとおくとtdt=12du
よって,

σ(x)t=t=f(x)+μ(x)σ(x)t2πexp(12t2)dt=σ(x)u=u=t212πexp(12u)12du=σ(x)2π[exp(12u)]u=u=t2=σ(x)2π[exp(12[If(x)+μ(x)σ(x)]2)]I=I=0=σ(x)2π(0+exp(12[f(x)+μ(x)σ(x)]2))=σ(x)12πexp(12[f(x)+μ(x)σ(x)]2)=σ(x)N(f(x)+μ(x)σ(x)|0,1)=σ(x)ϕ(f(x)+μ(x)σ(x))=σ(x)ϕ(f(x)μ(x)σ(x))

また,

(f(x)μ(x))t=t=f(x)+μ(x)σ(x)12πexp(12t2)dt=(f(x)μ(x))(1t=f(x)+μ(x)σ(x)t=12πexp(12t2)dt)=(f(x)μ(x))(1Φ(f(x)+μ(x)σ(x)))=(f(x)μ(x))Φ(f(x)μ(x)σ(x))

まとめると,

E(I)Z={σ(x)ϕ(Z)+(f(x)μ(x))Φ(Z)0if σ(x)>0if σ(x)=0=f(x)μ(x)σ(x)

 

Upper Confidence Bound (UCB)
BanditでおなじみUCBです.ここで,κ(0)はユーザパラメータです.

μ(x)が活用,σ(x)が探索に対応する項であり,κによって探索と活用のトレードオフを取っています.

 

UCB(x)=μ(x)+κσ(x)

 

おわりに

本記事ではシンプルなベイズ最適化のモデルについて説明しました.個人的に,今回取り上げたベイズ最適化において改善できそう(あるいは改善したい)と感じた部分は以下になります.

  • サンプル数nに対して時間計算量がO(n3)のため,収束性が重要な問題に対しても多数のサンプル生成が難しい.
  • 設定すべきパラメータが多い.例えば,カーネル関数(とそれに用いるハイパーパラメータ),Acquisition functionの最適化手法どれにするかなど,職人芸が必要な部分がある.
    • Acquisition functionはnon-convexであるため,局所探索に重きを置いている手法を複数回繰り返す,あるいは,大域的探索が可能な手法を使う必要があると考えられる.
  • 離散変数をうまく扱う枠組みがない.

次回は以下のようなことを行いたいと考えています.

  • 上記の課題点を解決できているベイズ最適化のvariantがあるかどうか調査
    • ベイズ最適化のサーベイ論文[Shahriari, 2016]読んでみる
    • GPをDNNに置き換えた[Snoek, 2015]は気になる
  • ハイパーパラメータに対してrobust, あるいはsensitiveな機械学習手法の洗い出し
  • 他のBlack-box関数最適化手法との比較実験

読んで下さり,ありがとうございました.

 

引用文献

  • E.Brochu, V.M.Cora, N.de Freitas : A Tutorial on Bayesian Optimization of Expensive Cost Functions, with Application to Active User Modeling and Hierarchical Reinforcement Learning, arXiv:1012.2599 (2010).
  • B. Shahriari, K. Swersky, Z. Wang, R. Adams, and N. de Freitas : Taking the human out of the loop: A Review of Bayesian Optimization. Proc. of the IEEE,(1), 12/2015(2016)
  • J.Snoek, H.Larochelle, R.P.Adams : Practical Bayesian Optimization of Machine Learning Algorithms, AdvancesinNeuralInformationProcessingSystem25, pp.2951-2959(2012).
  • J.Snoek, O.Rippel, K.Swersky, R.Kiros, N.Satish, N.Sundaram, M.M.A.Patwary, Prabhat, and R.P.Adams : Scalable Bayesian optimization using Deep Neural Networks, In Proc. of ICML15 (2015)

Author

アバター
nomura

関連記事