[논문 리뷰] batch normalization

임종우·2023년 5월 30일
0
  • 본 논문은 Batch Normalization에 대해 처음 다룬 논문으로, Internal Covariate Shift를 해결하고자 Batch Normalization을 도입하였다.
  • 비록 후속 연구에 의해 Batch Normalization 이 Internal Covariate Shift 문제를 해결하지 못한다는 점과 BN의 효과가 smoothing에 의한 것이라는 점이 밝혀졌으나, 그럼에도 불구하고 본 논문에서 제시한 Batch Normalization은 학습 성능 향상 및 시간 단축에 크게 기여하였다.

0. Abstract

  • Deep Neural Network을 학습 시킬 때, 각각의 layer의 parameter값이 바뀜에 따라서, 각 layer에 들어오는 input의 분포가 바뀌게 된다. 이는 learning rate를 더 작은 값을 써야하도록 만들고, parameter initialization을 더욱 주의 깊게 하도록 만들어 학습을 더욱 느려지게 한다.
  • 이러한 현상을 Internal Covariate Shift라고 하며, 본 논문에서는 각 layer의 input을 normalize 함으로써 이 현상을 해결하고자 하였다.
  • 더 자세히는, 각 training mini batch에 대해 normalization을 수행하여 higher learning rate를 사용할 수 있게 하고, less careful initialization 할 수 있게 함으로써 학습 속도의 향상에 기여하였다. 또한 이는 Dropout과 같은 regularization 의 역할도 수행하여 학습 성능 항상에도 기여한다.

1. Introduction

  • SGD나 momentum, Adagrad와 같은 optimization 기법들이 딥러닝의 좋은 성능을 이끌어가고 있다.
  • SGD가 간단하고 효과적인 방법이긴 하지만, 이는 learning rate, initial values for model paramters와 같은 hyperparameter의 주의깊은 tuning을 요구한다.
  • 또한 각 layer의 input이 앞선 layer의 parameter의 영향을 받는다는 사실은 학습을 더욱 복잡하게 만들고, network parameter의 작은 변화가 network가 깊어짐에 따라 큰 영향을 가져올 수 있다.
  • 이렇게 각 layer의 input의 분포가 계속 변화한다면, 새로운 분포에 계속해서 맞춰 학습해 나가야 하기 때문에 문제가 발생할 수 있다.
  • learning system의 input distribution이 계속 변화할 때, covariate shift를 겪는다고 말하는데, 이러한 covariate shift는 system 전체로, 그러니까 모든 layer에 대해 확장될 수 있다. 이것이 바로 internal covariate shift이다.
  • covariate shift가 없을때를 생각해보자. 예를 들어 한 레이어의 output을 input으로 받아 학습하는 layer가 있다면, input distribution의 학습 용이성(train과 test의 분포가 비슷함)은 training을 더욱 efficient하게 만들 것이고, 이는 각 layer에도 적용될 것이다. 레이어가 input의 분포에 다시 적응할 필요성을 없게 만들기 때문이다.
  • sub network에 대해 input의 분포가 고정된다면, sub network 바깥에 있는 layer에 대해서도 긍정적인 영향이 잇따른다. 예를 들어 sigmoid function을 생각해보자. sigmoid function에 대해 input이 커지면 gradient가 0으로 수렴하여 gradient vanishing 현상이 일어나게 되는데, 이는 모델의 학습 속도를 느려지게 한다. 이때, input x가 그 전 모든 layer들의 parameter의 영향을 받기 때문에, 이 parameter들을 학습 과정 중 변화시킨다면 x를 sigmoid에서 saturated regime of the nonlinearity(기울기가 0에 가까운 부분)로 이동시키고, 수렴을 느리게 만들 것이다.
  • 이러한 문제는 network depth가 깊어짐에 따라 더욱 증폭된다. 이러한 saturation 문제와 vanishing gradient는 RELU함수, 혹은 careful initialzation and small learning rate를 사용하여 해결되고 있다. 그러나, 우리가 nonlinearity input의 분포를 training 과정 도중 안정적이게 만들 수 있다면, 즉 internal covariate shift를 없앨 수 있다면, optimizer는 saturated regime에 도달할 확률이 줄어들고, 학습이 더욱 빨라질 것이다.
  • deep network 내부에서의 학습 도중 분포의 변화를 internal covariate shift라고 부를 것이며, 본 논문에서는 이를 제거하여 빠른 학습을 진행하고자 Batch Normalization 이라는 기법을 제시한다. 이는 layer input의 평균과 분산을 고정하여 normalization 함으로써 학습의 속도를 빠르게 할 뿐만 아니라, gradient의 parameter의 scale과 초기값에 대한 의존성을 줄이는 효과도 가져올 수 있다. 이를 통해 발산의 우려 없이 higer learning rate를 사용할 수 있다.
  • ImageNet classification network에 batch normalization을 사용한 결과, 단지 7%의 학습 과정을 통해서 동일한 성능에 도달하였으며, 최종적으로는 학습 성능 향상의 효과까지 있었다. Batch Normalization을 통해 학습한 network들의 ensemble을 통해서는 ImageNet Classification에 대해 최고의 성능을 내었다.

2. Toward Reducing Internal Covariate Shift

  • Internal Covariate Shift는 학습 과정 중 parameter의 변화로 인한 network activation의 분포 변화를 의미한다.
  • 본 논문에서는 학습 속도를 향상시키기 위해 internal Covariate shift를 줄일 방법을 고안하는 것을 목표로 하였고, layer input의 distribution을 고정시켜 이를 해결하고자 하였다.
  • 논문의 저자들은 처음에 평균을 0으로, 분산을 1로 만들고 decorrelate 시키는 whitening을 시도하였다.
  • 그러나 모든 training step에 대해 whitening을 진행하기 위해서는, network를 직접적으로 수정하거나 parameter를 바꾸어야 했다.
  • 이러한 whitening을 사용했을 때에는 gradient descent 방법의 효과가 감소하는 문제가 있었다. 예를 들어 training data의 activation의 평균을 구하고, 이를 빼는 방식으로 normalize 시킨다면, 학습 과정에서 파라미터의 업데이트와 normalization의 변화가 둘 다 일어나 loss에는 아무런 변화가 생기지 않게 된다. 그렇다면 loss가 줄어들지 않으므로 parameter는 무한히 커지게 되는 문제가 생겼다.
  • 또한, 이러한 whitening을 사용할 때에는 given training example뿐 아니라, 다른 layer에 의해 생성된 example까지 고려해야 하기에, backpropagation을 위해 Jacobian을 계산해야한다.
  • 게다가 Whitening을 진행하기 위해서는 covariance matrix와 그것의 inverse square root를 계산하는 과정이 꼭 필요하기 때문에 상당한 계산량이 필요하다.
  • 따라서 이러한 문제들은 우리로 하여금 미분 가능하면서도 파라미터가 업데이트 될 때마다 전체 training set에 대해 다시 분석할 필요가 없도록 하는 대안을 추구할 필요성을 불러일으킨다.

3. Normalization via Mini-Batch Statistics

  • 각각의 layer의 input을 whitening하는 것은 많은 연산을 필요로 하며, 심지어 전 구간에서 미분가능하지도 않다. 따라서 새로운 방법이 필요하였다.
  • 따라서 고안한 새로운 방법은 먼저 각각의 scalar feature들을 평균을 0, 분산을 1로 만들도록 normalize하는 것이다. whitening과는 feature들 간 decorrelation 여부에 차이가 있다.
  • 즉, layer의 각각의 input x에 대해,

다음과 같은 방법으로 input을 normalize 시킨다.

  • 이때 평균과 분산은 전체 training dataset에 대해 계산한다. 이러한 normalization은 decorrelation 없이도, parameter가 수렴하는 속도를 빠르게 하는 효과가 있다.
  • 그런데, 각각의 layer의 input을 단순히 normalize하는 것은 layer가 표현할 수 있는 정도를 바꾸어버리는 문제가 있다. 예를 들어, sigmoid로 들어가는 input을 normalize한다면, 대부분의 input이 sigmoid 함수의 linear한 부분에 해당하고, nonlinear한 부분으로 가는 것을 제한하여 layer의 nonlinearity를 없앨 수 있다. 따라서 이를 해결하기 위해 γ(k), β(k)를 도입하여 normalized된 값을 스케일링하고 shift하도록 한다. 즉, normalize된 y는 다음과 같아진다.

  • 이러한 parameter γ, β는 original model parameter들과 함께 학습되는 값이다.
  • 또한, mini-batch를 사용하는 stochastic gradient training 에서는 normalization에 전체 training data에서 얻은 평균과 분산을 사용할 필요가 없다. 이는 mini batch에서 normalization을 진행할때 공분산이 아니라 각 feature에 대한 분산을 계산하기 때문이다. 이렇게 각 mini batch에 대한 평균과 분산을 계산하여 normalization에 사용함으로써, 이러한 통계량들은 gradient backpropagation에 완벽하게 관여할 수 있다.
  • 다음은 학습 과정에서 batch normalization의 알고리즘을 나타낸 것이다.

  • 파라미터 감마와 베타는 학습되어야 하는 값이다.

  • 입실론은 수치적 안정성을 위해 mini batch 분산에 더해지는 값이다.

  • 먼저 각 미니 배치에 대한 입력값의 평균과 분산을 구하고

  • 이 평균과 분산 값을 사용하여 입력값을 normalize 시킨다.

  • 마지막으로 감마와 베타 값을 사용해 scale과 shift를 진행한다.

  • 이렇게 normalized된 값들은 sub-network, 즉 다른 layer의 input으로 들어가게 되고, 이 값들은 고정된 평균과 분산, 즉 고정된 분포를 가질 것이다.

  • 이렇게 normalized된 input을 사용하여, 각각의 layer에서의 학습이 빨라질 것이고, 결과적으로 전체 네트워크에서의 학습이 빨라질 것이라고 기대할 수 있다.

  • 또한 batch normalization 된 값들은 미분 역시 가능하여, gradient를 계산하고 backpropagation을 진행하는데에도 문제가 없다.

  • 다음은 normalization된 input에 chain rule을 적용한 수식이다.

  • 따라서 batch normalization은 미분 가능한 normalization을 제공하여, 모델이 학습할 때 겪는 internal covariate shift 문제를 줄여 학습을 빠르게 한다.

3.1 Training and Inference with Batch-Normalized Networks

  • Batch Normalization을 통해 학습을 진행할때에는 위에서 언급한 알고리즘대로 각각의 mini batch에 대한 평균과 분산을 구해 normalization을 진행하면 되지만, inference 과정에서는 어떤 input이 들어올지 모르므로 batch에 대한 평균과 분산을 구할 수 없다.
  • 따라서, training이 완료된 후 inference과정에서는, normalization에 사용하는 평균과 분산을 batch에 대해 달라지는 값이 아니라, 학습을 진행하는 동안 계산하여 고정된 값으로 사용한다.
  • 평균의 경우 각 mini batch의 표본평균의 평균, 분산의 경우 각 mini batch의 표본 분산의 평균을 사용하고, 이때 이동평균이나 지수평균을 사용한다.
  • 다음은 batch normalization에서 training과 inference가 일어나는 동안의 알고리즘을 나타낸 것이다.

  • 앞선 알고리즘과 거의 유사하지만, inference과정에서 normalization에 사용하는 평균과 분산을 고정시킨다는 차이점이 존재한다.

3.2 Batch Normalized Convolutional Networks

  • batch normalization은 주로 activation function 전에서 적용되는데, 이는 fully connected layer와 convolutional layer에서 모두 사용될 수 있다.
  • Convolutional layer에 대해 normalize 하려고 할 때, 동일한 feature map의 요소들은 모두 같은 방법으로 normalized 되어야 한다.
  • 따라서 feature map 별로 감마와 베타를 학습하고, normalization 시키는 방식으로 batch normalization을 수행할 수 있다.

3.3 Batch Normalization enables higher learning rates

  • normalization을 사용하지 않은 deep network에서, 너무 높은 learning rate를 사용하면 gradient가 vanish 혹은 explode되거나, local minima에서 멈추는 문제가 발생할 수 있었다.
  • Batch Normalization은 네트워크 전반에 걸쳐 activation을 normalization 함으로써, parameter의 작은 변화가 activation들의 변화로 인해 gradient의 큰 변화로 이어지는 것을 막아줌으로써 이러한 문제를 해결할 수 있다.
  • 또한, Batch Normalization은 학습이 parameter의 scale에 무관하게 진행되도록 한다. backpropagation이 parameter의 scale에 영향을 받지 않도록 만들기 때문이다.
  • 수식적으로 살펴 보았을때,

이렇게 parameter의 scaling factor가 gradient 값에 영향을 미치게 되지 않는 것을 확인할 수 있고, 즉 learning rate의 크기에 따라 gradient 값의 크기가 달라져 문제가 생기지 않을 것임을 확인할 수 있다.

3.4 Batch Normalization regularizes the model

  • Batch Normalization을 사용하게 되면, 훈련 과정에서 batch 내의 다른 instance에 대한 정보가 평균과 분산 등의 통계값으로 포함되게 된다. 따라서 이로 인해 특정 sample에 대한 network의 의존성이 줄어들고, 더욱 일반화되는 효과를 기대할 수 있다.
  • 실험 결과, 실제로 Batch Normalization이 overfitting을 막아주는 regularization 역할을 한다는 것 역시 확인할 수 있었다.

4. Experiments

4.1 Activations over time

  • 위 이미지는 간단한 MNIST dataset classification을 BN을 사용하여 진행했을때 어떻게 달라지는지에 대한 분석을 담고 있다.
  • Batch Normalization을 사용하였을 때 성능이 더 좋게 나왔다. 이 원인을 분석하고자 BN을 사용하지 않았을 때와 사용하였을때의 sigmoid에 들어가는 input을 조사해보았더니, BN을 사용하지 않았을 때에는 분포가 시간에 다라 달라지는 것이 보이나, BN을 사용하였을때에는 비교적 일관된 분포를 유지하는 모습을 볼 수 있었다.

4.2 ImageNet classification

  • Inception Network에 Batch Normalization을 추가하여 ImageNet classification을 진행해보았다.

4.2.1 Accelerating BN Networks

  • Inception 모델에 BN을 추가한 후, 저자는 learning rate를 상승시키고, Dropout을 제거하였으며, L2 regularization을 줄이고 learning rate decay을 증가시켰다.
  • 또한 local response normalization을 제거하였고, traning data를 더욱 shuffle 시켰으며, photometric distortion을 줄였다.

4.2.2 Single Network Classification

  • 그 후 Inception 모델, 거기에 BN을 추가한 모델, BN을 추가하고 learning rate를 5배 높인 모델, 30배 높인 모델 등을 각각 이미지넷 데이터에 대해 학습시켰다.
  • 그 결과는 다음과 같다.

  • BN을 사용하였을때, 그렇지 않았을 때보다 절반 이하의 training step만에 동일한 정확도에 도달하였다.
  • BN을 사용한 후 learning rate를 5배 높였을 때에는, 유사한 정확도에 도달하기까지 14배 적은 step이 걸렸다.
  • BN을 사용한 후 30배의 learning rate를 사용하였을 때에는, 유사한 정확도에 도달하기까지 5배 적은 step이 걸리고, 최종적으로는 원래 모델보다 2.6% 더 높은 정확도를 기록하였다.

4.2.3 Ensemble Classification

  • 이 논문이 나오기 전까지 ImageNet Classification에 대한 최고 성능은 여러 모델을 Ensemble하여 얻은 결과로, 4.94%의 Error를 기록하였다. 해당 논문에서, 6개의 모델에 BN을 적용하여 Ensemble을 한 결과, 4.82%의 Error를 기록하여 이전 최고 성능을 뛰어넘었다.

5. Conclusion

  • 본 논문에서는 딥러닝의 학습 속도를 빠르게 하기 위한 방법으로 Batch Normalization을 고안하였다.
  • 이 방법은 딥러닝의 학습을 복잡하게 만드는 원인인 Internal Covariate Shift 를 줄이고자 고안된 방법으로, stochastic gradient learning 을 사용하는 각 layer의 input을 mini batch의 평균과 분산을 사용해 normalize하는 방법이다.
  • 이를 통해 학습의 속도도 더 빠르게 할 수 있으며, 더 높은 learning rate를 사용 가능하게 되었고, 학습의 성능 역시 좋아지는 모습을 보였다.
profile
ai school 기간 동안의 TIL!

0개의 댓글