メインコンテンツへスキップ
内装工事

When neural wave surrogates learn the prior instead of the inverse map: 音響壁面逆推定の negative result

音響波で壁内部を推定するPDEサロゲート実験で、15 dB目標に届かなかった理由を、overfit診断、trivial baseline、最近傍oracle、softplus ablationから整理します。

音響波で壁を「透視」し、内部の下地、空洞、配管、異物の位置を画像として復元できれば、内装工事や改修前調査の判断はかなり変わります。解体前に見えないリスクを推定し、現地調査、見積、施工計画に反映できるからです。

その可能性を検証するため、wave-sim では Wave-PDE の forward simulation で合成波形を作り、IS-FNO、U-Net、ResNet-FNO 系の inverse model で壁面画像を戻す実験を行いました。目標は validation PSNR 15 dB。手動実験、Optuna Bayesian search 25 trials、N/O診断を含む一連の検証を行いましたが、最終的な結論は negative result です。性能はおおむね 12〜13 dB に張り付き、15 dBには届きませんでした。

この記事では「何が失敗したか」と「どう診断したか」を分けて記録します。AIの性能をよく見せるためではなく、建設分野で物理シミュレーションと機械学習を使う時に、どこで問題設定を疑うべきかを残すためです。

実験アプローチ

入力は壁に対する音響波の応答、出力は壁内部の2次元 media image です。forward はFDTD系の波動シミュレーション、inverse はFNO系モデルで、波形から壁面画像への写像を学習します。

学習コードでは、train split だけで正規化統計をfitし、validationを同じ統計で変換します。評価時は物理スケールへ戻して PSNR/SSIM を計算しました。

# scripts/train_is_fno_torch.py
wn_train, mn_train = model.fit_normalization(wavefields_train, media_train)
wn_val = (wavefields_val - model._input_mean) / model._input_std
mn_val = (media_val - model._output_mean) / model._output_std

vp_phys = (vp + model._output_shift) * model._output_std + model._output_mean
vg_phys = (vg + model._output_shift) * model._output_std + model._output_mean
psnrs = [compute_metrics(p, g)[0] for p, g in zip(vp_phys, vg_phys)]
val_psnr = float(np.mean(psnrs))

ここまでは通常のPDE surrogateとして妥当です。問題は、学習を進めるほど validation が改善せず、初期状態や定数的な予測に近い結果が強く出たことでした。

症状の発見

最初の異常は best_epoch=0 です。たとえば Experiment O の softplus 出力では、best val PSNR は 12.21 dB で epoch 0、final val PSNR は 11.77 dB でした。学習によってよくなるのではなく、初期出力がもっとも良い状態でした。

Optuna 25 trials でも同じ傾向が出ました。best trial #21 は 12.4311 dB、条件は samples=500、loss_space=normalized、n_walls=[2,5]、smoothing=gaussian_blur_3px、lr=1.078748295871616e-05、batch=16 です。探索範囲を広げても 15 dB には届きませんでした。

trivial baseline も確認しました。zero predictor は 2.84 dB、train mean predictor は 6.99 dB、input echo は 2.58 dB です。単純な定数だけで 12 dB が出ているわけではありません。一方で、モデルの出力は「入力から逆写像を学ぶ」というより、データ分布の平均的な prior に寄っているように見えました。

診断方法論

まず overfit-on-5 を実行しました。5サンプルを train==val として500 epoch回す診断です。現存ログでは final_train_psnr=22.18 dB、loss_ratio=0.0830。少数サンプルには20 dB超まで合わせ込めているため、データローダ、loss、backprop、評価コードが完全に壊れている可能性は低いと判断しました。

次に nearest-neighbor retrieval oracle を作りました。これは学習モデルではありません。validation波形に最も近いtrain波形を探し、そのtrain sampleの壁面画像をそのまま予測として使います。もしこのoracleが15から25 dBを出すなら、情報は波形に含まれており、モデルが悪いことになります。

# scripts/nn_retrieval_oracle.py
model = ISFourierNeuralOperator(modes=12, width=32, n_layers=4, n_bands=4)
wave_train_norm, _ = model.fit_normalization(wave_train, media_train)
wave_val_norm = (wave_val - model._input_mean) / model._input_std

train_flat = np.ascontiguousarray(
    wave_train_norm.reshape(wave_train_norm.shape[0], -1), dtype=np.float32
)
tree = cKDTree(train_flat)

val_flat = np.ascontiguousarray(
    wave_val_norm.reshape(wave_val_norm.shape[0], -1), dtype=np.float32
)
_, nn_indices = tree.query(val_flat, k=1)
preds = media_train[np.asarray(nn_indices, dtype=np.int64)]

結果は PSNR mean 13.06 dB、std 4.33、min 2.24、max 23.97。IoU mean は0.284、boundary F-score mean は0.461でした。learned baseline の Optuna best 12.43 dB に対して +0.63 dB しか改善していません。つまり「似た波形を持つサンプルをデータベースから探しても、壁面画像は十分には戻らない」という結果です。

最後に output activation を softplus から identity に変えました。softplus は epoch 0 の prior 症状に関与していました。softplus は best 12.21 dB が epoch 0、identity は epoch 29 まで改善し、output head grad abs mean も 1.175929e-07 から 2.918707e-07 に増えました。ただし identity の best PSNR は 7.79 dB に留まり、単独の解決策ではありませんでした。

核心結論

結論は2つです。

1つ目は constant-prior pathology です。モデルが観測波形から個別の壁面構造を復元する前に、train distribution の平均的な形、正規化統計、出力activationの制約に引き寄せられていました。softplus はこの症状を強めましたが、原因のすべてではありません。

2つ目は problem unidentifiability です。NN retrieval oracle が 13.06 dB に留まり、15 dB判定に届かなかったことから、現行の観測設定では逆写像そのものが一意に決まりにくいと見ます。

これは「モデルを大きくすれば解ける」よりも、「観測と出力表現を変えないと上限が変わらない」タイプの失敗です。learning rate、loss space、データ数、壁パターンの多様性、edge loss、FNO/U-Net/ResNet-FNO 系のarchitecture変更は、少なくとも今回の設定では15 dBの壁を越えませんでした。

学びと次の設定

FNOやU-Netが有効なのは、入力関数から出力関数への対応が十分に識別可能な時です。たとえば境界条件、材料パラメータ、周波数、センサー配置が出力に対して十分な情報を持ち、同じ観測から複数の壁面が成立しにくい問題では、neural operator は強い選択肢になります。

逆に、観測が粗く、異なる壁構造が似た波形を返す場合、モデルは inverse map ではなく prior を学びます。この場合、精度改善はネットワークの深さより、問題の再定義にあります。

次は pixel image を直接当てるのではなく、SDF予測、polygon parametrization、または Helmholtz frequency domain での多周波応答へ寄せる方が筋がよいと考えています。建設現場で使うAIは「それらしい絵」を出すだけでは足りません。識別できない条件を識別できないと返せる設計が必要です。

今回の結果は失敗ですが、診断としては前進です。少数サンプルoverfitでpipelineを確認し、trivial baselineで定数解を切り分け、NN retrieval oracleで問題の情報量を測り、activation ablationでprior pathologyを確認する。この手順は、建設AIの実験を止める判断にも、次の問題設定へ進む判断にも使えます。

References

  • IS-FNO: 本実験では core.is_fno_torch.ISFourierNeuralOperator として実装。Inverse-scattering-inspired FNO 系の考え方を参照。
  • Li et al., "Fourier Neural Operator for Parametric Partial Differential Equations", arXiv:2010.08895.
  • Ronneberger et al., "U-Net: Convolutional Networks for Biomedical Image Segmentation", arXiv:1505.04597.
  • Lu et al., "DeepONet: Learning nonlinear operators for identifying differential equations based on the universal approximation theorem of operators", arXiv:1910.03193.
  • Yee, "Numerical solution of initial boundary value problems involving Maxwell's equations in isotropic media", IEEE Transactions on Antennas and Propagation, 1966.
  • Akiba et al., "Optuna: A Next-generation Hyperparameter Optimization Framework", arXiv:1907.10902.

世田谷区のリフォームはラポルタへご相談ください

無料見積・現地調査対応中。お気軽にお問い合わせください。

関連記事