jiku log

データサイエンスの核心を掴む : 学びと発見の記録

「増補改訂版 ベイズ最適化」を読む ~第4章 Optunaによるベイズ最適化の実装方法 ①GPSamplerの基礎~

はじめに

データを使って仮説の生成と検証を行なうための方法であるベイズ最適化を学ぶために,今村秀明・松井孝太 著「増補改訂版 ベイズ最適化 ー適応的実験計画の基礎と実践ー」を読むことにした。

本記事は,「第4章 Optuna によるベイズ最適化の実装方法」における,GPSamplerの基礎的な使い方に関する読書メモである。

4.4 GPSampler の基礎的な使い方

本節では,Oputunaにおいてガウス過程に基づくベイズ最適化を実現するために必要となるGPSamplerを紹介している。

optuna.readthedocs.io

GPSamplerとBoTorchSamplerの違い

改訂前の「ベイズ最適化 ー適応的実験計画の基礎と実践ー」では,BoTorchSamplerの使い方が説明されている。
GPSamplerとBoTorchSamplerの違いは下表の通りである。

項目 BoTorchSampler GPSampler
使用ライブラリ 主にBoTorchを使用 主にSciPyとPyTorchを使用
実装の特徴 多くのバリエーションに対応 実装するアルゴリズムを絞っている
速度 遅い 大幅な速度向上を実現
離散変数の扱い 苦手 苦手ではない

GPSamplerの利用

GPSamplerを利用するには,事前にSciPyとPyTorchをインストールする必要がある。また,Studyの作成の際に,以下のようにすれば利用できる。

study = optuna.create_study(
    sampler=optuna.integration.GPSampler()
)

GPSamplerの__init__メソッドには,主に以下のような引数がある。

引数名 役割
independent_sampler 初期トライアルのサンプルで用いるサンプラー
n_startup_trials 初期トライアルを行なう件数(デフォルトは10)
deterministic_objective 目的関数がランダム性のない決定的な関数かどうかを指定
constraints_func 制約付き最適化を行なう際に指定する

GPSamplerにおける統計モデル

GPSamplerでは,ブラックボックス関数の統計モデルとして,Matérn5/2カーネルを用いたガウス過程回帰モデルを用いる。Matérn5/2カーネルは,


 \begin{align}
k_{5/2}(\boldsymbol{x}, \boldsymbol{x'}) = \left( 1 + \frac{\sqrt{5} \lVert \boldsymbol{x} - \boldsymbol{x'} \rVert ^2}{3 l^2}  \right) 
\exp \left\{ -\frac{ \sqrt{5} \lVert \boldsymbol{x} - \boldsymbol{x'} \rVert }{ l }  \right\} \\ \\
\end{align}
である。

上式ではカーネル関数の長さスケール lは全ての次元で共通であるが,GPSamplerでは次元ごとに長さスケールを設定するARDカーネルが用いられる。

離散変数・カテゴリカル変数の扱い

GPSamplerは,離散変数・カテゴリカル変数をガウス過程回帰の枠組みで扱うことができる。これは,いったん連続変数として計算して,ユーザに返す際にサンプリングされた連続変数値を離散化することによって実現している。

GPSamplerにおける獲得関数

GPSamplerでは獲得関数として,期待改善量が用いられる。
参考 :
stern-bow.hatenablog.com

期待改善量は,標準正規分布確率密度関数 \phi(x)と累積分布関数 \Phi(z)を用いると,


 \begin{align}
\alpha_{EI}(\boldsymbol{x}) &= \mathbb{E}[\max(0, y_n^*- y)  ]  \\ \\
& = (y_n^* - \mu_n(\boldsymbol{x})) \Phi \left( \frac{y_n^* - \mu_n(\boldsymbol{x}) }{ \sigma_n(\boldsymbol{x}) }  \right) + \sigma_n(\boldsymbol{x}) \phi \left( \frac{y_n^* - \mu_n(\boldsymbol{x}) }{ \sigma_n(\boldsymbol{x}) }  \right)  \\ \\
\end{align}
のように表される。この勾配は解析的に求められる。

GPSamplerの実装には,以下のような工夫がなされている。

  • 初期値候補のサンプリングでは,Sobol’列を用いた準モンテカルロ法(Quasi-Monte Carlo method)が用いられる。
    • これにより,探索空間上に一様に広がった点列が得られる。
  • 局所最適化に用いる初期値の選択には,遺伝的アルゴリズムなどで用いられるルーレット選択が用いられる。

といった工夫がなされている。

まとめと感想

今回は,「第4章 Optuna によるベイズ最適化の実装方法」における,GPSamplerの基礎的な使い方について学んだ。

本節で紹介されたGPSamplerは,従来のBoTorchSamplerと比較して以下の点で有用であると理解した。

  • 高速かつ軽量な設計 : SciPyとPyTorchをベースにしており,BoTorchを使用しない分,製造現場での軽量な実装や既存コードとの統合がしやすい。
  • 離散・カテゴリカル変数のサポート : 例えば材料の種類や加工条件(各種設定などのステップ値)といった変数も自然に扱えるため,実験計画の自由度が高い。

ベイズ最適化では,様々な条件で繰り返し計算をしたい,という要望があると考えられるため,高速で試行錯誤ができるのは実用的だと考えられる。

本記事を最後まで読んでくださり,どうもありがとうございました。