#Batch Normalization의 장점 3가지
SGD는 단순하고 효과적이지만 모델 매개 변수의 초기 값뿐만 아니라 모델의 hyper-parameter, 특히 최적화에 사용되는 learning rate를 신중하게 조정해야 한다.
(그렇지 않으면 covariate shift가 발생할 수 있다.)
논문에서는 학습에서 불안정화가 일어나는 이유를 Internal Covariate Shift라고 주장하며, 이는 네트워크의 각 레이어나 Activation마다 입력값의 분산이 달라지는 현상을 말한다.
Covariate Shift : 이전 레이어의 파라미터 변화로 인하여 현재 레이어의 입력의 분포가 바뀌는 현상
Internal Covariate Shift : 레이어를 통과할 때마다 Covariate Shift가 일어나면서 입력의 분포가 약간씩 변하는 현상
[Covariate Shift의 단점]
saturated regime(활성화 함수에서 기울기가 0인 부분)에 빠지고 vanishing gradient 및 exploding이 발생한다.
⇒ 일반적으로 activation으로 sigmoid를 사용하는데, sigmoid 특성 상 절대값이 일정 수준 이상으로 큰 입력에 대해서는 Gradient가 거의 사라지는 문제가 발생한다.
이 단점은 ReLU 함수를 사용하거나, 신중하게 초기값을 선택하거나 적은 learning rate를 적용하면 문제를 해결할 수 있다.
하지만, 적절한 초기값을 이용한다는 것은 어려운 일이고, lr를 적게 사용하면 학습 속도가 느려진다.
Whitening : 각 레이어의 입력의 분산을 평균 0, 표준편차 1인 입력값으로 정규화 시키는 방법이다. Whitening은 기본적으로 들어오는 입력값의 특징들을 decorrelated 하게 만들어주고, 각각의 분산을 1로 만들어주는 작업이다.
training 효율을 높이기 위해서는 Internal Covariate Shift를 줄여야 한다. 기존의 여러 연구 결과들은 입력값이 Whitening된다면 신경망이 훨씬 빠르게 수렴할 것이라고 말했다.
기존의 연구는 신경망의 parameter를 Activation의 값에 따라 바꾸면서 Whitening하는 방식을 사용하는데 이러한 방법은 Gradient Descent의 효과를 줄이는 결과를 가져온다.
(ex) layer의 입력 u에 편향 b를 더한 것을 x라고 가정해본다. (x=u+b)
여기서 평균을 빼고 normalize를 하면 x-E[x]이다. 평균값을 빼주는 과정에서 b도 같이 빠지게 되어 결국 출력에서 b의 영향이 없어진다. 단순히 평균인 E[x]값을 빼는 것이 아니라 표준편차로 나눠주는 등의 scaling 과정까지 포함될 경우 는 더 악화된다. 이렇게 단순히 whitening만 시키면 이 과정과 parameter를 계산하기 위한 Backpropagation과 무관하게 진행되기 때문에 특정 parameter가 계속 커지는 상태로 whitening이 진행될 수 있다.
(⇒ gradient descent의 효과가 감소되는 이유)
whitening의 문제점을 해결하기 위해서 두 가지의 간소화 방법이 필요하다.
[1번]
layer의 입력과 출력을 동시에 whitening해주는 대신에 각 scalar feature을 평균 0, 분산 1을 갖도록 독립적으로 normalize해준다.
이 Normalize는 feature가 decorrelated 되지 않았음에도 수렴 속도를 높여주지만, 단점이 하나 있다.
sigmoid의 입력을 위와 같이 normalize하는 것은 nonlinearity의 linear regime로 제한하게 되기 때문에 비선형성을 잃게 된다.
이를 해결하기 위해 normalize된 값을 scale, shift 해주는 학습 가능한 parameter 감마와 베타를 추가해준다.
[2번]
normalize는 전체 dataset을 처리하지만 SGD는 batch 단위로 data를 처리하게 된다. 따라서 normalize도 batch 단위로 해준다. 각각의 mini batch data로 layer의 입력을 normalize해준다. 이 방법으로 normalization에 사용된 통계값은 모두 backpropagation에 사용될 수 있다. 또한 normalize를 mini batch 단위로 처리하게 되면 한번에 처리하는 연산량도 줄어들게 되는 이점이 있다.
[최종]
Batch Normalization은 레이어마다 정규화하는 레이어를 두어 변형된 분포가 나오지 않도록 조절하게 하는 것이다. 평균과 분산을 조정하는 과정이 별도의 과정이 아닌 신경망 안에 포함되어 학습 시 평균과 분산을 조정하는 과정 역시 같이 조절된다는 점에 있어서 Whitening과 구별된다.
Batch Normalization은 간단히 말하자면 mini batch의 평균과 분산을 이용해서 정규화한 뒤에, scale 및 shift를 감마, 베타값을 통해 실행한다. 이 때 감마와 베타 값은 학습 가능한 변수이며, Backpropagation을 통해서 학습된다.
감마, 베타값에 대한 Backpropagation 수식
정규화된 값을 활성화 함수의 입력으로 사용하고, 최종 출력 값을 다음 레이어의 입력으로 사용하는 것이다.
[Batch Normalization Algorithm]
결과적으로 Batch Normalization은 단순하게 평균과 분산을 구하는 것이 아니라, scale과 shift를 통한 변환을 통해 훨씬 유용하게 되었으며, BN이 신경망의 layer 중간에 위치하게 되어 학습을 통해 감마와 베타를 구할 수 있게 되었다.
Covariance shift 문제로 인해 망이 깊어질 경우 학습에 많은 어려움이 있었지만, BN을 통해 Covariate Shift 문제를 줄여줌으로써 학습의 결과도 좋아지고 빨라지게 되었다.
[MINST]
가장 왼쪽은 MNIST data에 대해 BN 사용의 유무에 대한 convergence speed를 비교한 것이며, 다음의 그림은 BN 사용 유무에 대한 internal convariate shift가 어떻게 변화하는지를 보여주는 것이다.
(a)를 보면, BN을 사용했을 때 더 빨리 수렴하고 Accuracy가 높다는 것도 확인할 수 있다.
한 뉴런의 training 동안 activation value의 변화를 plot한 것으로, 가운데 있는 선이 평균이고, 위 아래가 variance를 의미한다. 따라서 BN을 사용하면 처음부터 끝까지 distribution을 가진다는 것을 알 수 있다.
[ImageNet Classification]
실험 2는 Inception Network에 BN을 적용한 결과이다. dataset은 ImageNet의 LSVRC2012 training data를 사용했다. 우측의 표에 대한 설명은 다음과 같다.
BN을 사용하면 더 큰 lr에 대해서도 더 빠른 수렴 및 성능을 보장한다고 할 수 있다.
앙상블 모델을 이용한 Classification 결과이다. 이번 결과에서도 Batch Normalization을 사용한 결과가 좋은 것을 확인할 수 있다.