クリギング(ガウス過程回帰)サロゲートモデル
クリギングの理論基礎
サロゲートモデルという発想
モンテカルロで不確かさ解析をしたいんですが、1ケース30分のCAEを1万回なんて絶対無理です…。
そこで登場するのがサロゲート(代理)モデルだよ。CAEを数十〜数百回だけ計算して、入力→応答の関係を統計モデルで学習する。以後の1万回はそのモデルに聞けば1回あたりミリ秒。中でもクリギング(ガウス過程回帰)が定番になっているのは、予測値だけでなく「予測の不確かさ」まで返してくれる唯一無二の性質があるからなんだ。この分散情報が、どこにサンプルを足すべきかを教えてくれる——つまりモデルが自分の弱点を自己申告する。
ガウス過程による定式化
応答 \( f(\mathbf{x}) \) を平均関数 \( \mu(\mathbf{x}) \) と共分散カーネル \( k(\mathbf{x}, \mathbf{x}') \) を持つガウス過程とみなします。学習点 \( X = \{\mathbf{x}_1,\dots,\mathbf{x}_n\} \)、観測値 \( \mathbf{y} \) が与えられたとき、未知点 \( \mathbf{x}_* \) の予測は閉形式で書けます。
$$ \hat{f}(\mathbf{x}_*) = \mu + \mathbf{k}_*^T K^{-1} (\mathbf{y} - \mu\mathbf{1}), \qquad \hat{\sigma}^2(\mathbf{x}_*) = k(\mathbf{x}_*, \mathbf{x}_*) - \mathbf{k}_*^T K^{-1} \mathbf{k}_* $$
ここで \( K \) は学習点間の共分散行列、\( \mathbf{k}_* \) は学習点と予測点の共分散ベクトルです。予測平均 \( \hat{f} \) は学習点を厳密に通り(補間性)、予測分散 \( \hat{\sigma}^2 \) は学習点で0・学習点から離れるほど大きくなります。
カーネル選択と滑らかさの仮定
| カーネル | 滑らかさ | CAE応答への適性 |
|---|---|---|
| 二乗指数(RBF/Gaussian) | 無限回微分可能 | 非常に滑らかな仮定。実応答より滑らかすぎて分散を過小評価しがち |
| Matérn 5/2 | 2回微分可能 | CAE応答の事実上の標準。滑らかさの仮定が現実的 |
| Matérn 3/2 | 1回微分可能 | 接触・座屈など応答が折れ曲がる問題に |
各入力次元の長さスケール \( \ell_i \)(ARD: 次元ごとに独立)は「その方向にどれだけ動くと応答が変わるか」を表し、学習後の \( \ell_i \) の大小はそのまま感度情報として読めます(\( \ell_i \) が大きい=効かない因子)。
学習と検証の数値手法
ハイパーパラメータ推定と数値的注意
長さスケール・分散などのハイパーパラメータは対数周辺尤度の最大化で決めます。この最適化は多峰性なので多スタート(初期値を変えて10回程度)が必須です。また共分散行列 \( K \) は学習点が近接すると悪条件になり、Cholesky分解が失敗します。対策として対角に微小量を足すナゲット(nugget)を使いますが、これは単なる数値対策ではなく「観測ノイズの分散」という物理的意味を持ちます。CAEは決定論的でも、メッシュ再生成・収束打ち切りによる数値ノイズが実在するため、ナゲットを推定パラメータに含めるのが実務的に安全です。
初期サンプリング設計
初期DOEはラテン超方格(LHS、maximin基準)が標準で、サンプル数の出発点は経験則「次元数の10倍」(\( n = 10d \))です。ただしこれはあくまで初期値で、後述の能動学習で足していく前提の数字です。範囲は後で使うUQ・最適化の範囲より少し広めに取ります(クリギングは外挿に極端に弱いため、使用域を学習域で覆う)。
検証——LOO交差検証とQ²
サロゲートの品質確認には、追加計算なしでできるLeave-One-Out交差検証(LOO-CV)を使います。学習点を1つ抜いて残りで予測する操作を全点で繰り返し(クリギングでは閉形式で高速計算可能)、予測性能指標を出します。
$$ Q^2 = 1 - \frac{\sum_i (y_i - \hat{y}_{-i})^2}{\sum_i (y_i - \bar{y})^2} $$
目安は \( Q^2 \ge 0.9 \)(用途が最適化の傾向把握なら0.8程度でも可、信頼性解析の裾確率推定なら0.95以上欲しい)。加えて標準化残差 \( (y_i - \hat{y}_{-i})/\hat{\sigma}_{-i} \) が±3に収まるかを確認します——これが大きく外れるなら、予測分散が当てにならない(ノイズ・カーネル選択の見直し)ということです。
能動学習——分散情報を使ったサンプル追加
クリギング最大の武器が、予測分散を使った逐次サンプリングです。目的別に獲得基準を選びます。
- 大域精度 — 予測分散最大の点に追加(単純だが領域の隅に偏りやすい)
- 最適化 — 期待改善量(EI)最大の点に追加(ベイズ最適化・EGOアルゴリズム)
- 信頼性解析 — 限界状態面 \( \hat{f}(\mathbf{x}) = 0 \) 近傍の分類が曖昧な点に追加(U関数・AK-MCS)
「初期LHS→検証→目的に応じた逐次追加→収束判定」というループが、固定サンプルの一括学習より同じ計算予算で大幅に高精度になります。
実務適用の手順
標準ワークフロー
- スクリーニング — 因子が10を超えるならMorris法で効く因子に絞る(クリギングは高次元に弱い)
- 入力の正規化 — 各因子を[0,1]へ。単位の違う長さスケールの推定を安定化
- 初期DOE実行 — LHSで \( 10d \) 点。失敗ラン(非収束・メッシュ失敗)はフラグを付けて記録
- フィットと検証 — Matérn 5/2+ARD+ナゲット推定を既定に。LOO-CVでQ²と標準化残差を確認
- 逐次追加 — 目的別の獲得基準で予算まで追加。Q²の推移を記録
- 本番使用 — サロゲート上でモンテカルロ・Sobol'指数・最適化を実行。最終候補点はCAEで再計算して検算
失敗ランと不連続応答の扱い
設計空間の一部で解析が破綻する(座屈で発散、メッシュ生成不能)場合、その点を欠測として捨てるとサロゲートは破綻領域を知らないまま滑らかに補間し、実行不能領域の内側を最適と予測する事故が起きます。対策は、①実行可能性を別の分類モデル(GP分類等)で学習して掛け合わせる、②破綻の物理的境界が分かるなら入力範囲を制限する、の2つです。また接触のオンオフや座屈モード切替で応答が不連続な場合、単一クリギングは苦手です——領域分割(クラスタリング+局所モデル)やMatérn 3/2への変更で対応します。
スカラー応答からフィールド出力への拡張
応力分布・温度場のような大規模フィールド出力をサロゲート化するには、まずPOD(固有直交分解)等でフィールドを少数の係数に圧縮し、係数ごとにクリギングを構築するのが定石です(POD+Kriging)。モード数は累積寄与率99%程度を目安に切り、復元誤差とサロゲート誤差を分けて報告します。
実装ツールとCAE連携
主要ライブラリ・ツール比較
| ツール | 特徴 | 向く用途 |
|---|---|---|
| scikit-learn(GaussianProcessRegressor) | 導入最速。カーネル合成が簡単 | プロトタイピング・中小規模 |
| SMT(Surrogate Modeling Toolbox) | 工学サロゲート特化。KRG・MFK(マルチフィデリティ)・勾配活用(GEK) | CAE実務全般 |
| GPyTorch | GPU・大規模データ・変分近似 | 数千点超の大規模学習 |
| UQLab(MATLAB)/OpenTURNS | UQフレームワーク一体型(PCE・信頼性解析と接続) | V&V報告まで一気通貫 |
| Dakota/optiSLang等 | ソルバー連携・ジョブ管理込みの商用/公的フレームワーク | 大規模DOEの運用 |
最小実装例(scikit-learn)
import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import Matern, WhiteKernel, ConstantKernel
kernel = (ConstantKernel() * Matern(length_scale=np.ones(d), nu=2.5)
+ WhiteKernel(noise_level=1e-6)) # ナゲット=数値ノイズ
gp = GaussianProcessRegressor(kernel=kernel, normalize_y=True,
n_restarts_optimizer=10) # 多スタート
gp.fit(X_train, y_train) # X_train: LHSでのCAE結果
y_pred, y_std = gp.predict(X_new, return_std=True) # 予測値と予測標準偏差
学習後に gp.kernel_ を印字して長さスケールを確認する習慣をつけると、感度の妥当性(効くはずの因子のスケールが小さいか)とハイパーパラメータの健全性(境界張り付きがないか)を同時に点検できます。
先端研究の動向
マルチフィデリティ・クリギング
粗メッシュ(安価・低精度)と細メッシュ(高価・高精度)の結果を融合するco-Kriging/MFK(multi-fidelity Kriging)は、CAEと特に相性の良い発展形です。低忠実度モデルで応答の大域的な形を掴み、高忠実度サンプル少数で補正する構成により、同じ精度を高忠実度単独の数分の一のコストで達成した報告が多数あります。メッシュ粗密だけでなく、2D近似vs3D、線形vs非線形といった階層でも構成できます。
勾配強化クリギング(GEK)
随伴解析で応答の勾配が安価に得られるソルバー(CFDの随伴、構造の設計感度)では、勾配観測を共分散構造に組み込むGradient-Enhanced Krigingが有効です。1回の解析から \( 1 + d \) 個の情報が得られるため、高次元問題でのサンプル効率が劇的に改善します。勾配の数値ノイズには勾配側のナゲットで対処します。
高次元化と深層学習との接続
クリギングの実用限界は次元 \( d \approx 20 \) 前後とされ、それ以上ではactive subspace(応答が実質的に変化する低次元部分空間の同定)や部分空間回転との併用が研究されています。また深層カーネル学習(NNで特徴抽出→最終層をGP)は、不連続・多峰応答への適応力とGPの分散推定を両立する路線として発展中です。いずれも「予測分散の校正が保たれているか」(標準化残差の分布確認)が採用可否の実務基準になります。
トラブル対応
症状別の原因と対策
| 症状 | 考えられる原因 | 対策 |
|---|---|---|
| Cholesky分解エラー・条件数警告 | 学習点の近接重複、ナゲットなし | 重複点を統合、WhiteKernel/nuggetを推定に含める |
| 長さスケールが上限/下限に張り付く | 張り付き大=その因子が効かない、小=応答がノイズ/不連続 | 効かない因子は除外。小さい場合はノイズ源特定かMatérn 3/2へ |
| Q²は高いのに新規点で外す | 学習点がクラスタ化しLOOが楽観的、外挿している | ホールドアウト点で再検証。使用域が学習域内か確認 |
| 予測分散が明らかに過小 | RBFカーネルの過度な滑らかさ、ノイズ未考慮 | Matérnへ変更、ナゲット推定、標準化残差で校正確認 |
| 応答の折れ・ジャンプを鈍らせる | 不連続応答に大域的な定常カーネル | 領域分割+局所モデル、分類との組合せ |
| 逐次追加が同じ場所に集中する | 獲得関数と目的の不一致、ノイズで分散が下がらない | 獲得基準を目的に合わせ替え、ナゲット確認、探索項の重み調整 |
サロゲートを信じてよい範囲
検証をパスしたサロゲートなら、そこから出した確率や最適解はそのまま報告していいですか?
2つの原則を守るならOKだよ。第一に学習域の内側だけで使う——クリギングの外挿は平均関数へ滑らかに戻っていくだけで、物理を知らない。第二に最終結論はCAEで裏取りする——最適解の候補点、信頼性解析なら限界状態近傍の代表点を数点だけ実解析して、サロゲートの予測±分散の中に入ることを確認する。この2つを守れば、サロゲートは「CAE数百回分の予算で数万回分の答えを出す」正当な道具になる。裏取りなしの報告は、どれだけQ²が高くても検証不能だからね。
関連トピック
なった
詳しく
報告