딥러닝 구조에서 대부분 사용되는 Batch Normalization에 대한 정리

개요

  • Batch Normalization(BN)은 2015년 Google에서 발표되었으며 현재 대부분 네트워크에서 사용중인 테크닉.
  • BN은 모델 학습을 더 빠르고 안정적으로 만들기 위해신경망의 각 층에서 활성화 값(출력값)의 분포를 미니배치 단위로 평균 0, 분산 1로 정규화한 후, 학습 가능한 파라미터(, )를 사용해 다시 스케일 조정과 이동을 수행함.
  • 학습 속도가 향상 되며 기울기 소멸과 폭발 문제에 도움이됨. 오버 피팅을 방지할 수 있고, 가중치 초기화 민감도를 해소함.
  • 하지만 미니 배치의 크기에 의존적 이기 때문에 너무 크거나 작은 배치 크기에서는 잘 작동하지 않을 수 있다.
  • Paper : Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Data Normalization

개념

  • Data Normalization(데이터 정규화) 은 데이터값의 범위를 특정 구간으로 제한하는 것.
  • 이미지의 경우 각 픽셀마다 int8의 0~255범위 데이터를 가지는데, 정규화를 통해 float형태의 0~1.0의 값으로 만들어 줄 수 있음.
  • 머신러닝은 많은 양의 데이터에서 정답에 가까운 특징(feature)을 뽑아내도록 학습되는데 데이터의 각 특징이 서로 다른 스케일(범위)를 가질 경우, 스케일이 큰 특징이 더 큰 영향을 미침. (예를 들어, 한 특징의 값이 0~1 사이이고 다른 특징의 값이 0~10,000 사이일 경우, 후자의 특징이 모델에 불균형한 영향을 줄 수 있다)
  • 따라서, 정규화를 통해 모든 데이터를 동일한 스케일로 맞춰주므로써 각 특징을 공정하게 평가할 수 있다.
  • 대표적으로 Min-Max 정규화, Z-Socre 정규화 등이 있다.
  • Normalization과 Standardization 참고: Input Data Scaling

Batch

Stochastic Gradient Descent (Mini-Batch)

  • 일반적인 Gradient Descent(GD)방법은 한번 학습을 위해 전체 데이터셋을 대상으로 역전파를 통해 Gradient를 구하고 업데이트함.
  • Mini batch를 이용한 Stochastic Gradient Descent(SGD)는 Mini batch의 개념을 도입하여 데이터셋에서 Mini batch 크기 만큼의 데이터셋을 학습함으로써 파라미터의 수렴속도를 높이고 Local Minima에 빠지는 것을 막아주어 일반화 성능을 향상시킴.


Internal Covariate Shift

Covariate Shift

  • Covariate Shift(공변량 변화)는 입력 데이터의 분포가 학습할 때와 테스트할 때 다르게 나타나는 현상을 말함.
  • 이는 학습 데이터를 이용해 학습한 모델로 테스트 데이터셋을 추론할 때 성능에 영향을 미침.

Internal Covariate Shift

  • 학습 과정에서 계층 별로 입력 데이터의 분포가 달라지는 현상.
  • = Covariate Shift가 뉴럴 네트워크 내부에서 일어나는 현상
  • 각 계층에서 입력으로 feature를 받게 되고 그 feature는 convolution이나 fully connected 연산을 거친 뒤 activation function을 적용하게 되며, 연산 전/후에 데이터 간 분포가 달라질 수가 있다.


Batch Normalization

개념

  • Batch Normalization은 학습 과정에서 각 배치 단위 별 다양한 분포를 가진 데이터를 각 배치별로 평균과 분산을 이용해 정규화하는 것.
  • batch 단위나 layer에 따라서 입력 값의 분포가 모두 다르지만 정규화를 통하여 분포를 zero mean gaussian 형태의 평균은 0, 표준 편차는 1로 데이터의 분포를 조정한다 (Standardization).
  • Batch Normalization은 보통 Fully Connected Layer나 Convolutional Layer 뒤에 삽입되며, 활성화 함수(예: ReLU) 전에 사용됨.
  • Batch Normalization에서 중요한 것은 학습 단계와 추론 단계에서 다르게 적용되어야 한다는 점.

학습 단계의 배치 정규화

  • 학습 단계의 BN을 구하기 위하여 사용된 평균과 분산을 구할 때에는 배치별로 계산되어야 의미가 있다.
  • 입력데이터 에 대한 학습 단계에서 배치 정규화 수식은 아래와 같다.

학습 단계의 배치 정규화 수식

  • : 입력 데이터
  • : 추가 스케일링 (학습 파라미터)
  • : 편향 (학습 파라미터)
  • : 배치 평균값 ()
  • : 배치 분산 ()
  • : 배치 분산의 제곱근(표준편차)이 0이 되는 것을 방지하기 위한 값(ex: )

, 의 역할

  • 만약 정규화를 통해 입력데이터를 단순히 평균이 0이고 분산이 1인 분포만을 BN 다음 단계인 활성화 함수에 입력이 될 때, 활성화 함수로 Sigmoid 함수Tanh 함수가 사용된다면 정규화된 입력데이터가 들어가는 구간은 선형의 성질을 띄는 구간임.
  • 또, 활성화 함수로 ReLU 함수를 사용하면 입력데이터의 음수에 해당하는 절반은 모두 0이 되어버림.
  • 따라서 활성화 함수의 비선형성 성질을 잃게 되므로 Scale()과 Shift()를 학습하여 비선형성을 유지하도록 함.


추론 단계의 배치 정규화

  • 추론 단계에서 BN을 적용할 때는 학습 단계에서 배치 단위의 평균과 분산을 저장한 값을 이용해 정규화를 수행함.
  • 학습 단계에서는 데이터가 배치 단위로 들어오기 때문에 배치의 평균, 분산을 구하는 것이 가능하지만, 테스트 단계에서는 배치 단위로 평균/분산을 구하기가 어려워 학습 단계에서 배치 단위의 평균/분산을 저장해 놓고 테스트 시에는 평균/분산을 사용함.
  • 그렇다면 어느 배치단위의 평균/분산을 저장하여 사용하는가? > 학습 과정에서 이동평균 또는 지수평균을 통하여 계산한 값. 즉, 학습 하였을 때의 최근 개에 대한 평균 값을 저장하여 추론에 사용함.
  • 지수평균은 모든 배치의 평균/분산 값들을 반영함. 주로 이동평균을 이용함.

추론 단계의 배치 정규화 수식

  • : 입력 데이터
  • : (학습된 파라미터)
  • : (학습된 파라미터)
  • : 개 배치의 평균 ()
  • : 개 배치의 분산평균 ()

네트워크에서 Batch Normalization

  • Batch Normalization은 Hidden Layer Batch Normalization Activation Function 순으로 적용되는 것이 일반적임.
  • 추론 단계에서 FC(Fully Connected Layer)와 Convolution Layer에 Batch Normalization이 어떻게 진행되는지 알아보자.

Fully Connected Layer + BN

  • FC(Fully Connected Layer)와 추론 단계의 BN(Batch Normalization) 식은 아래와 같다.
  • 위 식을 이용해 를 전개해보면 아래와 같다.
  • 마지막 식의 와  모두 bias 역할을 하므로 역할이 중복되어 있다. 따라서 Fully Connected Layer에서는 bias를 사용하지 않는 방향으로 구현된다.
  • 위 식과 같이 사용하면 실제로 Fully Connected Layer를 거친 후 Batch Normalization을 계산하는 것이 아니라 두 layer를 하나로 fusion 하여 사용할 수 있다.

Convolution Layer + BN

  • 왼쪽이 Fully Connected layer에 적용된 Batch Normalization 이고 오른쪽은 Convolution layer에 적용된 Batch Normalization 이다.
  • Fully Connected layer에서는 Normalization 되는 대상이 뉴런 별(vector)로 Normalization이 된다.
  • 반면 Convolution layer에서는 채널 별로 Normalization이 됨. 즉, Batch, Height, Width에 대해 평균/분산을 구한다.

결론

  • Hidden layer가 깊어 짐에 따라 Input feature의 분포 변동량이 누적됨에 따라 weight의 변화 역시 심해짐.
  • weight를 잘 초기화해주는 방법 또는 작은 learning rate를 주어서 변화량을 줄이려는 방법이 시도되었지만, weight를 잘 주는 것은 어려운 방법이고 작은 learning rate를 사용하는 방법은 학습이 매우 더디게 되어 local minimum에 빠지는 위험도 존재함.
  • Batch Normalization을 이용하면 레이어별 및 학습별 Input feature의 분포를 비슷하게 스케일링하여 이러한 문제를 해결함.
  • gradient의 scale, 초기값에 대한 dependency 감소 배치 정규화를 사용할 경우 파라미터의 scale에 영향을 받지 않게 되기 때문에 Learning rate를 높게 설정할 수 있다. 빠르고 안정적인 학습이 가능해짐.
  • Regularization 효과가 있기 때문에 dropout을 안해도 되는 장점이 있다.

참고