본문 바로가기
데이터 과학 수학

딥러닝 학습을 안정시키는 두 가지 기법, 배치 정규화(Batch Normalization)와 드롭아웃의 수학

by dexien 2026. 5. 1.

딥러닝 모델을 학습시키다 보면 이런 경험을 합니다. 학습이 시작하고 얼마 지나지 않아 손실이 폭발하거나 아예 학습이 멈춥니다. 또는 훈련 정확도는 높은데 검증 정확도가 한참 낮습니다. 배치 정규화와 드롭아웃은 이 두 문제를 각각 해결하는 기법입니다. 거의 모든 현대 딥러닝 모델에 들어가 있지만 왜 작동하는지 수학적으로 이해하는 경우는 드뭅니다.

배치 정규화(Batch Normalization)는 학습을 안정시키고, 드롭아웃(Dropout)은 과적합을 방지합니다. 코드로는 각각 nn.BatchNorm1d()와 nn.Dropout(p=0.5) 한 줄이지만 그 뒤에는 정규분포, 분산, 확률 개념이 들어있습니다. 오늘은 실제 숫자로 따라가 보겠습니다.

배치 정규화와 드롭아웃의 수학
딥러닝 학습을 안정시키는 두 가지 기법, 배치 정규화(Batch Normalization)와 드롭아웃의 수학

배치 정규화가 필요한 이유 — 내부 공변량 이동 문제

딥러닝 학습에서 레이어가 깊어질수록 이전 레이어의 가중치가 업데이트되면 다음 레이어가 받는 입력 분포가 계속 바뀝니다. 앞 레이어가 바뀌면 뒤 레이어 입장에서는 매번 다른 데이터를 받는 셈입니다. 이를 내부 공변량 이동(Internal Covariate Shift)이라고 합니다.

내부 공변량 이동 문제:

레이어 1 출력 분포 (스텝 1): 평균=0.0, 분산=1.0
레이어 1 출력 분포 (스텝 2): 평균=2.3, 분산=5.7
레이어 1 출력 분포 (스텝 3): 평균=-1.1, 분산=0.3

→ 레이어 2는 매 스텝 다른 분포의 입력을 받음
→ 레이어 2 입장에서는 계속 새로운 데이터
→ 학습이 불안정해지고 수렴이 느려짐

발생하는 문제들:
1. 학습률을 크게 설정하면 발산
2. 기울기 소실/폭발 심화
3. 가중치 초기화에 매우 민감
4. 활성화 함수 포화 (Sigmoid 사용 시)

입력 데이터를 전처리할 때 표준화를 하는 이유와 같습니다. 분포가 일정해야 학습이 안정적입니다. 배치 정규화는 이 표준화를 각 레이어의 출력에 매 스텝 적용합니다.

배치 정규화 적용 전 제각각인 레이어 출력 분포가 적용 후 평균 0 분산 1로 통일되는 비교 인포그래픽
배치 정규화는 각 레이어의 출력 분포를 평균 0 분산 1로 정규화해서 학습을 안정시킨다


배치 정규화의 수식과 작동 원리

배치 정규화는 미니배치 단위로 각 레이어의 출력을 정규화합니다. 평균을 0, 분산을 1로 만든 다음 학습 가능한 파라미터로 스케일과 이동을 조정합니다.

배치 정규화 4단계 수식:

미니배치 B = {x₁, x₂, ..., xₘ} (m개 샘플)

① 배치 평균:
μ_B = (1/m) × Σxᵢ

② 배치 분산:
σ²_B = (1/m) × Σ(xᵢ - μ_B)²

③ 정규화:
x̂ᵢ = (xᵢ - μ_B) / √(σ²_B + ε)
ε: 분모가 0이 되는 것 방지 (보통 1e-5)

④ 스케일 및 이동 (학습 가능한 파라미터):
yᵢ = γ × x̂ᵢ + β
γ: 스케일 파라미터 (초기값 1)
β: 이동 파라미터 (초기값 0)

γ, β는 역전파로 학습됨
→ 모델이 필요하면 정규화를 되돌릴 수 있음

γ와 β가 중요한 이유가 있습니다. 무조건 평균 0, 분산 1로 강제하면 모델의 표현력이 제한됩니다. γ와 β를 학습시키면 필요한 경우 정규화를 부분적으로 되돌릴 수 있습니다. 정규화의 안정성을 유지하면서 표현력도 보존하는 영리한 설계입니다.


실제 숫자로 배치 정규화 계산해보기

배치 크기 4, 특성 1개인 간단한 예시로 배치 정규화를 직접 계산해 보겠습니다.

미니배치 입력값: [2.0, 4.0, 6.0, 8.0]

① 배치 평균:
μ_B = (2+4+6+8)/4 = 20/4 = 5.0

② 배치 분산:
σ²_B = [(2-5)²+(4-5)²+(6-5)²+(8-5)²]/4
= [9+1+1+9]/4 = 20/4 = 5.0

③ 정규화 (ε=1e-5 무시):
x̂₁ = (2-5)/√5 = -3/2.236 = -1.342
x̂₂ = (4-5)/√5 = -1/2.236 = -0.447
x̂₃ = (6-5)/√5 = 1/2.236 = 0.447
x̂₄ = (8-5)/√5 = 3/2.236 = 1.342

정규화 후: [-1.342, -0.447, 0.447, 1.342]
평균 ≈ 0, 분산 ≈ 1 ✅

④ γ=1, β=0 (초기값)일 때:
출력 = 1×x̂ + 0 = x̂ (정규화 그대로)

γ=2, β=1로 학습된 경우:
출력 = 2×[-1.342,-0.447,0.447,1.342] + 1
= [-1.684, 0.106, 1.894, 3.684]
→ 평균=1, 분산=4로 스케일 조정됨

정규화 후 값들이 평균 0, 분산 1로 바뀐 게 보입니다. 이전 연재에서 다룬 표준화(Z-score)와 수식이 동일합니다. 차이는 전체 데이터가 아닌 미니배치 단위로 매 스텝 적용한다는 점입니다.


훈련 시와 추론 시의 차이

배치 정규화에서 주의해야 할 점이 있습니다. 훈련 시와 추론(inference) 시의 동작이 다릅니다.

훈련 시 (Training Mode):
미니배치의 평균과 분산으로 정규화
배치마다 다른 μ_B, σ²_B 사용

추론 시 (Evaluation Mode):
훈련 중 축적한 이동 평균 사용
μ_running = 0.9×μ_running + 0.1×μ_B (매 배치 업데이트)
σ²_running = 0.9×σ²_running + 0.1×σ²_B

추론 시: μ_running, σ²_running으로 정규화
→ 배치 크기에 무관하게 일관된 결과
→ 추론 시 배치 크기 1도 가능

PyTorch 주의사항:
model.train() # 훈련 모드
model.eval() # 추론 모드 (필수!)

model.eval() 안 하면:
추론 시에도 배치 통계로 정규화
→ 배치 크기에 따라 결과가 달라지는 버그

model.eval()을 빠뜨리면 추론 결과가 불안정해지는 버그가 생깁니다. 배치 정규화 내부 동작을 알면 이런 실수를 미리 방지할 수 있습니다.


드롭아웃 — 랜덤 하게 뉴런을 끄는 방식

드롭아웃(Dropout)은 학습 중 무작위로 뉴런의 출력을 0으로 만드는 기법입니다. p=0.5면 매 스텝 50% 뉴런이 랜덤하게 비활성화됩니다. 처음 보면 왜 일부러 정보를 지우는지 의아합니다. 그런데 이게 과적합을 강력하게 방지합니다.

드롭아웃 수식:

훈련 시:
마스크 r ~ Bernoulli(1-p)
출력 y = (r × x) / (1-p)

r: 0 또는 1인 랜덤 마스크
p: 드롭아웃 비율 (0으로 만들 확률)
1/(1-p): 스케일링 보정

예시 (p=0.5, 입력 [3, 5, 2, 8, 4]):
마스크 r = [1, 0, 1, 0, 1] (랜덤)
마스크 적용: [3, 0, 2, 0, 4]
스케일링: [3, 0, 2, 0, 4] / 0.5 = [6, 0, 4, 0, 8]

스케일링 이유:
드롭아웃 없을 때 기댓값: 3+5+2+8+4 = 22
드롭아웃 후 기댓값: 6+0+4+0+8 = 18 (불일치)
스케일링 후 기댓값: (6+4+8)/0.5 기댓값 ≈ 22 (일치)
→ 훈련과 추론 시 출력 크기를 맞춤

추론 시:
드롭아웃 적용 안 함 (모든 뉴런 활성화)
→ model.eval() 시 자동으로 비활성화됨

드롭아웃 적용 시 훈련 중 일부 뉴런이 비활성화되고 추론 시 모든 뉴런이 활성화되는 신경망 비교 인포그래픽
드롭아웃은 훈련 중 랜덤하게 뉴런을 끄고 추론 시에는 모든 뉴런을 활성화한다


드롭아웃의 수학적 원리 — 앙상블 효과

드롭아웃이 과적합을 방지하는 수학적 이유는 앙상블 효과에 있습니다. 매 스텝 다른 뉴런이 꺼지면 사실상 매번 다른 구조의 신경망을 학습하는 것과 같습니다.

앙상블 관점:

뉴런 4개, p=0.5인 경우:
가능한 드롭아웃 마스크 수 = 2⁴ = 16가지
→ 16가지 다른 신경망 구조

뉴런 1000개, p=0.5인 경우:
가능한 구조 수 = 2^1000 (천문학적)
→ 매 스텝 다른 구조의 신경망 학습
→ 추론 시 모든 구조의 앙상블 효과

공동 적응 방지 효과:
뉴런 A가 항상 뉴런 B에 의존하면
→ B가 없어도 A 혼자 작동해야 함
→ 각 뉴런이 독립적으로 유용한 특성 학습

결정 트리와 랜덤 포레스트의 관계와 같음:
단일 트리 = 드롭아웃 없는 신경망
랜덤 포레스트 = 드롭아웃 적용 신경망

랜덤 포레스트 글에서 다룬 앙상블의 힘이 드롭아웃에도 적용됩니다. 독립적인 약한 모델 여러 개의 평균이 강한 모델 하나보다 낫다는 원리입니다. 드롭아웃은 하나의 신경망 안에서 앙상블 효과를 만들어냅니다.


배치 정규화 vs 드롭아웃 실무 사용법

두 기법을 함께 쓸 때 순서와 위치가 중요합니다.

일반적인 레이어 순서:

선형 변환(Linear) → 배치 정규화(BN) → 활성화(ReLU) → 드롭아웃

PyTorch 예시:
nn.Sequential(
    nn.Linear(256, 128),
    nn.BatchNorm1d(128),
    nn.ReLU(),
    nn.Dropout(p=0.3),
)

배치 정규화 위치 논란:
원논문: Linear → BN → 활성화
실무 일부: Linear → 활성화 → BN
→ 데이터와 모델에 따라 다름, 둘 다 시도
기법 목적 훈련 시 추론 시
배치 정규화 학습 안정화 배치 통계로 정규화 이동 평균 통계 사용
드롭아웃 과적합 방지 랜덤 뉴런 비활성화 모든 뉴런 활성화
함께 사용 둘 다 BN → 활성화 → Dropout model.eval() 필수

딥러닝에서 선형 변환 배치 정규화 활성화 함수 드롭아웃 순서로 레이어를 구성하는 흐름도
딥러닝 레이어는 일반적으로 선형 변환 후 배치 정규화 활성화 함수 드롭아웃 순서로 구성한다

배치 정규화와 드롭아웃을 함께 쓸 때 주의할 점이 있습니다. 일부 연구에서 두 기법을 같이 쓰면 오히려 성능이 떨어지는 경우가 보고됐습니다. 드롭아웃이 배치 통계에 노이즈를 추가해서 배치 정규화의 안정화 효과를 방해하기 때문입니다. 트랜스포머 같은 최신 모델에서는 배치 정규화 대신 레이어 정규화(Layer Normalization)를 쓰고 드롭아웃과 함께 사용합니다.

이 연재에서 다룬 정규분포, 분산, 표준화, 앙상블 개념이 배치 정규화와 드롭아웃 안에 모두 들어있습니다. nn.BatchNorm1d()와 nn.Dropout() 두 줄이 학습 안정화와 과적합 방지를 동시에 해결하는 이유가 이 수학 위에 있습니다.


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 블로그 이름