논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

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

1 Introduction

  • Stochastic gradient는 간단하고 효과적이지만, 하이퍼 파라미터의 튜닝과 함께 모델 파라미터의 초기화를 신경써야 한다.
  • 층에 입력되는 데이터의 분포에 변화가 있을 경우 이는 문제를 야기하는데, 층이 새로운 데이터 분포에 계속적으로 적응을 해야하기 때문이다.
  • 이렇게 입력 분포가 변하는 것을 covariate shift라고 하고 이를 다루기 위해서 보통 domain adaptation을 이용한다.
  • 하지만 covariate shift는 분포를 변화시키는 역할을 하는 일종의 서브 네트워크나 레이어로도 표현될 수 있다.
  • 이렇게 별도의 서브네트워크나 레이어로 표현할 경우, 서브네트워크에 학습을 적용함으로써 좀 더 학습을 효과적으로 만들 수 있다. 즉 학습 데이터와 테스트 데이터간의 분포를 같도록 만들 수 있다.
  • 논문에서는 학습 중 딥 네트워크의 내부 노드들의 분포, 즉 Internal Covariate Shift를 변화시키는 방법을 사용하였다.
  • 이는 빠른 학습을 가능하게 하며, 이러한 메카니즘을 Batch Nornalization이라고 한다.
  • 이 방법은 레이어에 입력되는 데이터의 평균과 분산을 고정시키는 normalization 단계를 거친다.
  • Batch Normalization은 그래디언트가 파라미터의 스케일이나 그 초기값에 의존적인 부분을 줄여 그래디언트 흐름에도 좋은 영향을 끼친다.
  • 또한 높은 학습률을 사용하여도 발산의 위험이 적으며, 모델을 regularize하는 효과와 Dropout의 사용성도 떨어트린다.
  • 마지막으로 네트워크가 학습이 되지 않고 한 곳에서 멈춰버리는 것을 막아 saturating nonliearity를 사용할 수 있도록 해준다.

2 Towards Reducing Internal Covariate Shift

  • 입력 데이터를 평균 0, 분산 1을 가지도록 whitening 하면 수렴 속도가 빨라지는 것은 오랫동안 알려진 사실이다.
  • 이러한 whitening 작업을 각 층의 입력에 모두 적용하면 더 많은 장점을 가진다. 모든 입력에서 고정된 분포를 가짐으로써 internal covariate shift에서 발생하는 부작용을 제거할 수 있는 것이다.
  • Wiesler의 연구를 보면 모든 학습 단계별로 activation에 대해서 whitening을 수행하여 네트워크와 최적화 알고리즘의 파라미터를 수정하는 방식을 택하고 있지만, 이 방법은 그래디언트 디센트 단계가 normalization이 이미 적용되고 나서 수행되어야 하기 때문에 효과를 떨어트린다.
  • 문제는 그래디언트 디센트 최적화가 normalization이 적용된 것을 고려하지 않고 이루어진다는 것이다.
  • 이를 해결하기 위해 네트워크가 어떤 파라미터를 가지든, 항상 우리가 원하는 분포의 활성값을 생성하도록 한다.
  • 이렇게 하면 loss의 그래디언트가 normalization을 고려할 수 있을 것이다.
  • 입력 데이터를 $ \mathbf{x}$라고 하고 $$\chi$$ 를 학습 데이터 셋에서 뽑은 입력셋이라고 하자.
  • Normalization은 다음과 같은 변환으로 표현한다.

$ \hat{\mathbf{x}} = \text{Norm}(\mathbf{x}, \chi ) $

  • 이것은 하나의 $\mathbf{x}$만이 아닌 전체 샘플 $\chi$에 의존적인 것이다.
  • 역전파를 위해서는 다음의 Jacobian의 계산이 필요하다.

$$ \frac{\partial \text{Norm}(\mathbf{x}, \chi)}{\partial \mathbf{x}}, $$ $$ \frac{\partial \text{Norm}(\mathbf{x}, \chi)}{\partial \chi} $$

  • 이러한 프레임웍에서는 레이어 입력의 whitening을 꽤 비싼 연산이다. 입력 $\mathbf{x}$에 대한 covariace 행렬과 그 역행렬, 그리고 그 미분을 구해야하기 때문이다.
  • 이러한 점에서 매번 전체 트레이닝 셋을 분석하지 않고도 normalization을 할 수 있는 다른 방법이 필요하게 되었다.

3 Normalization via Mini-Batch Statistics

  • 두가지 조건을 만족하고자 하였다.
  • 첫번째로 각 스칼라 특징들에 독립적으로 평균 0, 분산 1이 되도록 normalize하였다.
  • 단순히 레이어의 입력을 nomalization하면 레이어의 표현력이 변화할 수 있다.
  • 이를 해결하기 위해 별도의 변환을 네트워크에 삽입하여 자신만의 독립적인 변환을 할 수 있도록 하였다.

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

  • $ x^{(k)} $ 는 각 활성값이고 2개의 파라미터 $ \gamma^{(k)} \beta^{(k)} $가 normalized된 값을 scale하고 shift한다.
  • 이 파라미터들은 원래의 모델 파라미터를 따라가도록 학습되어 원래 네트워크의 표현력을 복구하는 역할을 한다.
  • $ \gamma^{(k)} = \sqrt{\text{Var}\left[ x^{(k)} \right]} $$, $$\beta^{(k)} = \text{E}\left[ x^{(k)} \right] $로 설정하면 원래의 활성값을 만들 수도 있다.
  • 두번째는, 각 미니배치에서의 평균과 분산이 전체 활성값의 그것들을 유추하도록 하였다.
  • 미니 배치 내의 $m$개의 값을 다음과 같이 나타내보자.

$ \mathcal{B} = \{ x_{1, \cdots, m} \} $

  • Normalized 된 값을 $\hat{x}_{1, \cdots, m}$이라 하고 그것의 선형 변환을 $y_{1, \cdots, m}$이라고 하였을 때, Batch Normalization Transform을 다음과 같이 표현하고자 한다.

$$ \text{BN}_{\gamma, \beta} : x_{1, \cdots, m} \rightarrow y_{1, \cdots, m}$$

이 변환의 알고리즘은 다음과 같다.

  1. $\mu_{\mathcal{B}} \leftarrow \frac{1}{m} \sum_{i=1}^m x_i $
  2. $\sigma^2_{\mathcal{B}} \leftarrow \frac{1}{m} \sum_{i=1}^m (x_i – \mu_\mathcal{B})^2 $
  3. $ \hat{x}_i \leftarrow \frac{x_i – \mu_\mathcal{B}}{\sqrt{\sigma^2_\mathcal{B} + \epsilon}} $
  4. $y_i \leftarrow \gamma \hat{x}_i + \beta \equiv \text{BN}_{\gamma, \beta}(x_i)$
  • 파라미터 $\gamma, \beta$는 학습이 되는 파라미터이기 때문에 각 트레이닝 샘플 뿐 아니라 미니 배치에 종속적이다.
  • normalized된 각 활성값 $\hat{x}^{(k)}$는 서브네트워크로 볼 수 있는 선형 변환을 통해 $y^{(k)}$로 변환된다고 볼 수 있다. 이 서브네트워크의 입력은 고정된 평균과 분산을 가지고 있으므로 normalized된 입력은 서브네트워크의 학습과 동시에을 전체 네트워크의 학습또한 가속화한다.

3.1 Training and Inference with Batch-Normalized Networks

3.2 Bath-Normalized Convolutional Networks

  • 컨볼루셔널 네트워크에도 적용할 수 있다.

$$ z=g(Wu + b)$$

  • 여기에 BN을 적용하면 $x = Wu + b$를 normalizing하게 된다. $u$를 normalize할 수도 있지만, 이미 $u$는 다른 비선형성의 출력이기도 하고, 트레이닝 과정에서 그 분포가 계속 달라지게 될 것이다.
  • 하지만 $Wu + b$는 좀 더 시메트릭하고 스파스하지 않은 분포를 가지게 된다. 즉 좀 더 가우시안하다. 따라서 이를 normalizing하는 것이 더 안정된 분포를 생성해낸다.
  • 단, $Wu +b$를 normalize하게 되면 $b$는 평균을 빼는 과정에서 제거되므로 무시하는 것이 가능하다. 따라서 $z=g(Wu + b)$는 $z=g(BN(Wu))$로 교체해야한다.
  • 컨볼루셔널 레이어에서는 normalization또한 컨볼루셔널한 성질을 띄도록 해야한다. 즉 같은 특징맵이라면 다른 위치더라도 같은 방법으로 수행되어야 한다.
  • 따라서 알고리즘에서 $\mathcal{B}$를 하나의 특징 맵에 있는 지역 위치와 미니 배치 내에 있는 모든 요소들을 사용하도록 한다.
  • 따라서 각 활성값만큼 대신 특징 맵마다 두 파라미터의 수를 학습하게 된다.

3.4 Batch Normalization regularizes the model

4 Experiments

5 Conclusion


Add a Comment Trackback

2 Comments

  1. 결국 batch norm하는 과정은 통계학에서 z-score를 구한뒤 gamma갑을 곱한후 beta값을 더해서 값을 도출해내는 과정이네요. 질문이 있는데 gamma갑과 beta값을 적용하는 이유가 이 두개값을 trainable하게 만들기 위해서라고 하던데, 결국 이 두값도 손실함수를 각 gamma와 beta 파라미터에 대해서 편미분을 통한 경사하강법으로 optimize를 시키나요?

  2. 안녕하세요. 반갑습니다.
    말씀하시는 부분은 통계학의 그것과 비슷하다고 생각됩니다. 다만 통계학에서는 정규분포라는 가정에서 출발하지만, 여기에서는 반드시 그런 배경을 가지고 있어야 하는 것은 아닌 것 같습니다.

    궁금해하시는 부분도 정확하게 이해하고 계십니다. 말씀하신 대로 주어진 데이터에 대한 손실을 이용해 최적화를 시키고, 이렇게 학습된 값을 inference시에 사용합니다. 논문에는 설명이 좀 애매하게 적혀 있었던 기억이 있네요.

    때문에 caffe에서는 BatchNorm Layer에 이어서 Scale layer를 사용하게끔 되어 있습니다. gamma와 beta 부분은 BatchNorm Layer에 구현되어 있지 않고, Scale layer에 구현되어 있어서 번거롭게 사용하게 되어있습니다.

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.