BatchNorm2d 함수는 배치 정규화를 위한 함수입니다.
layer 가 깊은 딥러닝 모델은 복잡하고 오버피팅이 일어나기 쉽습니다. 특히, 데이터 전처리 방식에 따라 모델의 결과는 큰 차이를 가집니다.
배치 정규화가 나오게 된 배경을 이해하기 위해서는 Covariance Shift 를 이해해야 합니다 .
Covariance Shift 란 이전 레이어의 파라미터 변화로 인하여 현재 레이어의 입력의 분포가 바뀌는 현상입니다.
Internal Covariance Shift 는 레이어를 통과할 때마다 Covariance Shift 가 일어나면서 입력의 분포가 약간씩 변하는 현상입니다. 위 그림과 같이 layer를 거칠 때마다 데이터의 분포가 달라지는 것입니다.
Batch Normalization 은 이 Internal Covariance Shift 문제를 해결하기 위해 나온 것인데, 학습 과정에서 배치 단위 별로 데이터가 서로 다른 분포를 가지더라도 배치들의 평균과 분산을 이용해 정규화하는 것을 의미합니다. 배치별로 다른 분포에 있는 데이터를 Zero mean gaussian 형태로 만듦으로써 평균은 0, 표준편차는 1로 분포를 동일하게 맞춰줍니다.
배치 정규화를 적용하면 Internal Covariance Shift 현상을 해결하고자 진행하는 가중치 초기화와 learning rate를 감소 과정에서 자유로워질 수 있습니다.
배치 정규화의 또다른 이점으로는 Regularization Effect 가 있습니다. 배치 정규화를 진행할 때, 배치에 들어가는 평균과 분산에 지속적으로 변화를 주는 과정에서 가중치 업데이트에도 영향을 주어 가중치가 큰 방향으로만 학습되지 않기 때문에 Regularization Effect 를 얻을 수 있습니다. 이는 궁극적으로 오버피팅될 확률을 낮춰주게 됩니다.