layerNormalizationLayer
説明
レイヤー正規化層は、すべてのチャネル全体におけるデータのミニバッチの正規化を、各観測値について個別に行います。再帰型多層パーセプトロン ニューラル ネットワークの学習速度を上げ、ネットワークの初期化に対する感度を下げるには、LSTM 層や全結合層などの学習可能なパラメーターの層の後に、レイヤー正規化層を使用します。
正規化後、この層は、学習可能なパラメーターのスケール係数 γ だけ入力をスケーリングし、それを学習可能なパラメーターのオフセット β だけシフトします。
作成
説明
は、レイヤー正規化層を作成します。layer = layerNormalizationLayer
は、1 つ以上の名前と値の引数を使用して、オプションの layer = layerNormalizationLayer(Name,Value)Epsilon、パラメーターと初期化、学習率および正則化、および Name プロパティを設定します。たとえば、layerNormalizationLayer('Name','layernorm') は、'layernorm' という名前のレイヤー正規化層を作成します。
プロパティ
レイヤー正規化
ミニバッチの分散に加算する定数。正のスカラーとして指定します。
ソフトウェアは、正規化の前にミニバッチの分散にこの定数を加算して、数値安定性を確保し、ゼロ除算を回避します。
R2023a より前: Epsilon は 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
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 以降) | 1×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 以降) | 1×NumChannels |
1 次元イメージ シーケンス入力 (R2023a 以降) | |
| 2 次元イメージ入力 | 1×1×NumChannels |
| 2 次元イメージ シーケンス入力 | |
| 3 次元イメージ入力 | 1×1×1×NumChannels |
| 3 次元イメージ シーケンス入力 |
データ型: single | double
学習率および正則化
スケール係数の学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleLearnRateFactor が 2 の場合、層のスケール係数の学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、グローバル学習率が決定されます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
オフセットの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetLearnRateFactor が 2 の場合、層のオフセットの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、グローバル学習率が決定されます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
スケール係数の L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleL2Factor が 2 の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
オフセットの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetL2Factor が 2 の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
層
この プロパティ は読み取り専用です。
層への入力の数。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: []
Show 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 =
10×1 Layer array with layers:
1 '' Image Input 32×32×3 images with 'zerocenter' normalization
2 '' 2-D Convolution 16 3×3 convolutions with stride [1 1] and padding [1 1 1 1]
3 '' Layer Normalization Layer normalization
4 '' ReLU ReLU
5 '' 2-D Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0]
6 '' 2-D Convolution 32 3×3 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 で導入MATLAB® Coder™ を使用して、C または C++ のコードを生成します。または、GPU Coder™ を使用して、NVIDIA® GPU 用の CUDA® コードを生成します。
OperationDimension オプションを使用して、正規化する次元を指定します。
Epsilon オプションは、1e-5 未満の正の値もサポートします。
LayerNormalizationLayer オブジェクトは、1 次元イメージ シーケンス データ (1 つの空間次元と 1 つの時間次元をもつデータ) の正規化をサポートします。
R2023a 以降、層は既定で、チャネル次元と空間次元でシーケンス データを正規化します。以前のバージョンでは、バッチ次元を除くすべての次元 (空間次元、時間次元、およびチャネル次元) で正規化が行われました。このタイプのデータには、通常、チャネル次元と空間次元での正規化がより適しています。以前の動作を再現するには、OperationDimension を "batch-excluded" に設定します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)