Naver boostcamp -ai tech/Paper review

Batch Normalization - 논문 리뷰

끵뀐꿩긘 2022. 9. 28. 16:01

논문

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift(2015,Sergey Ioffe)

https://arxiv.org/abs/1502.03167

 

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

Training Deep Neural Networks is complicated by the fact that the distribution of each layer's inputs changes during training, as the parameters of the previous layers change. This slows down the training by requiring lower learning rates and careful param

arxiv.org


Batch Normalization 아이디어 제시 배경

Mini-batch stochastic gradient descent는 그레디언트 업데이트 방식으로 자주 사용되는 방식이다.

하지만 이 방식은 모델이 깊어질수록Batch gradient descent에 비해 가중치 초기값이나 hyper-parameter들의 설정에 큰 영향을 받는다. (weight의 미세한 값의 변화가 가중이 되어 쌓이기 때문)

이는 층이 깊어질 수록 각 layer의 input이 이전 모든 layer의 parameter에 영향을 받으므로, mini-batch마다 다른 데이터의 분포는 모델 성능에 악영향을 준다.

두번째 layer의 loss 값은 F1 layer의 output 값의 영향을 받는다

 

이렇게 각 layer를 통과하는 데이터 분포의 변화를 Internal Covariate Shift라고 하고 Internal Covariate Shift를 줄여서 input 데이터 분포를 안정화하면

 

  • 층 내부에서는 층 내부에서 $\Theta _2$가 매번 다른 분포에서 들어오는 데이터 x에 대해 가중치를 재조정할 일이 없이 같은 분포에서 들어오는 데이터를 받으므로 전체 데이터에 대한 gradient 학습의 수렴 속도가 빨라지는 효과

Internal Covariate Shift가 있을 때의 학습

 

  • 층 외부에서는 서로 다른 분포의 데이터가 saturating nonline(포화 비선형) functions(ex. sigmoid)를 통과하는 과정에서 일어나는 gradient vanishing 현상을 줄여주는 효과를 기대할 수 있다.

gradient vanishing


 

 

데이터 정규화 방법

 

Normalization: 데이터의 범위를 [0,1]로 옮긴다

$$ \frac{x - x_{min}}{x_{max} - x_{min}}$$

 

Standardization: 데이터를 평균 0 표쥰편차 1이 되게 변환한다

$$\frac{x-\mu}{\sigma}$$

 

whitening: 데이터의 평균을 0, 공분산으로 단위행렬로 갖는 정규분포 형태로 바꾼다

 

Batch Normalization에서는 Standardization기법을 활용하여 데이터를 정규화하는데, 이는 whitening 기법이 이전 레이어로부터 학습이 가능한 parameters의 영향을 무시하고, 계산량이 많아 느리기 때문이다.

 


 

Batch Normalization - train, forward

batch normalization은 input data를 정규화하여 모델에 넣는 것처럼 각 배치 단위 별로 hidden layer의 input이 다양한 분포를 가지더라도 평균과 분산을 이용해 정규화하는 것이다.

하지만 input data의 분포를 평균 0 표준 편차 1의 정규분포로만 바꾸게 되면

입력값이 sigmoid function의 선형적 구간에만 들어가게 되므로, 비선형성이 많이 희석된다.

그러므로,

$$\hat{x} = normalize (x)$$

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

위의 식과 같이 $\gamma$와 $\beta$ 파라미터를 넣어 BN을 통과한 분포가 정규분포에서부터 scale and shift되어 적절한 분포에 도달하기까지 backpropagation을 통해 학습할 수 있게 하였다.

(일반적으로, $\gamma$와 $\beta$의 초기값은 각각 1과 0)

 

 

Input = mini-batch의 크기(m)만큼의 데이터, $\gamma, \beta$

Output = BN layer을 통과하며 정규화 된 값

 

미니 배치 안의 데이터에서 평균과 분산을 구한다

$$\mu_B \leftarrow \frac{1}{m}\sum_{i = 1}^{m}x_i$$

$$\sigma^2_B \leftarrow \frac{1}{m}\sum_{i = 1}^m(x_i - \mu_B)^2$$

 

구한 평균과 분산에 대해서 각 차원 별로 정규화를 시행한다. ($\epsilon$은 계산 안정성을 위해 더해준다)

$$\hat{x}_i \leftarrow \frac{x_i - \mu_B}{\sqrt{\sigma ^2 _B + \epsilon}}$$

 

$\gamma, \beta$로 scale을 조정하고 shift해준다

$$y^{(k_i)} = \gamma ^ {(k_i)}\hat{x}^{(k)} + \beta^{(k)} \equiv BN_{\gamma,\beta}(x_i)$$

 


Batch Normalization - train, backward

Batch Normalization back propagation 계산 그래프

https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html

 

Understanding the backward pass through Batch Normalization Layer

At the moment there is a wonderful course running at Standford University, called CS231n - Convolutional Neural Networks for Visual Recognition, held by Andrej Karpathy, Justin Johnson and Fei-Fei Li. Fortunately all the course material is provided for fre

kratzert.github.io

Batch Normalization back propagation 계산 결과


Batch Normalization - inference

추론 단계에서는 데이터가 batch 사이즈로 들어오는게 아니기 때문에 batch mean과 batch variance를 계산하는게 불가능하다

대신, 학습 단계에서 모집단 추정 방식을 사용하거나 이동평균과 지수평균을 이용해 얻은 값을 고정된 평균과 분산으로 사용한다

모집단 추정 방식으로 분산과 평균을 정하여 inf 진행

파라미터들을 frozen하며 train모드를 inf 모드로 바꾼다.

$$N^{inf}_{BN} \leftarrow N^{tr}_{BN} $$

 

모집단 추정 방식으로 test 데이터에 사용할 분산과 평균 구하고 추정

모집단 추정 방식: 모평균 = 평균들의 평균, 모분산 = 분산들의 평균 * (표본의 개수) / (표본의 개수 -1) #불편추정량

$$E[x^{(k)}] = E_B[\mu_B^{(k)}]$$

$$y = \frac{\gamma}{\sqrt{Var[x] + \epsilon}}x + (\beta - \frac{\gamma E[x]}{\sqrt{Var[x] + \epsilon}})$$

=> 이전까지의 표본 평균과 분산을 모두 저장해 놓아야해서 비효율적이다

 

이동 평균 방식(Moving Average):

ex. 지수 이동 평균 방식(Exponential Moving Average)

$$\hat{\mu} \leftarrow \alpha \hat{\mu} + (1-\alpha)\mu^{(i)}_B$$

$$\hat{\sigma} \leftarrow \alpha \hat{\sigma} + (1-\alpha)\sigma^{(i)}_B$$

=> 시간에 따라 가중치를 주는 방식, 효율적

 


Batch Normalization의 이해와 적용

BN

입력값이 변했을 때 hidden layer들은 다른 분포의 값이 들어왔다고 생각한다

이는, 층이 깊어질수록 변화가 누적되어 심해지며, 분포 변화도 넓어진다

하지만 batch normalization을 적용하면, 왼쪽 그래프 처럼 서로 다른 분포의 데이터를 정규화하여 hidden layer에서도 안정적으로 학습할 수 있다

 

Convolution layer에서의 batch normalization 적용:

Convolution layer에서는 필터의 가중치가 입력간에 공유되므로 필터마다 하나의 $\gamma \beta$파라미터를 가지고 Batch Normalization을 적용한다.

ex. 입력 (3,3,3), 필터(2,2,3) 64개 인 convolution layer에 BN을 추가하면 64개의 $\gamma \beta$파라미터만 추가된다


Batch Normalization의 장단점

장점:

  • 학습 속도를 빠르게 할 수 있다(higher learning rate를 사용해도 발산되지 않는다)
  • 가중치 초기화에 대한 민감도를 감소시킨다
  • 모델의 일반화 효과가 있다 - dropout과 같은 규제방식을 대체 할 수 있다

단점:

  • batch size가 성능에 영향을 준다 (batch 크기가 너무 작거나 크면 잘 동작하지 않는다)
  • RNN과 같이 sequential 데이터를 처리하는 경우에 BN을 적용시키기 어렵다

Batch Normalization의 성능

같은 모델에 BN을 적용해주었을 때 더 적은 학습 횟수로 동일한 성능에 도달할 수 있었고(빠른 학습속도)

최종 성능도 조금 개선되었다(성능 개선)

추가적으로, 일반적으로 sigmoid를 activation function으로 적용한 모댈은 gradient vanishing 때문에 성능이 매우 나쁘게 나오지만, BN을 적용할 경우 gradient vanishing이 어느정도 완화되는 모습을 볼 수 있다


 

Internal Covariant Shift(ICS)이 진짜 문제일까

위의 논문에서는 뉴럴 네트워크 내부에서 공변량 변화이 일어나면 학습에 악영향을 주고, 이를 제거하기 위해서 BN를 고안 및 사용했다. 하지만 후속 연구 결과, BN은 ICS의 감소에는 별 영향을 주지 못한다는 것이 나타났다.

BN은 실제로 ICS를 제거하는지는 불명확하고, BN 적용 후에 ICS를 강제적으로 넣어주어도 성능에는 큰 변화가 없었다.

대신 BN이 Optimization Landscape(가중치 값에 따른 Loss 값의 시각화)를 smoothing하여 초기 기울기 방향이 실제 가야하는 방향과 알맞게 해주는 역할(기울기 예측성이 높다)을 하여 성능과 학습속도를 높여준다.


추가 논문 + 더 공부해야할 점들

 

 - BN의 실제적 원리를 다룬

How Does Batch Normalization Help Optimization?(2018, Shibani Santurkar)

 

https://arxiv.org/abs/1805.11604

 

How Does Batch Normalization Help Optimization?

Batch Normalization (BatchNorm) is a widely adopted technique that enables faster and more stable training of deep neural networks (DNNs). Despite its pervasiveness, the exact reasons for BatchNorm's effectiveness are still poorly understood. The popular b

arxiv.org

 

 - layer normalization, Weight Nomalization 등 다른 정규화 방법

 

- BN과 dropout 그리고 activation func의 조합 위치

어떤 것이 먼저 오는게 성능이 더 좋은가

https://stackoverflow.com/questions/39691902/ordering-of-batch-normalization-and-dropout

 

Ordering of batch normalization and dropout?

The original question was in regard to TensorFlow implementations specifically. However, the answers are for implementations in general. This general answer is also the correct answer for TensorFlo...

stackoverflow.com

=> 관련 논문 & 포스트

https://towardsdatascience.com/batch-normalization-in-3-levels-of-understanding-14c2da90a338

 

Batch normalization in 3 levels of understanding

What do we know about it so far : from a 30 seconds digest to a comprehensive guide.

towardsdatascience.com

https://arxiv.org/abs/1511.06422
https://arxiv.org/abs/1905.05928
https://arxiv.org/abs/2009.12836
https://arxiv.org/abs/2103.01499

https://blog.paperspace.com/busting-the-myths-about-batch-normalization

 

Intro to Optimization in Deep Learning: Busting the Myth About Batch Normalization

Batch Normalisation does NOT reduce internal covariate shift. This posts looks into why internal covariate shift is a problem and how batch normalisation is used to address it.

blog.paperspace.com

 

- 이동 평균 (가중 이동 평균, 지수 이동 평균 등)

- RNN에서의 BN

 

BN이 작동하는 이유:

  • BN은 훈련 중 은닉층 간의 상호 의존성을 완화 -> 은닉 유닛은 레이어끼리 매우 의존적이지만 BN 레이어를 추가하면 훈련 중에 각 레이어 간의 상호 의존성이 크게 줄어듭니다(분포 안정성 관점에서). 배치 정규화는 흐름을 억제하고 𝛽 et 𝛾 을 사용하여 조절을 허용하는 밸브처럼 작동합니다
  • BN은 최적화 환경을 더 부드럽게 만든다