일반적으로 네트워크에서 사용되는 대표적인 Normalization은 Batch Normalization이고, Conv 레이어 중간중간에 넣어서 말 그대로 데이터 정규화를 해준다.
예전엔 ICS (Internal Covariate Shift) 라는 Train 셋과 Test 셋의 데이터 분포가 달랐을 때 발생하는 현상을 줄여주어 성능이 올라간다고 했는데, 요즘은 Solution Space를 smoothing 해주어 좋다라는 추세인 듯 하다.
특정 범위 내에서 산발적인 데이터 분포에 대해 학습이 용이하도록 부드럽게 만들어준다고 볼 수 있다.
Batch Normalization (BN)
mini-batch 안에서 정규화를 수행한다. CNN에서 가장 일반적으로 사용된다.
batch 단위로 정규화하므로 batch-size가 작을 때는 문제가 발생할 수 있다.
Layer Normalization
Channel 간에 정규화를 수행한다. BN과 다르게 batch sample 간 의존성이 없다.
NLP, Transformer, ViT같은 자연어 기반 및 파생 모델에서 주로 사용된다.
Instance Normalization
개별 Feature Map 내에서 정규화를 수행한다. BN에서 batch size = 1 인 경우와 같고, instance마다의 개별 특성을 보존해야할 때 사용한다고 한다.
Style Transfer에서 주로 사용한다.
Group Normalization
BN의 경우, 배치가 작을때 평균과 분산의 대표성이 떨어진다는 문제가 있어서 이를 보완한 방식이다.
배치 크기가 매우 작을때 batch normalization 대신에 사용하면 좋다고 한다.