딥러닝 모델이 깊어질수록 데이터를 단순히 쌓는 것보다, 각 층을 통과하는 데이터의 '분포'를 일정하게 유지하는 것이 훨씬 중요해집니다. 이를 가능하게 하는 정규화에 대해 알아보겠습니다.
1. 정규화(Normalization)의 정의와 목적
정규화란?
학습 과정에서 각 층의 입력 또는 출력값을 평균 0, 분산 1에 가깝게 표준화하여 데이터의 분포를 안정시키는 기법입니다.
수식:x^=σbatch2+ϵx−μbatch
μ: 데이터의 평균
σ2: 데이터의 분산
ϵ: 분모가 0이 되는 것을 방지하는 아주 작은 상수
왜 하는가? (학습의 난제 해결)
내부 공변량 변화(Internal Covariate Shift) 억제: 층이 깊어질수록 가중치 업데이트에 따라 입력 분포가 계속 변하는 현상을 막아 학습 속도를 높입니다.
'학습의 효율성' 문제입니다. 층마다 데이터 분포가 널뛰니까 다음 층이 매번 "어? 갑자기 데이터가 왜 이래?" 하면서 갈팡질팡하는 상태입니다. 공부로 치면 '교과서가 매일 바뀌어서 진도를 못 나가는 상황'입니다.
과적합(Overfitting) 방지: 정규화 과정에서 더해지는 미세한 노이즈가 일종의 규제(Regularization) 역할을 하여, 모델이 특정 훈련 데이터에만 과하게 최적화되는 것을 방지합니다.
'일반화'의 문제입니다. 훈련 데이터에 너무 집착해서 시험 문제(새로운 데이터)를 못 푸는 상태입니다.
기울기 소실 방지: 데이터가 활성화 함수(Sigmoid, ReLU 등)의 포화 영역에 빠지지 않게 하여 학습이 멈추는 것을 막습니다.
1, 3번과 2번(오버피팅)의 관계: 연결고리는 무엇인가?1번과 3번은 "학습이 잘 안 되는 문제(Optimization)"이고, 2번은 "학습이 너무 과하게 된 문제(Generalization)"입니다.
왜 공변량 변화가 심하면 오버피팅이 생기나요?
부정확한 학습 방향: 분포가 계속 변하면 모델의 가중치는 최적의 지점을 향해 곧장 가지 못하고 지그재그로 움직입니다. 이 과정에서 모델은 데이터의 본질적인 특징(Signal)이 아니라, 매번 바뀌는 분포의 특성(Noise)을 학습하게 됩니다. 이것이 곧 오버피팅의 시작입니다.
Normalization 의 규제 효과(Regularization): 배치 정규화(BN)를 할 때 사용하는 평균(μ)과 분산(σ2)은 전체 데이터가 아닌 '현재 배치'의 통계량입니다.
x^i=σbatchxi−μbatch
매 배치마다 들어오는 샘플이 다르기 때문에 μbatch 와 σbatch 는 조금씩 요동칩니다. 이 미세한 수치의 변화가 모델 입장에서는 일종의 노이즈가 되어 모델이 특정 샘플을 달달 외우지 못하게 방해하는 '규제' 역할을 합니다. 결과적으로 오버피팅을 막아줍니다.
step 1) 가중치 업데이트가 일어남. step 2) 내부 공변량 변화(1번) 발생 → 입력 분포가 활성화 함수의 끝단으로 쏠림. step 3) 그 결과 기울기 소실(3번) 발생 → 학습이 멈추거나 매우 느려짐. step 4) 이 불안정한 과정에서 모델이 데이터의 노이즈를 학습하며 오버피팅(2번)에 취약해짐. step 5) 정규화 도입: 분포를 0 근처로 고정(1번 해결)하여 기울기를 살리고(3번 해결), 배치 통계량의 노이즈로 일반화 성능을 높임(2번 해결).
2. "배치 정규화의 마법: 왜 '전체'가 아닌 '배치' 단위인가?"
정확히는 지금 내 눈앞에 있는 '현재 배치' 안에 들어온 데이터들만 가지고 그 안에서 평균과 분산을 구해서 정규화하는 것입니다.모든 데이터를 다 뒤져서 평균을 내는 게 아니기 때분에 '노이즈'로 '규제 효과'를 만듭니다.
1. 에폭이 바뀔 때마다 '배치 친구들'이 달라집니다.
보통 모델을 학습시킬 때, 매 에폭이 시작될 때마다 데이터를 셔플(Shuffle, 무작위 섞기)합니다.
에폭 1 (Iteration 1): 고양이 A가 [강아지 B, 나무 C]와 같은 배치에 묶였습니다.
이때 이 배치의 평균(μ)은 0.51이 나왔고, 고양이 A의 정규화 값은 0.19가 됩니다.
에폭 2 (Iteration 50): 데이터를 새로 섞었더니, 고양이 A가 이번에는 [자동차 D, 하늘 E]와 같은 배치에 묶였습니다.
이번 배치의 평균(μ)은 0.48이 나왔고, 고양이 A의 정규화 값은 0.22가 됩니다.
모델은 수천 번의 에폭을 돌며 같은 고양이 사진 A를 반복해서 봅니다. 그런데 볼 때마다 같이 들어오는 친구들(배치 구성원)이 달라지니, 정규화된 최종 숫자값(x^)이 미세하게 계속 변하는 것입니다.
2. "내 배치의 데이터"만 봅니다
예를 들어 전체 데이터가 10,000개 있고, 배치 크기(N)를 32로 설정했다고 가정해 봅시다.
샘플링: 10,000개 중 무작위로 32개를 뽑습니다. (이게 현재 배치입니다.)
통계량 계산: 이 32개만의 평균(μbatch)과 분산(σbatch)을 구합니다.
정규화: 이 32개의 데이터(x1,x2,…,x32) 각각에서 위에서 구한 32개짜리 평균을 빼고 분산으로 나눕니다.
배치 1: [A, B, C...]가 뽑힘 → 평균이 0.51
배치 2: [D, E, F...]가 뽑힘 → 평균이 0.48
배치 3: [G, H, I...]가 뽑힘 → 평균이 0.53
정규화 수식 (x^=σbatchx−μbatch) 에 대입.
똑같은 데이터x가 들어와도 각 에폭마다 어떤 친구들과 같은 배치에 묶이느냐에 따라 x^ 값이 조금씩 변하게 됩니다. 각 에폭마다 입력값이 매번 조금씩 미세하게 떨리면서(Noise) 들어오는 셈입니다.
외우기 방해: 데이터가 고정되어 있으면 모델이 "이 사진은 픽셀값이 정확히 얼마니까 고양이네!"라고 암기(Overfitting)하기 쉽습니다.
본질 집중: 하지만 데이터가 조금씩 흔들리면, 모델은 지엽적인 숫자를 외우는 대신 "흔들려도 변하지 않는 고양이의 본질적인 특징"을 찾으려 노력하게 됩니다.
3. 왜 모든 데이터(μall)를 안 쓰나요?
계산량 문제: 매번 업데이트할 때마다 10,000개를 다 뒤져서 평균을 내는 건 너무 느리고 비효율적입니다.
학습의 동적 특성: 가중치(W)가 계속 변하므로, 예전 가중치로 뽑아놓은 전체 평균은 지금 시점에서는 의미가 없을 수 있습니다.
규제 효과(The "Magic" of BN): 전체 평균을 쓰면 값이 딱 고정되겠지만, 32개씩만 묶어서 평균을 내면 어떤 친구들과 묶이느냐에 따라 평균값이 조금씩 달라집니다(요동침). 이 '우연한 오차'가 모델이 데이터를 통째로 외우는 걸 방해하는 천연 노이즈 역할을 하는 거죠.
4. 그럼 모든 데이터의 평균은 언제 쓰나요? (테스트 시점)
학습이 다 끝나고 실제 서비스를 할 때는(Inference), 데이터 한 장씩 들어오는데 배치 평균을 낼 순 없겠죠?
학습 중: 매 배치마다 계산한 평균들을 이동 평균(Moving Average) 방식으로 기록해둡니다. (마치 "우리 모델이 그동안 봐온 데이터들의 평균은 대략 이 정도였어"라고 메모해두는 것과 같습니다.)
테스트 시: 학습 때 메모해둔 전체 데이터의 평균(μmoving_avg)을 고정해서 사용합니다. 이때는 노이즈 없이 안정적으로 결과를 내야 하기 때문입니다.
"학습할 때는 지금 배치에 모인 친구들끼리만 평균 내서 정규화합니다. 그래서 배치마다 평균이 조금씩 다르고, 그 '다름'이 오버피팅을 막아주는 고마운 노이즈가 됩니다."
3. 텐서(Tensor) 형상과 4가지 정규화 기법 비교
정규화 기법의 차이는 "어떤 차원(N,C,H,W)을 묶어서 평균(μ)과 분산(σ2)$$을 계산하느냐"에 달려 있습니다.
텐서 형상의 의미
N (Batch): 데이터의 개수 (한 번에 학습하는 묶음)
C (Channel): 특징의 종류 (이미지의 RGB나 필터에 의해 생성된 특징들)
H,W (Spatial): 데이터의 공간적 크기 (이미지의 가로, 세로)
① Batch Normalization (BN)
계산 차원: 동일한 채널(C)에 대해 배치(N) 전체와 공간(H,W)의 통계량을 구합니다.
수식 특징:μc=N⋅H⋅W1∑n,h,wxn,c,h,w
의미: "우리 팀(Batch) 전체에서 이 특징(Channel)의 평균은 얼마인가?"
② Layer Normalization (LN)
계산 차원: 각 샘플(N) 내부에서 모든 채널(C)과 공간(H,W)의 통계량을 구합니다.
수식 특징:μn=C⋅H⋅W1∑c,h,wxn,c,h,w
의미: "이 데이터 한 건(Sample)이 가진 전체 에너지(Features)의 평균은 얼마인가?"
③ Instance Normalization (IN)
계산 차원: 각 샘플(N)의 각 채널(C)별로 공간(H,W)의 통계량만 구합니다.
수식 특징:μn,c=H⋅W1∑h,wxn,c,h,w
의미: "이 이미지 한 장에서 R채널(혹은 특정 특징)의 평균적인 밝기는 얼마인가?"
④ Group Normalization (GN)
계산 차원: 채널(C)을 G개의 그룹으로 나누고, 해당 그룹 내의 채널들과 공간(H,W)의 통계량을 구합니다.
* 새로운 형상:(N,G,GC,H,W) (여기서 GC는 한 그룹당 포함된 채널의 개수입니다.)
해당 그룹 내의 채널들과 공간(H,W)의 통계량
μi,g=(C/G)HW1∑c∈Sg∑h,wxi,c,h,w
σi,g2=(C/G)HW1∑c∈Sg∑h,w(xi,c,h,w−μi,g)2+ϵ
i: 샘플 인덱스 (N 중 하나)
g: 그룹 인덱스 (G 중 하나)
Sg: g번째 그룹에 속하는 채널들의 집합
수식 특징: LN(전체 채널)과 IN(개별 채널)의 중간 형태입니다.
G=1 일 때: 모든 채널을 하나의 그룹으로 묶으므로 Layer Normalization(LN)과 수식이 완전히 같아집니다.
G=C 일 때: 각 채널이 곧 하나의 그룹이 되므로 Instance Normalization(IN)과 수식이 완전히 같아집니다.
의미: "서로 연관된 특징들(Group)끼리의 평균은 얼마인가?"
기법
평균 μ 계산 시 합산하는 인덱스 (∑)
특징
Batch (BN)
(N,H,W)
채널별로 배치 전체를 훑음
Layer (LN)
(C,H,W)
샘플별로 모든 채널을 훑음
Instance (IN)
(H,W)
샘플의 각 채널별로 공간만 훑음
Group (GN)
(Group_Channels,H,W)
샘플 내 특정 채널 묶음만 훑음
4. 언제 어떤 정규화를 써야 할까?
실무에서 정규화를 선택하는 기준은 데이터의 도메인과 하드웨어 자원(배치 크기)에 따라 달라집니다.
배치 크기가 충분히 클 때 (N≥16) → Batch Norm
일반적인 이미지 분류, 객체 검출 모델에서 가장 강력한 성능을 냅니다.
텍스트나 시계열 데이터(NLP)일 때 → Layer Norm
문장의 길이가 매번 달라 배치 단위로 평균을 내기 힘든 RNN이나 Transformer 모델에서 표준으로 쓰입니다.
이미지의 스타일(화풍, 조명)이 중요할 때 → Instance Norm
GAN이나 Style Transfer 모델에서 개별 이미지의 스타일 정보를 정규화하여 콘텐츠의 특징만 남기고 싶을 때 유용합니다.
이미지 모델인데 메모리가 부족해 배치 크기가 작을 때 (N≤4) → Group Norm
배치 크기에 영향을 받지 않으면서도 Batch Norm과 유사한 성능을 내야 하는 의료 영상 처리나 고해상도 이미지 처리에서 사용됩니다.
정규화 기법별 장단점 요약 (Summary Table)
기법
장점
단점
주요 사용처
Batch (BN)
학습 속도가 매우 빠르고 성능이 검증됨.
배치 크기(N)에 민감함. 작은 배치에서 불안정함.
CNN, 일반적인 MLP
Layer (LN)
배치 크기에 무관함. 시계열 데이터에 강점.
채널 간의 상관관계가 너무 클 때 비효율적일 수 있음.
RNN, Transformer (NLP)
Instance (IN)
스타일 정보(조명, 대비 등)를 효과적으로 제거함.
콘텐츠의 구체적인 특징이 뭉개질 수 있음.
Style Transfer, GAN
Group (GN)
작은 배치에서도 BN에 근접한 성능을 냄.
그룹 수(G)라는 추가 하이퍼파라미터 결정 필요.
고해상도 이미지 처리 (의료/위성)
5. 정규화와 가중치 초기화의 시너지
1) 왜 정규화와 가중치 초기화를 같이 고민해야 할까?
가중치 초기화(Weight Initialization)의 목적은 "층이 깊어져도 활성화 값의 분포를 일정하게 유지하는 것"입니다. 정규화 역시 같은 목적을 가집니다.
초기화: 출발선에서 데이터의 분포를 맞춰주는 작업 (He, Xavier)
정규화: 경기가 진행되는 동안(학습 중) 계속해서 분포를 교정하는 작업
이 둘이 만나면, 모델은 초기 단계부터 안정적인 그래디언트(Gradient)를 가지게 되어 학습 속도가 폭발적으로 향상됩니다.
2) 왜 Batch Norm(BN)을 쓰면 초기화의 영향력이 줄어들까?
이것은 매우 중요한 포인트입니다. BN의 수식을 다시 떠올려보면, 입력값에서 평균을 빼고 분산으로 나눕니다.
x^=σ2+ϵW⋅x−μ
만약 초기 가중치(W)가 조금 크거나 작게 설정되어 데이터의 스케일이 엉망이 되더라도, BN 층을 통과하는 순간 다시 평균 0, 분산 1로 강제 재조정됩니다.
즉, 가중치가 데이터에 미치는 '절대적인 크기'의 영향력이 정규화 과정에서 상쇄됩니다.
결과적으로 BN을 사용하면 가중치 초기화에 덜 민감해지며, 심지어 학습률(α)을 평소보다 더 크게 설정해도 모델이 안정적으로 수렴할 수 있게 됩니다.
실전 딥러닝에서의 BN: 어디에 위치하며 어떻게 작동하는가?
정규화는 단순히 수식으로만 존재하는 것이 아니라, 딥러닝 모델 안에서 하나의 독립적인 층(Layer)으로 당당히 자리 잡고 있습니다.
1. BN 레이어의 위치
"샌드위치 구조"일반적으로 BN 층은 선형 연산(Linear/Conv)과 활성화 함수(Activation) 사이에 위치합니다. 데이터가 가중치와 곱해져 분포가 뒤틀린 직후, 활성화 함수에 들어가기 전이 가장 '수선'하기 좋은 골든타임이기 때문입니다.