Main Content

이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

batchNormalizationLayer

배치 정규화 계층

설명

배치 정규화 계층은 미니 배치에서 각 입력 채널을 정규화합니다. 컨벌루션 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 컨벌루션 계층과 비선형 계층(예: ReLU 계층) 사이에 배치 정규화 계층을 추가하십시오.

배치 정규화 계층은 먼저 각 채널에서 미니 배치의 평균을 뺀 값을 미니 배치의 표준편차로 나누어 각 채널의 활성화 결과를 정규화합니다. 그런 다음 입력값을 학습 가능한 오프셋 β만큼 이동하고 학습 가능한 스케일링 인자 γ만큼 스케일링합니다.

생성

설명

layer = batchNormalizationLayer는 배치 정규화 계층을 만듭니다.

예제

layer = batchNormalizationLayer('Name',Value)는 배치 정규화 계층을 만들고 이름-값 쌍을 사용하여 선택적 속성인 배치 정규화, 파라미터 및 초기화, 학습률 및 정규화, Name을 설정합니다. 예를 들어, batchNormalizationLayer('Name','batchnorm')은 이름이 'batchnorm'인 배치 정규화 계층을 만듭니다. 여러 개의 이름-값 쌍을 지정할 수 있습니다. 각 속성 이름을 작은따옴표로 묶습니다.

속성

모두 확장

배치 정규화

각 채널의 입력값 평균으로, 크기가 1x1xNumChannels인 숫자형 배열(2차원 입력값) 또는 크기가 1x1x1xNumChannels인 숫자형 배열(3차원 입력값)로 지정됩니다.

신경망 훈련이 끝나면 전체 훈련 데이터 세트에 대한 입력값 평균이 계산됩니다. 이 계층은 미니 배치 평균 대신 TrainedMean을 사용하여 예측 중에 입력값을 정규화합니다.

각 채널의 입력값 분산으로, 크기가 1x1xNumChannels인 숫자형 배열(2차원 입력값) 또는 크기가 1x1x1xNumChannels인 숫자형 배열(3차원 입력값)로 지정됩니다.

신경망 훈련이 끝나면 전체 훈련 데이터 세트에 대한 입력값 분산이 계산됩니다. 이 계층은 미니 배치 분산 대신 TrainedVariance를 사용하여 예측 중에 입력값을 정규화합니다.

미니 배치 분산에 더할 상수로, 1e-5보다 크거나 같은 숫자형 스칼라로 지정됩니다.

배치 정규화 계층은 수치적 안정성을 보장하고 0으로 나누기를 방지하기 위해 정규화 전에 미니 배치 분산에 이 상수를 더합니다.

입력 채널의 개수로, 'auto' 또는 양의 정수로 지정됩니다.

이 속성은 항상 계층으로 입력되는 입력값의 채널 개수와 같습니다. NumChannels'auto'인 경우, 훈련 시점에 채널 개수의 올바른 값이 추론됩니다.

파라미터 및 초기화

채널 스케일링 인자를 초기화하는 함수로, 다음 중 하나로 지정됩니다.

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

채널 스케일링 인자 γ로, 숫자형 배열로 지정됩니다.

채널 스케일링 인자는 학습 가능한 파라미터입니다. 신경망을 훈련시킬 때 Scale이 비어 있지 않으면 trainNetworkScale 속성을 초기값으로 사용합니다. Scale이 비어 있으면 trainNetworkScaleInitializer로 지정된 이니셜라이저를 사용합니다.

훈련 시점에:

  • 2차원 입력값에 대해 Scale은 양수로 구성된 1x1xNumChannels 배열입니다.

  • 3차원 입력값에 대해 Scale은 양수로 구성된 1x1x1xNumChannels 배열입니다.

채널 오프셋 β로, 숫자형 배열로 지정됩니다.

채널 오프셋은 학습 가능한 파라미터입니다. 신경망을 훈련시킬 때 Offset이 비어 있지 않으면 trainNetworkOffset 속성을 초기값으로 사용합니다. Offset이 비어 있으면 trainNetworkOffsetInitializer로 지정된 이니셜라이저를 사용합니다.

훈련 시점에:

  • 2차원 입력값에 대해 Offset은 1x1xNumChannels 배열입니다.

  • 3차원 입력값에 대해 Offset은 1x1x1xNumChannels 배열입니다.

학습률 및 정규화

스케일링 인자에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 학습률을 곱하여 계층의 스케일링 인자에 대한 학습률이 결정됩니다. 예를 들어, ScaleLearnRateFactor가 2인 경우, 이 계층의 스케일링 인자에 대한 학습률은 현재 전역 학습률의 2배입니다. 소프트웨어는 trainingOptions 함수로 지정된 설정을 기준으로 전역 학습률을 결정합니다.

오프셋에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 학습률을 곱하여 계층의 오프셋에 대한 학습률이 결정됩니다. 예를 들어, OffsetLearnRateFactor가 2인 경우, 이 계층의 오프셋에 대한 학습률은 현재 전역 학습률의 2배입니다. 소프트웨어는 trainingOptions 함수로 지정된 설정을 기준으로 전역 학습률을 결정합니다.

스케일링 인자에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 L2 정규화 인자를 곱하여 계층의 스케일링 인자에 대한 학습률이 결정됩니다. 예를 들어, ScaleL2Factor가 2인 경우, 이 계층의 오프셋에 대한 L2 정규화는 전역 L2 정규화 인자의 2배입니다. 전역 L2 정규화 인자는 trainingOptions 함수를 사용하여 지정할 수 있습니다.

오프셋에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 L2 정규화 인자를 곱하여 계층의 오프셋에 대한 학습률이 결정됩니다. 예를 들어, OffsetL2Factor가 2인 경우, 이 계층의 오프셋에 대한 L2 정규화는 전역 L2 정규화 인자의 2배입니다. 전역 L2 정규화 인자는 trainingOptions 함수를 사용하여 지정할 수 있습니다.

계층

계층 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 계층 그래프에 계층을 포함하려면 비어 있지 않은 고유한 계층 이름을 지정해야 합니다. 이 계층을 사용하여 시리즈 신경망을 훈련시킬 때 Name''로 설정하면, 소프트웨어가 훈련 시점에 해당 계층에 자동으로 이름을 할당합니다.

데이터형: char | string

계층의 입력값 개수. 이 계층은 단일 입력값만 받습니다.

데이터형: double

계층의 입력값 이름. 이 계층은 단일 입력값만 받습니다.

데이터형: cell

계층의 출력값 개수. 이 계층은 단일 출력값만 가집니다.

데이터형: double

계층의 출력값 이름. 이 계층은 단일 출력값만 가집니다.

데이터형: cell

예제

모두 축소

이름이 'BN1'인 배치 정규화 계층을 만듭니다.

layer = batchNormalizationLayer('Name','BN1')
layer = 
  BatchNormalizationLayer with properties:

               Name: 'BN1'
        NumChannels: 'auto'
        TrainedMean: []
    TrainedVariance: []

   Hyperparameters
            Epsilon: 1.0000e-05

   Learnable Parameters
             Offset: []
              Scale: []

  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
    classificationLayer
    ]
layers = 
  11x1 Layer array with layers:

     1   ''   Image Input             32x32x3 images with 'zerocenter' normalization
     2   ''   Convolution             16 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     3   ''   Batch Normalization     Batch normalization
     4   ''   ReLU                    ReLU
     5   ''   Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     6   ''   Convolution             32 3x3 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
    11   ''   Classification Output   crossentropyex

세부 정보

모두 확장

알고리즘

배치 정규화는 입력값 xi를 정규화합니다. 먼저 미니 배치에 대해 그리고 각 입력 채널에 대해 평균 μB와 분산 σB2을 계산합니다. 그런 다음 정규화된 활성화 결과를 다음과 같이 계산합니다.

xi^=xiμBσB2+ϵ.

여기서 ϵ(Epsilon 속성)은 미니 배치의 분산이 매우 작은 경우 수치적 안정성을 개선합니다. 평균이 0이고 분산이 1인 입력값이 배치 정규화 계층 뒤에 오는 계층에 대해 최적이 아닐 가능성을 고려하여, 배치 정규화 계층은 활성화 결과를 다음과 같이 추가로 이동하고 스케일링합니다.

yi=γx^i+β.

여기서 오프셋 β와 스케일링 인자 γ(Offset 속성과 Scale 속성)는 학습 가능한 파라미터로, 신경망 훈련 중에 업데이트됩니다.

신경망 훈련이 끝나면 배치 정규화 계층은 전체 훈련 세트에 대해 평균과 분산을 계산하여 각각 TrainedMean 속성과 TrainedVariance 속성에 저장합니다. 훈련된 신경망을 사용하여 새로운 영상에 대한 예측을 수행하는 경우, 이 계층은 미니 배치의 평균과 분산 대신 훈련된 평균과 분산을 사용하여 활성화 결과를 정규화합니다.

참고 문헌

[1] Ioffe, Sergey, and Christian Szegedy. "Batch normalization: Accelerating deep network training by reducing internal covariate shift." preprint, arXiv:1502.03167 (2015).

확장 기능

GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.

R2017b에 개발됨