はじめに
データを使って仮説の生成と検証を行なうための方法であるベイズ最適化を学ぶために,今村秀明・松井孝太 著「増補改訂版 ベイズ最適化 ー適応的実験計画の基礎と実践ー」を読むことにした。
本記事は,「第4章 Optuna によるベイズ最適化の実装方法」における,GPSamplerの基礎的な使い方に関する読書メモである。
4.4 GPSampler の基礎的な使い方
本節では,Oputunaにおいてガウス過程に基づくベイズ最適化を実現するために必要となるGPSamplerを紹介している。
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カーネルは,
上式ではカーネル関数の長さスケールは全ての次元で共通であるが,GPSamplerでは次元ごとに長さスケールを設定するARDカーネルが用いられる。
離散変数・カテゴリカル変数の扱い
GPSamplerは,離散変数・カテゴリカル変数をガウス過程回帰の枠組みで扱うことができる。これは,いったん連続変数として計算して,ユーザに返す際にサンプリングされた連続変数値を離散化することによって実現している。
GPSamplerにおける獲得関数
GPSamplerでは獲得関数として,期待改善量が用いられる。
参考 :
stern-bow.hatenablog.com
期待改善量は,標準正規分布の確率密度関数と累積分布関数
を用いると,
GPSamplerの実装には,以下のような工夫がなされている。
- 初期値候補のサンプリングでは,Sobol’列を用いた準モンテカルロ法(Quasi-Monte Carlo method)が用いられる。
- これにより,探索空間上に一様に広がった点列が得られる。
- 局所最適化に用いる初期値の選択には,遺伝的アルゴリズムなどで用いられるルーレット選択が用いられる。
といった工夫がなされている。
まとめと感想
今回は,「第4章 Optuna によるベイズ最適化の実装方法」における,GPSamplerの基礎的な使い方について学んだ。
本節で紹介されたGPSamplerは,従来のBoTorchSamplerと比較して以下の点で有用であると理解した。
- 高速かつ軽量な設計 : SciPyとPyTorchをベースにしており,BoTorchを使用しない分,製造現場での軽量な実装や既存コードとの統合がしやすい。
- 離散・カテゴリカル変数のサポート : 例えば材料の種類や加工条件(各種設定などのステップ値)といった変数も自然に扱えるため,実験計画の自由度が高い。
ベイズ最適化では,様々な条件で繰り返し計算をしたい,という要望があると考えられるため,高速で試行錯誤ができるのは実用的だと考えられる。
本記事を最後まで読んでくださり,どうもありがとうございました。