ベイズ最適化において、どの獲得関数を使えばよいのか?

分子設計・材料設計・プロセス設計・プロセス管理において、分子記述子・実験条件・合成条件・製造条件・評価条件・プロセス条件・プロセス変数などの特徴量 x と分子・材料の物性・活性・特性や製品の品質などの目的変数 y との間で数理モデル y = f(x) を構築し、構築したモデルに x の値を入力して y の値を予測したり、y が目標値となる x の値を設計したりします。

特にモデルによる x の設計と実験・製造を繰り返す適応的実験計画法もしくは能動学習において、ベイズ最適化が活用されます。

[無料公開] 「Pythonで学ぶ実験計画法入門 ベイズ最適化によるデータ解析」 の “まえがき”、目次の詳細、第1・2章
2021 年 6 月 3 日に、金子弘昌著の「Pythonで学ぶ実験計画法入門 ベイズ最適化によるデータ解析」が出版されました。 講談社: Amazon: Amazon(Kindle): === 出版して約2年経過した 2023 年 4 月...

 

ベイズ最適化において、獲得関数の値が大きい x の候補を選択することになりますが、獲得関数の種類は一つではありません。そのため、よくいただく質問に 「あるデータセットが与えられたときに、獲得関数をどのように決めればよいですか?」 というものがあります。ベイズ最適化で用いられるガウス過程回帰のカーネル関数であれば、ガウス過程回帰モデルの予測性能を評価することで、データセットごとに適切なカーネル関数を選ぶことができます。例えば、

 

  • トレーニングデータとテストデータに分割して、トレーニングデータでモデルを構築してテストデータを予測して、予測結果が良好なカーネル関数を選ぶ
  • クロスバリエーションの予測性能の高いカーネル関数を選ぶ

 

といったことをします。一方で、獲得関数はモデルの予測性能とは関係ないため、今あるデータから選択することができません。イメージとしては、教師なし学習を考えていただければと思います。主成分分析における主成分数やクラスタリングに行けるクラスター数を、データセットのみから決められないのと同様に、ベイズ最適化における格闘関数もデータセットのみからは決めることができません。

ただ、データセットが与えられたときにどの獲得関数を使えばよいかを1つに決めることはできませんが、適応的実験計画法もしくは能動学習におけるベイズ最適化をするときの、獲得関数の使い方としては、提案できることがあります。

それは、モデルに基づく x の設計と実験のセットを1サイクルとしたときに、サイクルごとに獲得関数の種類を変えます。例えば、

 

  • Probability of Improvement (PI)
  • Expected Improvement (EI)
  • Mutual Information (MI)

 

を使い、どれを使えばよいか迷っているときは、1サイクル目は PI、2サイクル目は EI、3サイクル目は MI、4サイクル目は PI、、、といった順番にします。こうすることで、サイクルを繰り返した後に多様な x の候補が選択されることになり、効率的に外挿領域を探索できます。あるデータセットを用いてベイズ最適化していくときに、ずっと同じ一つの獲得関数で x の候補を選択するより、いろいろな獲得関数を順番に用いる方が、最終的な実験回数を低減できることを確認しています。ベイズ最適化をお使いの方は、ぜひ試していただければと思います。

なお上記の内容はすべて Datachemical LAB で実現可能です。

https://www.datachemicallab.com/

 

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

タイトルとURLをコピーしました