일괄 처리 정규화

BatchNormalization(input, scale, bias, runMean, runVariance, spatial,
                   normalizationTimeConstant = 0,
                   blendTimeConstant = 0, epsilon = 0.00001, useCntkEngine = true)

매개 변수

  • input 는 일괄 처리 정규화 노드의 입력입니다.
  • scale는 학습된 구성 요소 배율 인수(gamma아래 수식의 용어)를 보유하는 ParameterTensor{}입니다.
  • bias는 학습된 바이어스(beta용어)를 보유하는 ParameterTensor{}입니다. scalebias 경우 spatial = true출력 컨볼루션 기능 맵의 수 또는 차원과 spatial = false 같아야 하는 차원이 같 input 아야 합니다.
  • runMean 는 평가 단계에서 사용되며 학습 중에도 사용될 수 있는 실행 평균입니다. 초기 값 0과 동일한 차원 scalebiasParameterTensor{}를 전달하고 learningRateMultiplier=0 설정해야 합니다.
  • runVariance 는 실행 중인 분산입니다. 이 값은 .와 동일한 방식으로 runMean표시됩니다.
  • spatial 는 미니배치의 각 기능에 대해 독립적으로 평균/var을 계산할지, 아니면 나선형 계층의 경우 기능 맵당 평균/var을 계산할지를 지정하는 플래그입니다.
  • normalizationTimeConstant (기본값 0): 평균 및 분산의 실행 평균을 필터링된 하위 버전의 일괄 처리 통계로 계산하기 위한 시간 상수입니다. 참고: 기본값은 일반적으로 원하는 것이 아닙니다.
  • blendTimeConstant (기본값 0): 실행 중인 통계를 사용하여 일괄 처리 예상을 원활하게 할 수 있습니다.
  • epsilon 는 역 표준 편차를 계산할 때 분산에 추가된 컨디셔너 상수입니다.
  • useCntkEngine (기본값: true): GPU 전용 cuDNN 구현을 선택하도록 false 설정

반환 값

일괄 처리 정규화된 input.

Description

BatchNormalization 에서는 문서 일괄 처리 정규화: 내부 공변 시프트(세르게이 Ioffe, Christian Szegedy)를 줄여 심층 네트워크 학습을 가속화하는 방법에 대해 설명합니다. 즉, 각 출력(기능)에 대한 모든 미니배치에 대한 계층 출력을 독립적으로 정규화하고, 레이어의 표현을 유지하기 위해 아핀 변환을 적용합니다. 즉, 계층 input의 경우:

m = mean (input)
var = variance (input)
inputNorm = (input - mean)/sqrt (epsilon + var)
output = gamma * inputNorm + beta

beta 여기서 gamma 학습 가능한 매개 변수입니다.

mean 학습 variance 데이터에서 추정됩니다. 가장 간단한 경우 학습 중에 현재 미니배치의 평균 및 분산입니다. 추론에서 장기 추정치가 대신 사용됩니다.

장기 추정치는 미니배치 통계의 패스 필터링이 낮은 버전이며 매개 변수에서 지정된 normalizationTimeConstant 시간 상수(샘플)입니다. 값 0 은 지수 평활화가 없고 실행 평균/분산이 항상 마지막으로 본 미니배치의 값과 동일하다는 것을 의미합니다. 이것은 종종 바람직하지 않습니다. 대신 여기에 몇 천 개의 값을 사용하는 것이 좋습니다. 래퍼의 BatchNormalizationLayer{} 기본값은 5000입니다.

시간 상수 및 지수 평활화에 대한 자세한 내용은 다음을 참조하세요. https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant

미니배치 통계는 시끄러울 수 있으므로 CNTK 학습 중에 MAP(최대 후방) 추정치를 사용할 수 있습니다. 여기서 실행 중인 장기 추정치는 이전과 같이 수행됩니다. 이전의 가중치는 매개 변수에 의해 blendTimeConstant 제어됩니다. 그러나, 이것은 우리의 실험에서 지금까지 유용 발견 되지 않았습니다.

유추하는 동안 CNTK 기존 실행 평균만 사용하고 업데이트되지 않도록 두 시간 상수 모두를 자동으로 설정합니다. 사용자가 명시적으로 작업할 필요가 없습니다.

cuDNN 구현

기본적으로 이 함수는 GPU와 CPU 모두에서 작동하는 CNTK 구현을 사용합니다. 더 성능이 좋은 cuDNN 구현을 사용하도록 선택할 수 있습니다. 그러나 cuDNN 구현은 모든 옵션을 지원하지 않으며 학습에는 GPU가 필요합니다(그러나 cuDNN 구현을 선택한 경우에도 유추를 위한 CPU 에뮬레이션을 제공하는 CNTK).