batchNormalizationLayer
배치 정규화 계층
설명
배치 정규화 계층은 각 채널에 대한 모든 관측값에서 데이터의 미니 배치를 독립적으로 정규화합니다. 컨벌루션 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 컨벌루션 계층과 비선형 계층(예: ReLU 계층) 사이에 배치 정규화 계층을 추가하십시오.
정규화 후 이 계층은 입력값을 학습 가능한 스케일링 인자 γ만큼 스케일링하고 학습 가능한 오프셋 β만큼 이동합니다.
생성
설명
는 배치 정규화 계층을 만듭니다.layer = batchNormalizationLayer
는 배치 정규화 계층을 만들고 하나 이상의 이름-값 쌍을 사용하여 선택적 속성인 layer = batchNormalizationLayer(Name,Value)TrainedMean, TrainedVariance, Epsilon, 파라미터 및 초기화, 학습률 및 정규화, Name을 설정합니다. 예를 들어, batchNormalizationLayer('Name','batchnorm')은 이름이 'batchnorm'인 배치 정규화 계층을 만듭니다.
속성
배치 정규화
예측에 사용되는 평균 통계량으로, 채널당 평균값으로 구성된 숫자형 벡터로 지정됩니다.
계층 입력값 유형에 따라 trainnet 및 dlnetwork 함수는 자동으로 이 속성의 형태를 변경하여 다음과 같은 크기를 갖게 됩니다.
| 계층 입력값 | 속성 크기 |
|---|---|
| 특징 입력값 | NumChannels×1 |
| 벡터 시퀀스 입력값 | |
| 1차원 영상 입력값 | 1×NumChannels |
| 1차원 영상 시퀀스 입력값 | |
| 2차원 영상 입력값 | 1×1×NumChannels |
| 2차원 영상 시퀀스 입력값 | |
| 3차원 영상 입력값 | 1×1×1×NumChannels |
| 3차원 영상 시퀀스 입력값 |
BatchNormalizationStatistics 훈련 옵션이 'moving'인 경우 소프트웨어는 동적 추정값을 사용하여 훈련 중에 배치 정규화 통계량을 근사하고 훈련 후에 TrainedMean 속성과 TrainedVariance 속성을 각각 평균과 분산의 최신 이동 추정값으로 설정합니다.
BatchNormalizationStatistics 훈련 옵션이 'population'인 경우 신경망 훈련이 완료된 후에 소프트웨어는 데이터를 한 번 더 통과시키고 TrainedMean 속성과 TrainedVariance 속성을 각각 전체 훈련 데이터 세트에서 계산된 평균과 분산으로 설정합니다.
이 계층은 TrainedMean과 TrainedVariance를 사용하여 예측 중에 입력값을 정규화합니다.
데이터형: single | double
예측에 사용되는 분산 통계량으로, 각 채널의 분산값으로 구성된 숫자형 벡터로 지정됩니다.
계층 입력값 유형에 따라 trainnet 및 dlnetwork 함수는 자동으로 이 속성의 형태를 변경하여 다음과 같은 크기를 갖게 됩니다.
| 계층 입력값 | 속성 크기 |
|---|---|
| 특징 입력값 | NumChannels×1 |
| 벡터 시퀀스 입력값 | |
| 1차원 영상 입력값 | 1×NumChannels |
| 1차원 영상 시퀀스 입력값 | |
| 2차원 영상 입력값 | 1×1×NumChannels |
| 2차원 영상 시퀀스 입력값 | |
| 3차원 영상 입력값 | 1×1×1×NumChannels |
| 3차원 영상 시퀀스 입력값 |
BatchNormalizationStatistics 훈련 옵션이 'moving'인 경우 소프트웨어는 동적 추정값을 사용하여 훈련 중에 배치 정규화 통계량을 근사하고 훈련 후에 TrainedMean 속성과 TrainedVariance 속성을 각각 평균과 분산의 최신 이동 추정값으로 설정합니다.
BatchNormalizationStatistics 훈련 옵션이 'population'인 경우 신경망 훈련이 완료된 후에 소프트웨어는 데이터를 한 번 더 통과시키고 TrainedMean 속성과 TrainedVariance 속성을 각각 전체 훈련 데이터 세트에서 계산된 평균과 분산으로 설정합니다.
이 계층은 TrainedMean과 TrainedVariance를 사용하여 예측 중에 입력값을 정규화합니다.
데이터형: single | double
미니 배치 분산에 더할 상수로, 양의 스칼라로 지정됩니다.
소프트웨어는 수치적 안정성을 보장하고 0으로 나누기를 방지하기 위해 정규화 전에 미니 배치 분산에 이 상수를 더합니다.
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
파라미터 및 초기화
채널 스케일링 인자를 초기화하는 함수로, 다음 중 하나로 지정됩니다.
'ones'– 채널 스케일링 인자를 1로 초기화합니다.'zeros'– 채널 스케일링 인자를 0으로 초기화합니다.'narrow-normal'– 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 채널 스케일링 인자를 초기화합니다.함수 핸들 – 사용자 지정 함수를 사용하여 채널 스케일링 인자를 초기화합니다. 함수 핸들을 지정할 경우, 함수는
scale = func(sz)형식이 되어야 합니다. 여기서sz는 스케일링의 크기입니다. 예제는 Specify Custom Weight Initialization Function 항목을 참조하십시오.
계층은 Scale 속성이 비어 있는 경우에만 채널 스케일링 인자를 초기화합니다.
데이터형: char | string | function_handle
채널 오프셋을 초기화하는 함수로, 다음 중 하나로 지정됩니다.
'zeros'– 채널 오프셋을 0으로 초기화합니다.'ones'– 채널 오프셋을 1로 초기화합니다.'narrow-normal'– 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 채널 오프셋을 초기화합니다.함수 핸들 – 사용자 지정 함수를 사용하여 채널 오프셋을 초기화합니다. 함수 핸들을 지정할 경우, 함수는
offset = func(sz)형식이 되어야 합니다. 여기서sz는 스케일링의 크기입니다. 예제는 Specify Custom Weight Initialization Function 항목을 참조하십시오.
계층은 Offset 속성이 비어 있는 경우에만 채널 오프셋을 초기화합니다.
데이터형: char | string | function_handle
채널 스케일링 인자 γ로, 숫자형 배열로 지정됩니다.
채널 스케일링 인자는 학습 가능한 파라미터입니다. trainnet 함수를 사용하여 신경망을 훈련시키거나 dlnetwork 객체를 초기화할 때 Scale이 비어 있지 않으면 Scale 속성이 초기값으로 사용됩니다. Scale이 비어 있으면 ScaleInitializer로 지정된 이니셜라이저가 사용됩니다.
계층 입력값 유형에 따라 trainnet 및 dlnetwork 함수는 자동으로 이 속성의 형태를 변경하여 다음과 같은 크기를 갖게 됩니다.
| 계층 입력값 | 속성 크기 |
|---|---|
| 특징 입력값 | NumChannels×1 |
| 벡터 시퀀스 입력값 | |
| 1차원 영상 입력값 | 1×NumChannels |
| 1차원 영상 시퀀스 입력값 | |
| 2차원 영상 입력값 | 1×1×NumChannels |
| 2차원 영상 시퀀스 입력값 | |
| 3차원 영상 입력값 | 1×1×1×NumChannels |
| 3차원 영상 시퀀스 입력값 |
데이터형: single | double
채널 오프셋 β로, 숫자형 벡터로 지정됩니다.
채널 오프셋은 학습 가능한 파라미터입니다. trainnet 함수를 사용하여 신경망을 훈련시키거나 dlnetwork 객체를 초기화할 때 Offset이 비어 있지 않으면 Offset 속성이 초기값으로 사용됩니다. Offset이 비어 있으면 OffsetInitializer로 지정된 이니셜라이저가 사용됩니다.
계층 입력값 유형에 따라 trainnet 및 dlnetwork 함수는 자동으로 이 속성의 형태를 변경하여 다음과 같은 크기를 갖게 됩니다.
| 계층 입력값 | 속성 크기 |
|---|---|
| 특징 입력값 | NumChannels×1 |
| 벡터 시퀀스 입력값 | |
| 1차원 영상 입력값 | 1×NumChannels |
| 1차원 영상 시퀀스 입력값 | |
| 2차원 영상 입력값 | 1×1×NumChannels |
| 2차원 영상 시퀀스 입력값 | |
| 3차원 영상 입력값 | 1×1×1×NumChannels |
| 3차원 영상 시퀀스 입력값 |
데이터형: single | double
이동 평균 계산을 위한 감쇠 값으로, 0과 1 사이의 숫자형 스칼라로 지정됩니다.
trainNetwork 또는 trainnet 함수를 사용하고 BatchNormalizationStatistics 훈련 옵션이 'moving'인 경우 각 반복에서 계층은 다음을 사용하여 이동 평균값을 업데이트합니다.
여기서 는 업데이트된 평균을 나타내고, 는 평균 감쇠 값을 나타내고, 은 계층 입력값의 평균을 나타내고, 는 이동 평균값의 최신값을 나타냅니다.
trainNetwork 또는 trainnet 함수를 사용하고 BatchNormalizationStatistics 훈련 옵션이 'population'인 경우 이 옵션은 영향을 미치지 않습니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
이동 분산 계산을 위한 감쇠 값으로, 0과 1 사이의 숫자형 스칼라로 지정됩니다.
trainNetwork 또는 trainnet 함수를 사용하고 BatchNormalizationStatistics 훈련 옵션이 'moving'인 경우 각 반복에서 계층은 다음을 사용하여 이동 분산값을 업데이트합니다.
여기서 는 업데이트된 분산을 나타내고, 은 분산 감쇠 값을 나타내고, 은 계층 입력값의 분산을 나타내고, 은 이동 분산값의 최신값을 나타냅니다.
trainNetwork 또는 trainnet 함수를 사용하고 BatchNormalizationStatistics 훈련 옵션이 'population'인 경우 이 옵션은 영향을 미치지 않습니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
학습률 및 정규화
스케일링 인자에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.
이 인자에 전역 학습률을 곱하여 계층의 스케일링 인자에 대한 학습률이 결정됩니다. 예를 들어, 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
예제
이름이 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
]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 '' Batch Normalization Batch 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 '' Batch Normalization Batch normalization
8 '' ReLU ReLU
9 '' Fully Connected 10 fully connected layer
10 '' Softmax softmax
팁
사용자 지정 훈련 루프를 사용하여 신경망을 훈련시키는 경우, 신경망 배치 정규화 상태를 수동으로 업데이트해야 합니다. 자세한 내용은 Update Batch Normalization Statistics in Custom Training Loop 항목을 참조하십시오.
알고리즘
배치 정규화 계층은 각 채널에 대한 모든 관측값에서 데이터의 미니 배치를 독립적으로 정규화합니다. 컨벌루션 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 컨벌루션 계층과 비선형 계층(예: ReLU 계층) 사이에 배치 정규화 계층을 추가하십시오.
배치 정규화 계층은 먼저 각 채널에서 미니 배치의 평균을 뺀 값을 미니 배치의 표준편차로 나누어 각 채널의 활성화 결과를 정규화합니다. 그런 다음 입력값을 학습 가능한 오프셋 β만큼 이동하고 학습 가능한 스케일링 인자 γ만큼 스케일링합니다. β와 γ 또한 학습 가능한 파라미터로, 신경망 훈련 중에 업데이트됩니다.
배치 정규화 계층은 신경망 전체에 전파되는 활성화 값과 기울기 값을 정규화하여 신경망 훈련을 보다 쉬운 최적화 문제로 만들어 줍니다. 이를 십분 활용하려면 학습률을 늘려볼 수 있습니다. 최적화 문제는 상대적으로 쉬우므로 파라미터 업데이트 값이 더 클 수 있고 신경망이 더 빠르게 학습할 수 있습니다. L2 정규화와 드롭아웃 정규화를 줄여볼 수도 있습니다. 배치 정규화 계층에서 훈련 중 특정 영상의 활성화 결과는 동일한 미니 배치에 어떤 영상이 나타나는지에 의해 좌우됩니다. 이러한 정규화 효과를 십분 활용하려면 각 훈련 Epoch 전에 훈련 데이터를 섞어 보십시오. 훈련 중에 데이터를 섞는 빈도를 지정하려면 trainingOptions의 'Shuffle' 이름-값 쌍 인수를 사용하십시오.
배치 정규화 연산은 먼저 각 채널의 공간 차원, 시간 차원 및 관측값 차원에 대한 평균 μB 및 분산 σB2을 계산하여 입력값의 요소 xi를 독립적으로 정규화합니다. 그런 다음 정규화된 활성화를 다음과 같이 계산합니다.
여기서 ϵ은 분산이 매우 작은 경우 수치적 안정성을 개선하는 상수입니다.
평균이 0이고 분산이 1인 입력값이 배치 정규화 뒤에 오는 연산에 대해 최적이 아닐 가능성을 고려하여, 배치 정규화 연산은 다음과 같이 변환을 사용하여 활성화를 추가로 이동하고 스케일링합니다.
여기서 오프셋 β와 스케일링 인자 γ는 신경망 훈련 중에 업데이트되는 학습 가능한 파라미터입니다.
훈련 후에 신경망을 사용하여 예측을 수행하려면 배치 정규화에 데이터 정규화를 위한 고정 평균과 고정 분산이 필요합니다. 이 고정 평균과 고정 분산은 훈련 후에 훈련 데이터로부터 계산하거나 동적으로 계산한 통계량을 사용하여 훈련 중에 근사할 수 있습니다.
BatchNormalizationStatistics 훈련 옵션이 'moving'인 경우 소프트웨어는 동적 추정값을 사용하여 훈련 중에 배치 정규화 통계량을 근사하고 훈련 후에 TrainedMean 속성과 TrainedVariance 속성을 각각 평균과 분산의 최신 이동 추정값으로 설정합니다.
BatchNormalizationStatistics 훈련 옵션이 'population'인 경우 신경망 훈련이 완료된 후에 소프트웨어는 데이터를 한 번 더 통과시키고 TrainedMean 속성과 TrainedVariance 속성을 각각 전체 훈련 데이터 세트에서 계산된 평균과 분산으로 설정합니다.
이 계층은 TrainedMean과 TrainedVariance를 사용하여 예측 중에 입력값을 정규화합니다.
계층 배열 또는 계층 그래프의 계층은 뒤에 오는 계층에 데이터를 전달할 때 형식이 지정된 dlarray 객체로 전달합니다. dlarray 객체의 형식은 문자들로 구성된 문자열로, 각 문자는 데이터의 대응되는 차원을 설명합니다. 형식은 다음 문자 중 하나 이상으로 구성됩니다.
"S"— 공간"C"— 채널"B"— 배치"T"— 시간"U"— 지정되지 않음
4차원 배열로 표현되는 2차원 영상 데이터를 예로 들면 처음 2개 차원은 영상의 공간 차원, 3번째 차원은 영상의 채널, 4번째 차원은 배치 차원에 대응되며, "SSCB"(공간, 공간, 채널, 배치) 형식으로 설명할 수 있습니다.
functionLayer 객체를 사용하여 사용자 지정 계층을 개발하거나, dlnetwork 객체에 forward 및 predict 함수를 사용하는 경우와 같은 자동 미분 워크플로에서 이러한 dlarray 객체와 상호 작용할 수 있습니다.
이 표는 BatchNormalizationLayer 객체의 지원되는 입력 형식과 그에 대응되는 출력 형식을 보여줍니다. 계층의 출력이 nnet.layer.Formattable 클래스를 상속하지 않는 사용자 지정 계층에 전달되거나 Formattable 속성을 0(false)으로 설정한 FunctionLayer 객체에 전달될 경우 이 계층은 이 표에 나와 있는 형식에 따라 순서가 지정된 차원을 갖는, 형식이 지정되지 않은 dlarray 객체를 수신합니다. 여기에 나와 있는 형식은 일부에 불과합니다. 계층은 다른 형식도 지원할 수 있습니다(예: 추가적인 "S"(공간) 또는 "U"(미지정) 차원을 갖는 형식).
| 입력 형식 | 출력 형식 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dlnetwork 객체에서 BatchNormalizationLayer 객체는 다음 입력 형식과 출력 형식의 결합도 지원합니다.
| 입력 형식 | 출력 형식 |
|---|---|
|
|
|
|
|
|
|
|
참고 문헌
[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® 코드를 생성할 수 있습니다.
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.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 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)