논문

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

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