Abstract

Deep neural network 를 trainig 할 때, 이전 계층의 parameter가 변화함에 따라 각 게층의 입력 분포가 변경되는점 때문에 낮은 learning rate 와 parameter initialization시에 조심해야 하기 때문에 training 속도가 낮아지고 non-linearity 를 가진 모델 trianing이 매우 어렵다.

이러한 현상을 internal covariate shift라 하며, layer input에 normalization을 적용 하여 문제를 해결한다.

이 논문에서는 normalization을 model architecture의 일부로 만들고 각 training mini-batch에 대한 normalization을 수행한다.

Batch Normalization은 더 높은 learning rate를 사용하고 parameter initialization에 있어 주의를 완화해준다.

또한 Regularizer로도 작용하여, 몇몇 case에서는 Dropout이 필요하지 않다.

Introduction

SGD는 network의 parameter Θ 를 최적화하여 loss를 최소화한다.

  • x1…xn : training data set
  • training이 단게별로 진행되며, 크기 m의 mini batch를 고려한다.
  • mini batch는 다음 계산식을 통해 loss function의 gradient를 근사화 하는데 사용한다.

SGD의 mini batch 사용의 장점

  • mini batch에 대한 loss의 gradient는 training set에 대한 gradient의 추정치이다. batch size가 커질수록 전체 데이터를 추정하는 것이 정교해진다.
  • 컴퓨터가 발전함에 따라 병렬 처리로 인해 계산이 훨씬 빨라진다.

SGD의 단점

  • hyper parameter 초기화 시 주의해야한다.(특히 learning rate)
  • network가 깊어질수록 이전 layer가 다음 layer에 영향을 끼침에 따라 Gradient Vanishing/Explode 가 나타날 수 있다.

Covariate shift(공변량 이동)

  • layer에 들어가는 input의 분포가 바뀌게 되면 모델 내의 parameter들은 새로운 분포에 대해 다시 적응하고 학습해야 하는데, 이 때의 train과 test data의 입력 분포의 차이를 covariate shift 라 한다.
  • 이를 제거하면 더 빠른 training이 가능하다.
  • 사진은 MNIST dataset에서의 실험
  • b,c : sigmoid에 대한 입력 분포의 진화

Batch Normalization은 internal covariate shift를 제거하여 학습 속도를 향상시키고, 모델을 정규화 하고 Dropout의 필요성을 줄였다.

Towards Reducing Internal Covariate shift

Whitening

  • 각 layer의 입력의 분산을 평균 : 0, 표준편차 : 1 인 입력값으로 정규화 시키는 방법. 입력값의 특징들을 uncorrelated 하게 만들어준다.

문제점

  • covariance matrix 와 inverse 계산이 필요하기 때문에 계산량이 많다.
  • 일부 parameter의 영향이 무시되어 gradient descent 효과를 감소시킨다.
  • ex)input = u,learned bias = b,x hat = x - E[x],x = u + b,X = {x1,..,xn}(training set),E[x] = x의 평균
    • x hat에서 평균값을 빼주는 과정에서, b도 같이 빠지게 되어 출력에서 b의 영향이 사라진다.
    • 이로 인해 loss가 변하지 않으면 gradient가 한없이 커진다.

이는 gradient descent optimitzation이 정규화를 고려하지 않기 때문에 일어나는 문제점으로, 어떤 parameter를 사용하더라도 네트워크의 출력들이 고안된 분포를 따르도록 해주어야 한다.

  • x : layer input vector
  • X: 전체 dataset의 모든 input vector
  • x,X로 표현한 정규화

backpropagation을 위해서, Jacobian을 구해야한다(다변수 함수)

  • x,X 둘 다 정규화 과정에 포함

이 계산과정까지 거치게 된다면 새로운 covariate matrix와 inverse square root를 계산해야 하기 떄문에 계산량이 많아져 비효율적이다.

때문에 다음 2가지 조건을 만족하는 새로운 방법을 찾았다.

  • 미분 가능한 연산
  • parameter 업데이트 시 전체 데이터에 대한 연산을 요구하지 않음

Normalization via Mini-batch Statistics

간소화 과정

첫번째 방법

  • input data의 각 scalar 값인 차원에 대해 독립적으로 정규화

  • 이 때 E[x] 와 Var[x] 는 training data 각 차원에 대해 계산

장점

  • feature가 decorrelated 되지 않았어도 수렴 속도가 높아진다.

단점

  • 정규화를 통해 각 차원의 scalar 값이 평균이 0이고 표준편차가 1인 분포를 따르게 되었다.
  • activation function으로 sigmoid 사용시, sigmoid 함수의 [-1,1] 구간에서는 거의 직선에 수렴하기 때문에, non-linearity를 잃게 된다.
  • 이 문제를 해결하기 위해 각 차원마다 γ 와 β를 도입하여 scaling과 shifting을 통해 해결한다.

두번째 방법

  • 정규화 시 batch를 사용한 학습에서는 전체 데이터에 대한 평균과 분산 값을 구하는 것이 불가능하기 때문에 배치에 대한 평균과 분산값을 통해 정규화를 진행해야 한다.

Batch Normalization

  • 평균과 분산을 조정하는 과정이 신경망 안에 포함되어 학습 시 평균과 분산을 조정하는 과정이 같이 조절된다.

  • 정규화된 값 -> activation function의 입력
  • 최종 출력 값 -> 다음 layer 입력

Training and Inference with Batch-Normalized Networks

  • training 시에는 Batch Normalization의 mini batch의 평균과 분산을 이용할 수 있지만, inference 및 test시에는 이를 사용할 수 없다.
  • 모델이 학습되는 동안 추정한 입력 데이터의 평균과 분산으로 정규화를 해야 하는데, inference시에 입력되는 값을 통해 정규화를 하게 되면 모델이 학습을 통해 입력 데이터의 분포를 추정하는 의미 자체가 없어지게 된다.
  • 때문에 inference시에는 고정된 평균과 분산을 사용하여 정규화를 수행하게 된다.(train,test변경시 on/off)

Moving Average

  • inference 전에 학습 시에 미리 mini batch를 뽑을 때 sample mean과 sample variance를 이용하여 각각의 Moving Average를 구해야 한다.
  • 위 수식의 6~12번 에서는 평균은 mini batch에서 구한 평균들의 평균을 사용하고, 분산은 분산의 평균에 m/(m-1)를 곱해준다. 이는 Bessel’s correction 때문이라고 하는데 이 부분은 아직 잘 모르겠다.

Batch-Normalized Convolutional Net-works

  • CNN layer에서 activation function 전에 WX + b로 가중치가 적용되었을 떄, b의 역할을 β가 대신 해주기 때문에 b를 생략한다.

  • Convolution 성질을 유지하고 싶기 때문에 각 채널을 기준으로 각각 γ 와 β를 만든다.
  • Convolution kernel 하나는 같은 γ 와 β를 공유하게 된다.