레이어 수가 많아질 수록 학습이 잘 되지않는 근본적인 문제는 Internal Covariate Shift 때문이다.
학습을 시킬 때, 이전 layer의 값에 따라 다음 layer의 weight가 영향을 받게된다. 즉, 매번 입력 데이터의 분포가 바뀌게 되는 현상이 일어난다.
SGD를 이용하여 Batch 단위로 학습하게 되면 Batch 간의 데이터 분포가 상이해지는 문제가 발생한다.
⇒ 그렇다면 입력 데이터의 분포를 변경해주면 문제를 해결할 수 있지 않을까?
Batch Normalization
Batch별로 평균과 분산을 이용해 정규화하는 것
각 레이어로 들어가는 입력 데이터의 분포를 고르게 하기 위해 normalization을 해준 뒤 scale 파라미터와 shift 파라미터를 추가한다. 그 이유는 모든 데이터들이 평균 0, 표준편차가 1로 고정 되도록 한다면 학습하는 동안 계속 고정된 값이 연산되기 때문에 가중치가 큰 방향으로만 학습될 수 있기 때문이다. 하지만 Batch Normalization에서 평균과 분산이 지속적으로 변한다면 weight 업데이트에도 계속 영향을 주어 한 weight에 가중치가 큰 방향으로만 학습되지 않기 때문에 Regularization 효과를 얻을 수 있다.
또한 인퍼런스 시에는 테스트 데이터 하나에 대해서 평균과 분산을 계산할 수 없기 때문에, train dataset의 평균과 분산값으로 대체한다.
Batch Normalization의 효과
1. 성능 향상
2. Regularization 효과
: 정규화 후에 스케일링, shift로 일종의 noise를 추가 효과 → overfitting 문제에 강건
Batch Normalization의 한계
Batch Normalization은 batch 크기에 영향을 많이 받는다.
Batch의 크기가 너무 작은경우 GPU 메모리의 한계로 인해 RNN이나 크기가 큰 CNN에 적용하기가 어렵다. 극단적으로 Batch 사이즈가 1이 되면 평균은 샘플 1개의 값이 되고 표준 편차는 0이 되어버려 정상적으로 동작할 수 없다. 샘플을 너무 작게 사용할 때에는 큰수의 법칙과 중심 극한 이론을 만족하지 못하기 때문에 평균과 표준 편차가 데이터 전체 분포를 잘 표현하지 못한다.
Batch의 크기가 너무 큰 경우 적절한 크기의 샘플은 중심 극한 이론을 통하여 적절한 정규 분포를 따르게 되나 굉장히 큰 샘플을 한 경우 multi modal 형태의 gaussian mixture 모델 형태가 나타날 수 있다.
Batch Normalization은 Internal Covariate Shift 문제를 개선하기 위하여 고안되었고 이것은 Activation에 들어가게 되는 Input의 Range를 제한시키는 방법으로 문제를 개선하는 방법이다.