layerNormalizationLayer
설명
계층 정규화 계층은 각 관측값에 대해 모든 채널에서 데이터의 미니 배치를 독립적으로 정규화합니다. 순환 다층 퍼셉트론 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 학습 가능한 계층(예: LSTM 및 완전 연결 계층) 다음에 계층 정규화 계층을 사용하십시오.
정규화 후 이 계층은 입력값을 학습 가능한 스케일링 인자 γ만큼 스케일링하고 학습 가능한 오프셋 β만큼 이동합니다.
생성
설명
는 계층 정규화 계층을 만듭니다.layer
= layerNormalizationLayer
는 하나 이상의 이름-값 인수를 사용하여 선택적으로 layer
= layerNormalizationLayer(Name,Value)
Epsilon
, 파라미터 및 초기화, 학습률 및 정규화, Name
속성을 설정합니다. 예를 들어, layerNormalizationLayer('Name','layernorm')
은 이름이 'layernorm'
인 계층 정규화 계층을 만듭니다.
속성
계층 정규화
Epsilon
— 미니 배치 분산에 더할 상수
1e-5
(디폴트 값) | 양의 스칼라
미니 배치 분산에 더할 상수로, 양의 스칼라로 지정됩니다.
소프트웨어는 수치적 안정성을 보장하고 0으로 나누기를 방지하기 위해 정규화 전에 미니 배치 분산에 이 상수를 더합니다.
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
는 스케일링의 크기입니다. 예제는 Specify Custom Weight Initialization Function 항목을 참조하십시오.
계층은 Scale
속성이 비어 있는 경우에만 채널 스케일링 인자를 초기화합니다.
데이터형: char
| string
| function_handle
OffsetInitializer
— 채널 오프셋을 초기화하는 함수
'zeros'
(디폴트 값) | 'ones'
| 'narrow-normal'
| 함수 핸들
채널 오프셋을 초기화하는 함수로, 다음 중 하나로 지정됩니다.
'zeros'
– 채널 오프셋을 0으로 초기화합니다.'ones'
– 채널 오프셋을 1로 초기화합니다.'narrow-normal'
– 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 채널 오프셋을 초기화합니다.함수 핸들 – 사용자 지정 함수를 사용하여 채널 오프셋을 초기화합니다. 함수 핸들을 지정할 경우, 함수는
offset = func(sz)
형식이 되어야 합니다. 여기서sz
는 스케일링의 크기입니다. 예제는 Specify Custom Weight Initialization Function 항목을 참조하십시오.
계층은 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를 독립적으로 정규화합니다. 그런 다음 정규화된 활성화를 다음과 같이 계산합니다.
여기서 ϵ은 분산이 매우 작은 경우 수치적 안정성을 개선하는 상수입니다.
평균이 0이고 분산이 1인 입력값이 계층 정규화 뒤에 오는 연산에 대해 최적이 아닐 가능성을 고려하여, 계층 정규화 연산은 다음과 같이 변환을 사용하여 활성화를 추가로 이동하고 스케일링합니다.
여기서 오프셋 β와 스케일링 인자 γ는 신경망 훈련 중에 업데이트되는 학습 가능한 파라미터입니다.
계층 입력 형식 및 출력 형식
계층 배열 또는 계층 그래프의 계층은 뒤에 오는 계층에 데이터를 전달할 때 형식이 지정된 dlarray
객체로 전달합니다. dlarray
객체의 형식은 문자들로 구성된 문자열로, 각 문자는 데이터의 대응되는 차원을 설명합니다. 형식은 다음 문자 중 하나 이상으로 구성됩니다.
"S"
— 공간"C"
— 채널"B"
— 배치"T"
— 시간"U"
— 지정되지 않음
4차원 배열로 표현되는 2차원 영상 데이터를 예로 들면 처음 2개 차원은 영상의 공간 차원, 3번째 차원은 영상의 채널, 4번째 차원은 배치 차원에 대응되며, "SSCB"
(공간, 공간, 채널, 배치) 형식으로 설명될 수 있습니다.
functionLayer
객체를 사용하여 사용자 지정 계층을 개발하거나, dlnetwork
객체에 forward
및 predict
함수를 사용하는 경우와 같은 자동 미분 워크플로에서 이러한 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 명령 창에 입력하십시오. 웹 브라우저는 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)