【翻訳】Neural Networks for Steady-State Fluid Flow Prediction : Part 2

[前回](https://qiita.com/mat1729/items/10f0d3940ec8f2e1a6b3)に引き続き、[タイトル記事](https://medium.com/@jannik.zuern/neural-networks-for-steady-state-fluid-flow-prediction-part-2-1fd930ab461d)の翻訳です。
尚、著者のJannik Zürn氏には、許可を頂き翻訳を掲載させて頂いております。



#Neural Networks for Steady-State Fluid Flow Prediction : Part 2

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360150/a26b8276-b316-5583-8470-eb7aec9f6021.png)

この記事の目的は、ニューラルネット、具体的には完全畳み込みニューラルネットが、例から学習することで障害物の周りの流体の流れを学習する方法の概要を説明することです。

このシリーズは3つのパートに分かれています。

#####パート1：[CFDに対するデータ駆動型の手法](https://medium.com/@jannik.zuern/neural-networks-for-steady-state-fluid-flow-prediction-part-1-856ef056da54)

#####パート2：実装の詳細

#####パート3：結果

パート1では、CFDへのデータ駆動型アプローチの概要と、それを機能させるために必要な手順を学びました。 この第2部では、CFDへのデータ駆動型アプローチの重要なステップの技術的な詳細を検討します。 具体的には、次の2つの側面に注目します。
・ニューラルネットのアーキテクチャの詳細
・ニューラルネットの予測の精度測定

###ニューラルネットの詳細
前の投稿で述べたように、ニューラルネットには完全な畳み込みアーキテクチャがあります。 ニューラルネットが入力を処理し、指定されたサンプルから学習する方法を理解するために、コードを詳しく見てみましょう。

[コード](https://medium.com/@jannik.zuern/neural-networks-for-steady-state-fluid-flow-prediction-part-2-1fd930ab461d)は元サイトを参照下さい。


ニューラルネットは、関数conv_resの129行目に構築されます。ここでは、最初に、画像を縮小し、機能マップを追加しながら、残差ブロックが互いの上に構築されます。 その後、ニューラルネットの逆畳み込み部分で、画像が再び拡大され、xおよびy方向の流速を表す2つの浮動小数点値が各入力ピクセルに割り当てられます。

###予測精度の推定
学習アルゴリズムの予測の有効性の有用な測定を行うためには、学習アルゴリズムが提供する精度のレベルを記述する検証基準を定義する必要があります。 ニューラルネットの損失は、トレーニング中にオプティマイザーによって最小化される変数であり、ニューラルネットが生成するエラーの量を示します。 予測の妥当性を表現するために、ニューラルネットの出力がどれほど正確であるかの異なる測定が推定の妥当性を表現するために必要とされます。

CFDシミュレーションは通常、特定の目標を念頭において実行されます。 多くのアプリケーションでは、最大流速、圧力降下、渦度などの特定の検証基準が計算され、最適化されています。 この研究で提示されるCFDへのデータ駆動型アプローチの出力は、ニューラルネットへの入力として使用されるピクセル/ボクセルグリッドの各ピクセルまたはボクセルの流速場を単に予測するだけです。

スカラー値の場合、推定値$v$と実際の値${v_0}$の間の相対誤差は次のように定義されます。

```math
e_{rel} = \frac{|v-v_{0}|}{v} 
```
最後に、予測の相対誤差${e_{rel}}$をニューラルネットの精度$a$にマッピングする適切な方法を見つける必要があります。 予測の相対誤差が0％の場合、精度は1.0である必要があります。 対照的に、相対誤差が100％以上の場合、精度はゼロに近いはずです。 このマッピングのガウス分布は、次のように提案されます。

```math
a(e_{rel}|\sigma^2=e^{-\frac{(e_{rel})^{2}}{2\sigma^2}})
```
10％の相対誤差が90％の予測精度につながることが提案されています。 変数sigmaの方程式を解くと、sigma²= 0.048が得られます。
この作業では、ニューラルネットの出力の精度を説明する4つの測定基準を調べました。

####・正しいピクセルの割合
画像内の正確に予測されたピクセルの数は、ニューラルネットが流体の挙動をどれだけうまく予測できるかの直感的な検証基準を提供します。 ニューラルネットが浮動小数点数の最後の桁まで流体の流速を予測できないため、次のアプローチが提案されます：ニューラルネットによる予測と実際の流速の間の絶対誤差が${t * v}$より小さい場合、 それぞれのピクセルは正しく予測されていると宣言されます。 変数$v$はシミュレーション領域の平均流速を示し、$t$はしきい値を示します。$ t = 0.01$の値が推奨されます。 したがって、ニューラルネットによる予測のピクセルベースの精度は次のように定義できます。

```math
a_{pixel}=\frac{N_{correcrpixels}}{N_{totalpixels}} 
```

####・質量流量
内部流シミュレーションのもう1つの重要な検証基準は、キャビティを通る質量流量です。 $m_{dot}$を質量流量として示すと、質量流量の予測の相対誤差は次のように定義できます。

```math
e_{rel,massflowrate}=\frac{\dot{m}_{simulation}-\dot{m}_{prediction}}{\dot{m}_{simulation}} 
```
これにより、次の質量流量に関する精度の定義が得られます。

```math
a_{massflowrate}=a(e_{massflowrate}|\sigma^2)
```

####・抵抗値
多くの外部流体流れのシミュレーションのユースケースでは、流体中にはたらく物体の抵抗は取得するのに不可欠な値であり、これは流体が物体に作用する力に等しくなります。 抵抗が低いほど、流体の抵抗は小さくなります。 したがって、ニューラルネットの予測を成功させるための追加の検証基準として、抵抗の違いを選択しました。

ドラッグの許容可能な近似は、次の仮定で取得できます。
・定常流
・非圧縮性の流れ
・均一な静圧
検査体積${\Omega}$に運動量保存則を適用すると、次の運動量バランス式が得られます。

```math
F_{ext}+\iint_{\partial\Omega}{\rho}v^2dxdy=0, i={1,2}
```
一方、${\partial\Omega}$はシミュレーションドメインの境界を示し、$F_{ext}$は検査体積に対する外力を示し、抵効力と同じになります。 y方向の速度成分を無視し、固体壁の境界条件による上部および下部の境界を通る流れが無視できると仮定すると、方程式は次のように簡略化できます。

```math
F_{ext}=\int_{A}^{B}{\rho}U_{\infty}^2dx-\int_{C}^{D}{\rho}v_x{(x)}^2dx=Drag
```
入口での速度は$U_{\infty}$で示されます。 この導出は、抵抗の単純でありながら正確な推定値を保持しますが、上下の境界を通る流れを無視するため、質量保存則を満足しません。 したがって、抵抗値の予測の相対誤差は次のように定義されます。

```math
e_{rel,drag}=\frac{Drag_{simulation}-Drag_{prediction}}{Drag_{simulation}} 
```

予測精度は次のように定義できます。

```math
a_{drag}=a(e_{rel,drag}|\sigma^2)
```

####・質量保存則
CFDソルバーは、連続方程式と運動方程式の解を見つけることを目的としています。 非圧縮性流体の場合、連続性方程式は、シミュレーション領域のすべての点で速度ベクトル場の発散がゼロであることを示します。 これは、シミュレーション領域のどの点でも流体が存在する（発散がゼロより大きくなる）または存在しなくなる（発散がゼロより小さくなる）という直感に従います。

設計上、SIMPLEアルゴリズムに使用される有限体積法は、離散化された形式でも流体のこの特性を保持します。 データ駆動型のアプローチもこのルールに従う必要があります。 予測された流れ場の物理的一貫性を確認するために、予測された出力画像上の発散演算子の離散化された形式が提案されています。 $u_{i,j,k}$が$i$方向の$j$番目と$k$番目の速度成分を表す場合、離散化された発散演算子$div^h$は次のように定義できます。

```math
div^{h}(u_{i,j,k})= \frac{1}{2}(u_{1,j+1,k}-u_{1,j-1,k}+u_{2,j,k+1}-u_{2,j,k-1}) 
```

この方程式は、空間のすべての次元で偏微分を近似するために中心差分法によって得られます。 最も外側のピクセルの中心差分が定義されていないため、$[2,M,N]$のテンソルで定義された発散は、$[M-2,N-2]$となることに注意してください。
全体的な発散の精度を定義するために、各格子点での離散化された発散は、計算格子全体で次のように総和がとられます。

```math
div=\frac{1}{NM}\sum_{i}^{N}\sum_{j}^{M}div_{ij}
```
総和の前に掛かる要素は、格子サイズに依存しない精度を定義するために、格子に対して和をとった発散を標準化します。
最後に、標準化された発散の精度推定値へのマッピングを定義する必要があります。 本研究では、標準化後の発散の標準偏差として$10^{-3}$が提案され、精度は90%に到達します。このとき $\sigma = 0.00222$となります。
したがって、精度測定により、予測に関する物理的に妥当な推定値を得ることができます。

```math
a_{div}=a(e_{div}|\sigma^2)
```
以上より、定常状態の流体の流れを予測するメカニズムへの取り組みが終わりました。 本記事を読んで、楽しんで頂けたことを願っています！
次の章では、CFDへのこのデータ駆動型アプローチで得られた結果を説明します。 9000を超える画像の準備のご用意を！