Site cover image

💻 Gold-blog

機械学習・数理最適化を勉強する社会人のブログ

🧪 【ベイズ最適化 #1】ガウス過程回帰 - 関数を予測するベイズ的アプローチ

機械学習モデルのハイパーパラメータ調整、新薬開発における候補化合物の探索、製造プロセスの最適化ーーこれらに共通するのは、「評価コストが高い未知の関数を最適化したい」という課題です。グリッドサーチやランダムサーチでは試行回数が多くなりがちですし、勾配法は勾配が計算できないブラックボックス関数には適用できません。

このような制約のある最適化問題に対して注目されているのがベイズ最適化です。ベイズ最適化は、これまでの観測結果から関数の性質を確率的に推定し、その不確実性を活用して次に観測すべき点を賢く選ぶ手法です。

この推定の中核を担うのがガウス過程回帰です。ガウス過程回帰は、関数全体を確率分布として表現し、各点での関数値の平均だけでなく「どの程度確信が持てるか」という不確実性も同時に提供します。これにより、「良い値が期待できそうな場所」と「まだよくわからない場所」を区別して探索戦略を立てることができるのです。

本記事では、このガウス過程回帰の基本的な考え方から実装まで、ベイズ最適化を理解する上での基礎を築いていきます。今後のシリーズでは、多目的最適化や制約付き最適化など、より実践的なトピックも扱っていく予定です。

はじめに

ベイズ最適化は、図1に示すような反復的なプロセスで未知の関数の最適解を探索します。

[図1]

このループの各段階を簡単に説明すると、

  1. 代理モデル構築 : 初期の観測データをもとに真の関数の性質を模倣する統計モデルを構築します。
  2. 獲得関数最大化 : 代理モデルの予測と不確実性を組み合わせて、次に観測すべき点を決定します。
  3. 目的関数評価 : 選択された点で実際にブラックボックス目的関数を評価し、新しいデータを取得します。
  4. 代理モデル更新 : 新しい観測結果を既存のデータに追加して、代理モデルを更新します。

このループの中で重要な役割を担うのが代理モデルです。代理モデルは、限られた観測点から関数全体の振る舞いを推定し、各点での予測値と「どの程度確信が持てるか」という不確実性の両方を提供する必要があります。

ガウス過程回帰は、この代理モデルとして最も広く使用されている手法の一つです。なぜなら、予測の不確実性を自然に定量化でき、かつ柔軟な関数形を表現できるからです。

ガウス過程回帰の数理的背景を効率的に理解するために、本記事では以下の順序で説明を進めます:

  1. 線形回帰 : まずは馴染みのある単純な線形回帰を復習し、非線形な関係を表現するために基底関数を導入します。
  2. ベイズ線形回帰 : 線形基底関数モデルにベイズ的アプローチを適用し、予測の不確実性を定量化する方法を学びます。
  3. ガウス過程回帰 : 線形回帰の制約を取り払い、より柔軟な関数推定を可能にするガウス過程の考え方を導入します。

やや発展的な内容ではありますが、第3回で解説する多忠実度ベイズ最適化でよく用いられるマルチタスクガウス過程についても解説します。


線形回帰

まずは、最も基本的な線形回帰から始めましょう。

問題設定

入力 xRd\bm{x} \in \mathbb{R}^d に対して yRy \in \mathbb{R} を予測する回帰問題を考えます。線形回帰では、出力が入力の線形結合で表現できると仮定します:

y=wx+ϵ,ϵN(0,σnoise2)y = \bm{w}^{\top}\bm{x} + \epsilon,\quad \epsilon \sim \mathcal{N}(0, \sigma_{\mathrm{noise}}^2)

ここで、 wRd\bm{w} \in \mathbb{R}^d は重みベクトル、 ϵN(0,σnoise2)\epsilon \sim \mathcal{N}(0, \sigma_{\mathrm{noise}}^2) は観測ノイズです。

訓練データ DN={(xi,yi)}i=1N\mathcal{D}_N = \{(\bm{x}_i, y_i)\}_{i=1}^N が与えられたとき、通常の最小二乗法では重み w\bm{w} を以下のように求めます:

w^=argminw i=1N(yiwxi)2\hat{\bm{w}} = \underset{\bm{w}}{\arg\min}\ \sum_{i=1}^{N}(y_i - \bm{w}^{\top}\bm{x}_i)^2

この解は解析的に求めることができ、 X:=[x1,x2,,xN]Rd×N,y:=[y1,y2,,yN]RN\bm{X} := [\bm{x}_1, \bm{x}_2, \dots, \bm{x}_N]^{\top} \in \mathbb{R}^{d \times N}, \bm{y} := [y_1, y_2, \dots, y_N]^{\top} \in \mathbb{R}^N とすると、 w^=(XX)1Xy\hat{\bm{w}} = (\bm{X}^{\top}\bm{X})^{-1}\bm{X}^{\top}\bm{y} となります。

基底関数による拡張

上記の線形回帰は入力 x\bm{x} に対して線形な関数しか表現できませんでしたが、実際の問題では非線形な関係を扱いたい場合が多くあります。この制約を緩和するために、基底関数を導入します。

基底関数 ϕj(x)\phi_j(\bm{x}) を用いて、モデルを以下のように拡張します:

y=j=1Mwjϕj(x)+ϵ=wϕ(x)+ϵy = \sum_{j=1}^{M} w_j \phi_j(\bm{x}) + \epsilon = \bm{w}^{\top}\bm{\phi}(\bm{x}) + \epsilon

ここで、 ϕ(x)=[ϕ1(x),ϕ2(x),,ϕM(x)]Rd×N\bm{\phi}(\bm{x}) = [\phi_1(\bm{x}), \phi_2(\bm{x}), \dots, \phi_M(\bm{x})]^{\top} \in \mathbb{R}^{d \times N} は基底関数ベクトルです。

基底関数の例として、以下のようなものがあります:

  • 多項式基底 : ϕj(x)=xj\phi_j(x) = x^j
  • ガウス基底 : ϕj(x)=exp((xμj)22σ2)\phi_j(x) = \exp\left(-\frac{(x - \mu_j)^2}{2\sigma^2}\right)

重要なのは、基底関数 ϕj(x)\phi_j(\bm{x}) は固定されており、学習するのは重み w\bm{w} のみという点です。このため、パラメータに関しては依然として線形であり、最小二乗法による解析解が得られます。

訓練データに対して基底関数を適用した設計行列を Φ:=(ϕj(xi))RN×M\bm{\Phi} := \left(\phi_j(\bm{x}_i)\right) \in \mathbb{R}^{N \times M} とすると、重みの推定値は:

w^=(ΦΦ)1Φy\hat{\bm{w}} = (\bm{\Phi}^{\top}\bm{\Phi})^{-1}\bm{\Phi}^{\top}\bm{y}

新たな入力 xnew\bm{x}_{\mathrm{new}} に対する予測は:

y^new=w^ϕ(xnew)\hat{y}_{\mathrm{new}} = \hat{\bm{w}}^{\top}\bm{\phi}(\bm{x}_{\mathrm{new}})

線形基底関数モデルの表現力と課題

基底関数を導入した線形回帰モデルでは非線形な関係も表現できますが、以下のような課題が考えられます:

  1. 不確実性の欠如 : 点推定のみで、予測の信頼度が分からない
  2. 基底関数の選択 : どのような基底関数を選ぶかによって性能が大きく左右される
  3. 基底関数の数 : 少なすぎると表現力不足、多すぎると過学習のリスク

次節では、課題1を解決するためにベイズ的アプローチを導入します。


ベイズ線形回帰

ベイズ的アプローチの考え方

今まで見てきた従来の線形回帰では、重み w\bm{w} を固定値として推定しました。しかし、ベイズ的アプローチでは w\bm{w} を確率変数として扱います。つまり、重みに対する不確実性を確率分布で表現します。ベイズ的アプローチの基本的な流れは以下の通りです:

  1. 事前分布の設定 : 観測データを見る前の重みに対する信念を確率分布で表現
  2. 尤度の計算 : 観測データが与えられたときの確率
  3. 事後分布の導出 : ベイズの定理を用いて観測データを考慮した重みの分布を求める
ベイズの定理 : p(wD)=p(Dw)p(w)p(D)  (事後分布)(尤度)×(事前分布)\displaystyle p(\bm{w} \mid \mathcal{D}) = \frac{p(\mathcal{D} \mid \bm{w})p(\bm{w})}{p(\mathcal{D})}\ \therefore\ (事後分布) \propto (尤度) \times (事前分布)
  1. 予測分布の計算 : 新しい入力に対する予測も確率分布として表現

これにより、点推定ではなく分布による推定が可能になり、予測の不確実性を定量化できます。

ベイズ線形回帰の定式化

基底関数を用いた線形回帰モデルを考えます:

y=wϕ(x)+ϵ,ϵN(0,σnoise2)y = \bm{w}^{\top}\bm{\phi}(\bm{x}) + \epsilon,\quad \epsilon \sim \mathcal{N}(0, \sigma_{\mathrm{noise}}^2)

重み w\bm{w} に対して多変量正規分布を事前分布として設定します:

p(w)=N(w0,α1I)p(\bm{w}) = \mathcal{N}(\bm{w} \mid \bm{0}, \alpha^{-1}\bm{I})

ここで、 α\alpha は精度パラメータで事前分布の「広がり」を制御します。

観測データ DN={(xi,yi)}i=1N\mathcal{D}_N = \{(\bm{x}_i, y_i)\}_{i=1}^{N} が与えられたときの尤度は:

p(yw,X)=p(\bm{y} \mid \bm{w}, \bm{X}) =


ガウス過程回帰

実装

(執筆中)マルチタスクガウス過程回帰

実装

まとめ

参考文献

  1. 持橋大地, 大羽成征, 講談社サイエンティフィク. ガウス過程と機械学習. MLP 機械学習プロフェッショナルシリーズ. 講談社, 2019. https://www.kspub.co.jp/book/detail/1529267.html
  2. 今村秀明, 松井孝太. ベイズ最適化:適応的実験計画の基礎と実践. 近代科学社, 2023. https://www.kindaikagaku.co.jp/book_list/detail/9784764906631/
  3. Christopher KI Williams & Carl Edward Rasmussen. Gaussian processes for machine learning. Vol. 2. 3. MIT press Cambridge, MA, 2006. https://direct.mit.edu/books/oa-monograph/2320/Gaussian-Processes-for-Machine-Learning
  4. Jochen Görtler, Rebecca Kehlbeck & Oliver Deussen. A visual exploration of gaussian processes. In: Distill 4.4 (2019), e17. https://distill.pub/2019/visual-exploration-gaussian-processes/
  5. Marc Peter Deisenroth, Yicheng Luo & Mark van der Wilk. A Practical Guide to Gaussian Processes. 2020. https://infallible-thompson-49de36.netlify.app/
  6. Ali Rahimi & Benjamin Recht. Random Features for Large-Scale Kernel Machines. In: Advances in Neural information Processing Systems 20. 2007. https://proceedings.neurips.cc/paper/2007/hash/013a006f03dbc5392effeb8f18fda755-Abstract.html
  7. Gregory Gundersen. Random Fourier Features. 2019. https://gregorygundersen.com/blog/2019/12/23/random-fourier-features/
  8. GPyTorch. https://gpytorch.ai/