はじめに
今回は、ベイズ最適化(Bayesian Optimization: BO)に関する論文を読みましたので、その紹介と備忘録です。
論文↓
論文では手法の検証も行なっていますが、コードは非公開です。
こちらの記事に私が書いたコードを置いておきます。
内容は適当ですが、ご容赦ください。
想定読者
- ベイズ最適化(BO)を実験計画に使っている、または使いたい方
- ARDカーネルによる変数選択にモヤモヤを感じている方
- マテリアルズインフォマティクス(MI)などの実験系研究者
一言でいうと
「各パラメータの各データに対するICE(Individual Conditional Expectation)幅の最大値を、目的関数の単位で設定した閾値と比較することで、研究者が直感的に設定できる形で探索軸を削れるようにしようというアイディア」
です。
ARDカーネルを使用したBOが抱えている問題
まず、前提としてベイズ最適化でよく使われるガウス過程回帰(GP)と、そのカーネル関数の一つであるARD(Automatic Relevance Determination)カーネルについて触れておきます。
$$k_{ARD}(x, x') = \sigma_f^2 \exp \left( -\frac{1}{2} \sum_{i=1}^{d} \frac{(x_i - x'_i)^2}{l_i^2} \right)$$
ARDカーネルは、パラメータごとに「長さスケール(length-scale)$l_i$」を持ち、この値によってパラメータの重要度(感度)を自動で決定してくれる便利なやつです。
長さスケールが大きいパラメータは、目的関数への寄与が小さい(重要でない)とみなされ、獲得関数による探索対象から実質的に削除されます。
これにより自動的に重要なパラメータ空間での探索に注力する構造を持ちます。
しかし、実験系の研究者目線だと使いづらさがあります。
ARDカーネルによる次元削減は、あくまで「長さスケール」というパラメータの次元を持つ数理的な値により、BOサイクル内で自動的に行われます。
一方で、物理や化学実験において重要ではなさそうなパラメータも、何かしらの作用をしていると考えるのが自然であり、数理的な判断で削除されては困ります。
解決方法
そこでこの論文では、 「研究者が普段考えているスケールで閾値を設定する」 というアプローチを提案しています。
研究者が普段考えているスケールとは
簡単に言えば実際に実験で測れる値や設定できる値です。
例えば、ある物質の抵抗値を最大にしたい場合、「物質にかける圧力を変えても、抵抗値(目的関数)は最大でも 5 $\Omega$ くらいしか変化しないだろうから、重要そうな温度を変えながら実験をしよう」といった判断をしています。
この判断をBOサイクルないで自動的にさせようと言うのが論文のアイディアです。
手法:MPDEによる閾値判定
具体的には、ARDに加え、ICE(Individual Conditional Expectation)で計算した 最大部分依存効果(Maximum Partial Dependence Effect: MPDE) に対する閾値を設けます。
※ICEの具体的な説明はこちら
言葉が少し厳ついですが、やっていることはシンプルです。
- あるパラメータを動かしたとき、目的関数がどれくらい変化するかを計算する。これは物理量のスケールで計算されます。(ICE)
- その変化の幅(最大部分依存)が、あらかじめ設定した「直感的な閾値」以下であれば、そのパラメータを削除する。
つまり、**「パラメータをいろいろ変えても、目的関数は閾値以下の変化しか与えないと"予想"されるなら、探索から外してしまおう」**というわけです。
例として、温度(Temperature)と圧力(Pressure)から抵抗(Resistance)を予測するモデルを作ったとします。
これに対して、ICEを用い各パラメータ(Temperature, Pressure)に対しての抵抗を予測したものが下のグラフです。(簡単のために一次関数にしています)
色はそれぞれのデータに対する予測線です。
左のグラフを見ると、温度は抵抗に対して傾きが大きく、予測における抵抗の変化幅の最大値は20Ωほどになります。
一方で、左のグラフは圧力に対する抵抗の予測で、抵抗の変化幅は最大でも1.5Ωほどにとどまります。
ここで、重要かどうかの閾値を5Ωと設定しておくと、温度は重要、圧力は重要でないと判断できます。
このICEで計算した予測の変化幅の最大値をMPDE(Maximum Partial Dependence Effect)と呼び、この判断をBOのサイクルに組み込んで自律的に振り分ける学習手法がMPDE-BOです。

アルゴリズム
前提:用意するもの
- 目的関数
- 試行回数
- 初期データ
- ARD閾値(この閾値で引っかからないよう緩めに設定)
- 最大部分依存効果(MPDE)閾値:パラメータと目的関数の関係を物理量で指定する直感的な閾値
処理フロー
- 初期モデル作成: 初期データを用いて、ARDカーネルでGPモデルを作ります。
-
試行ループ:
3. 長さスケール計算: ARDカーネルのパラメータを更新します。
4. MPDE計算: ここが論文の追加ポイント。各パラメータの影響度を目的関数のスケールで計算します。
5. 仕分け: MPDE閾値を使って、パラメータの要不要(Dense / Sparse)を判定します。
6. 獲得関数での候補点算出: 「必要(Dense)」と判定されたパラメータ空間だけで獲得関数を計算し、次の候補点を探します。
7. ランダムサンプリングでの候補点算出: 「不要(Sparse)」とされたパラメータについては、ランダムサンプリングを行います。
8. パラメータのマージ:要不要それぞれのパラメータをマージします。
9. 実験・計測: 目的関数を計算し、新しいデータを取得します。
10. モデルの更新:新しいデータを使ってGPモデルを更新します。
まとめ
論文によってBOによる実験計画を行う上でARDを用いた次元削減のわかりにくさを改善する手法が提案されました。
実務上、ブラックボックスになりがちなベイズ最適化の中身を、研究者の知見でコントロールできる良い手法だと感じました。
