배치 정규화(Batch Normalization)

by 송동훈 Hoon Song

딥러닝 모델을 훈련할 때 마주치는 중요한 문제 중 하나는 '내부 공변량 변화(Internal Covariate Shift)'입니다. 이는 네트워크의 깊이가 깊어질수록 더 심각해지는 문제로, 학습 속도를 느리게 만들고 모델의 성능을 저하시킵니다. 배치 정규화(Batch Normalization)는 이 문제를 효과적으로 해결하는 기법으로, 오늘은 이 배치 정규화의 원리와 적용 방법을 자세히 살펴보겠습니다.


내부 공변량 변화(Internal Covariate Shift)란?


신경망은 여러 층으로 구성되어 있으며, 각 층의 출력은 다음 층의 입력이 됩니다. 학습 과정에서 네트워크의 파라미터(가중치)가 업데이트되면, 각 층에 들어오는 입력의 분포도 변화합니다. 이렇게 네트워크 내부의 입력 분포가 계속 변화하는 현상을 '내부 공변량 변화'라고 합니다.

Screenshot 2025-04-14 at 8.05.04 PM.png

이 문제가 왜 심각한지 살펴보겠습니다:


1. 학습 속도 저하: 각 층의 파라미터들은 특정 입력 분포를 기반으로 학습됩니다. 이 분포가 계속 변하면, 파라미터들은 새로운 분포에 적응해야 하므로 학습 속도가 느려집니다.

2. 기울기 소실 문제: 특히 활성화 함수가 시그모이드나 하이퍼볼릭 탄젠트와 같은 '포화(saturating)' 함수인 경우, 입력 분포가 한쪽으로 치우치면 기울기가 거의 0에 가까워지는 '기울기 소실(Vanishing Gradient)' 문제가 발생합니다.


전통적으로 이 문제를 해결하기 위해 작은 학습률과 신중한 초기화를 사용했지만, 이는 학습 속도를 더욱 느리게 만들었습니다.


배치 정규화의 기본 원리


배치 정규화는 네트워크의 각 층에서 미니배치(mini-batch)의 입력을 정규화하여 내부 공변량 변화 문제를 해결합니다. 미니배치 단위로 평균과 분산을 계산하고, 이를 이용해 입력을 정규화한 후, 스케일(γ)과 시프트(β) 파라미터를 통해 표현력을 유지합니다.

Screenshot 2025-04-14 at 8.07.28 PM.png

핵심 과정은 다음과 같습니다:


1. 미니배치 통계 계산: 각 층의 각 뉴런에 대해, 미니배치 내의 입력 값들의 평균(μ)과 분산(σ²)을 계산합니다.

2. 정규화: 입력 값에서 평균을 빼고 표준편차로 나누어 정규화합니다.

x_hat = (x - μ) / √(σ² + ε)

여기서 ε은 수치 안정성을 위한 작은 상수입니다.

3. 스케일과 시프트: 정규화된 값에 학습 가능한 파라미터 γ(감마)와 β(베타)를 적용합니다.

y = γ·x_hat + β

이 과정을 통해 각 층의 입력 분포가 안정화되고, 네트워크는 더 높은 학습률로 더 빠르게 학습할 수 있게 됩니다.


배치 정규화의 장점


배치 정규화는 다음과 같은 여러 장점을 제공합니다:


1. 더 높은 학습률 사용 가능: 내부 공변량 변화를 줄임으로써 더 높은 학습률을 사용할 수 있어 학습 속도가 빨라집니다.

2. 초기화에 덜 민감: 가중치 초기화 방법에 대한 의존성이 줄어들어 다양한 초기화 전략을 사용할 수 있습니다.

3. 포화 활성화 함수 사용 가능: 정규화를 통해 입력 분포가 안정화되므로, 시그모이드와 같은 포화 활성화 함수도 더 효과적으로 사용할 수 있습니다.

4. 정규화 효과: 배치 정규화는 드롭아웃과 유사한 정규화 효과를 제공하여 오버피팅을 줄입니다.


배치 정규화의 구현 세부사항


배치 정규화는 구현 시 주의해야 할 몇 가지 세부사항이 있습니다:

Screenshot 2025-04-14 at 8.08.04 PM.png


훈련 시 vs. 테스트 시


1. 훈련 시(Training):

각 미니배치에 대해 평균과 분산을 계산합니다.

계산된 통계를 이용해 미니배치 데이터를 정규화합니다.

학습 가능한 파라미터 γ와 β를 업데이트합니다.

2. 테스트 시(Inference):

단일 데이터 포인트에 대해 작업하기 때문에 미니배치가 없습니다.

훈련 중에 계산된 전체 데이터의 평균과 분산(러닝 평균)을 사용합니다.

학습된 γ와 β를 그대로 사용합니다.


이동 평균(Moving Average)의 활용

Screenshot 2025-04-14 at 8.09.14 PM.png

테스트 시 사용할 전체 데이터의 통계를 효율적으로 계산하기 위해 이동 평균(Moving Average) 기법을 사용합니다:

μ_running = α·μ_running + (1-α)·μ_batch
σ²_running = α·σ²_running + (1-α)·σ²_batch

여기서 α는 모멘텀 계수로, 일반적으로 0.9나 0.99 같은 값을 사용합니다. 이를 통해 과거의 모든 미니배치 통계를 기억할 필요 없이, 전체 데이터의 통계를 근사할 수 있습니다.


배치 정규화의 위치


배치 정규화는 일반적으로 다음과 같은 위치에 삽입됩니다:

1. 완전 연결 층(Fully Connected Layer)에서:

z = Wx + b
z_norm = BatchNorm(z)
a = activation(z_norm)

2. 합성곱 층(Convolutional Layer)에서:

z = Conv2D(x)
z_norm = BatchNorm(z)
a = activation(z_norm)

일반적으로 활성화 함수 이전에 배치 정규화를 적용하지만, 아키텍처에 따라 다를 수 있습니다.


배치 정규화에 필요한 파라미터


배치 정규화를 적용할 각 뉴런마다 다음과 같은 파라미터가 필요합니다:


1. 학습 가능한 파라미터:

γ(감마): 스케일링 파라미터

β(베타): 시프트 파라미터

2. 학습 불가능한 파라미터(런타임에 업데이트):

μ_running: 전체 데이터의 평균 추정치

σ²_running: 전체 데이터의 분산 추정치


따라서 배치 정규화가 적용된 n개의 뉴런이 있다면, 총 2n개의 학습 가능한 파라미터와 2n개의 학습 불가능한 파라미터가 추가됩니다.


수식으로 표현한 배치 정규화


배치 정규화를 수식으로 정리하면 다음과 같습니다:

훈련 시:

1. 미니배치 평균 계산:

μ_B = (1/m) Σ x_i

2. 미니배치 분산 계산:

σ²_B = (1/m) Σ (x_i - μ_B)²

3. 정규화:

x̂_i = (x_i - μ_B) / √(σ²_B + ε)

4. 스케일 및 시프트:

y_i = γ·x̂_i + β

5. 이동 평균 업데이트:

μ_running = α·μ_running + (1-α)·μ_B σ²_running = α·σ²_running + (1-α)·σ²_B


테스트 시:

y = γ·((x - μ_running) / √(σ²_running + ε)) + β


실전 적용 팁


배치 정규화를 효과적으로 사용하기 위한 몇 가지 팁입니다:


1. 적절한 미니배치 크기: 배치 정규화는 미니배치 통계에 의존하므로, 너무 작은 미니배치(예: 2-3개)는 불안정한 통계로 이어질 수 있습니다. 일반적으로 32개 이상의 미니배치 크기를 권장합니다.

2. 다른 정규화 기법과의 조합: 배치 정규화는 드롭아웃과 유사한 정규화 효과를 가지므로, 배치 정규화를 사용할 때는 드롭아웃의 필요성이 줄어들 수 있습니다. 그러나 특정 경우에는 두 기법을 함께 사용하는 것이 효과적일 수 있습니다.

3. 학습률 조정: 배치 정규화를 사용하면 더 높은 학습률을 사용할 수 있으므로, 기존 모델보다 학습률을 높여 실험해 보세요.

4. 가중치 감쇠 조정: 배치 정규화는 L2 정규화와 상호작용할 수 있으므로, 가중치 감쇠(weight decay) 파라미터를 조정해야 할 수 있습니다.


결론

배치 정규화는 딥러닝 모델의 학습을 안정화하고 가속화하는 강력한 기법입니다. 내부 공변량 변화 문제를 해결함으로써 더 깊은 네트워크를 더 빠르게 학습시킬 수 있게 해줍니다.


현대 딥러닝 아키텍처에서는 배치 정규화가 거의 표준으로 자리 잡았으며, 특히 컴퓨터 비전 분야에서 ResNet, Inception 등의 대부분의 성공적인 모델에 포함되어 있습니다. 하지만 모든 상황에 적합한 것은 아니며, 특히 순환 신경망(RNN)이나 강화 학습과 같은 일부 영역에서는 대안적인 정규화 기법이 더 적합할 수 있습니다.


딥러닝 모델을 설계할 때는 배치 정규화의 장단점을 고려하여 적절히 활용하는 것이 중요합니다.

keyword
일요일 연재
이전 16화딥러닝에서의 정규화 기법: 가중치 규제와 특성 스케일링