while (1): study();

[논문 리뷰] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 본문

논문 리뷰

[논문 리뷰] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

전국민실업화 2021. 7. 22. 16:42
728x90

출처: https://arxiv.org/abs/1502.03167

 

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Training Deep Neural Networks is complicated by the fact that the distribution of each layer's inputs changes during training, as the parameters of the previous layers change. This slows down the training by requiring lower learning rates and careful param

arxiv.org

 

지금은 너무나도 익숙한 배치 정규화가 처음 발표된 기념비적인 논문입니다.


1. Introduction

 

 배치 단위로 학습하는 것은 자원을 아끼면서 전체의 분포를 근사할 수 있다는 점에서 이점이 있습니다. 그러나 학습 과정에서 매번 상이한 입력이 들어와 가중치가 바뀌게 되고, 바뀐 가중치에 의해서 다음 출력이 변경되면 이후의 레이어 모두가 영향을 받습니다. 즉, 레이어들은 계속해서 새로운 분포에 적응해야만 하는 것입니다.

 예를 들어, 입력이 u라고 할 때 첫 번째 계층은 $x = F_{1}(u, \theta_{1})$와 같이 계산됩니다. 이후 계층은 $\theta_{2} ← \theta_{2} - {\alpha \over m}\sum_{i=1}^m{dF_{2}(x_{i}, \theta_{2}) \over d\theta_{2}}$와 같이 업데이트됩니다. 이는 결국 $x$를 입력으로 받은 하나의 계층과 같은 업데이트 구조이기 때문에, 입력이 일정하다면 모델의 모든 계층이 안정된 학습을 할 수 있다는 의미가 됩니다.

 거기에 더해 시그모이드 함수 같은 경우, $g(x) = {1 \over 1 + exp(-x)}$의 형태입니다. 즉, $|x|$가 커질수록 기울기는 0에 수렴하며 결과적으로 기울기 소실(Gradient Vanishing)이 발생하게 됩니다.

  이런 문제를 야기하는 입력의 분포가 계속해서 바뀌는 현상을 Internal Covariate Shift라고 하며, 이것을 해결하기 위해 배치 정규화(Batch Normalization)를 제안합니다. 배치 정규화가 얻을 수 있는 이점은 다음과 같습니다.


1. 안정적인 학습으로 인해 학습 속도가 개선됩니다.

2. 기울기 크기나 초기값에 대한 의존도가 낮아집니다.

3. 과적합을 억제하는 효과가 있습니다. 


 

3. Normalization via Mini-Batch Statistics

 전체 분포를 고려하지 않은 채 배치 단위로 백색화하는 것은 자칫하면 기울기를 발산시킬 수 있습니다. 여기서 백색 변환이란 상관관계를 없애고, 분산을 0으로 만드는 것을 말합니다. 따라서 전체 데이터의 분포를 고려해야 하지만, 이것 또한 자원이 많이 들기 때문에 항상 가능한 것은 아닙니다.

 그리하여 대안을 생각해낸 것이 입력에 대해서 평균을 빼고, 분산을 나누어 평균이 0, 분산이 1인 형태로 만드는 것입니다. 

$$\hat{x}^{(k)} = {x^{(k)} - E[x^{(k)}] \over \sqrt{Var[x^{(k)}]}}$$

 다만 이렇게 할 시 레이어의 표현이 변화할 수 있습니다. 따라서 본래 레이어의 표현을 유지하기 위해서 정규화 변수와 이동 변수를 추가하여 학습합니다. 즉 정규화로 인한 변환 과정이 항등 변환이 되도록 유도하는 것입니다.

$$y^{(k)} = \gamma^{(k)}\hat{x}^{(k)} + \beta^{(k)}$$

 또한 변환 과정에서 사용하는 평균과 분산은 전체 데이터에서 구하는 것이 아니라, 각 배치에서 도출하여 전체 통계에 대해서 근사합니다. 이를 정리하면 다음과 같습니다.

$$\mu_{B} ← {1 \over m}\sum_{i=1}^{m}x_{i}$$

$$\sigma_{B}^{2} ← {1 \over m}\sum_{i=1}^{m}(x_{i} - \mu_{B})^{2}$$

$$\hat{x_{i}} ← {x_{i} - \mu_{B} \over \sqrt{\sigma_{B}^{2} + \epsilon}}$$

$$y_{i} ← \gamma\hat{x_{i}} + \beta \equiv BN_{\gamma, \beta}(x_{i})$$

 훈련 과정에서는 이렇게 하고, 추론 과정에선 전체 데이터에 대한 통계를 사용합니다. 이는 각각의 배치에서 구한 통계를 평균내는 방식으로 구합니다.

$$\hat{x} = {x - E[x] \over \sqrt{Var[x] + \epsilon}}$$

 

4. Experiments

 다음은 MNIST 데이터셋에 대한 실험 결과입니다.

 기존 Inception 모델에 비해서 배치 정규화를 적용한 모델이 더욱 빠르게 최고점에 도달하는 것을 알 수 있습니다. BN-x30은 기존 Inception 모델보다 학습률을 30배 더 크게 준 모델입니다만, 빠른 속도로 가장 높은 성능에 도달하고 있음이 보입니다.

 

정리

딥러닝 프레임워크를 짜보는 과정에서, 배치 정규화 구현 시에 들어가는 gamma와 beta가 무슨 역할을 하는지 알고 싶어서 찾아보았습니다만, 모델의 표현력을 왜곡시키지 않기 위한 장치였습니다. 또한 배치 정규화를 사용했을 때 높은 학습률을 사용할 수 있음이 보여졌고, 다음 실험에 역시 참고해볼 예정입니다.

728x90
Comments