CNN 모델을 보면, BN레이어 라는 것이 있는 버전이 있고 없는 버전이 있었다.
BatchNorm2D 라는 레이어를 보고 batch normalization이 무언인지, 있으면 뭐가 좋고 없으면 뭐가 좋길래 있는 버전이 있고 없는 버전이 있나 하는 생각이 들었었다. 그래서 이번에 batch normalization이 무엇인지 알아보기 위해 이 논문을 읽고 리뷰한다.
Internal covariate shift 를 줄이기 위해 적용하는 방법이다.
이미지셋 전체가 아니라 mini-batch 마다의 평균과 표준편차를 구해서 정규화 한다.
현재 레이어의 인풋은, 이전 레이어들의 영향을 받게 되는데, 이때 이전 레이어의 파라미터의 작은 변화는, 이후의 레이어에 큰 영향을 미치게 된다. 이처럼 학습중 이전 레이어의 파라미터 변화가 현재 레이어 입력의 분포에 영향을 미치는 현상을 위에서 말한 Internal Covariate Shift라고 한다.
이로인해 learning rate가 낮아지게 되고, 이는 학습의 속도를 늦추게 된다. 또한 파라미터의 초기값 설정을 하는데 많은 노력을 요구한다.
이를 해결하기 위한 방법중 하나로 whitening 기법이 있는데, whitening 시킨다는 것은 input의 평균을 0, 분산을 1로 바꿔주는 것인데, 이는 연산에 많은 시간과 메모리가 필요할 뿐 아니라, 일부 파라미터의 값이 학습을 진행함에 따라 무시되게 되는 악영향이 있다.
이를 보완하기 위해 논문이 제시하는 것이 Batch Normalization이다.
training data 전체에 대해 mean과 variance를 구하는 것이 아니라, mini-batch 단위로 접근하여 계산한다. 현재 택한 mini-batch 안에서만 mean과 variance를 구해서, 이 값을 이용해서 normalize 한다. whitening과 다른 부분은 scale과 shift 연산을 위한 감마와 베타가 추가 되었다는것이다.
학습이아닌 테스트에서는 꼐산 방식이 달라진다.
3줄요약
1. 기존 DNN은 파라미터의 스케일에 의해 러닝레이트가 너무 높으면 explode혹은 vanish가 발생하게 되기에 낮은 러닝레이트가 강제되지만, BN을 적용하면 이가 해결되어 빠른 학습이 가능해진다.
2. BN에는 regularization 기능이 있어 같은 기능을 하는 Drop out기법을 대체할 수 있는데, 이는 학습속도 향상에 기여하고, 동일하게 오버피팅을 막아준다.
3. 실험결과 실제로 학습이 빨라지고, 성능이 향상된다.
이로인해 learning rate가 낮아지게 된다고 하셨는데 이전레이어 파라미터의 변화가 learning rate를 말씀하시는 건가요? 왜 낮아지게 되나요?
제가 비유적인 말 처럼 느껴지게 썼는데요, 정말로 작은변화가 큰 값이 되어 영향을 미치게 됩니다.
레이어를 통과한 값이 커지면 오차가 커지게 될 텐데, 따라서 러닝레이트는 작아져야합니다.