2. 研究手法
2.1 対象問題:2D鍋自然対流
底面加熱された鍋断面内の水の自然対流を、定常Boussinesq近似のもとで解く。
支配方程式(無次元化済み):
$$u \frac{\partial u}{\partial x} + v \frac{\partial u}{\partial y} = -\frac{\partial p}{\partial x} + Pr \left( \frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2} \right)$$
$$u \frac{\partial v}{\partial x} + v \frac{\partial v}{\partial y} = -\frac{\partial p}{\partial y} + Pr \left( \frac{\partial^2 v}{\partial x^2} + \frac{\partial^2 v}{\partial y^2} \right) + Ra \cdot Pr \cdot \theta$$
$$\frac{\partial u}{\partial x} + \frac{\partial v}{\partial y} = 0$$
$$u \frac{\partial \theta}{\partial x} + v \frac{\partial \theta}{\partial y} = \frac{\partial^2 \theta}{\partial x^2} + \frac{\partial^2 \theta}{\partial y^2}$$
物理パラメータ:
| パラメータ | 値 | 備考 |
|---|---|---|
| Ra (Rayleigh数) | $10^4$ | 物理値 $\sim 4 \times 10^9$ をオーバーライド |
| Pr (Prandtl数) | 3.67 | 水 (~50°C) |
| Bi_side (側面Biot数) | 1.56 | $h_{side} L / k$ |
| Bi_top (上面Biot数) | 2.34 | $h_{top} L / k$ |
| AR (アスペクト比) | 2.0 | $W/H$ |
| 鍋幅 × 水深 | 20cm × 10cm | 有次元 |
| 底面温度 / 環境温度 | 100°C / 25°C |
境界条件: - 底面 ($y = 0$): $\theta = 1$(Dirichlet加熱)、$u = v = 0$(no-slip) - 左右壁: $\partial \theta / \partial n = -Bi_{side} \cdot \theta$(Robin対流放熱)、$u = v = 0$(no-slip) - 上面 ($y = 1$): $\partial \theta / \partial y = -Bi_{top} \cdot \theta$(Robin対流放熱)、$v = 0$, $\partial u / \partial y = 0$(free-slip)
2.2 ネットワーク構造と学習手法
2ネットワーク分離設計:
| 項目 | HeatNet | FluidNet |
|---|---|---|
| 入力 | $(x, y)$ | $(x, y)$ |
| 出力 | $\theta$ (1次元) | $(u, v, p)$ (3次元) |
| 隠れ層 | 6層 × 64ノード | 6層 × 64ノード |
| 活性化関数 | Tanh | Tanh |
| 入力正規化 | ScalingLayer ($[-1, 1]$) | ScalingLayer ($[-1, 1]$) |
| 総パラメータ数 | 約21K | 約21K |
Picard反復による段階的学習:
- Phase 1 (heat_only): HeatNet を Laplace方程式($u = v = 0$)で学習。FluidNet凍結。
- Phase 2 (fluid_only): FluidNet を凍結HeatNetの $\theta$ を使ってNS方程式で学習。HeatNet凍結。
- Phase 3 (coupled): 両ネットワークを同時学習。
Phase 2-3 を $N = 5$ 回繰り返す。各Picard反復で学習率を $0.5^{iter}$ に減衰。
学習設定:
| 項目 | 値 |
|---|---|
| 各フェーズのエポック数 | 10,000 |
| 初期学習率 | $5 \times 10^{-4}$ |
| オプティマイザ | AdamW (weight_decay=0.01) |
| スケジューラ | CosineAnnealingLR |
| 勾配クリッピング | max_norm=1.0 |
| 内部コロケーション点 | 6,000 |
| 境界点(各辺) | 300 |
| チェックポイント間隔 | 200エポック |
2.3 解析手法
CKA相転移解析
Linear CKA (Kornblith et al., 2019) を用いて、チェックポイント間の内部表現の類似度を計算した。
$$\text{CKA}(K, L) = \frac{| L^T K |_F^2}{| K^T K |_F \cdot | L^T L |_F}$$
ここで $K$, $L$ は各チェックポイントにおける中間層の活性値から計算されるグラム行列。2,000点の評価グリッド上で各Tanh層の活性値を抽出し、以下の3つの視点で可視化した:
- 変化速度: $1 - \text{CKA}(t, t+1)$ — 連続チェックポイント間の変化率(対数スケール)
- 累積ドリフト: $\text{CKA}(\text{phase_start}, t)$ — フェーズ開始時からの表現変化量
- ヒートマップ: 全チェックポイントペアのCKA類似度行列
損失ランドスケープ可視化
Li et al. (2018) のフィルタ正規化手法に基づき、学習済み重み $\mathbf{w}^*$ の周辺における2次元損失面を可視化した:
$$\mathcal{L}(\alpha, \beta) = \mathcal{L}(\mathbf{w}^* + \alpha \mathbf{d}_1 + \beta \mathbf{d}_2)$$
ここで $\mathbf{d}_1$, $\mathbf{d}_2$ はフィルタ正規化されたランダム方向。$41 \times 41$ のグリッド上で $\alpha, \beta \in [-0.5, 0.5]$ の範囲を走査した。
2.4 実験環境
- フレームワーク: PyTorch
- ハードウェア: GPU (CUDA)
- チェックポイント総数: 約120(全Picardフェーズ、200エポック間隔)
- 解析評価点: CKA=2,000点、損失ランドスケープ=4,000内部点+200境界点/辺