: 입력 데이터의 분포가 학습할 때와 테스트 할 때 다르게 나타나는 현상
: Covariate Shift가 Neural Network 내부에서 일어나는 현상 → 매 스텝마다 hidden layer에 들어오는 데이터 분포가 달라짐
특히, mini-batch 사용하여 학습시 batch 마다 출력 데이터 분포가 달라짐 → 전혀 예측 불가한 gradient 학습
→ 이것의 원인이 Internal Covariate Shift
: 일정한 크기의 미니배치에 걸쳐 네트워크의 활성화를 정규화
각 feature에 대해서 mini batch에서 평균과 표준편차를 구한후, 평균을 빼고 mini batch의 표준편차로 나눠줌
→ 가중치의 크기를 증가하면 성능이 더 좋아지는가? → γ와 β scale, shift 학습 가능한 parameter로 추가
데이터 scale 통일
어떤 데이터 분포가 입력으로 들어와도 모두 정규화 → layer의 feature가 동일한 scale을 가짐
활성화 함수 맞춤형 분포 변화
추가적인 scaling과 bias를 학습함으로써 활성함수의 종류에 맞게 적합한 분포로 변환 가능
mini batch 크기에 의존적
batch size가 1일 때, variance=0 → batch norm이 작동하지 않음 (너무 작은 배치 크기에서 잘 동작하지 않음)
mini batch 너무 작으면 noise가 크고 훈련에 영향을 줄 수 있음 → 동일한 배치 크기를 가져와야함
Recurrent Neural Network에 적용하기 어려움
RNN에서 각각의 time-step에 따라 batch norm layer를 분리해야함 (각각의 time-step마다 다른 분포를 갖고 있기 때문)
but 이렇게 하면 각 time step마다 통계를 저장해야 하기 때문에 모델이 더 복잡해지고 공간 소모가 많음
: activation을 직접 정규화하는 대신 layer의 가중치(convolution filter)를 직접 정규화
: batch normalization에서 batch 차원의 input feature를 정규화하는 대신 기능 전반에 걸쳐 입력을 정규화
: layer normalization과 매우 비슷
: 각 training 예를 위한 채널들의 그룹을 너머 정규화
그렇지만 contrast 문제가 있을 때 문제가 될 수 있음
→ batch-instance normalization이 이것을 다루기 위해서 얼마나 많은 스타일 정보가 각각의 채널에 사용되었는지를 시도
https://arxiv.org/pdf/1805.11604.pdf 논문에 따르면,
Batch Normalization은 Internal Covariate Shift를 해결하지 못함
Internal Covariate Shift가 있더라도 학습에 나쁜 영향을 주지는 않음
Batch Normalization이 학습 성능을 높이는 이유는 optimization landscape를 smooth하게 만들어주기 때문 → 정규화 방법 (L1 Normalization, L2 Normalization)도 같은 효과
Reference
[1] https://medium.com/techspace-usict/normalization-techniques-in-deep-neural-networks-9121bf100d8
[2] https://heytech.tistory.com/438
[3] https://cvml.tistory.com/5