Main Content

batchNormalizationLayer

説明

バッチ正規化層は、観測値全体におけるデータ ミニバッチの正規化を、各チャネルについて個別に行います。畳み込みニューラル ネットワークの学習速度を上げ、ネットワークの初期化に対する感度を下げるには、畳み込み層の間にあるバッチ正規化層と、ReLU 層などの非線形性を使用します。

正規化後、この層は、学習可能なスケール係数 γ だけ入力をスケーリングし、それを学習可能なオフセット β だけシフトします。

作成

説明

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

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

プロパティ

すべて展開する

バッチ正規化

予測に使用される平均統計値。チャネルごとの平均値の数値ベクトルとして指定します。

層入力のタイプに応じて、関数 trainNetworkassembleNetworklayerGraph、および dlnetwork は、次のサイズをもつようにこのプロパティを自動的に形状変更します。

層入力プロパティ サイズ
特徴入力NumChannels 行 1 列
ベクトル シーケンス入力
1 次元イメージ入力NumChannels
1 次元イメージ シーケンス入力
2 次元イメージ入力1×1×NumChannels
2 次元イメージ シーケンス入力
3 次元イメージ入力1×1×1×NumChannels
3 次元イメージ シーケンス入力

BatchNormalizationStatistics 学習オプションが 'moving' である場合、学習中に実行時推定を使用してバッチ正規化統計量が近似され、学習後に TrainedMean プロパティと TrainedVariance プロパティがそれぞれ平均と分散の最新の移動推定値に設定されます。

BatchNormalizationStatistics 学習オプションが 'population' である場合、ネットワークの学習終了後にデータが再度渡され、TrainedMean プロパティと TrainedVariance プロパティがそれぞれ学習データ セット全体から計算された平均と分散に設定されます。

層は TrainedMeanTrainedVariance を使用して、予測時に入力を正規化します。

データ型: single | double

予測に使用される分散統計値。チャネルごとの分散値の数値ベクトルとして指定します。

層入力のタイプに応じて、関数 trainNetworkassembleNetworklayerGraph、および dlnetwork は、次のサイズをもつようにこのプロパティを自動的に形状変更します。

層入力プロパティ サイズ
特徴入力NumChannels 行 1 列
ベクトル シーケンス入力
1 次元イメージ入力NumChannels
1 次元イメージ シーケンス入力
2 次元イメージ入力1×1×NumChannels
2 次元イメージ シーケンス入力
3 次元イメージ入力1×1×1×NumChannels
3 次元イメージ シーケンス入力

BatchNormalizationStatistics 学習オプションが 'moving' である場合、学習中に実行時推定を使用してバッチ正規化統計量が近似され、学習後に TrainedMean プロパティと TrainedVariance プロパティがそれぞれ平均と分散の最新の移動推定値に設定されます。

BatchNormalizationStatistics 学習オプションが 'population' である場合、ネットワークの学習終了後にデータが再度渡され、TrainedMean プロパティと TrainedVariance プロパティがそれぞれ学習データ セット全体から計算された平均と分散に設定されます。

層は TrainedMeanTrainedVariance を使用して、予測時に入力を正規化します。

データ型: single | double

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

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

このプロパティは読み取り専用です。

入力チャネル数。次のいずれかとして指定します。

  • 'auto' — 学習時に入力チャネルの数を自動的に決定します。

  • 正の整数 — 指定された数の入力チャネルの層を構成します。NumChannels と層入力データのチャネル数は一致しなければなりません。たとえば、入力が RGB イメージの場合、NumChannels は 3 でなければなりません。入力が 16 個のフィルターをもつ畳み込み層の出力である場合、NumChannels は 16 でなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

パラメーターと初期化

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

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

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

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

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

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

データ型: char | string | function_handle

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

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

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

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

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

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

データ型: char | string | function_handle

チャネル スケール係数 γ。数値ベクトルとして指定します。

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

層入力のタイプに応じて、関数 trainNetworkassembleNetworklayerGraph、および dlnetwork は、次のサイズをもつようにこのプロパティを自動的に形状変更します。

層入力プロパティ サイズ
特徴入力NumChannels 行 1 列
ベクトル シーケンス入力
1 次元イメージ入力NumChannels
1 次元イメージ シーケンス入力
2 次元イメージ入力1×1×NumChannels
2 次元イメージ シーケンス入力
3 次元イメージ入力1×1×1×NumChannels
3 次元イメージ シーケンス入力

データ型: single | double

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

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

層入力のタイプに応じて、関数 trainNetworkassembleNetworklayerGraph、および dlnetwork は、次のサイズをもつようにこのプロパティを自動的に形状変更します。

層入力プロパティ サイズ
特徴入力NumChannels 行 1 列
ベクトル シーケンス入力
1 次元イメージ入力NumChannels
1 次元イメージ シーケンス入力
2 次元イメージ入力1×1×NumChannels
2 次元イメージ シーケンス入力
3 次元イメージ入力1×1×1×NumChannels
3 次元イメージ シーケンス入力

データ型: single | double

移動平均を計算するための減衰値。01 の数値スカラーとして指定します。

BatchNormalizationStatistics 学習オプションが 'moving' である場合、各反復において、層は次を使用して移動平均値を更新します。

μ*=λμμ^+(1λμ)μ,

ここで、μ* は更新後の平均、λμ は平均の減衰値、μ^ は層入力の平均、μ は移動平均の最新値を表します。

BatchNormalizationStatistics 学習オプションが 'population' である場合、このオプションは効果がありません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

移動分散を計算するための減衰値。01 の数値スカラーとして指定します。

BatchNormalizationStatistics 学習オプションが 'moving' である場合、各反復において、層は次を使用して移動分散値を更新します。

σ2*=λσ2σ2^+(1λσ2)σ2,

ここで、σ2* は更新後の分散、λσ2 は分散の減衰値、σ2^ は層入力の分散、σ2 は移動分散の最新値を表します。

BatchNormalizationStatistics 学習オプションが 'population' である場合、このオプションは効果がありません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

学習率および正則化

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

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

層の名前。文字ベクトルまたは string スカラーとして指定します。Layer 配列入力の場合、関数 trainNetworkassembleNetworklayerGraph、および dlnetwork は、名前が '' の層に自動的に名前を割り当てます。

データ型: char | string

このプロパティは読み取り専用です。

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

データ型: double

このプロパティは読み取り専用です。

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

データ型: cell

このプロパティは読み取り専用です。

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

データ型: double

このプロパティは読み取り専用です。

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

データ型: cell

すべて折りたたむ

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

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

               Name: 'BN1'
        NumChannels: 'auto'

   Hyperparameters
          MeanDecay: 0.1000
      VarianceDecay: 0.1000
            Epsilon: 1.0000e-05

   Learnable Parameters
             Offset: []
              Scale: []

   State Parameters
        TrainedMean: []
    TrainedVariance: []

  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

アルゴリズム

すべて展開する

参照

[1] Ioffe, Sergey, and Christian Szegedy. “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.” Preprint, submitted March 2, 2015. https://arxiv.org/abs/1502.03167.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2017b で導入