[Paper Review] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

ghgh5317·2021년 6월 7일
0

[Abstract]

#Batch Normalization의 장점 3가지

  • 높은 learning rate를 사용할 수 있다.
  • 초기화에 신경쓰지 않아도 된다.
  • regularizer의 역할로, 몇몇 경우에는 Dropout을 사용하지 않아도 된다.

[Introduction]

  • SGD는 단순하고 효과적이지만 모델 매개 변수의 초기 값뿐만 아니라 모델의 hyper-parameter, 특히 최적화에 사용되는 learning rate를 신중하게 조정해야 한다.

    (그렇지 않으면 covariate shift가 발생할 수 있다.)

  • 논문에서는 학습에서 불안정화가 일어나는 이유를 Internal Covariate Shift라고 주장하며, 이는 네트워크의 각 레이어나 Activation마다 입력값의 분산이 달라지는 현상을 말한다.

    Covariate Shift : 이전 레이어의 파라미터 변화로 인하여 현재 레이어의 입력의 분포가 바뀌는 현상
    Internal Covariate Shift : 레이어를 통과할 때마다 Covariate Shift가 일어나면서 입력의 분포가 약간씩 변하는 현상

[Covariate Shift의 단점]

saturated regime(활성화 함수에서 기울기가 0인 부분)에 빠지고 vanishing gradient 및 exploding이 발생한다.

⇒ 일반적으로 activation으로 sigmoid를 사용하는데, sigmoid 특성 상 절대값이 일정 수준 이상으로 큰 입력에 대해서는 Gradient가 거의 사라지는 문제가 발생한다.

이 단점은 ReLU 함수를 사용하거나, 신중하게 초기값을 선택하거나 적은 learning rate를 적용하면 문제를 해결할 수 있다.

하지만, 적절한 초기값을 이용한다는 것은 어려운 일이고, lr를 적게 사용하면 학습 속도가 느려진다.

[Towards Reducing Internal Covariate Shift]

Whitening : 각 레이어의 입력의 분산을 평균 0, 표준편차 1인 입력값으로 정규화 시키는 방법이다. Whitening은 기본적으로 들어오는 입력값의 특징들을 decorrelated 하게 만들어주고, 각각의 분산을 1로 만들어주는 작업이다.

training 효율을 높이기 위해서는 Internal Covariate Shift를 줄여야 한다. 기존의 여러 연구 결과들은 입력값이 Whitening된다면 신경망이 훨씬 빠르게 수렴할 것이라고 말했다.

기존의 연구는 신경망의 parameter를 Activation의 값에 따라 바꾸면서 Whitening하는 방식을 사용하는데 이러한 방법은 Gradient Descent의 효과를 줄이는 결과를 가져온다.

(ex) layer의 입력 u에 편향 b를 더한 것을 x라고 가정해본다. (x=u+b)

여기서 평균을 빼고 normalize를 하면 x-E[x]이다. 평균값을 빼주는 과정에서 b도 같이 빠지게 되어 결국 출력에서 b의 영향이 없어진다. 단순히 평균인 E[x]값을 빼는 것이 아니라 표준편차로 나눠주는 등의 scaling 과정까지 포함될 경우 는 더 악화된다. 이렇게 단순히 whitening만 시키면 이 과정과 parameter를 계산하기 위한 Backpropagation과 무관하게 진행되기 때문에 특정 parameter가 계속 커지는 상태로 whitening이 진행될 수 있다.

(⇒ gradient descent의 효과가 감소되는 이유)

[Normalization via Mini Batch Statistics]

whitening의 문제점을 해결하기 위해서 두 가지의 간소화 방법이 필요하다.

[1번]

layer의 입력과 출력을 동시에 whitening해주는 대신에 각 scalar feature을 평균 0, 분산 1을 갖도록 독립적으로 normalize해준다.

Normalize는 feature가 decorrelated 되지 않았음에도 수렴 속도를 높여주지만, 단점이 하나 있다.

sigmoid의 입력을 위와 같이 normalize하는 것은 nonlinearity의 linear regime로 제한하게 되기 때문에 비선형성을 잃게 된다.

이를 해결하기 위해 normalize된 값을 scale, shift 해주는 학습 가능한 parameter 감마와 베타를 추가해준다.

[2번]
normalize는 전체 dataset을 처리하지만 SGD는 batch 단위로 data를 처리하게 된다. 따라서 normalize도 batch 단위로 해준다. 각각의 mini batch data로 layer의 입력을 normalize해준다. 이 방법으로 normalization에 사용된 통계값은 모두 backpropagation에 사용될 수 있다. 또한 normalize를 mini batch 단위로 처리하게 되면 한번에 처리하는 연산량도 줄어들게 되는 이점이 있다.

[최종]

Batch Normalization은 레이어마다 정규화하는 레이어를 두어 변형된 분포가 나오지 않도록 조절하게 하는 것이다. 평균과 분산을 조정하는 과정이 별도의 과정이 아닌 신경망 안에 포함되어 학습 시 평균과 분산을 조정하는 과정 역시 같이 조절된다는 점에 있어서 Whitening과 구별된다.

Batch Normalization은 간단히 말하자면 mini batch의 평균과 분산을 이용해서 정규화한 뒤에, scale 및 shift를 감마, 베타값을 통해 실행한다. 이 때 감마와 베타 값은 학습 가능한 변수이며, Backpropagation을 통해서 학습된다.

감마, 베타값에 대한 Backpropagation 수식

정규화된 값을 활성화 함수의 입력으로 사용하고, 최종 출력 값을 다음 레이어의 입력으로 사용하는 것이다.

[Batch Normalization Algorithm]

결과적으로 Batch Normalization은 단순하게 평균과 분산을 구하는 것이 아니라, scale과 shift를 통한 변환을 통해 훨씬 유용하게 되었으며, BN이 신경망의 layer 중간에 위치하게 되어 학습을 통해 감마와 베타를 구할 수 있게 되었다.

Covariance shift 문제로 인해 망이 깊어질 경우 학습에 많은 어려움이 있었지만, BN을 통해 Covariate Shift 문제를 줄여줌으로써 학습의 결과도 좋아지고 빨라지게 되었다.

[Summary]

  • 각 layer의 input의 distribution이 weight들에 의해 조금씩 바뀐다.
  • layer가 깊을수록 데이터의 distribution의 변화가 커진다. ⇒ 학습이 잘 안됨
  • 이러한 현상을 Internal covariate shift라고 한다.
  • 이를 해결하기 위해 기존의 방법은 parameter 초기값을 잘 설정해주거나, learning rate를 작게 해야 했다.
  • 초기값을 잘 설정하는 것은 매우 어려운 일, learning rate를 작게하면 학습이 매우 느림
  • 그리하여 찾아낸 것이 바로 BN
  • 모든 input이 unit gaussian distribution이 아니어서 생기는 것이니 강제로 unit gaussian을 만들어보자는 아이디어다.

  • Batch 단위로 한 레이어에 입력으로 들어오는 모든 값들을 이용해서 평균과 분산을 구한다
  • 그 값을 이용해 normalization 해준다.
  • 여기서 문제가 발생한다. 과연 모든 activation의 입력이 unit gaussian인 것이 정답인가?
  • 따라서 무조건 unit gaussian으로 만드는 것이 아닌 saturation되는 정도를 정해줄 수 있게 만들었다.
  • gaussian normalization이 필요하면 그렇게 해주고 또 그 방법이 최선이 아니면 unit gaussian을 조금씩 scaling 하고 shifting 할 수 있게 하기 위해 parameter γ\gamma (scaling)와 β\beta (shifting)추가
  • parameter γ\gamma , β\beta 는 backpropagation으로 학습 가능
  • BN은 Internal covariate shift를 줄여 학습이 잘되게 한다.
  • BN을 사용하면 learning rate를 더 키울 수도 있고 다양한 초기화 기법도 사용해 볼 수 있다.
  • 또한 BN은 regularization의 역할도 한다
  • 각 레이어의 출력은 해당 데이터 하나 뿐만 아니라 batch안에 존재하는 모든 데이터들에 영향을 받는다. (평균, 분산)
  • 각 레이어의 입력이 해당 배치의 평균으로 normalize되기 때문이다.
  • 그렇기 때문에 각 레이어의 출력은 deterministic하지 않고 조금씩 바뀐다.
  • 이는 regularization effect를 준다.

[Experiments]

[MINST]

가장 왼쪽은 MNIST data에 대해 BN 사용의 유무에 대한 convergence speed를 비교한 것이며, 다음의 그림은 BN 사용 유무에 대한 internal convariate shift가 어떻게 변화하는지를 보여주는 것이다.

(a)를 보면, BN을 사용했을 때 더 빨리 수렴하고 Accuracy가 높다는 것도 확인할 수 있다.

한 뉴런의 training 동안 activation value의 변화를 plot한 것으로, 가운데 있는 선이 평균이고, 위 아래가 variance를 의미한다. 따라서 BN을 사용하면 처음부터 끝까지 distribution을 가진다는 것을 알 수 있다.

[ImageNet Classification]

실험 2는 Inception Network에 BN을 적용한 결과이다. dataset은 ImageNet의 LSVRC2012 training data를 사용했다. 우측의 표에 대한 설명은 다음과 같다.

  • Inception : Inception Network 베이스라인 모델이고, Learning rate는 0.0015를 사용했다.
  • BN-Baseline : 위의 Inception과 동일하지만 Nonlinearity에 들어가기 전에 BN을 적용한 모델이다.
  • BN-x5 : 위의 베이스라인 모델과 같지만 Learning rate를 5배인 0.0075를 사용한 모델이다.
  • BN-x30 : Learning rate를 30배로 사용했다.
  • BN-x5-Sigmoid : BX-x5와 동일하지만 Nonlinearity를 ReLU 대신 Sigmoid로 사용한 모델이다.

BN을 사용하면 더 큰 lr에 대해서도 더 빠른 수렴 및 성능을 보장한다고 할 수 있다.

앙상블 모델을 이용한 Classification 결과이다. 이번 결과에서도 Batch Normalization을 사용한 결과가 좋은 것을 확인할 수 있다.

profile
instagram @sjoo_0709

0개의 댓글