논문에서 저자가 말한 것 처럼 Batch Normalization (BN)는 네트워크 레이어의 Internal Covariate Shift (ICS)문제를 해결하기 위해 나온 기법이다. BN을 이용하면 확실하게 학습 속도가 빨라지고 안정적으로 학습되는 것을 실험적으로 증명하였다. 하지만 실제로 BN은 ICS 문제를 해결한 것이 아니고 Optimization Landscape를 smooth 하게 만들기 때문에 좋은 성능을 낸다는 것이 2018년 NIPS에 논문으로 발표되었다.
즉, 정리하자면
- Batch Normalization은 Internal Covariate Shift 현상을 해결하지 못한다.
- Internal Covarate Shift 현상이 있더라도 학습에 나쁜 영향을 주지 않는다.
- Batch Normalization이 학습 성능을 높여주는 이유는 Optimization Landscape를 smooth하게 만들어주기 때문이다. 이는 BN 말고도 다른 정규화 방법(L1,L2)으로도 같은 효과를 낼 수 있다.
Internal Covariate Shift
위 논문에서 저자는 VGG 네트워크에 CIFAR10 데이터셋을 학습시키면서 BN이 ICS 현상을 없애주는지 실험을 했다. 비교를 위해 VGG 네트워크에 BN을 추가하지 않은 Standard와 BN 직후에 랜덤한 노이즈를 섞은 Standard + Noisy BN 모델을 학습하여 성능과 데이터의 분포를 조사하였고 아래 그림이 그 결과다.
확실히 BN을 사용하게 되면 학습 속도가 빨라져서 빠르게 수렴하는 것을 확인할 수 있다. 그리고 위 그림의 오른쪽은 특정 위치의 레이어에 입력으로 들어오는 데이터의 분포를 시각화한 것이다. 각 레이어마다 입력 데이터의 분포가 학습 step에 따라 달라지는데 이것이 바로 ICS 현상이다. ICS는 레이어가 깊을 수록 심해지며 BN이 추가되더라도 이 현상이 없어지지 않는다는 것을 확인할 수 있다.
또 저자는 다른 방법으로도 ICS를 측정해 보았는데 앞쪽 레이어의 가중치만 업데이트 한 다음 현재 레이어의 기울기 값의 변화를 계산하는 것이다. 그렇다면 만일 ICS가 심하다면 입력 데이터의 분포가 이전 step과 크게 달라지므로 역전파로 계산되는 기울기 값이 이전보다 차이가 클 것이다.
기울기 값의 변화를 계산하기 위해 논문에서는 Cosine Angle과 L2-distance를 계산하였다. DLN은 논문에서 실험을 위해 만든 25층 크기의 Deep Linear Network이라고 한다. 이상적으로 BN에 의해 ICS 현상이 줄어들거나 없어졌다면 기울기 변화 값이 작아져서 Cosine Angle은 1에 가까워지고 L2-distance는 0에 가까워질 것이다. 하지만 실험 결과 기울기 변화 값이 작아지지 않았고 오히려 커지는 경우도 확인할 수 있었다.
즉, BN을 적용하더라도 ICS는 그대로이거나 오히려 증가하는 것을 실험적으로 확인할 수 있었다.
Batch Normalization이 잘 작동하는 이유
위 실험으로부터 BN은 ICS 현상을 해결하지 않는다는 것과 그럼에도 모델 학습 성능이 BN을 적용하기 전보다 좋아졌다는 것을 확인할 수 있었다. 그럼 어떤 이유에서 모델의 학습 성능이 좋아진 것일까? 저자는 BN이 Optimization Landscape를 부드럽게(Smoothing) 만들어주기 때문이라고 했다.
이를 확인하기 위해 특정 시점에서 loss 값으로 계산된 기울기를 step size를 다르게 하면서 가중치를 업데이트하고, 업데이트된 가중치로 loss를 다시 계산해서 원래 loss 값과의 차이(Variation in Loss)와 새로 계산돤 기울기 값과 원래 기울기 값의 차이(Variation in Gradient)를 비교하는 실험을 진행했다.
Variation in Loss (Loss Landscape)
- step size를 다르게 하면서 가중치를 업데이트 하였을 때 새로 계산되는 loss를 이용해 원래 loss 값과의 차이(range)를 계산.
- 변동 폭이 크다면(Large fluctuation) 이는 최적화가 힘들다는 것을 의미한다.
$$range\left(L\left(W^{'}\right)\right)$$
Variation in Gradient (Gradient Predictiveness)
- step size를 다르게 하면서 가중치를 업데이트 하였을 때 새로 계산되는 loss를 이용해 다시 기울기를 계산하고 원래 기울기와의 차이(range)를 계산.
- 변동 폭이 크다면 이는 기존의 기울기 값에대한 신뢰성이 떨어진다는 것을 의미한다.
$$range\left( \left \| \delta_{W} L \left( W^{'} \right) - \delta_{W} L \left( W^{t} \right) \right \| \right) $$
위 실험 결과를 보게 되면 BN을 적용시켰을 때 Loss와 Gradient의 변화가 적어 smooth한 최적화가 이뤄진다는 것을 확인할 수 있다. (c) 그림에 나오는 "effective" beta-smoothness는 기울기 값 변화에 대한 Lipschitzness를 계산한 것이다.
Lipschitz
립시츠(Lipschitz) 함수는 연속적이고 미분 가능하며 어떤 두 점을 잡더라도 기울기가 K 이하인 함수이다. 즉, 급격한 변화 없이 K만큼의 전반적으로 완만한 기울기를 가지는 함수 형태인 것이다. 따라서 파라미터에 대한 loss function이 립시츠를 따른다면 smooth하기 때문에 상대적으로 안정적인 학습을 진행할 수 있다.
$$\frac{|f \left( x_{1} \right ) - f \left( x_{2} \right ) |}{| x_{1} - x_{2} |} \leq K$$
논문에서는 Batch Normalization이 Loss function의 Lipschitzness를 향상(imporve)시켜준다고 한다. 이 말은 현재 기울기 방향으로 큰 step size만큼 이동하더라도 이동한 뒤의 기울기의 크기와 방향이 이전과 유사할 가능성이 높다는 것이다. 즉, learning rate가 높더라도 기울기가 stable하게 감소하면서 학습이 잘 진행될 수 있도록 도와주는 역할을 BN이 하고 있다는 말이다. 하지만 이는 BN 뿐만이 아니라 L1, L2와 같이 다른 정규화 기법을 사용하더라도 Lipschitzness를 향상시켜주는 효과가 있다고 하며 실험적으로 증명하였다.
reference
[1] https://subinium.github.io/introduction-to-normalization/www.youtube.com/watch?v=58fuWVu5DVU&t=3298s
[2] https://yjucho1.github.io/deep%20learning%20paper/batchnorm/lifeignite.tistory.com/47
'Machine Learning > Theory' 카테고리의 다른 글
RNN, LSTM 에서 tanh 를 사용하는 이유 (2) | 2021.05.25 |
---|---|
[개념 정리] Batch Normalization in Deep Learning - part 1. (2) | 2021.05.11 |