AI/Computer Vision

[CV] BN, Batch Nomarlization 설명, CNN+BN 역할

도도걸만단 2025. 10. 23. 04:08
반응형

CNN의 핵심 구조인 Batch Normalization (BN)다양한 Normalization 기법
CNN 학습 안정화와 수렴 가속을 위해 왜 normalization이 필요한지, 수식적으로 어떻게 작동하는지, 그리고 실제 학습/테스트 단계에서의 차이점


Batch Normalization의 개념

등장 배경

  • 딥러닝 학습이 깊어질수록 Internal Covariate Shift (내부 공변량 변화) 문제가 생김.
  • 즉, 각 레이어 입력 분포가 학습 도중 계속 변해서, 이전 레이어 학습 변화가 다음 레이어에 계속 영향을 줌.
  • 그 결과:
    • 학습 속도 ↓
    • 초기화에 민감
    • 학습 불안정해결 아이디어

“각 레이어의 출력을 정규화(normalize) 하자!”

즉, 한 배치(batch) 내의 activation을 평균 0, 분산 1로 맞추는 것.

\(\hat{x}^{(k)} = \frac{x^{(k)} - \mu_B^{(k)}}{\sqrt{(\sigma_B^{(k)})^2 + \epsilon}}\)

 

여기서:

  • \( \mu_B^{(k)} \): batch 평균
  • \( \sigma_B^{(k)} \): batch 표준편차
  • \( \epsilon \): 수치적 안정성을 위한 작은 상수

Batch Normalization 수식과 파라미터

Normalization만 하면 모델의 표현력이 제한됨 (항상 0~1 근처로 가버리니까).

따라서 두 개의 학습 가능한 파라미터를 추가함:
\(y^{(k)} = \gamma^{(k)} \hat{x}^{(k)} + \beta^{(k)}\)

 

  • \( \gamma \): scale 파라미터 (variance 조정)
  • \( \beta \): shift 파라미터 (mean 조정)

즉, BN은 정규화 후 다시 자유롭게 scale & shift 할 수 있게 함으로써,
모델의 표현력을 보존하면서 안정적인 학습을 가능하게 함.


Batch Normalization의 역할

BN이 가지는 장점:

  1. Gradient vanishing/exploding 완화
    → 활성값의 분포가 일정하게 유지되어 역전파가 안정적임.
  2. 학습 속도 향상
    → 학습률(learning rate)을 크게 설정해도 발산하지 않음.
  3. 초기화에 덜 민감
  4. 약한 정규화 효과
    → dropout 없이도 일정 수준의 regularization이 생김.

Batch Normalization의 입력/출력 형태

BN은 batch 단위로 계산하기 때문에, 입력 형태를 다음과 같이 본다:

변수 의미

N 배치 크기 (# of samples per batch)
D 각 샘플의 feature 수
\(x_i \in \mathbb{R}^D\) i번째 샘플의 feature vector

문제점: Batch 의존성

BN은 현재 배치(batch) 의 평균과 분산으로 정규화하기 때문에,

  • 배치 크기가 너무 작으면 통계값이 불안정함.
  • 서로 다른 batch에서 통계가 달라지면 output 분포가 흔들림.

-> 특히 작은 배치(batch size < 8) 이거나
입력 크기가 불균일할 때 문제 발생.


학습 vs 테스트 시 차이

Train

  • 각 배치마다 계산된 \(\mu_B, \sigma_B\) 사용.
  • 동시에 전체 데이터셋 평균/분산의 이동평균(running average)을 저장함.

Test

  • 배치 통계값이 아니라 학습 중 누적된 이동평균(running mean, running var) 사용.
  • 즉, 고정된 통계로 정규화함.

이 단계 구분은 PyTorch의 BatchNorm2d()에서도 명확히 존재함.


BN의 미스터리 (이론적 불명확성)

“BN이 왜 이렇게 잘 되는지는 아직도 완전히 이론적으로 증명되지 않았다.

  • 경험적으로 매우 효과적이지만,
  • 실제로 “internal covariate shift를 줄인다”는 원래 설명보다,
    gradient smoothing 효과나 optimization landscape 평탄화 등 다른 설명이 더 유력하게 받아들여짐.

Training/Test 불일치의 위험

  • BN은 학습(train)과 테스트(test) 때 다르게 동작하므로,
    코드에서 mode 설정(model.train(), model.eval())이 매우 중요함.
  • 이를 혼동하면 성능이 심각하게 깨짐.
    (예: 테스트에서 여전히 batch 통계를 쓰면 결과 불안정)

BatchNorm 외 다른 Normalization 기법 비교

BN의 한계를 보완한 다양한 변형들이 존재함:

종류 설명 사용 상황

Layer Normalization (LN) 한 샘플의 모든 feature 단위로 정규화 RNN, Transformer 등
Instance Normalization (IN) 한 샘플의 한 채널에 대해 정규화 스타일 트랜스퍼, 영상 생성
Group Normalization (GN) 채널을 그룹 단위로 묶어 정규화 Batch size 작을 때 유리
Batch Normalization (BN) 배치 전체의 통계로 정규화 CNN, 대규모 batch

BN은 대규모 CNN 학습에 탁월하지만,
작은 배치에서는 IN, GN이 더 안정적임.


BatchNorm 공식 

정리 수식:

\(\text{Forward: } \hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}, \quad y = \gamma \hat{x} + \beta\)

 

\(\text{Test time: } \mu_B, \sigma_B \text{ 대신 running mean/var 사용}\)

핵심 포인트

  • BN은 “층(Layer)”의 출력 분포를 일정하게 유지
  • Normalization + learnable affine transform (γ, β) 구조
  • 학습 안정화, 빠른 수렴, 정규화 효과

CNN 구조와 Normalization의 관계

마지막 파트는 CNN 전체 구조 속에서 normalization이 어떻게 결합되는지를 요약합니다.

예시:
\(\text{Conv → BN → ReLU → Pool → Conv → BN → ReLU → …}\)

  • 일반적인 CNN 블록에서는 항상 BN이 Conv 뒤에 붙음.
  • 이 조합이 현대 CNN (예: ResNet, VGG, AlexNet, DenseNet 등) 의 기본 빌딩블록.

 

반응형