Batch Normalization으로 학습 안정화하기

src/content/documents/deep-learning/batch-normalization.json

층마다 입력 분포가 계속 흔들린다

신경망을 학습시키다 보면, 앞쪽 층의 가중치가 업데이트될 때마다 그 다음 층으로 들어오는 입력의 분포(평균·범위)도 함께 흔들린다. 각 층은 매번 달라지는 입력 분포에 다시 적응해야 하므로 학습이 느려지고 불안정해질 수 있다. Batch Normalization(BN)은 각 층의 입력을 미니배치 단위로 정규화해 이 흔들림을 줄이는 기법이다.

Batch Normalization이 하는 일

한 미니배치 안에서 각 층의 입력값을 평균 0, 분산 1이 되도록 정규화한 뒤, 학습 가능한 스케일(γ)과 이동(β) 파라미터로 다시 조정한다. 핵심은 손실함수의 “지형(Optimization Landscape)”을 매끄럽게 만들어 기울기가 지나치게 요동치거나 평평해지는 것을 줄이는 데 있다.

기대 효과

내용

Gradient 흐름 개선

입력 분포가 안정되면서 Gradient Vanishing이 완화된다

학습 속도 향상

손실 지형이 매끄러워져 더 큰 학습률(Learning Rate)을 써도 안정적으로 수렴한다

학습 안정성 확보

각 층에 들어오는 입력 분포가 일정하게 유지된다

정규화(Regularization) 효과

미니배치마다 통계가 조금씩 달라지는 것 자체가 노이즈로 작용해 과적합을 어느 정도 줄여준다

아래는 Batch Normalization의 효과를 1차원 손실 지형으로 단순화한 비교다. 재생하면 같은 학습률(η = 0.5)로 5번 업데이트했을 때, 정규화 전의 완만한 지형에서는 거의 움직이지 못한 뒤 정규화된 지형에서는 최솟값을 향해 훨씬 크게 이동한다.

정규화 전후: 같은 5번, 달라지는 이동 거리
-4-3-2-10123012345w (가중치)손실 L(w)
5회후에도출발점근처5회 후에도 출발점 근처같은5,더큰이동같은 5회, 더 큰 이동최솟값w=2최솟값 w = 2정규화전5정규화 전 · 5회정규화후5정규화 후 · 5회

두 번째 비교는 학습률을 η = 1.2로 고정한다. 먼저 정규화된 완만한 지형에서 최솟값으로 수렴하고, 이어서 같은 학습률을 가파른 지형에 적용했을 때 최솟값을 번갈아 뛰어넘으며 발산하는 모습을 보여준다.

같은 학습률: 안정적인 수렴과 진동 발산
-3-2-1012345051015w (가중치)손실 L(w)
최솟값에수렴최솟값에 수렴보폭이커지며발산보폭이 커지며 발산최솟값w=1최솟값 w = 1정규화후정규화 후정규화전가파른지형정규화 전 가파른 지형최솟값w=1최솟값 w = 1

코드로 정규화 전후 비교하기

평균 50, 표준편차 20 근처에 흩어져 있는 8개의 값을 정규화하면 평균 0, 표준편차 1로 바뀐다. Batch Normalization은 이 계산을 신경망의 각 층 입력에 대해, 미니배치 단위로 매번 수행한다.

import numpy as np

np.random.seed(42)
x = np.random.normal(loc=50, scale=20, size=8)  # 한 층에 들어오는 입력 값 8개

mean, std = x.mean(), x.std()
x_norm = (x - mean) / (std + 1e-5)  # 1e-5는 분모가 0이 되는 것을 막는 작은 값

print("정규화 전 평균/표준편차:", round(mean, 2), round(std, 2))
print("정규화 후 평균/표준편차:", round(x_norm.mean(), 4), round(x_norm.std(), 4))
정규화 전 평균/표준편차: 61.02 13.73
정규화 후 평균/표준편차: 0.0 1.0

실제 Batch Normalization 레이어는 여기에 학습 가능한 γ(스케일)와 β(이동) 파라미터를 곱하고 더해, “항상 평균 0, 분산 1로 고정”이 아니라 모델이 필요하면 다른 분포로도 조정할 수 있는 여지를 남긴다.

정리

Batch Normalization은 각 층의 입력을 미니배치 단위로 정규화해 학습 중 입력 분포가 계속 바뀌는 문제를 줄인다. 그 결과 기울기가 안정되고, 더 큰 학습률을 쓸 수 있으며, 부수적으로 과적합을 줄이는 효과도 얻는다. ReLU와 함께 깊은 신경망을 안정적으로 학습시키기 위한 기본 구성 요소로 널리 쓰인다.

참고 자료

댓글 0

댓글을 불러오는 중…