Motivation & Problems
- input을 normalize해도, Layer를 거치는 과정에서 Normalization의 효과가 사라짐
- intermediate layer에서도 각 input값 (이전 layer로부터 들어오는 값들)을 normalize 하는 것이 목적
- mini-batch마다 normalization을 진행
internal Covariate Shift
- 딥러닝 모델이 잘 작동하기 위해서는 train data distribution과 test data distribution이 거의 같아야하지만, overfitting된 모델은 서로 다른 distribution을 가짐
- train data의 distribution과 test data의 distribution이 달라지는 현상(Covariate Shift)이 내부 레이어에서 발생하는 것
Gradient Vanishing / Exploding
- hidden layer가 많을 때, layer를 통과할수록 gradient가 너무 작아지거나(Vanishing), 무한히 커져서(Exploding) 가중치를 올바르게 업데이트하지 못하는 현상
Methods of training time
- 먼저 각 mini-batch의 평균과 분산을 구한다.
- 각 mini-batch의 평균과 분산값을 이용해 normalize한다.
- input값에서 평균값을 빼고, 표준 편차로 나눈다. (Z*)
- 이 때, 표준편차를 구하는 과정에서 분산값에 아주 작은 상수 Epsilon을 더해준다.
- 0으로 나눠지는 문제를 막기 위해, 수치적 안정성을 보장하는 작은 상수 (1e-5)
- Z*값에서 Learnable parameter인 gamma를 scale 변수로 곱해주고, beta를 shift 변수로 더해준다.
- 데이터를 지속적으로 Normalization하게 되면 활성화 함수의 non-linearity 성질을 잃을 수 있는 문제를 완화시켜준다.
- sigmoid function을 볼 때, -2~2 구간에서는 거의 선형적인 성질을 가지고 있는 상태를 scaling과 shifting을 통해 구간을 변경함으로써 벗어날 수 있음
- 기존 output이 g(Z)라고 하고, Z=WX+b, g() == activation function일 때
- output = g(BN(Z)) 으로 변경
- activation function을 적용하기 이전에 BN을 적용하는 것이 best practice.
Methods of test time (Inference)
- inference 시에 입력되는 데이터에 대해 정규화하게 되면, 모델이 입력 데이터의 분포를 추정하는 의미가 사라짐
- test time일 때는, training time에 미리 sample mean과 sample variance를 이용해, 각각의 moving(running) average를 구해두어야 함
- whole training data(the population)에 대해서 variance와 mean을 구하기보다, 각 mini-batch에 대해서 다시 계산하는 것이 더 smart한 방법
- mini-batch로 뽑힌 data가 sample일 때, sample mean은 각 mini-batch에 대한 mean값, sample variance는 각 mini-batch에 대한 variance값임
- sample variance는 true variance(population variance)보다 (n-1)/n만큼 작음
- non-biased value를 inference하기 위해서는, sample variance를 구할 때 n/n-1으로 나누어야 함
Effects of Batch Normalization
- 학습 속도가 빨라지고, 성능이 향상된다.
- 안정화된다.
- bad initialization에 대해 특히 더 robust하다.
- Learning Rate를 더 올릴 수 있다.
- Dropout을 사용하지 않아도 된다. (learnable parameter인 gamma와 beta를 사용하기 때문에)
- L2 weight regularization을 줄이게 된다.
- Learning rate decay를 가속화한다.
- bias를 쓰지 않을 수 있다.
- BN 사이에 bias를 가지고 있기 때문 (beta)
Batch Normalization for Convolutional layers
- Fully Connected Layers
- Convolutional layers
- 각 Feature map당 BN 실행
- 각 Featur map당 하나의 mean과 variance, gamma(scale), betta(shift)
- Feature map은 같은 weight를 공유하기 때문에 가능