サロゲートモデルのアーキテクチャを選ぶ — テーブルデータからCNN、PointNet、GNNへ
はじめに
サロゲートモデルを検討するとき、最初に決めるべきは「どのモデルを使うか」ではなく「入力データがどんな構造をしているか」です。 設計変数を並べたベクトルなのか、格子の上の値なのか、点の集合なのか、メッシュなのか。 アーキテクチャはそれぞれ違う構造を前提に作られているので、データが持つ構造とその前提が噛み合ったときにいちばん性能が出ます。
この記事では、テーブル・規則格子・点群・メッシュという入力の型に沿って、CNN・PointNet・GNNが何を前提にしているのかを整理し、最後にPINNs(Physics-Informed Neural Networks)にも触れます。
テーブルデータ
最も扱いやすいのは、設計変数を並べた固定長のベクトルです。 翼型なら翼厚・キャンバー・迎角、流路形状なら断面積比や曲率半径といったパラメータを数個〜数十個並べ、性能値(抗力係数、圧力損失など)を出力とする回帰問題になります。
この形であれば、ガウス過程回帰(GPR)やランダムフォレスト、勾配ブースティング(LightGBM、XGBoostなど)が有力です。 これらは特徴量の並び順に意味を持たせません。 かわりに、GPRならカーネルが表す滑らかさ、決定木ベースなら軸に平行な分割という形で、別の仮定が入ります。
少数の設計変数で形状を規定できるパラメトリックな問題なら、これで十分です。 一方、任意形状の最適化やトポロジー最適化のように形状を高い自由度で表したい場合、数個の変数には収まりません。 格子の隣接関係やメッシュの接続関係といった、形状データがもともと持っている構造も使えないままです。 そこで、形状を直接モデルに入れる方向に進みます。
規則格子 — CNN
形状や流れ場を規則格子(ピクセル、ボクセル)上のデータとして表せるなら、CNNが第一候補です。 2次元断面を画像として扱う、3次元形状をボクセルに変換する、といった形で画像認識のアーキテクチャがそのまま使えます。
核になるのはたたみ込み演算です。
小さなカーネル を入力全体にスライドさせながら適用することで、近くの画素どうしは関係が強いという局所性と、同じパターンはどこにあっても同じカーネルで検出するという重み共有が、構造そのものに組み込まれます。 この仮定が格子状のデータによく合うため、少ないパラメータ数で高い表現力が出ます。 たたみ込み自体は、入力をずらすと出力も同じだけずれる性質を持ちます。 位置によらない1つの性能値になるのは、最終段のプーリングで全体を集約した後です。
前提はあくまで規則格子であることです。 非構造格子で計算した流れ場をCNNに入れるには、いったんボクセルへ再サンプリングする必要があります。 解像度を上げるほどメモリと計算量は立方的に増え、境界層のような薄い構造は粗いボクセルでは潰れてしまいます。
点群 — PointNet
再サンプリングを挟まず、物体表面の形状を点の集合のまま扱いたい場合に使うのがPointNetです。 点群には格子のような規則的な並びがありません。 点を適当な順に配列へ詰めると、本来意味のない並び順にモデルが依存し、同じ形状でも並べ方を変えただけで出力が変わってしまいます。
PointNetは、各点を独立にMLPで高次元の特徴に写した後、順序に依存しない対称関数(多くは要素ごとの最大値)で集約することでこれを解きます。
各点の特徴 を個別に計算し、その最大値を取ってから に通す。 この構造自体によって、点の順序を入れ替えても出力が変わらないことが保証されます。 原論文では、この形式で任意の連続な集合関数を近似できることも示されています。 CADモデルの表面からサンプリングした点群をそのまま入力でき、ボクセル化による解像度の制約も受けません。
ただし各点はあくまで独立に処理され、点どうしのやり取りは最後の集約1回だけです。 どの点とどの点が近いかという局所的なつながりは使われないため、表面の細かな凹凸が効く問題では表現力が足りなくなります。 後継のPointNet++は、近傍点をグループ化してPointNetを階層的に適用することでこれを補っています。
メッシュ — GNN
CFDの計算格子は単なる点の集まりではなく、どの節点とどの節点が隣接しているかという接続関係を持っています。 これを活かすのがGNNです。
GNNは節点と辺からなるグラフの上で、メッセージパッシングと呼ばれる更新を繰り返します。
各節点 は、隣接する節点 から届くメッセージを集約し、自身の特徴を更新します。 これを 層重ねると、 ホップ先の情報まで各節点に伝わります。 隣接するセルと情報をやり取りしながら状態を更新するこの形は、有限体積法や有限要素法が隣接セル間で流束をやり取りしながら解を進めるのとよく似ています。 非構造格子上のPDEを模倣するのに素直な構造で、MeshGraphNetsはこの発想をそのまま採用しています。
規則格子は各画素が上下左右とつながった特別なグラフ、点群は辺を持たないグラフとみなせます。 その意味でGNNは、CNNとPointNetを特別な場合として含む一般形にあたります。 一般性ゆえに非構造格子をそのまま扱えますが、節点数が数万〜数百万に及ぶCFD問題ではグラフも同じ規模になり、計算コストと学習の収束の両面でハードルは上がります。
補足 — PINNs
CNN・PointNet・GNNは、入力データの構造による分類でした。 PINNsは別の軸の話で、モデルに物理法則をどう教え込むかという問題への答えです。
通常のニューラルネットは観測データとの誤差だけを最小化しますが、PINNsは損失に支配方程式(Navier-Stokes方程式など)の残差を加えます。
は、モデルの出力を入力座標で自動微分して支配方程式に代入し、本来ゼロになるべき残差の大きさとして計算します。 データが少ない領域でも物理法則に反する出力にはペナルティがかかるため、データだけに頼るより汎化しやすくなります。
これは損失の設計思想であって入力データの構造とは独立なので、CNNやGNNと排他的ではありません。 ただしサロゲートモデルとして使うには注意が必要です。 原論文の形のPINNは、座標を入力して解を返す、1つの形状・境界条件に専用のソルバーです。 形状を変えれば学習し直しになるので、設計を変えたときの性能を予測したい用途にはそのままでは使えません。 形状パラメータや境界条件もモデルの入力に含めて条件付けるか、条件から解への写像を直接学習する演算子学習(DeepONet、FNOなど)を検討することになります。
データ構造に合ったアーキテクチャを選び、そこに物理制約をどこまで入れるか。 この2軸で考えるのが実務的だと思います。
整理すると
| アーキテクチャ | 入力データの構造 | 前提としている構造 | CFDでの典型的な用途 |
|---|---|---|---|
| テーブル回帰(GPR、GBDTなど) | 固定長の設計変数ベクトル | 並び順を仮定しない(滑らかさ等はカーネル・木構造が担う) | パラメトリックな形状最適化 |
| CNN | 規則格子(画像・ボクセル) | 局所性・重み共有 | 断面画像やボクセル化した流れ場の予測 |
| PointNet | 点群(順序なし) | 順序によらないこと | 表面点群からの性能予測 |
| GNN | グラフ(節点+接続関係) | 接続関係に沿った局所的な伝播 | 非構造メッシュ上の全流れ場予測 |
| PINNs | (アーキテクチャ非依存) | 支配方程式の残差を損失に追加 | データが少ない領域での汎化性能の底上げ |
おわりに
アーキテクチャの選定は、突き詰めると、入力データが持っている構造を見極めてそれをモデルにどう組み込むかという問題です。 格子状なら局所性と重み共有、点群なら順序によらないこと、メッシュなら接続関係に沿った伝播というように、データの構造がある程度アーキテクチャを決めてくれます。
実務では、まず対象データがどの型に当てはまるかを見て、そのうえでデータ量や外挿への要求に応じて物理制約の追加を考える、という順番にしています。 流行りのアーキテクチャを順に試すより、構造と前提の対応関係を持っておくほうが、初見の問題での選定はずっと速くなります。
