学習目標
- ベイズ最適化(PHYSBO)の原理を理解する
- NIMOの11種類のアルゴリズムをいつ使うべきか学ぶ
- アルゴリズム固有のパラメータを設定する
- 最適化問題に適したアルゴリズムを選択する
3.1 探索と活用のトレードオフ
具体的なアルゴリズムに入る前に、最適化における根本的な課題を理解しましょう:
探索 vs 活用
探索(Exploration): 情報が少ない領域をテストし、未探索の場所でより良い解を見つける可能性を追求すること。
活用(Exploitation): すでに良い結果が得られている領域に焦点を当て、最良の解を精緻化すること。
優れた最適化アルゴリズムは、両方の戦略を自動的にバランスさせます。
3.2 ベイズ最適化(PHYSBO)
PHYSBOはNIMOのフラッグシップアルゴリズムで、ベイズ最適化の原理に基づいています。ほとんどの材料最適化問題で推奨される選択肢です。
ベイズ最適化の仕組み
アルゴリズムは3つのステップのプロセスに従います:
- 代理モデルを構築: ガウス過程(GP)を使用して、既存のデータに基づいて目的関数をモデル化
- 獲得関数を計算: 次の実験が結果を改善する可能性が最も高い場所を計算
- 次の候補を選択: 獲得関数を最大化する点を選択
NIMOでのPHYSBO
import nimo
# 基本的なベイズ最適化
nimo.selection(
method="PHYSBO",
input_file="candidates.csv",
output_file="proposals.csv",
num_objectives=1,
num_proposals=1
)
import nimo
# 設定付きベイズ最適化
nimo.selection(
method="PHYSBO",
input_file="candidates.csv",
output_file="proposals.csv",
num_objectives=1,
num_proposals=3,
physbo_score="EI", # 獲得関数: EI, PI, または TS
physbo_seed=42 # 再現性のためのランダムシード
)
獲得関数
PHYSBOは3つの獲得関数をサポートしています:
| 関数 | 正式名称 | 戦略 | 使用場面 |
|---|---|---|---|
| EI | Expected Improvement | バランス型 | デフォルトの選択、ほとんどの状況 |
| PI | Probability of Improvement | 活用重視 | 最適に近い場合、精緻化が必要な場合 |
| TS | Thompson Sampling | 探索重視 | 多峰性関数、並列実験 |
推奨: Expected Improvement (EI)
ほとんどの材料科学問題では、EIが探索と活用の最良のバランスを提供します。最適化の地形に自然に適応します。
3.3 ランダム探索(RE)
REはシンプルですが不可欠なアルゴリズムです:未テストの候補からランダムに選択します。
import nimo
# 初期データ収集のためのランダム選択
nimo.selection(
method="RE",
input_file="candidates.csv",
output_file="proposals.csv",
num_objectives=1,
num_proposals=5,
re_seed=42 # 再現性のため
)
REを使用するタイミング
- 最初のサイクル: 他のアルゴリズムが動作する前に初期データを収集
- ベースライン比較: ランダムと比較してAIの改善を検証
- 高い不確実性: 探索空間について事前知識がない場合
典型的なワークフロー
サイクル1: RE(5-10個のランダムサンプルを収集)
サイクル2以降: PHYSBO(データに基づくインテリジェントな選択)
3.4 BLOX: ランダムフォレストアプローチ
BLOXはガウス過程の代わりにランダムフォレストモデルを使用します。これにより、高次元問題で高速に動作します。
import nimo
# ランダムフォレストベースの最適化
nimo.selection(
method="BLOX",
input_file="candidates.csv",
output_file="proposals.csv",
num_objectives=1,
num_proposals=3
)
BLOX vs PHYSBO の比較
| 観点 | PHYSBO | BLOX |
|---|---|---|
| モデル | ガウス過程 | ランダムフォレスト |
| 不確実性 | よく較正されている | 近似的 |
| 速度(低次元) | 高速 | 高速 |
| 速度(高次元) | 低速 | 高速 |
| 最適な用途 | ≤20記述子 | >20記述子 |
3.5 相図構築(PDC)
PDCは、異なる相や領域をマッピングする必要がある材料科学問題のために特別に設計されています。
import nimo
# 相図構築
nimo.selection(
method="PDC",
input_file="candidates.csv",
output_file="proposals.csv",
num_objectives=1,
num_proposals=3
)
PDCを使用するタイミング
- 合金系の相境界をマッピング
- 異なる材料特性の領域を特定
- 多成分組成空間を探索
3.6 多目的アルゴリズム
複数の目的を同時に最適化する場合(例:強度を最大化しつつコストを最小化)、これらのアルゴリズムを使用します:
PTR: パレートベースのトンプソンランキング
import nimo
# 多目的最適化(2つの目的関数)
nimo.selection(
method="PTR",
input_file="candidates.csv",
output_file="proposals.csv",
num_objectives=2, # 2つの特性を最適化
num_proposals=3
)
パレート最適性
ある解がパレート最適であるとは、他の目的を悪化させずにはどの目的も改善できない状態を指します。多目的アルゴリズムは、すべてのパレート最適解の集合(パレートフロント)を見つけます。
3.7 アルゴリズム選択ガイド
適切なアルゴリズムを選択するための決定木を使用してください:
クイックリファレンス表
| シナリオ | 推奨アルゴリズム | 理由 |
|---|---|---|
| 最初の実験 | RE | 初期ランダムデータが必要 |
| 一般的な最適化 | PHYSBO | 最も優れた全体的性能 |
| 高次元(>20) | BLOX | 多くの特徴量で高速 |
| 相マッピング | PDC | 相図用に設計 |
| 多目的 | PTR | パレート最適化 |
| 高速探索 | SLESA | 高速な候補選択 |
3.8 アルゴリズム固有のパラメータ
各アルゴリズムには調整可能な固有のパラメータがあります:
PHYSBOパラメータ
physbo_score: "EI", "PI", または "TS"physbo_seed: 再現性のためのランダムシード
REパラメータ
re_seed: 再現性のためのランダムシード
BLOXパラメータ
blox_num_rand_basis: ランダム基底関数の数blox_seed: 再現性のためのランダムシード
演習
演習1: アルゴリズム選択
各シナリオに対して、最も適切なアルゴリズムを選択してください:
- 事前データなしで新しい最適化を開始する(10個の記述子)
- 硬度と延性を同時に最適化したい
- 三元合金系の相図をマッピングしている
- 50個の記述子があり、高速な最適化が必要
演習2: PHYSBOの設定
以下を行うNIMOコードを書いてください:
- トンプソンサンプリング獲得関数でPHYSBOを使用
- 各サイクルで5つの提案を選択
- 再現性のためにランダムシード123を設定
まとめ
- ベイズ最適化(PHYSBO)はほとんどの問題でデフォルトの選択肢
- ランダム探索(RE)は初期データ収集に不可欠
- BLOXは高次元問題でより良くスケール
- PDCは相図構築に特化
- PTRは多目的最適化を処理
- 最初のサイクルは常にREで開始し、その後インテリジェントなアルゴリズムに切り替える