layerNormalizationLayer
説明
レイヤー正規化層は、すべてのチャネル全体におけるデータのミニバッチの正規化を、各観測値について個別に行います。再帰型多層パーセプトロン ニューラル ネットワークの学習速度を上げ、ネットワークの初期化に対する感度を下げるには、LSTM 層や全結合層などの学習可能な層の後に、レイヤー正規化層を使用します。
正規化後、この層は、学習可能なスケール係数 γ だけ入力をスケーリングし、それを学習可能なオフセット β だけシフトします。
作成
説明
は、レイヤー正規化層を作成します。layer
= layerNormalizationLayer
は、1 つ以上の名前と値の引数を使用して、オプションの layer
= layerNormalizationLayer(Name,Value)
Epsilon
、パラメーターと初期化、学習率および正則化、および Name
プロパティを設定します。たとえば、layerNormalizationLayer('Name','layernorm')
は、'layernorm'
という名前のレイヤー正規化層を作成します。
プロパティ
レイヤー正規化
Epsilon
— ミニバッチの分散に加算する定数
1e-5
(既定値) | 正のスカラー
ミニバッチの分散に加算する定数。正のスカラーとして指定します。
ソフトウェアは、正規化の前にミニバッチの分散にこの定数を加算して、数値安定性を確保し、ゼロ除算を回避します。
R2023a より前: Epsilon
は 1e-5
以上でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
NumChannels
— 入力チャネル数
"auto"
(既定値) | 正の整数
この プロパティ は読み取り専用です。
入力チャネル数。次のいずれかとして指定します。
"auto"
— 学習時に入力チャネルの数を自動的に決定します。正の整数 — 指定された数の入力チャネルの層を構成します。
NumChannels
と層入力データのチャネル数は一致しなければなりません。たとえば、入力が RGB イメージの場合、NumChannels
は 3 でなければなりません。入力が 16 個のフィルターをもつ畳み込み層の出力である場合、NumChannels
は 16 でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
OperationDimension
— 正規化する次元
"auto"
(既定値) | "channel-only"
| "spatial-channel"
| "batch-excluded"
R2023a 以降
正規化する次元。次の値のいずれかとして指定します。
"auto"
— 特徴、シーケンス、1 次元イメージ、または時空間の入力の場合、チャネル次元で正規化します。それ以外の場合は、空間次元とチャネル次元で正規化します。"channel-only"
— チャネル次元で正規化します。"spatial-channel"
— 空間次元とチャネル次元で正規化します。"batch-excluded"
— バッチ次元を除くすべての次元で正規化します。
パラメーターと初期化
ScaleInitializer
— チャネル スケール係数を初期化する関数
'ones'
(既定値) | 'narrow-normal'
| 関数ハンドル
チャネル スケール係数を初期化する関数。次のいずれかに指定します。
'ones'
– 1 でチャネル スケール係数を初期化します。'zeros'
– 0 でチャネル スケール係数を初期化します。'narrow-normal'
– 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、チャネル スケール係数を初期化します。関数ハンドル – カスタム関数でチャネル スケール係数を初期化します。関数ハンドルを指定する場合、関数は
scale = func(sz)
という形式でなければなりません。ここで、sz
はスケールのサイズです。例については、カスタム重み初期化関数の指定を参照してください。
この層では、Scale
プロパティが空の場合にのみチャネル スケール係数が初期化されます。
データ型: char
| string
| function_handle
OffsetInitializer
— チャネル オフセットを初期化する関数
'zeros'
(既定値) | 'ones'
| 'narrow-normal'
| 関数ハンドル
チャネル オフセットを初期化する関数。次のいずれかに指定します。
'zeros'
– 0 でチャネル オフセットを初期化します。'ones'
– 1 でチャネル オフセットを初期化します。'narrow-normal'
– 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、チャネル オフセットを初期化します。関数ハンドル – カスタム関数でチャネル オフセットを初期化します。関数ハンドルを指定する場合、関数は
offset = func(sz)
という形式でなければなりません。ここで、sz
はスケールのサイズです。例については、カスタム重み初期化関数の指定を参照してください。
この層では、Offset
プロパティが空の場合にのみチャネル オフセットが初期化されます。
データ型: char
| string
| function_handle
Scale
— チャネル スケール係数
[]
(既定値) | 数値配列
チャネル スケール係数 γ。数値配列として指定します。
チャネル スケール係数は学習可能なパラメーターです。関数 trainnet
を使用してネットワークに学習させるとき、または dlnetwork
オブジェクトを初期化するときに、Scale
が空でない場合、ソフトウェアは Scale
プロパティを初期値として使用します。Scale
が空の場合、ScaleInitializer
によって指定された初期化子が使用されます。
層入力のタイプに応じて、関数 trainnet
および dlnetwork
は、次のサイズをもつようにこのプロパティを自動的に形状変更します。
層入力 | プロパティ サイズ |
---|---|
特徴入力 | NumChannels 行 1 列 |
ベクトル シーケンス入力 | |
1 次元イメージ入力 (R2023a 以降) | 1×NumChannels |
1 次元イメージ シーケンス入力 (R2023a 以降) | |
2 次元イメージ入力 | 1×1×NumChannels |
2 次元イメージ シーケンス入力 | |
3 次元イメージ入力 | 1×1×1×NumChannels |
3 次元イメージ シーケンス入力 |
データ型: single
| double
Offset
— チャネル オフセット
[]
(既定値) | 数値配列
チャネル オフセット β。数値ベクトルとして指定します。
チャネル オフセットは学習可能なパラメーターです。関数 trainnet
を使用してネットワークに学習させるとき、または dlnetwork
オブジェクトを初期化するときに、Offset
が空でない場合、ソフトウェアは Offset
プロパティを初期値として使用します。Offset
が空の場合、OffsetInitializer
によって指定された初期化子が使用されます。
層入力のタイプに応じて、関数 trainnet
および dlnetwork
は、次のサイズをもつようにこのプロパティを自動的に形状変更します。
層入力 | プロパティ サイズ |
---|---|
特徴入力 | NumChannels 行 1 列 |
ベクトル シーケンス入力 | |
1 次元イメージ入力 (R2023a 以降) | 1×NumChannels |
1 次元イメージ シーケンス入力 (R2023a 以降) | |
2 次元イメージ入力 | 1×1×NumChannels |
2 次元イメージ シーケンス入力 | |
3 次元イメージ入力 | 1×1×1×NumChannels |
3 次元イメージ シーケンス入力 |
データ型: single
| double
学習率および正則化
ScaleLearnRateFactor
— スケール係数の学習率係数
1
(既定値) | 非負のスカラー
スケール係数の学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleLearnRateFactor
が 2
の場合、層のスケール係数の学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定された設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OffsetLearnRateFactor
— オフセットの学習率係数
1
(既定値) | 非負のスカラー
オフセットの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetLearnRateFactor
が 2
の場合、層のオフセットの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定された設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ScaleL2Factor
— スケール係数の L2 正則化係数
1
(既定値) | 非負のスカラー
スケール係数の L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleL2Factor
が 2
の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions
を使用して指定できます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OffsetL2Factor
— オフセットの L2 正則化係数
1
(既定値) | 非負のスカラー
オフセットの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetL2Factor
が 2
の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions
を使用して指定できます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
層
NumInputs
— 入力の数
1
(既定値)
この プロパティ は読み取り専用です。
層への入力の数。1
として返されます。この層は単一の入力のみを受け入れます。
データ型: double
InputNames
— 入力名
{'in'}
(既定値)
この プロパティ は読み取り専用です。
入力名。{'in'}
として返されます。この層は単一の入力のみを受け入れます。
データ型: cell
NumOutputs
— 出力の数
1
(既定値)
この プロパティ は読み取り専用です。
層からの出力の数。1
として返されます。この層には単一の出力のみがあります。
データ型: double
OutputNames
— 出力名
{'out'}
(既定値)
この プロパティ は読み取り専用です。
出力名。{'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
アルゴリズム
レイヤー正規化層
レイヤー正規化演算は、各観測値について、空間領域、時間領域、およびチャネルの各次元における平均 μL と分散 σL2 をまず個別に計算することで、入力の要素 xi を正規化します。その後、正規化された活性化を次のように計算します。
ここで、ϵ は、分散が非常に小さいときに数値安定性を向上させる定数です。
ゼロ平均と単位分散をもつ入力がレイヤー正規化後の演算に最適ではない可能性を考慮して、レイヤー正規化演算は、次の変換を使用して活性化のさらなるシフトとスケーリングを行います。
ここで、オフセット β とスケール係数 γ は、ネットワークの学習中に更新される学習可能パラメーターです。
層の入力形式と出力形式
層配列内または層グラフ内の層は、形式を整えた dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB"
(空間、空間、チャネル、バッチ) という形式で記述できます。
functionLayer
オブジェクトを使用するか、関数 forward
と関数 predict
を dlnetwork
オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray
オブジェクトを操作できます。
次の表は、LayerNormalizationLayer
オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable
クラスを継承していないカスタム層、または Formattable
プロパティが 0
(false
) に設定された FunctionLayer
オブジェクトに層の出力を渡す場合、その層は形式を整えていない dlarray
オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S"
(空間) 次元または "U"
(未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
入力形式 | 出力形式 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dlnetwork
オブジェクトでは、LayerNormalizationLayer
オブジェクトもこれらの入力形式と出力形式の組み合わせをサポートします。
入力形式 | 出力形式 |
---|---|
|
|
|
|
|
|
|
|
参照
[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 で導入R2023b: コード生成のサポート
MATLAB® Coder™ を使用して、C または C++ のコードを生成します。または、GPU Coder™ を使用して、NVIDIA® GPU 用の CUDA® コードを生成します。
R2023a: 演算次元の指定
OperationDimension
オプションを使用して、正規化する次元を指定します。
R2023a: Epsilon
は 1e-5
未満の値をサポートする
Epsilon
オプションは、1e-5
未満の正の値もサポートします。
R2023a: 層は 1 次元イメージ シーケンス データをサポートする
LayerNormalizationLayer
オブジェクトは、1 次元イメージ シーケンス データ (1 つの空間次元と 1 つの時間次元をもつデータ) の正規化をサポートします。
R2023a: 層はシーケンス データのチャネル次元と空間次元で正規化する
R2023a 以降、層は既定で、チャネル次元と空間次元でシーケンス データを正規化します。以前のバージョンでは、バッチ次元を除くすべての次元 (空間次元、時間次元、およびチャネル次元) で正規化が行われました。このタイプのデータには、通常、チャネル次元と空間次元での正規化がより適しています。以前の動作を再現するには、OperationDimension
を "batch-excluded"
に設定します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)