BatchNormInference¶
バージョン名: BatchNormInference-5
カテゴリー: 正規化
簡単な説明: BatchNormInference は、バッチ正規化: 内部共変量シフトの削減によるディープ・ネットワーク・トレーニングの加速の記事で説明されているバッチ正規化操作を行います。
詳細な説明:
BatchNormInference は、指定されたデータのバッチ入力テンソル data
に対して次の操作を実行します。
-
各アクティベーション \(x^{(k)}\) を平均と分散によって正規化します。
\[\hat{x}^{(k)}=\frac{x^{(k)} - E[x^{(k)}]}{\sqrt{Var(x^{(k)}) + \epsilon}}\]ここで、\(E[x^{(k)}]\) と \(Var(x^{(k)})\) は、
data
入力のチャネル軸ごとに計算された平均と分散であり、それぞれ平均と分散mean
とvariance
入力に対応します。なお、\(\epsilon\) は数値安定性のため分散に加算される値であり、epsilon
属性に相当します。 -
それぞれスケーリング係数とシフトを表す
gamma
とbeta
入力に基づいて、正規化された各アクティベーションの線形変換を実行します。\[\hat{y}^{(k)}=\gamma^{(k)}\hat{x}^{(k)} + \beta^{(k)}\]ここで、\(\gamma^{(k)}\) と \(\beta^{(k)}\) は学習可能なパラメーターであり、チャネル軸ごとに計算され、
gamma
とbeta
入力に対応します。
数学定式化
x
を d 次元の入力、\(x=(x_{1}\dotsc x_{d})\) とします。正規化は各アクティベーション \(E[x^{(k)}]\) に適用されるため、特定のアクティベーションに注目して k を省略できます。
特定のアクティベーションについては、m 個の値のミニバッチ \(\mathcal{B}\) を考えてみます。BatchNormInference は、次のようにバッチ正規化アルゴリズムを実行します。
-
入力: ミニバッチにおける \(x\) の値:
\[\mathcal{B} = {x_{1...m}}\] 学習するパラメーター: \(\gamma, \beta\)
-
出力:
\[{o_{i} = BN_{\gamma, \beta} ( b_{i} )}\] -
Mini-batch 平均:
\[\mu_{\mathcal{B}} \leftarrow \frac{1}{m}\sum_{i=1}^{m}b_{i}\] -
Mini-batch 差異:
\[\sigma_{\mathcal{B}}^{2}\leftarrow \frac{1}{m}\sum_{i=1}^{m} ( b_{i} - \mu_{\mathcal{B}})^{2}\] -
正規化:
\[\hat{b_{i}} \leftarrow \frac{b_{i} - \mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^{2} + \epsilon }}\] -
スケールとシフト:
\[o_{i} \leftarrow \gamma\hat{b_{i}} + \beta = BN_{\gamma ,\beta } ( b_{i} )\]
属性:
-
epsilon
説明: epsilon は、数値の安定性を確保するため分散に加算される定数です。
値の範囲: ゼロ以上の浮動小数点数
タイプ:
float
必須: はい
入力:
1:
data
- タイプ T で少なくともランク 2 のテンソル。2 番目の次元はチャネル軸を表し、少なくとも 1 つのスパンが必要です。必須。2:
gamma
- 正規化された値のスケール係数。data
チャネル軸と同じスパンを持つ T タイプの 1D テンソル。必須。3:
beta
- スケーリングされた正規化値にバイアスが加算されます。data
チャネル軸と同じスパンを持つ T タイプの 1D テンソル。必須。4:
mean
- 平均正規化の値。data
チャネル軸と同じスパンを持つ T タイプの 1D テンソル。必須。5:
variance
- 分散正規化の値。data
チャネル軸と同じスパンを持つ T タイプの 1D テンソル。必須。
出力:
1: 入力テンソル
data
に適用された要素ごとのバッチ正規化操作の結果。タイプ T のテンソルで、data
入力テンソルと同じ形状です。
タイプ:
T: サポートされている浮動小数点タイプ。
例:
例: 2D 入力テンソル data
<layer ... type="BatchNormInference" ...>
<data epsilon="9.99e-06" />
<input>
<port id="0"> <!-- input -->
<dim>10</dim>
<dim>128</dim>
</port>
<port id="1"> <!-- gamma -->
<dim>128</dim>
</port>
<port id="2"> <!-- beta -->
<dim>128</dim>
</port>
<port id="3"> <!-- mean -->
<dim>128</dim>
</port>
<port id="4"> <!-- variance -->
<dim>128</dim>
</port>
</input>
<output>
<port id="5">
<dim>10</dim>
<dim>128</dim>
</port>
</output>
</layer>
例: 4D 入力テンソル data
<layer ... type="BatchNormInference" ...>
<data epsilon="9.99e-06" />
<input>
<port id="0"> <!-- input -->
<dim>1</dim>
<dim>3</dim>
<dim>224</dim>
<dim>224</dim>
</port>
<port id="1"> <!-- gamma -->
<dim>3</dim>
</port>
<port id="2"> <!-- beta -->
<dim>3</dim>
</port>
<port id="3"> <!-- mean -->
<dim>3</dim>
</port>
<port id="4"> <!-- variance -->
<dim>3</dim>
</port>
</input>
<output>
<port id="5">
<dim>1</dim>
<dim>3</dim>
<dim>224</dim>
<dim>224</dim>
</port>
</output>
</layer>