Main Content

layerNormalizationLayer

レイヤー正規化層

R2021a 以降

    説明

    レイヤー正規化層は、すべてのチャネル全体におけるデータのミニバッチの正規化を、各観測値について個別に行います。再帰型多層パーセプトロン ニューラル ネットワークの学習速度を上げ、ネットワークの初期化に対する感度を下げるには、LSTM 層や全結合層などの学習可能な層の後に、レイヤー正規化層を使用します。

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

    作成

    説明

    layer = layerNormalizationLayer は、レイヤー正規化層を作成します。

    layer = layerNormalizationLayer(Name,Value) は、1 つ以上の名前と値の引数を使用して、オプションの Epsilonパラメーターと初期化学習率および正則化、および Name プロパティを設定します。たとえば、layerNormalizationLayer('Name','layernorm') は、'layernorm' という名前のレイヤー正規化層を作成します。

    プロパティ

    すべて展開する

    レイヤー正規化

    ミニバッチの分散に加算する定数。正のスカラーとして指定します。

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

    R2023a より前: Epsilon1e-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

    R2023a 以降

    正規化する次元。次の値のいずれかとして指定します。

    • "auto" — 特徴、シーケンス、1 次元イメージ、または時空間の入力の場合、チャネル次元で正規化します。それ以外の場合は、空間次元とチャネル次元で正規化します。

    • "channel-only" — チャネル次元で正規化します。

    • "spatial-channel" — 空間次元とチャネル次元で正規化します。

    • "batch-excluded" — バッチ次元を除くすべての次元で正規化します。

    パラメーターと初期化

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

    • '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

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

    チャネル スケール係数は学習可能なパラメーターです。関数 trainnet を使用してネットワークに学習させるとき、または dlnetwork オブジェクトを初期化するときに、Scale が空でない場合、ソフトウェアは Scale プロパティを初期値として使用します。Scale が空の場合、ScaleInitializer によって指定された初期化子が使用されます。

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

    層入力プロパティ サイズ
    特徴入力NumChannels 行 1 列
    ベクトル シーケンス入力

    1 次元イメージ入力 (R2023a 以降)

    NumChannels

    1 次元イメージ シーケンス入力 (R2023a 以降)

    2 次元イメージ入力1×1×NumChannels
    2 次元イメージ シーケンス入力
    3 次元イメージ入力1×1×1×NumChannels
    3 次元イメージ シーケンス入力

    データ型: single | double

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

    チャネル オフセットは学習可能なパラメーターです。関数 trainnet を使用してネットワークに学習させるとき、または dlnetwork オブジェクトを初期化するときに、Offset が空でない場合、ソフトウェアは Offset プロパティを初期値として使用します。Offset が空の場合、OffsetInitializer によって指定された初期化子が使用されます。

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

    層入力プロパティ サイズ
    特徴入力NumChannels 行 1 列
    ベクトル シーケンス入力

    1 次元イメージ入力 (R2023a 以降)

    NumChannels

    1 次元イメージ シーケンス入力 (R2023a 以降)

    2 次元イメージ入力1×1×NumChannels
    2 次元イメージ シーケンス入力
    3 次元イメージ入力1×1×1×NumChannels
    3 次元イメージ シーケンス入力

    データ型: single | double

    学習率および正則化

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

    この係数にグローバル学習率が乗算されて、層のスケール係数の学習率が決定されます。たとえば、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 配列入力の場合、関数 trainnet および関数 dlnetwork は、名前が "" の層に自動的に名前を割り当てます。

    LayerNormalizationLayer オブジェクトは、このプロパティを文字ベクトルとして格納します。

    データ型: char | string

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

    層への入力の数。1 として返されます。この層は単一の入力のみを受け入れます。

    データ型: double

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

    入力名。{'in'} として返されます。この層は単一の入力のみを受け入れます。

    データ型: cell

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

    層からの出力の数。1 として返されます。この層には単一の出力のみがあります。

    データ型: double

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

    出力名。{'out'} として返されます。この層には単一の出力のみがあります。

    データ型: cell

    すべて折りたたむ

    'layernorm' という名前のレイヤー正規化層を作成します。

    layer = layerNormalizationLayer('Name','layernorm')
    layer = 
      LayerNormalizationLayer with properties:
    
                      Name: 'layernorm'
               NumChannels: 'auto'
    
       Hyperparameters
                   Epsilon: 1.0000e-05
        OperationDimension: 'auto'
    
       Learnable Parameters
                    Offset: []
                     Scale: []
    
    Use properties method to see a list of all properties.
    
    

    Layer 配列にレイヤー正規化層を含めます。

    layers = [
        imageInputLayer([32 32 3]) 
        convolution2dLayer(3,16,'Padding',1)
        layerNormalizationLayer
        reluLayer   
        maxPooling2dLayer(2,'Stride',2)
        convolution2dLayer(3,32,'Padding',1)
        layerNormalizationLayer
        reluLayer
        fullyConnectedLayer(10)
        softmaxLayer]
    layers = 
      10x1 Layer array with layers:
    
         1   ''   Image Input           32x32x3 images with 'zerocenter' normalization
         2   ''   2-D Convolution       16 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
         3   ''   Layer Normalization   Layer normalization
         4   ''   ReLU                  ReLU
         5   ''   2-D Max Pooling       2x2 max pooling with stride [2  2] and padding [0  0  0  0]
         6   ''   2-D Convolution       32 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
         7   ''   Layer Normalization   Layer normalization
         8   ''   ReLU                  ReLU
         9   ''   Fully Connected       10 fully connected layer
        10   ''   Softmax               softmax
    

    アルゴリズム

    すべて展開する

    参照

    [1] Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton. “Layer Normalization.” Preprint, submitted July 21, 2016. https://arxiv.org/abs/1607.06450.

    拡張機能

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

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

    バージョン履歴

    R2021a で導入

    すべて展開する