---
primary_layer: layer2
related_layers: []
page_type: concept
---
# GP-UCB (Gaussian Process Upper Confidence Bound)
GP-UCBは、評価コストの高い目的関数を対象に、ガウス過程(GP)回帰によるサロゲートモデルと、予測平均と予測標準偏差の線形結合である**上側信頼限界**(UCB)という獲得関数を組み合わせた逐次最適化手法です。
## 概要
GP-UCBは、多腕バンディット問題における**UCB方策**をGP最適化に拡張したものです。
バンディット問題では、各腕の報酬の信頼区間上限が最も高い腕を選び続けることで、探索と活用のバランスを自動的に取ることが知られています。
GP-UCBはこの発想を連続空間上のGP回帰に適用し、候補点 $x$ の**信頼上限** $\mu(x) + \sqrt{\beta_t}\,\sigma(x)$ を最大化する点を次に評価します。
予測平均 $\mu(x)$ が高い点は活用、予測標準偏差 $\sigma(x)$ が大きい点は探索に対応し、$\beta_t$ がこの二項の相対的な重みを制御します。
この手法の理論的核心は、$\beta_t$を固定値ではなく反復回数$t$の関数として選ぶことです。
情報利得の上界から導いた特定の対数スケジュールに従って$\beta_t$を増加させると、累積リグレットに対する劣線形の上界が得られます。具体的な手順を次の擬似コードに示します。{cite}`srinivas2012gpucb`
## 擬似コード
```{prf:algorithm} GP-UCB
:label: alg-gp-ucb
**Inputs** objective function $f$ (maximized as a reward), search domain $D$, GP prior $\mu_0=0,\sigma_0,k$, confidence parameter sequence $\beta_t$
**Output** best solution $x^*$
1. Set $t=1$
2. Choose the point $x_t = \arg\max_{x \in D} \mu_{t-1}(x) + \sqrt{\beta_t}\,\sigma_{t-1}(x)$ that maximizes the upper confidence bound
3. Observe $y_t = f(x_t) + \epsilon_t$
4. Perform a Bayesian update with the observation $y_t$, obtaining the posterior mean $\mu_t(x)$ and posterior standard deviation $\sigma_t(x)$
5. Increment $t$ by 1 and return to step 2 until the evaluation budget is reached
```
## フローチャート
```{mermaid}
flowchart TD
INIT["Initializer
Sample initial population
via LHS etc. → true evaluation"] --> ASK
subgraph GEN["One generation (IndividualBasedStrategy.step)"]
direction TB
ASK["GA.ask()
Generate candidates"] --> SCORE["SurrogateManager
Fit GP (L4)
→ Score with LCB (L2)"]
SCORE --> SORT["Select top
evaluation_ratio fraction by LCB
(approximates argmax UCB)"]
SORT --> EVAL["True evaluation →
add to archive
(L3)"]
EVAL --> TELL["GA.tell()
Update population"]
end
GEN --> TERM{"Evaluation budget
reached?"}
TERM -- "Not yet (L5)" --> ASK
TERM -- "Reached" --> RESULT(["Best solution x*"])
```
## saealibでの構成
引用文献のGP-UCBは報酬の**最大化**として定式化されているのに対し、`LowerConfidenceBound`は最小化を前提とし、$\mathrm{LCB}(x) = \mu(x) - \kappa\sigma(x)$を計算します。スコアの比較を他の獲得関数と揃えるため、符号を反転して返します(saealib全体の「スコアは高いほど良い」という規約に合わせるためです)。
$\mu(x)$ を最小化空間に変換したうえで符号反転すると $-(\mu(x) - \kappa\sigma(x)) = -\mu(x) + \kappa\sigma(x)$ となり、これは最大化空間での信頼上限 $\mu(x) + \kappa\sigma(x)$ と符号の向きが揃います。
したがって`LowerConfidenceBound`の`kappa`は、論文の $\sqrt{\beta_t}$ に対応します。
| 役割 | saealibでの実装 | 対応ステップ |
|---|---|---|
| 探索アルゴリズム本体 | `GA`(交叉、突然変異、選択の組み合わせ自体はGP-UCBの定義に含まれない) | 手順 L2 |
| サロゲートモデル | `SklearnGPRSurrogate`(GP回帰。`sklearn` extraが必要) | 手順 L4 |
| 獲得関数 | `LowerConfidenceBound`(`kappa`が論文の $\sqrt{\beta_t}$ に対応、詳細は次節) | L2 |
| サロゲート管理 | `GlobalSurrogateManager`(アーカイブ全体でGPをフィットする) | 「L2, L4」 |
| 評価戦略 | `IndividualBasedStrategy`(UCB上位の個体だけを真に評価する) | 「L2-3」 |
```python
import numpy as np
from saealib import (
GA,
Optimizer,
Problem,
IndividualBasedStrategy,
SklearnGPRSurrogate,
LowerConfidenceBound,
)
from saealib.operators.crossover import CrossoverBLXAlpha
from saealib.operators.mutation import MutationUniform
from saealib.operators.selection import SequentialSelection, TruncationSelection
from saealib.surrogate import GlobalSurrogateManager
from saealib.termination import Termination, max_fe
def sphere(x: np.ndarray) -> float:
return np.sum(x**2)
problem = Problem(sphere, dim=5, lb=[-5] * 5, ub=[5] * 5, n_obj=1, direction=[-1])
algorithm = GA(
CrossoverBLXAlpha(prob=0.7, alpha=0.4),
MutationUniform(prob_var=0.3),
SequentialSelection(),
TruncationSelection(),
)
surrogate_manager = GlobalSurrogateManager(SklearnGPRSurrogate())
strategy = IndividualBasedStrategy(evaluation_ratio=0.2)
opt = (
Optimizer(problem)
.set_algorithm(algorithm)
.set_surrogate_manager(surrogate_manager)
.set_acquisition(LowerConfidenceBound(kappa=2.0))
.set_strategy(strategy)
.set_termination(Termination(max_fe(200)))
)
ctx = opt.run()
```
## 文献との差分
GP-UCBの原法は反復ごとにUCB最大点を求めます。saealibは`GA`が生成した候補プールからUCB上位候補を選ぶことで、この`argmax UCB`を近似します。`IndividualBasedStrategy.evaluation_ratio`は、選ばれた候補の複数個をまとめて真の評価に回します。
有限集合$D$の場合、原法は累積リグレットの理論的上限を得るために、反復回数$t$に対して対数的に増加する次の$\beta_t$を選びます。
$$\beta_t = 2 \log\left(\frac{|D|\, t^2 \pi^2}{6\delta}\right)$$
原論文は、理論どおりのスケジュールをそのまま使うと探索的すぎる場合があるとして、係数を交差検証で1/5に縮小した方がよい結果を報告しています。
saealibの既定値(`kappa=2.0`、$t$によらず固定)はこのスケジュールに従わず、この保証を持ちません。
## パラメータと変種
**κ(探索と活用のトレードオフ)**:`LowerConfidenceBound(kappa=...)`で調整します。既定値は`2.0`。
**β_tスケジュール**:固定`kappa`の代わりに`beta_schedule=gp_ucb_beta_schedule(domain_size, delta)`を渡すと、「文献との差分」節の$β_t$の式を再現します。`domain_size`は有限の意思決定集合の要素数$|D|$であり、saealibの連続探索空間に対する離散化点数の代理値ではありません(以下を参照)。
`t = ctx.decision_count + 1`は、ランタイムがこれまでに(同期または非同期で)確定した新規の評価計画の数に、これから下す決定の分の1を加えた値です。
確定した評価計画1件は、それが評価する候補数によらず1決定として数えます。そのため、このページの例にある`GA`+`evaluation_ratio`構成では、`evaluation_ratio`が世代ごとに複数候補を選ぶ場合、`t`は論文の観測ごとの反復回数とは一致しません。
`t`が論文の反復回数と一致するのは、確定した評価計画がすべて1候補だけを評価する場合(同期実行、1決定につき1回の真の評価)に限られますが、`t`が一致するだけでは引用文献のリグレット上限は再現されません。
定理1は、実際の有限集合$D$上で$\mu_{t-1}(x) + \sqrt{\beta_t}\,\sigma_{t-1}(x)$を網羅的に最適化することを仮定しています。saealibの`GA`が生成する候補プールは、各世代で再サンプリングされた部分集合上でこのargmaxを近似するだけです。また、`gp_ucb_beta_schedule(domain_size=...)`に整数を渡しても連続探索空間がその有限集合$D$になるわけではなく、式に数値を代入するだけです。
定理の保証を再現するには、文字どおりの有限集合$D$上で網羅的に最適化するコンポーネント(saealib組み込みの`GA`/`PSO`アルゴリズムには含まれません)と、論文のノイズおよびカーネルの仮定に一致するGPモデルが必要です。saealibはそのようなコンポーネントを提供していません。
したがって、以下の表は各設定における`t`と`kappa`の挙動だけを示すものであり、引用文献のリグレット上限が成り立つかどうかは示しません。
| 設定 | 使用する`kappa` | 論文の反復回数に対する`t` |
|---|---|---|
| `beta_schedule=None`(既定) | `2.0`固定 | 該当なし(スケジュールなし、リグレット保証もまったくなし) |
| `beta_schedule=gp_ucb_beta_schedule(domain_size, delta)`、バッチ決定 | 上記スケジュールに基づく$\sqrt{\beta_t}$ | `t`が観測数を過小に数える |
| `beta_schedule=gp_ucb_beta_schedule(domain_size, delta)`、1決定1候補 | 上記スケジュールに基づく$\sqrt{\beta_t}$ | 一致 |
## 関連
- [文献リファレンス](../references.md):出典の完全な書誌情報とLCB以外の獲得関数の出典一覧
- [SurrogateManager](../concepts/surrogate_modeling/surrogate_manager.md):`GlobalSurrogateManager`の詳しい使い方
- [AcquisitionFunction](../concepts/surrogate_modeling/acquisition_functions.md): `LowerConfidenceBound`を含む獲得関数の一覧
- [Surrogate](../concepts/surrogate_modeling/surrogate.md):`SklearnGPRSurrogate`を含むサロゲートモデルの一覧と、`sklearn`追加機能の説明
- [OptimizationStrategy](../concepts/execution_and_evaluation/strategies.md): `IndividualBasedStrategy`の`evaluation_ratio`を含む戦略の一覧
- [EGO](ego.md):同じGPサロゲートモデル+`IndividualBasedStrategy`の構成を、期待改善量(EI)獲得関数で置き換えた手法