結論、金子先生の書籍が一番わかりやすかった☝️
ベイズ最適化が実験候補を探すのに良い手法、という記事や報告がたくさんあって、いざやってみようと思い、色々ネット記事や書籍を調べてみました![]()
ただ、結局一番わかりやすかったのは金子先生の以下の書籍でした
↓
この書籍は理論の説明、具体的なコードの記載、応用方法などが全て記載されており、これ1冊を読んで、詳細は生成AIに聞けばある程度のことは理解でき、実装もできる様になりました。
まず、この本に書いてある数式などを自分の手で模写しながら読み解いていき、サンプルコードを動かしていくと、ベイズ最適化ってこんなものなのかというイメージが湧きます![]()
今回はさらに分かりやすいようにベイズ最適化の内容を簡単な言葉で説明し、具体的な使用例をお見せしようと思います。
目次
- ベイズ最適化の簡単な説明
- 具体例の実装結果
- 結論
- 引用
ベイズ最適化の簡単な説明

図:ベイズ最適化のイメージ(https://datachemeng.com/post-3310/ より引用)
黒い曲線で表されているのがGPR(Gaussian Process Regressor)というモデル、黒い点は実際のデータと思ってください。材料開発など新しいものを作るときは、目標specがあり、それを満たすような材料を設計するわけです。これがYの目標となります。
モデルY=f(X)において、C1とC2の点において正規分布を考慮したとき、Yの目標範囲との重なっている部分(黒塗りされている箇所)の面積が大きいほど、目標を達成する確率が高いことになります![]()
この時、データ点が多い領域では正規分布の裾が小さくなり(分散が小さくなり)、一方、データ点が少ない領域では正規分布の裾が大きくなり(分散が大きくなる)、重なっている面積が大きくなります。
そして、実際のベイズ最適化の流れはざっくりこうです。
-
GPRに教師データを学習させてモデル構築
- テストデータの目的関数を予測する、この時、予測値と不確かさが得られる
- この予測値と不確かさを使うと、獲得関数というものが得られる
- 獲得関数の値を見て、次の実験候補を決める
🤖 サロゲートモデルの要:ガウス過程回帰(GPR)とは?
ベイズ最適化の核となるのが、代理モデル(サロゲートモデル)として用いる ガウス過程回帰(GPR: Gaussian Process Regression) です。LightGBMなどの一般的な機械学習モデルは「予測値」のみを出力しますが、GPRの最大の強みは「予測値の不確かさ(標準偏差 $\sigma$)」も同時に算出できる点にあります。
- データが既にある領域 ➔ 不確かさ($\sigma$)が小さい(予測の自信がある)
- データがまだない未探索領域 ➔ 不確かさ($\sigma$)が大きい(予測の自信がない)
予測値と不確かさが得られるなら、このモデルの出力だけで次の材料を選定すればいいやんと思う方もいるかと思いますが、
実際の材料開発などでは全ての材料を作る時間はないため、次の候補に優先順位をつける必要があります。この優先順位付けというものを獲得関数で表現するわけです![]()
具体的な実装例として、Deep4Chem のデータセット(有機発光材料)を対象に、 「ガウス過程回帰(GPR) + ベイズ最適化(BO)」 を検証した結果を共有します。比較アプローチは 「LightGBM + 適用域(AD)」としました。
具体的なコードはこちらを参考にしてください↓
ベースとなるワークフローは、上記の金子弘昌先生の著書『Pythonで学ぶ実験計画法入門 — ベイズ最適化によるデータ解析』の手法を参考にしています。
🎯 攻め方を決める「獲得関数(Acquisition Function)」の種類
優先順位付けとして使用する獲得関数にも色々種類があります。ここが最初に分かりづらいポイントでした。記事によって使う獲得関数が違ったりするので、ベイズ最適化って結局何と混乱してました![]()
いくつか獲得関数を紹介しますが、全てGPRが出力した「予測平均 $\mu$」と「不確かさ $\sigma$」を組み合わせて、候補物質のスコアとして計算できます![]()
これによって、「手堅く成果を狙う(活用の重視)」 か 「一発逆転の未知領域を狙う(探索の重視)」 かのバランスを評価できるわけです。
今回の多目的最適化では、以下の獲得関数を検証しました。
-
PI(Probability of Improvement)
これまでのデータにおける最良値を上回る「確率」を計算します。この値が高い点は、予測値の平均が高い、あるいは不確実性(上振れする可能性)が大きく、既存最大値を更新する可能性が高いことを意味します。$$
f^\ast = \max_{i \in \text{train}} y_i + \varepsilon ,\mathrm{std}(y_{\text{train}}), \qquad
P_{\mathrm{PI}}(x) = P\bigl(Y(x) > f^\ast\bigr) = 1 - \Phi!\left(\frac{f^\ast - \mu(x)}{\sigma(x)}\right)
$$- $f^*$: 改善判定に使う閾値(best-so-far に緩和項を加えた値)
- $\varepsilon$: 緩和係数(既定 0.01)
- $\Phi$: 標準正規分布の累積分布関数(CDF)
- $\mu(x), \sigma(x)$: GPR の予測平均・予測標準偏差
-
PTR(Probability of Target Range)
予測値が「特定の目標区間 $[y_{\mathrm{low}}, y_{\mathrm{high}}]$」に入る「確率」を計算します。この値が高ければ、予測値が目標範囲に入る可能性が高いということです。「物性値を特定のスペック内に収めたい」というターゲット絞り込み型の探索で威力を発揮します。$$
\begin{aligned}
P_{\mathrm{PTR}}(x) &= P\bigl(y_{\mathrm{low}} \le Y(x) \le y_{\mathrm{high}}\bigr) \
&= \Phi!\left(\frac{y_{\mathrm{high}} - \mu(x)}{\sigma(x)}\right) - \Phi!\left(\frac{y_{\mathrm{low}} - \mu(x)}{\sigma(x)}\right)
\end{aligned}
$$- $y_{\mathrm{low}}, y_{\mathrm{high}}$: 目標範囲の下限・上限
- $\Phi$: 標準正規分布の累積分布関数(CDF)
- $\mu(x), \sigma(x)$: GPR の予測平均・予測標準偏差
-
EI(Expected Improvement, 最大化)
これまでのデータにおける最良値を基準として、それをどれだけ上回るかという「期待改善量」を計算します。この値が高い点は、予測値の平均が既存の最大値を大きく超えそうな場所、あるいは不確実性(ばらつき)が非常に大きく、大化けする可能性を秘めた場所であることを意味します。$$
\delta(x) = \mu(x) - f^*, \quad z(x) = \frac{\delta(x)}{\sigma(x)}, \qquad
\mathrm{EI}(x) = \max!\left(0,; \delta(x),\Phi(z) + \sigma(x),\phi(z)\right)
$$- $\delta(x)$: 現在の閾値 $f^*$ に対する予測平均の上振れ量
- $z(x)$: 標準化改善量
- $\Phi$: 標準正規分布の累積分布関数(CDF)
- $\phi$: 標準正規分布の確率密度関数(PDF)
- $\mu(x), \sigma(x)$: GPR の予測平均・予測標準偏差
-
UCB(Upper Confidence Bound, 最大化)
予測値の平均に、不確実性(ばらつき)による「上振れの期待値」を加算したスコアの上限値を計算します。この値が高い点は、現在の予測平均が十分に高い(活用)か、あるいはまだデータが少なく大化けする可能性(探索)を秘めていることを意味します。$$
\mathrm{UCB}(x) = \mu(x) + \kappa\sigma(x) \qquad
$$- $\kappa$: 探索寄りか活用寄りかを調整する係数(大きいほど探索寄り)
- $\mu(x), \sigma(x)$: GPR の予測平均・予測標準偏差
といった感じで色々獲得関数は種類があるわけですが、どれも次候補を決めるときの判断基準として利用できます![]()
ただ、これらの獲得関数の値が高いものをいくつかピックアップしたとき、選ばれる候補が結構違ったので、結果を示していきます。
具体例の実装結果
🔬 解きたい課題:スマホの未来を変える「究極の光」を見つけたい!
次世代の有機ディスプレイや医療用センサー(体内を透かして見る技術など)に向けて、「近赤外の発光を放つ材料」は需要があります。
理想の材料は、次の2つの難しい条件を同時にクリアすることです。
- 条件①:人間の目に優しい、または奥まで届く光(長波長な光:600〜900 nm)が欲しい、これが近赤外発光と呼ばれるものです
- 条件②:めちゃくちゃ明るく効率よく光ってほしい(高量子収率:0.5以上)
注いだエネルギーを無駄にせず、効率的に光に変換してくれる状態です
これらの要望を叶えるために、GPRを学習させ、種々の獲得関数を計算し、獲得関数の値が高いものをピックアップしてみました。
それでは、結果を見ていきましょう![]()
[PTR(目標区間確率)のみを用いた場合]
発光波長と量子収率の双方に「PTR」を採用し、それぞれの確率の積が大きい上位20候補を抽出しました。しかし、実際に中身を見てみると化学構造のバリエーションが乏しく、実質的にはわずか3種類の構造のみが選ばれる結果となりました。その代表的な構造の傾向は以下の通りです。
📌 考察:双方にPTRを使うと、確実に入りそうな「手堅い領域(ピンポイントな狙い目)」に候補が集中しやすく、構造の多様性が失われやすい(活用に寄りすぎる)傾向が見られました。
[PI(最良値更新確率) × PTR を組み合わせた場合]
発光波長には「PI」を、量子収率には「PTR」を用い、両者の積が大きい上位20候補を抽出しました。このアプローチでは候補物質の多様性が非常に高く、溶媒の違いを除けば、同じ構造の重複は一切見られませんでした。
📌 考察:各指標の出力値を見ると、PTRが約0.5であるのに対し、PIの最大値は約0.1と小さく、予測のばらつき(標準偏差)が大きい場所が評価されていました。つまり、PIを組み込んだことで「まだデータが白紙で、上振れする可能性を秘めた未知の領域」をアグレッシブに攻める、探索寄りの選抜になっていると考えられます。
[UCB(上限信頼界) × PTR を組み合わせた場合]
こちらも20種類の多様な候補がバランスよく選ばれ、全体的な選抜傾向は先ほどの「PI × PTR」と近い挙動を示しました。
📌 考察:総合スコア(Weighted UCB)が最も高かったのは、PIでも選出された化合物17407でした。ただし、この候補は予測のばらつき(標準偏差 $\sigma$)が 338 nm と非常に大きいのが特徴です。つまり、予測値そのものが高いというよりは、「不確実性(不気味なほどのポテンシャル)」の項が強く効いて押し上げられたと考えられます。
[EI(期待改善量) × PTR を組み合わせた場合]
最後に、EIをベースにした結果です。いくつか同一構造の重複が見られましたが、最初の「PTRのみ」の場合に比べると、候補は適度に分散してくれました。
📌 考察:全体として未知の領域を攻めすぎる(探索)ことがなく、これまでの手応えをベースに着実に改善を狙いに行く、比較的「活用寄り」の堅実な結果となりました。
結論
ざっくりとした傾向として、
- PTR, EI (活用寄り)
- PI, UCB (探索寄り)
といった結果になりました。UCBに関してはハイパーパラメータの値によっては調整ができますが、初手としてはこういった結果です。
一番驚いたのは、
「使用する獲得関数によって、選ばれる候補が変わる」ということです。
また、別のデータセットでも試してみようと思います。
引用
-
ベイズ最適化で期待できること、金子研究室HP
https://datachemeng.com/post-3310/ -
Pythonで学ぶ実験計画法入門 ベイズ最適化によるデータ解析 (KS情報科学専門書), 金子 弘昌著
-
Deep4Chem Dataset
https://www.deep4chem.com/ -
【材料開発者向け】 実験回数を減らすベイズ最適化テンプレート|コピペで即実行可能なPythonコード&サンプルデータ付き
https://note.com/sukechannel/n/n6ac498c1e561



