[DL] 6.1. Batch Normalization

2024. 3. 22. 23:46ML/DL

0. Data preprocessing: Normalize data

$$\widehat x = x_i - \mu_x \over \sigma_x$$ 방식으로 입력 데이터를 normalize하면 입력 데이터 분포가 비슷해진다.

입력 데이터가 비슷해지면 loss function이 유사해져 "학습 속도 증가" 및 "일반화"에 도움을 준다.

1. Batch Normalization reduces ICS

Batch Normalization 기법은 Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 논문에서는 처음으로 소개됐다.

 

위 논문에서는 "매 스텝마다 각 layer의 입력 분포($x$)가 달라지는 현상"을 ICS(=Internal Covariate Shift)라고 소개하고, 해당 현상은 layer가 깊어질수록 심해진다고 주장한다.

각 layer를 개별적인 모델이라고 보았을 때, 각 layer의 입력 분포는 앞쪽 layer의 파라미터에 영향을 받고 매 스텝마다 업데이트 되기 때문에, 입력 분포가 바뀐다고 주장한다.

 

"입력 분포가 달라졌다"는 것은 "이전에 보지 못한 새로운 데이터를 입력으로 받았다"는 것을 의미한다.

예를 들어, 첫 스텝에서는 월시코기 사진을 보여주고, 두번째 스텝에서는 푸들 사진을 보여주는 것과 비슷한 현상이다.

매번 입력 분포가 다르다는 것은 매번 loss landscape가 다르는 것이고, 이는 스탭마다 최솟값 위치가 다르다는 것을 의미한다.

이는 여러 문제를 야기한다. 대표적으로, 불필요한 진동이 많아져 학습이 느려진다.

 

위 논문은 "Batch Normalization으로 layer의 입력 분포를 고정시켜 ICS 현상을 줄여 다양한 문제를 완화할 수 있다"고 위 논문은 주장한다.

$$\mu_j = {1 \over n} \sum_{i=1}^n x_{ij}, \quad \sigma_j^2 = {1 \over n} (x_{ij} - \mu_j)^2$$

$$\widehat x_{ij} = {x_{ij} - \mu_j \over \sqrt{\sigma_j^2 + \epsilon}} \rightarrow \widehat y_{ij} = \gamma_j \hat x_{ij} + \beta_j$$

$\gamma$(scale)와 $\beta$(shift)를 추가한 이유는 상황마다 적절한 normalization 방법이 다르기 때문이다.

예를 들어, $\widehat x = {x - \mu \over \sigma}$ 방식을 사용하면 ReLU는 유리하지만, sigmoid는 불리하다.

0 근처에서 ReLU는 non-linearity를 유지하지만, sigmoid는 non-linearity가 감소하기 때문이다.

 

이처럼, 상황에 따라 적절한 normalization 방법(어디를 중심으로 얼만큼 분산시킬지)이 다를 수 있다.

그러므로, 그에 맞는 적절한 normalization 방법($\gamma \hat x + \beta$)을 찾아야 하며, 이를 학습을 통해 찾도록 할 것이다.

 

ICS가 감소하면 학습 때 여러 이점이 있다.

 

1. 학습 속도 증가

입력 데이터 분포가 비슷할수록 loss landscape가 유사하기 때문에, 각 layer의 입력 분포를 고정시키면 loss landscape가 유사해지는 효과를 기대할 수 있다. 그렇게 되면, 불필요한 진동이 적어져 학습 속도가 빨라진다.

 

2. 일반화

학습 데이터와 테스트 데이터의 분포가 다르면 loss landscape가 달라져, 일반화가 어렵다.

즉, CS(=covariate shift) 문제는 data normalization으로 loss landscape 차이를 어느 정도 줄일 수 있다.

하지만, BN로 각 layer의 입력 분포도 고정시키면, loss landscape가 보다 유사해져 일반화에 도움이 된다.

 

3. 가중치 초기화 의존도 감소

가중치 초기화 때 activations이 특정 부근에 쏠리면, 기울기 손실이 발생한다고 설명한 바 있다.

BN는 activations을 고르게 분포시켜 기울기 손실을 예방할 수 있다.


2. Batch Normalization smooth loss landscape

하지만, 이후 How Does Batch Normalization Help Optimization? 논문에서 "BN의 성능 향상과 ICS 감소는 연관성이 없을" 뿐만 아니라, "BN가 ICS 감소를 하지 않는다"고 주장한다.

 

BN와 ICS의 연관성 및 ICS와 성능 향상의 연관성

위 논문은 다음과 같은 실험 결과를 통해, BN가 ICS를 감소시키지 않을 뿐만 아니라, ICS 감소가 성능 향상에 큰 영향을 주지 않음을 보여준다.

 

 

BN 직후 무작위 노이즈를 삽입해 ICS를 강제로 높였음에도 불구하고 ICS가 낮은 non-BN보다 성능이 우수했다.

뿐만 아니라, non-BN와 BN의 ICS가 거의 유사한 것으로 보아, BN가 ICS를 감소시키는지 의문이다.

새로운 ICS 측정법

위 논문은 "앞쪽 layer를 업데이트 하기 전과 후의 기울기 차이를 비교하는 방식"으로 ICS 정도를 측정했다.

이는 "k번째 layer($W_k$) 입력의 변화에 따른 k번째 layer($W_k$)의 loss landscape의 차이"를 알려준다.

 

위 방식대로 측정한 결과, BN와 non-BN의 loss landscape 차이는 거의 유사하다. 즉, ICS가 거의 비슷하다.

$l_2$-diff는 업데이트 전후 기울기 크기 차이, Cos Angle은 업데이트 전후 기울기 각도 차이를 의미한다.

BN 성능 향상 이유

BN를 하면 loss landscape가 매우 부드러워진다. 즉, BN는 smoothing 기법이다.

loss function의 Lipschitzness가 향상될 뿐만 아니라, gradient의 Lipschitzness도 향상되었기 때문이다.

 

$f$ is $L$-Lipschitz if $|f(x_1) - f(x_2)| \ge L\lVert x_1 - x_2 \rVert$, for all $x_1$ and $x_2$

 

위 수식은 "임의의 두 점 사이의 기울기가 커봤자 $L$이다"라는 의미이고,

"Lipschitzness가 향상되었다"는 것은 "$L$이 줄어든다"는 것을 의미한다.

 

 

 

 

아래 3가지 실험을 통해, loss function의 Lipschitzness와 gradient의 Lipschitzness가 왜 향상되는지 알 수 있다.

첫번째 그래프는 학습 도중 각 스텝 $t$마다 loss($L(W_t)$)와 기울기($\nabla W_t$)를 계산하고, 기울기 반대 방향으로 이동함에 따라 loss가 어떻게 변하는지를 나타낸 것이다. 즉, 각 스텝 $t$마다 $L(W_t) - L(W^\prime)$가 어떻게 변하는지 음영 영역으로 나타냈다. ($\approx$loss의 Lipschitzness)

 

이로 "loss의 변동성 (or 안정성=stability)"을 확인할 수 있다.

측정 결과, non-BN는 loss의 변동이 크고, BN는 loss의 변동이 작다. 

(참고로, 변동성과 안정성은 반비례하기 때문에, loss의 변동이 크면 loss의 안정성은 작다.)

 

두번째 그래프는 학습 도중 각 스텝 $t$마다 기울기($\nabla W_t$)를 계산하고, 기울기 반대 방향으로 이동함에 따라 기울기가 어떻게 변하는지를 나타낸 것이다. 즉, 각 스텝 $t$마다 $L_2(\nabla(W_t) - \nabla(W^\prime))$이 어떻게 변하는지 음영 영역으로 나타냈다. ($\approx$gradient의 Lipschitzness)

 

이로 "gradient의 변동성 (or 안정성=stability)"을 확인할 수 있을 뿐만 아니라, "loss function의 smoothness"도 확인할 수 있다.

측정 결과, non-BN는 gradient의 변동이 크고, BN는 gradient의 변동이 작다.

(참고로, gradient의 변동성과 loss function의 smoothness는 반비례하기 때문에, gradient의 변동성이 크면 loss function는 울퉁불퉁하다.)

 

"BN가 gradients의 안정성을 향상시킴"을 추가로 입증하기 위해, 다음 실험을 진행했다.

세번째 그래프는 학습 도중 각 스텝 $t$마다 기울기($\nabla W_t$)를 계산하고, 기울기 반대 방향으로 이동함에 따라 이동한 거리($L_2(W_t - W^\prime)$)에 따른 기울기 변화량($L_2(\nabla(W_t) - \nabla(W^\prime))$)이 어떻게 변하는지를 구한 다음, 그 중 가장 큰 변화량을 나타낸 것이다. 즉, 각 스텝 $t$마다 $\max L_2(\nabla(W_t) - \nabla(W^\prime))/L_2(W_t - W^\prime)$을 나타냈다. (=gradient의 Lipschitzness)

 

  non-Batch Normalization Batch Normalization
loss 변동성
(loss의 안정성)
심하다 (=낮다) 낮다 (=높다)
gradient 변동성($\propto$ 안정성$^{-1}$)
(loss 함수의 smoothness)
심하다 (=울퉁불퉁하다) 낮다 (=부드럽다)

 

loss landscape가 부드러워지면 학습 때 여러 이점이 있다.

 

1. 안정적이고 빠른 학습

loss의 변동성과 gradient 변동성이 낮으면 학습이 보다 안정적이다.

일반적으로, 안정적이면 불필요한 움직임이 적어져 학습 속도가 증가한다.

 

2. 학습률 

gradient 변동성이 낮으면 "현재 기울기로 이후 기울기를 예측"하기 쉬워진다. 즉, gradient 예측력(=predictiveness)가 증가한다.

그렇기 때문에, 학습률(=보폭)을 높여도 "갑작스러운 기울기 변화"라는 위험에 빠지지 않는다.

그러므로, gradient 변동성이 낮으면, 다양한 학습률을 사용할 수 있다.

 

3. 일반화

loss의 변동성과 gradient 변동성이 낮으면, 가파른 골짜기보다 완만한 분지에 수렴할 확률이 높아진다.

 

4. 가중치 초기화 의존도 감소

가중치 초기화 때 activations이 특정 부근에 쏠리면, 기울기 손실이 발생한다고 설명한 바 있다.

BN는 activations을 고르게 분포시켜 기울기 손실을 예방할 수 있다. 이는 가중치 초기화 의존도를 감소시켜준다.

 

추가로, BN 뿐만 아니라, Residual connection와 $L_2$-norm과 같은 다른 smoothing 기법도 존재한다.