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>