티스토리 뷰

728x90

Batch Normalization 논문을 읽고 정리해봅니다. 솔직히 Paper Review긴 하지만 의식의 흐름대로 정리했습니다. 정말 유명하고 기본이 되는 논문이라 리뷰 글이 정말 많습니다. (다른 글을 더 추천한다는 의미) Reference로 아래에 참고한 글을 달아둘테니 논문 정독 대신 요약 리딩과 깔끔한 정리를 원한다면 맨 아래로 가주세요. 그래도 오류와 틀린 내용이 있다면 지적 부탁드립니다.

 

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

누르면 논문 PDF로 이동합니다.

 

Motivation

Reduce the internal covariate shift

이 논문의 주제이자 동기는 internal covariate shift를 줄이자는 것입니다. 하지만 후속 논문으로 많이 읽히는 'How Does Batch Normalization Help Optimization?'의 논문을 읽으면, 해당 논문의 motivation이 된 주제를 꼬집고 있습니다. 어쨌든 개념을 살펴보겠습니다.

 

Covariate shift means the difference of distribution between training data and test data. As usual, Normalization and Whitening is applied to datasets and shows some improvements. But the authors found out Internal Covariate Shift exists among hidden layers and it causes slow learning speed and the saturation problem, the resulting vanishing gradients.

Internal Covariate shift is the variation in the values of hidden layers i.e during back-propagation the weights are constantly updated leading to change in its output values, due to which the distribution of outputs regularly changes.

 

즉, 

  • 공변량 이동은 훈련 데이터와 테스트 데이터 간의 분포 차이를 의미합니다. 평소와 같이 Normalization 및 Whitening이 데이터 세트에 적용되고 난 뒤의 몇 가지 개선 사항을 보여줍니다. ($gamma$, $Beta$ 등장!)
  • 그러나 저자들은 내부 공변량 이동(Internal Covariate Shift)이 은닉층 사이에 존재하며 학습 속도가 느려지고 포화 문제가 발생하여 결과적으로 그래디언트가 사라지는 것을 발견했습니다.

 

Thus, BN aims to reduce these covariate shifts in order to make training faster. Before going to BN let me explain different types of scaling.

 

이점으로는 아래 다섯 가지가 가장 많이 언급됩니다.

 

Advantages

  1. increase the rate of training
  2. acts as a regularization term
  3. dropout can skipped while using BN
  4. higher learning rate
  5. allow use of saturating activation without saturated learning

 

 

Standardization and Normalization

Normalization :

Standardization :

 

 

Algorithm 1

  • Batch Normalization은 이름답게 batch 단위로 학습을 하게 됩니다.
  • 따라서 Algorithm 1을 보면, mini-batch mean과 mini-batch variance를 구합니다. 그리고 $\mu$와 $\sigma$를 통해 졍규화를 시킵니다.
  • 여기서 $\gamma, \beta$가 추가됩니다. 얘네들의 역할은 non-linearity을 추가 시켜주는 역할입니다.
  • $\gamma$는 scale을 조정하고 $\beta$는 shift합니다.
  • 또한, $\gamma$와 $\beta$는 하이퍼 파라미터가 아니라 역전파를 통해 동일하게 학습되는 파라미터입니다.

 

논문에서는 sigmoid function을 예시로 들며, gradient가 미분했을 때 saturated 되는 현상을 막을 수 있다고 설명합니다.

 

sigmoid function을 미분 시키면 0을 중심으로 정규분포 형태의 꼴을 갖게 되는데요. N(0,1)로 표준 졍규화 시킨 경우, 값이 0 주위로 분포가 몰리기 때문에 normalization 하기 전과 후의 차이를 굳이 비교하자면 saturated regime에 빠지는 현상을 덜하게 방지해준다고 이해했습니다.

 

하지만 sigmoid에서 0 주위의 값은 선형 구간입니다. 따라서 비선형성을 잃게 되고 이러한 성질을 보존허기 위해 scale과 shfit 연산이 추가됩니다.

 

또한, 이미 이 현상 때문에 ReLU를 사용 중이기도 하는데 굳이 sigmoid 사용으로 비교하는 이유가 무엇일까요? ReLU 이외에도 Weight initialization을 신중히 하는 방법과 exploding 문제를 방지하기 위해 learning rate를 조정하는 방법도 있습니다.

 

위와 같은 트릭이 있지만 문제를 해결하는 간접적인 방법으로 밖에 존재하지 못한다는 한계점이 있습니다. 가중치를 '잘' 초기화 해준다는 것은 어려운 방법이고, learning rate를 작게 해주더라도 local minima에 빠지기도 합니다.

 

그래서 제시된 새로운 해결 방법이 BN입니다. BN의 경우는 layer를 더 깊게 쌓을 경우 학습하는 과정 자체를 전체적으로 더 안정화 시킨다는 것에 초점을 맞춘듯 합니다. 따라서 근본적인 문제를 해결하여 학습 속도를 가속 시키자는 것이었고, 이로 인해 gradient vanishing/exploding을 방지할 수 있게 되었습니다.

 

학습 속도가 빨라지는 이유는 정규화를 통해 feature의 scale이 동일하게 변경되었기 때문에 learning rate를 결정하는데 더 유리해지고, gradient 편차가 더 작아지기 때문에 gradient vanishing/exploding을 방지할 수 있게 됩니다.

 

  • $\gamma, \beta$: 똑같이 오차 역전파 과정에서 업데이트 됩니다.

 

라고 적었는데,  $\gamma$와 $\beta$의 존재 이유에 대해 더 알아보겠습니다. 일단 BN의 경우, activation function 앞에 적용됩니다.

 

BN이 ReLU와 같은 non-linear activation function보다 먼저 적용된다는 점을 이해해야 하는데, 활성화 되기 전에 입력이 BN이 적용된다면 대칭되는 분포를 가질 확률이 더 높기 때문입니다. BN이 평균을 제한하는 비선형 활성화 후에 적용된다면 표준편차가 공변량 이동을 제거하지 않을 수도 있습니다.

 

 

이렇게 BN layer가 들어가게 되는데 이제 ReLU를 사용하려니 또 문제가 발생합니다. 왜냐하면 데이터의 분포가 [-1, 1] 사이에 집중하게 됐는데 ReLU에 집어 넣으니 반은 음수라서 0으로 바뀌고 반은 활성화되게 됩니다. ReLU가 그런 목적도 있지만 어쨌든 정규화 시킨 목적 자체가 사라지게 됩니다.

 

결국 0보다 큰 값만 살아남게 되어 linear한 구간만 남게 되고 또 non-linearity가 사라집니다.

 

따라서 $\gamma, \beta$를 정규화 값에 곱해지고 더해짐으로서 scale을 조정하고 Bias 역할을 하게 되는 $\beta$를 통해 ReLU가 적용되더라도 절반이 사라지는 현상을 막아줍니다. 또한, 이 값이 동일하게 역전파를 통해 학습되면서 더 효율적인 결과를 낼 수 있도록 가중치처럼 더 맞는 값을 찾아갑니다.

 

 

Algorithm 2

  • 이제 $x$를 입력으로 받던 모든 레이어가 이제 $BN(x)$을 입력으로 받음
  • 평균 및 표준편차는 미니 배치별로 계산된 다음 정규화에 사용
  • 각각의 $\gamma$와 $\beta$는 동일한 layer에 사용되며 최적화를 통해 업데이트 됨
  • Inference step: 모든 미니 배치의 평균과 표준편차를 학습한 후 평균을 계산 → 해당 parameter를 test dataset에서 test에 사용

 

추론 과정에서는 학습 과정에서 배치 단위의 평균, 분산을 저장해놓고 사용하게 됩니다. 학습 과정에서는 미니 배치 단위로 학습하고 그 단위 별로 평균, 분산을 구하는 것이 가능했지만 테스트 단계에서는 그렇지 않습니다.

 

그리고 이때 사용하는 고정된 평균과 분산은 이동 평균 또느 지수 평균을 통해서 계산된 값입니다. 이를 통해 전체 데이터셋 N개에 대해 반영된 평균과 분산을 사용하게 됩니다.

 

이렇게 학습과 추론 과정에서 차이가 있기 때문에 PyTorch의 경우 train과 evaluate할 때, model에 저장해두었다면 'model.train()', 'model.eval()'을 통해 mode를 turn on/off 해주게 됩니다. (dropout도 마찬가지)

 

아까 다시 위에 적어두었던 이점을 살펴보겠습니다.

  1. increase the rate of training
  2. acts as a regularization term
  3. dropout can skipped while using BN
  4. higher learning rate
  5. allow use of saturating activation without saturated learning

 

1, 4, 5에 대해 설명했고 2와 3을 살펴보겠습니다.

 

정규화 효과가 들어가는 이유는 직관적으로 이해해보면 미니 배치 단위의 정규화를 통해 한 weight가 커지는 방향으로만 학습되지 않기 때문입니다. 고정된 평균과 분산을 사용하지 않고 mini-batch 단위로 바뀌기 때문에 한 weight에만 큰 값이 쏠리는 것을 방지할 수 있습니다.

 

고정된 평균과 분산을 사용하는 경우(Whitening)에는 고정된 값이 연산되기 때문에 특정 가중치가 커질 수 있습니다.

 

또한, 이런 효과를 방지하기 위해 사용했던 기법이 Dropout입니다. BN이 생기며 dropout을 안 써도 된다라고 이론적으로는 설명이 되곤 하지만, BN-Activation function-Dropout으로 많이 사용하고, 역시 경우에 따라 다르다고 합니다.

 

Summary

  • 학습을 방해하는 Internal Covariate Shift 문제 개선하기 위해 고안됨
  • activation function에 들어가는 입력 값들의 범위를 제한시키는 방법(정규화)으로 문제를 개선
  • non-linearity가 사라지는 것을 방지하기 위해 $\gamma$, $\beta$ 추가
  • 이를 통해 weight initialization과 small learing rate 문제를 개선하여 training faster
  • Regularization 효과까지 있어서 regularization term, dropout effect로 overfitting에 조금 더 roboust 해짐

 

Batch Norm 정리를 너무 의식의 흐름대로 두서 없이 한 것 같은데, 다시 혼자 주절주절 정리해보자면

BN의 경우 mini-batch 단위에서 feature element 별로 평균과 분산을 구하게 됩니다. 그리고 구한 평균과 분산을 통해 정규화합니다.

 

하지만 단순히 표준 정규 분포 꼴을 가진다고 해서 많은 문제가 해결되는 것은 아니었습니다. sigmoid나 tanh 같은 활성화 함수에서는 입력 값이 linear한 영역에만 존재하도록 강제하게 되고, 이 덕에 saturation이 일어나는 것을 조금 더 방지할 수 있었습니다.

 

하지만 saturation을 막는 것 보단 감마와 베타를 이용해 $y^{k}=\gamma \hat{x}^{(k)}+\beta^{k}$의 꼴로 만들어주어 더 잘 조절하여서 원래 데이터가 갖고 있던 꼴을 어느 정도 반영할 수 있도록 합니다. normalized 된 값을 어느 정도 원상 복구 시킵니다. 이 부분을 identity function이라 이해했고, 여기서 $\gamma, \beta$를 학습시키게 되어 더 잘 맞는 값으로 업데이트 되기 때문에 진짜 normalize 효과를 없애면서 identity하게 바뀌는 것은 아니라고 이해했습니다. 논문에서도 BN을 identity transformation이라 표현하는데 이를 의미하는 것이 아닌가 생각합니다. (이 부분에 대한 생각과 오류 지적 환영입니다!)

 

이를 통해 saturation되는 걸 학습하게 되어 더 유연성을 얻게 됩니다. 이 부분이 학습이 잘 되도록 robust하게 해주는 부분이라 이해했습니다.

 

Reference

[1] https://m.blog.naver.com/laonple/220808903260

[2] https://hcnoh.github.io/2018-11-27-batch-normalization

[3] https://eehoeskrap.tistory.com/m/430

 

728x90
댓글