データの平均と分散を学ぶことで入力データを正規化する,訓練可能なネットの層を表す.
BatchNormalizationLayer
データの平均と分散を学ぶことで入力データを正規化する,訓練可能なネットの層を表す.
詳細とオプション
- BatchNormalizationLayerは,ネットワークの訓練を正規化して高速にするために,NetChainやNetGraph等の中で使われることが多い.
- 次の選択的パラメータを含めることができる.
-
"Epsilon" 0.001` 安定性パラメータ Interleaving False チャネル次元の位置 "Momentum" 0.9 訓練中に使われる運動量 - InterleavingFalseのとき,チャネル次元は入出力配列の最初の次元であるとみなされる.
- InterleavingTrueのとき,チャネル次元は入出力配列の最後の次元であるとみなされる.
- 次の学習可能配列を含むことができる.
-
"Biases" Automatic 学習可能なバイアス配列 "MovingMean" Automatic 平均の移動推定 "MovingVariance" Automatic 分散の移動推定 "Scaling" Automatic 学習可能なスケーリング配列 - Automatic設定でNetInitializeあるいはNetTrainが使われると,バイアス,スケーリング,移動平均,および移動分散の各配列が自動的に初期化される.
- 次の訓練パラメータを含めることができる.
-
LearningRateMultipliers Automatic 配列のための学習率乗数 - BatchNormalizationLayerは,LearningRateMultipliersが0あるいは"Momentum"が1ならば,NetTrainでの訓練中に"MovingVariance"と"MovingMean"の値を凍結する.
- バイアス,スケーリング,移動分散,移動平均が設定されると,BatchNormalizationLayer[…][input]は層を適用して明示的に出力を計算する.
- BatchNormalizationLayer[…][{input1,input2,…}]は各 inputiを明示的に計算する.
- NumericArrayが入力として与えられると,出力はNumericArrayになる.
- BatchNormalizationLayerはNetGraph等で使うために次のポートを開放する.
-
"Input" ベクトル,行列,または高階配列 "Output" ベクトル,行列,または高階配列 - より大きいネットの他の層から推測できない場合は,オプション"Input"->{n1,n2,…}を使ってBatchNormalizationLayerの入力次元を固定することができる.
- NetExtractを使って,バイアス,スケーリング,移動分散,移動平均の各配列をBatchNormalizationLayerオブジェクトから抽出することができる.
- Options[BatchNormalizationLayer]は層を構築する際のデフォルトオプションのリストを与える.Options[BatchNormalizationLayer[…]]はデータについて層を評価する際のデフォルトオプションのリストを与える.
- Information[BatchNormalizationLayer[…]]は層についてのレポートを与える.
- Information[BatchNormalizationLayer[…],prop]はBatchNormalizationLayer[…]の特性 prop の値を与える.使用可能な特性はNetGraphと同じである.
例題
すべて開く すべて閉じる例 (2)
BatchNormalizationLayer[]ベクトルを取ってベクトルを返す,初期化されたBatchNormalizationLayerを作る:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> 3]batchnorm[{1, 2, 3}]スコープ (4)
ポート (2)
階数3の配列を取って階数3の配列を返す,初期化されたBatchNormalizationLayerを作る:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> {2, 3, 3}]batchnorm[RandomReal[1, {2, 3, 3}]]//Normal//MatrixFormベクトルを取ってベクトルを返す,初期化されたBatchNormalizationLayerを作る:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> 3]batchnorm[{{1, 2, 3}, {4, 0.2, 3}}]NetEvaluationModeを使ってBatchNormalizationLayerの訓練動作を使う:
batchnorm[{{1, 2, 3}, {4, 0.2, 3}}, NetEvaluationMode -> "Train"]パラメータ (2)
"Biases" (1)
"Biases"パラメータの初期値でBatchNormalizationLayerを作る:
batchnorm = BatchNormalizationLayer["Biases" -> {-1, 3.4}]NetExtract[batchnorm, "Biases"]NetInitializeによって選ばれた"Biases"のデフォルト値はゼロベクトルである:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> 2];
NetExtract[batchnorm, "Biases"]"Scaling" (1)
"Scaling"パラメータを0に,"Biases"パラメータをカスタム値的に指定して,初期化されたBatchNormalizationLayerを作る:
batchnorm = NetInitialize@BatchNormalizationLayer["Scaling" -> {0, 0, 0}, "Biases" -> {1.3, -22.1, 1.2}]この層を任意の入力に適用すると"Biases"パラメータの値が返される:
batchnorm[{1, 2, 3}]batchnorm[{-3.4, 2.3, 100}]NetInitializeによって選ばれた"Scaling"のデフォルト値は1のベクトルである:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> 2];
NetExtract[batchnorm, "Scaling"]オプション (2)
"Epsilon" (1)
"Epsilon"パラメータを明示的に指定してBatchNormalizationLayerを作成する:
batchnorm = BatchNormalizationLayer["Epsilon" -> 0.1]NetExtract[batchnorm, "Epsilon"]"Momentum" (1)
"Momentum"パラメータを明示的に指定してBatchNormalizationLayerを作成する:
batchnorm = BatchNormalizationLayer["Momentum" -> 0.1]NetExtract[batchnorm, "Momentum"]アプリケーション (1)
BatchNormalizationLayerは,訓練を安定させ訓練速度を上げるために,ConvolutionLayerとそのアクティベーション関数の間に挿入されることが多い:
NetChain[{ConvolutionLayer[3, {3, 3}], BatchNormalizationLayer["Input" -> {3, 28, 28}], ElementwiseLayer[Ramp]}]特性と関係 (1)
BatchNormalizationLayerは,通常の評価では次の関数を計算する:
batchNormFunction = Function[Block[{sd = Sqrt[#MovingVariance + #Epsilon]},
(#2 * #Scaling / sd ) + (#Biases - (#Scaling * #MovingMean) / sd)]];単一のチャネルを含む例のベクトルについて,BatchNormalizationLayerを評価する:
params = <|"Scaling" -> {3}, "Biases" -> {2}, "MovingMean" -> {1}, "MovingVariance" -> {2}, "Epsilon" -> 0.001|>;
layer = BatchNormalizationLayer@@Normal[params]layer[{5}]//NormalbatchNormFunction[params, {5}]考えられる問題 (3)
パラメータ"MovingVariance"に負の値を指定すると,評価中に数値エラーが起こる:
batchnorm = NetInitialize[BatchNormalizationLayer["Input" -> {1, 2, 2}, "MovingVariance" -> {-2}]]batchnorm[RandomReal[1, {1, 2, 2}]]BatchNormalizationLayerは入出力すべての次元が分かるまで初期化することができない:
NetInitialize@BatchNormalizationLayer[]NetInitialize@BatchNormalizationLayer["Input" -> 3]BatchNormalizationLayerの"MovingMean"配列および"MovingVariance"配列は共有できない:
BatchNormalizationLayer["MovingMean" -> NetArray["MovingMean"]]共有配列でBatchNormalizationLayerを作る:
sharedBatchNorm = NetInsertSharedArrays[BatchNormalizationLayer[]]net = NetTrain[NetChain[{2, sharedBatchNorm, 2, sharedBatchNorm, 2}], {{0, 1} -> {1, 0}, {1, 0} -> {0, 1}}]{batchnorm1, batchnorm2} = NetExtract[net, {{2}, {4}}]"Scaling"配列と"Biases"配列は共有されたが,"MovingMean"あるいは"MovingVariance"は共有されない:
Normal /@ Information[batchnorm1, "Arrays"]Normal /@ Information[batchnorm2, "Arrays"]テクニカルノート
関連するガイド
テキスト
Wolfram Research (2016), BatchNormalizationLayer, Wolfram言語関数, https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html (2020年に更新).
CMS
Wolfram Language. 2016. "BatchNormalizationLayer." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2020. https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html.
APA
Wolfram Language. (2016). BatchNormalizationLayer. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html
BibTeX
@misc{reference.wolfram_2026_batchnormalizationlayer, author="Wolfram Research", title="{BatchNormalizationLayer}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html}", note=[Accessed: 07-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_batchnormalizationlayer, organization={Wolfram Research}, title={BatchNormalizationLayer}, year={2020}, url={https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html}, note=[Accessed: 07-September-2026]}