정규화는 깊은 신경망의 학습을 안정시켜
정규화 계층은 활성화의 중심과 크기를 다시 맞춰 학습을 안정시켜. 흔한 변형은 세 가지지만 서로 마음대로 바꿔 쓸 수는 없어. 데이터와 작업의 모양에 맞춰 골라야 해:
- BatchNorm2d: 각 채널을 배치 전체에 걸쳐 정규화해. CNN의 표준 선택이야. 통계를 안정적으로 추정하려면 보통 16개 이상의 충분한 배치가 필요해.
train()에서는 배치 통계를 쓰고eval()에서는 버퍼에 저장한 누적 평균과 분산을 사용해. - LayerNorm: 특징 차원에 걸쳐 샘플별로 정규화해. Transformer의 표준 선택이며 배치 크기에 영향을 받지 않고 추론 동작도 안정적이야.
- GroupNorm: 채널을 여러 그룹으로 나누고 각 그룹 안에서 정규화해. 배치 크기가 1이어도 잘 작동해. GPU당 배치가 2개인 경우도 흔한 COCO 객체 탐지나 일부 비전 Transformer에서 사용해.
왜 BatchNorm을 아무 데나 쓰면 안 될까?
BatchNorm에서는 한 샘플의 정규화가 같은 배치의 다른 샘플에 의존하므로 샘플 사이에 정보가 섞여. RNN의 각 단계, 다중 작업, 배치 간 결합을 원하지 않는 대조 학습에서는 문제가 될 수 있어. 작은 배치와 샘플 하나씩 처리하는 추론에도 취약해. LayerNorm은 이런 문제를 피할 수 있어서 Transformer의 표준으로 자리 잡았어.
풀링
MaxPool2d는 각 창의 최댓값을, AvgPool2d는 평균을 골라. AdaptiveAvgPool2d(out_size)는 요청한 출력 크기에 맞춰 창 크기를 알아서 정해 주는 편리한 도구야. CNN 백본 끝에 AdaptiveAvgPool2d(1)을 두면 입력 이미지 크기와 관계없이 하나의 특징 벡터를 만들 수 있어.