アルゴリズム¶
ここでは、ベイズ最適化に関する説明を行います。技術的な詳細については、こちらの文献 を参照してください。
ベイズ最適化¶
ベイズ最適化は、複雑なシミュレーションや、実世界における実験タスクなど、目的関数(特性値など)の評価に大きなコストがかかるような場合に利用できる手法です。つまり、「できるだけ少ない実験・シミュレーション回数でより良い目的関数(材料特性など)を持つ説明変数(材料の組成、構造、プロセスやシミュレーションパラメータなど)を見つけ出す」ことが、ベイズ最適化によって解かれる問題です。ベイズ最適化では、探索する説明変数(ベクトルxで表す)の候補をあらかじめリストアップした状況からスタートします。そして、候補の中から目的関数yが良くなると考えられる候補を、機械学習(ガウス過程回帰を利用)による予測をうまく利用することで選定します。その候補に対して実験・シミュレーションを行い目的関数の値を評価します。機械学習による選定・実験シミュレーションによる評価を繰り返すことにより、できるだけ少ない回数で最適化が可能となります。
ベイズ最適化のアルゴリズムの詳細を以下に示します。
- ステップ1:初期化
探索したい空間をあらかじめ用意します。つまり、候補となる材料の組成・構造・プロセスやシミュレーションパラメータ等を、ベクトル \({\bf x}\) で表現しリストアップします。この段階では、目的関数の値はわかっていません。このうち初期状態としていくつかの候補を選び、実験またはシミュレーションによって目的関数の値 \({\bf y}\) を見積もります。これにより、説明変数 \({\bf x}\) と目的関数 \({\bf y}\) が揃った学習データ \(D = \{ {\bf x}_i, {\bf y}_i \}_{(i=1, \cdots, N)}\) が得られます。
- ステップ2:候補選定
学習データを用いて、ガウス過程を学習します。ガウス過程によれば、任意の \({\bf x}\) における予測値の平均を \(\mu_c ({\bf x})\) 、分散を \(\sigma_c ({\bf x})\) とすると、
となります。ただし、 \(k({\bf x}, {\bf x}')\) はカーネルと呼ばれる関数であり、2つのベクトルの類似度を表します。一般に、以下のガウスカーネルが使われます。
また、このカーネル関数を利用し、 \({\bf k}({\bf x})\) および \(K\) は以下のように計算されます。
まだ実験やシミュレーションを行っていない候補全てに対して、予測値 \(\mu_c ({\bf x})\) および予測の不確かさに関連する分散 \(\sigma_c ({\bf x})\) を見積もります。これを用いて獲得関数を計算し、目的関数の値がまだわかっていない候補の中から、獲得関数を最大化する候補 \({\bf x}^*\) を選定します。このとき、 \(\lambda\) および \(\gamma\) はハイパーパラメタと呼ばれ、PHYSBOでは最適な値が自動で設定されます。
- ステップ3:実験
ステップ2で選定された獲得関数が最大となる候補 \({\bf x}^*\) に対して実験またはシミュレーションを行い、目的関数値 \({\bf y}\) を見積もります。これにより学習データが一つ追加されます。このステップ2、3を繰り返すことで、スコアのよい候補を探索します。