ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

batchNormalizationLayer

説明

バッチ正規化層は、ミニバッチ全体で各入力チャネルを正規化します。畳み込みニューラル ネットワークの学習速度を上げ、ネットワークの初期化に対する感度を下げるには、畳み込み層の間にあるバッチ正規化層と、ReLU 層などの非線形性を使用します。

この層はまず、ミニバッチの平均を減算し、ミニバッチの標準偏差で除算することにより、各チャネルの活性化を正規化します。さらに、学習可能なオフセット β だけ入力をシフトし、それを学習可能なスケール係数 γ だけスケーリングします。

作成

説明

layer = batchNormalizationLayer は、バッチ正規化層を作成します。

layer = batchNormalizationLayer('Name',Value) は、バッチ正規化層を作成し、名前と値のペアを使用して、オプションの バッチ正規化パラメーターと初期化学習率および正則化、および Name の各プロパティを設定します。たとえば、batchNormalizationLayer('Name','batchnorm') は、'batchnorm' という名前のバッチ正規化層を作成します。複数の名前と値のペアを指定できます。各プロパティ名を一重引用符で囲みます。

プロパティ

すべて展開する

バッチ正規化

各チャネルの入力の平均。2 次元入力の場合はサイズ 1 x 1 x NumChannels の数値配列、3 次元入力の場合は 1 x 1 x 1 x NumChannels の数値配列として指定します。

ネットワーク学習の完了後に、学習データセット全体の入力の平均が計算されます。層は (ミニバッチの平均の代わりに) TrainedMean を使用して、予測時に入力を正規化します。

各チャネルの入力の分散。2 次元入力の場合はサイズ 1 x 1 x NumChannels の数値配列、3 次元入力の場合は 1 x 1 x 1 x NumChannels の数値配列として指定します。

ネットワーク学習の完了後に、学習データセット全体の入力の分散が計算されます。層は (ミニバッチの分散の代わりに) TrainedVariance を使用して、予測時に入力を正規化します。

ミニバッチの分散に加算する定数。1e-5 以上の数値スカラーとして指定します。

バッチ正規化層は、正規化の前にミニバッチの分散にこの定数を加算して、数値安定性を確保し、ゼロ除算を回避します。

入力チャネル数。'auto' または正の整数として指定します。

このプロパティは、常に層への入力のチャネル数に等しくなります。NumChannels'auto' に等しい場合、学習時にチャネル数の正しい値が推測されます。

パラメーターと初期化

チャネル スケール係数を初期化する関数。次のいずれかに指定します。

  • 'ones' – 1 でチャネル スケール係数を初期化します。

  • 'zeros' – 0 でチャネル スケール係数を初期化します。

  • 'narrow-normal' – 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、チャネル スケール係数を初期化します。

  • 関数ハンドル – カスタム関数でチャネル スケール係数を初期化します。関数ハンドルを指定する場合、関数は scale = func(sz) という形式でなければなりません。ここで、sz はスケールのサイズです。たとえば、Specify Custom Weight Initialization Functionを参照してください。

この層では、Scale プロパティが空の場合にのみチャネル スケール係数が初期化されます。

データ型: char | string | function_handle

チャネル オフセットを初期化する関数。次のいずれかに指定します。

  • 'zeros' – 0 でチャネル オフセットを初期化します。

  • 'ones' – 1 でチャネル オフセットを初期化します。

  • 'narrow-normal' – 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、チャネル オフセットを初期化します。

  • 関数ハンドル – カスタム関数でチャネル オフセットを初期化します。関数ハンドルを指定する場合、関数は offset = func(sz) という形式でなければなりません。ここで、sz はスケールのサイズです。たとえば、Specify Custom Weight Initialization Functionを参照してください。

この層では、Offset プロパティが空の場合にのみチャネル オフセットが初期化されます。

データ型: char | string | function_handle

チャネル スケール係数 γ。数値配列として指定します。

チャネル スケール係数は学習可能なパラメーターです。ネットワークの学習時に、Scale が空ではない場合、trainNetworkScale プロパティを初期値として使用します。Scale が空の場合、trainNetworkScaleInitializer によって指定された初期化子を使用します。

学習時には、次のとおりです。

  • 2 次元入力の場合、Scale は正の数値から成る 1 x 1 x NumChannels の配列になります。

  • 3 次元入力の場合、Scale は正の数値から成る 1 x 1 x 1 x NumChannels の配列になります。

チャネル オフセット β。数値配列として指定します。

チャネル オフセットは学習可能なパラメーターです。ネットワークの学習時に、Offset が空ではない場合、trainNetworkOffset プロパティを初期値として使用します。Offset が空の場合、trainNetworkOffsetInitializer によって指定された初期化子を使用します。

学習時には、次のとおりです。

  • 2 次元入力の場合、Offset は 1 x 1 x NumChannels の配列になります。

  • 3 次元入力の場合、Offset は 1 x 1 x 1 x NumChannels の配列になります。

学習率および正則化

スケール係数の学習率係数。非負のスカラーとして指定します。

この係数にグローバル学習率が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleLearnRateFactor が 2 の場合、層のスケール係数の学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、グローバル学習率が決定されます。

オフセットの学習率係数。非負のスカラーとして指定します。

この係数にグローバル学習率が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetLearnRateFactor が 2 の場合、層のオフセットの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、グローバル学習率が決定されます。

スケール係数の L2 正則化係数。非負のスカラーとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleL2Factor が 2 の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。

オフセットの L2 正則化係数。非負のスカラーとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetL2Factor が 2 の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。

層の名前。文字ベクトルまたは string スカラーとして指定します。層グラフに層を含めるには、空ではない一意の層の名前を指定しなければなりません。この層が含まれる系列ネットワークに学習させて Name'' に設定すると、学習時に層に名前が自動的に割り当てられます。

データ型: char | string

層の入力の数。この層は単一の入力のみを受け入れます。

データ型: double

層の入力名。この層は単一の入力のみを受け入れます。

データ型: cell

層の出力の数。この層には単一の出力のみがあります。

データ型: double

層の出力名。この層には単一の出力のみがあります。

データ型: cell

すべて折りたたむ

'BN1' という名前のバッチ正規化層を作成します。

layer = batchNormalizationLayer('Name','BN1')
layer = 
  BatchNormalizationLayer with properties:

               Name: 'BN1'
        NumChannels: 'auto'
        TrainedMean: []
    TrainedVariance: []

   Hyperparameters
            Epsilon: 1.0000e-05

   Learnable Parameters
             Offset: []
              Scale: []

  Show all properties

Layer 配列にバッチ正規化層を含めます。

layers = [
    imageInputLayer([32 32 3]) 
  
    convolution2dLayer(3,16,'Padding',1)
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding',1)
    batchNormalizationLayer
    reluLayer
          
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer
    ]
layers = 
  11x1 Layer array with layers:

     1   ''   Image Input             32x32x3 images with 'zerocenter' normalization
     2   ''   Convolution             16 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     3   ''   Batch Normalization     Batch normalization
     4   ''   ReLU                    ReLU
     5   ''   Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     6   ''   Convolution             32 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     7   ''   Batch Normalization     Batch normalization
     8   ''   ReLU                    ReLU
     9   ''   Fully Connected         10 fully connected layer
    10   ''   Softmax                 softmax
    11   ''   Classification Output   crossentropyex

詳細

すべて展開する

アルゴリズム

バッチ正規化は、まずミニバッチと各入力チャネルについて平均 μB と分散 σB2 を計算することによって、その入力 xi を正規化します。その後、正規化された活性化を以下のように計算します。

xi^=xiμBσB2+ϵ.

ここで、ϵ (プロパティ Epsilon) は、ミニバッチの分散が非常に小さい場合に数値の安定性を改善します。ゼロ平均と単位分散を持つ入力がバッチ正規化層の後の層に最適ではない可能性を考慮して、バッチ正規化層はさらに以下のように活性化のシフトとスケーリングを行います。

yi=γx^i+β.

ここで、オフセット β とスケール係数 γ (Offset プロパティおよび Scale プロパティ) は学習可能なパラメーターであり、ネットワークの学習中に更新されます。

ネットワークの学習が終了したら、バッチ正規化層は学習セット全体の平均と分散を計算し、これらを TrainedMean プロパティおよび TrainedVariance プロパティに格納します。学習済みネットワークを使用して新しいイメージについて予測を実行する場合、この層はミニバッチの平均と分散ではなく、学習済みの平均と分散を使用して活性化を正規化します。

参照

[1] Ioffe, Sergey, and Christian Szegedy. "Batch normalization: Accelerating deep network training by reducing internal covariate shift." preprint, arXiv:1502.03167 (2015).

R2017b で導入