How Does Batch Normalization Help Optimization?

https://arxiv.org/abs/1805.11604

소개

Deep Neural Network의 성능 향상에 가장 크게 기여한 것 중 하나가 BN(Batch Normalization)일것이다.
사실 BN이 처음 소개되었을 때에 그 성능 향상의 원인이 무엇인지 밝혀내지 못했고, 내부공변량(Internal Covariate Shift)을 줄여주는 것이 그 이유라 막연하게 생각하고 있었다.
저자는 우선 ICS의 감소가 BN의 성능과 관련이 없음을 보이고, 몇가지 예시와 함께 함수해석적으로 BN이 어떻게 성능향상에 기여하는지 제시하였다.
BN은 Loss Landscape를 smooth하게 만들어주어 Learning rate등의 Hyper-parameter 선택을 느슨하게 해주며, 결과 flat minima로의 convergence를 돕는다고 하고 있다.

Internal Covariate Shift
각 레이어의 층을 $k$, 업데이트 횟수 $t$
$(k+1)$-Layer가 $\text{step}=t$ 에 대해 학습을 진행
$\rightarrow$ $(k)$-Layer가 $\text{step}=t$ 에 대해 학습을 진행
$\rightarrow$ $\text{step}=(t+1)$ 에서 $(k+1)$-Layer의 표현은 $\text{step}=t$ $(k)$-Layer의 출력과 Distribution이 변하기 때문에 학습에 악영향

선행 연구와 비교한 장점

BN을 개선한 많은 논문들이 있지만 학습속도가 빨라지고, Train/Validation 성능이 증가했음을 보일뿐,
그 어느것도 정말 ICS를 줄이는지, 왜 ICS가 줄어드는지에 대한 내용이 없다는 것을 논문에서 언급하고 있다.

[1] Jimmy Lei Ba, Jamie Ryan Kiros, and Geoffrey E Hinton. Layer normalization. In arXiv preprint arXiv:1607.06450, 2016.
[3] Djork-Arné Clevert, Thomas Unterthiner, and Sepp Hochreiter. Fast and accurate deepnetwork learning by exponential linear units (elus). In International Conference on Learning Representations (ICLR), 2016.
[13] Günter Klambauer, Thomas Unterthiner, Andreas Mayr, and Sepp Hochreiter. Self-normalizing neural networks. In Advances in Neural Information Processing Systems (NIPS), 2017.
[31] Yuxin Wu and Kaiming He. Group normalization. In European Conference on Computer Vision (ECCV), 2018.

논문에서 언급한 Ali Rahimi의 NIPS강연인데 BN이 작동하는 이유는 “Reducing Internal Covariate Shift”라고 한줄로만 설명되어 있을뿐인데 다들 이 방법을 적용시키고 있다고 얘기하였다.

[22] Ali Rahimi and Ben Recht. Back when we were kids. NIPS Test of Time Award, 2017.

주요 아이디어 & 검증

BN의 특성

  1. BN은 학습에 도움을 준다.
    • cifar-10/VGG model
    • (BN/LR) = (True/0.5), (True/0.1), (False/0.5), (False/0.1) 의 4가지 모델
    • (False/0.5) 는 학습 실패
    • 수렴속도는 (True/0.5)<(True/0.1)<(False/0.1)

      BN은 Supervised Learning에서 이점이 있다.
      그러나 BN에 들어오는 입력의 Distributional stability(mean/std의 변화)를 관찰해보니 별 차이가 없더라

  2. BN은 ICS를 조절하는가?
    • BN은 $\mu = 0, \sigma = 1$ normalization하지만 $\mu \not=0, \sigma \not=1$이 되도록 노이즈를 추가함
    • $\mu \not=0, \sigma \not=1$가 되면 ICS가 커지고 다음 레이어로 가는 값이 불안정해짐
    • 그럼에도 불구하고 Vanila보다 우수한 학습 성능을 보임
    • 심지어 original BN보다 덜 skew된 distribution을 보여줌

      BN의 성능향상과 stability of distribution은 관계가 없어 보인다.

  3. 각 학습의 Gradient변화
    • $\text{step}=t$ 의 Gradient와 $\text{step}=t+1$의 Gradient의 $\ell_2$(L2-Norm) 비교
    • BN에서 확연히 감소
  4. Linear Network에서의 BN
    • BN이 ICS를 오히려 증가시킴
    • 그럼에도 불구하고 BN을 쓰지 않았을때보다 성능이 증가함

Smoothness

  1. BN의 성능 증가는 Lipschitz condition과 관련이 있어보인다.

    \(|f(x_1)−f(x_2)|≤M|x_1−x_2|\) 기울기의 upper bound: M이 존재함
    연속적, Explode하지 않음

  2. Smoothing은 BN만의 것인가?
    • zero-shift하지 않고 $\ell_p$-norm으로 smoothing시켜봄($p=1,2,\infty$)
      • 단순히 Moving average를 가져와서 normalize했는지, Layer Norm처럼 했는지 그 부분이 조금 명확하지 않음
    • 이렇게 하면 출력이 Gaussian Distribution이 된다고 보장할 수 없음
    • 그런데 짜잔! 성능이 좋아졌습니다.

마무리

BN이 각 Layer의 Statistics를 독립시켜서 학습을 빠르게 하는 것 뿐만 아니라,
잘못된 Weight Init으로 인해 학습이 잘 되지 않는 경우도 해결해 줌을 수식으로 보이고 있다.

요새 드는 생각은 BN의 경우 강력하지만 batch size가 중요하다는 단점도 있기에,
weight normal이나 layer normal을 사용하는 것도 좋아보이고
분산/표준편차의 경우 L2 Norm을 계산해야 되기에 L1-Norm을 사용한 수법들을 관심있게 보고있으니
다음번엔 그쪽 논문들로 리뷰해보고자 한다.

관련 논문

원 논문 참고