배치 정규화

편집 역사 토론
수치해석 소프트웨어 통계 마지막 수정: 2026-08-17 04:21:47

1. 개요[편집]

배치 정규화
Batch Normalization (BN)
제안Ioffe & Szegedy (2015), ICML
원 논문의 설명내부 공변량 변화(internal covariate shift) 감소
현재의 설명손실 지형의 평활화 — Santurkar 외 (2018)
학습 파라미터채널당 스케일 $\gamma$, 시프트 $\beta$
통계 축미니배치 × 공간, 채널마다
추론 시학습 중 누적한 이동평균 통계로 대체
최대 약점배치 크기·배치 구성에 결과가 의존

배치 정규화(Batch Normalization, BN)는 신경망 층의 출력을 미니배치 안에서 계산한 평균·분산으로 표준화한 뒤, 학습 가능한 스케일 γ\gamma 와 시프트 β\beta 를 다시 얹는 계층이다. 아이오페와 세게디가 2015년에 제안했고, 그 직후 몇 년간 깊은 합성곱 신경망을 학습시키는 사실상의 국룰이 됐다. 효과는 논쟁의 여지가 없다 — 학습률을 한 자릿수 크게 쓸 수 있고, 초기화에 둔감해지며, 수렴이 몇 배 빨라진다.

논쟁적인 것은 왜 되는가다. 원 논문이 붙인 “내부 공변량 변화를 줄인다”는 설명은 이름이 워낙 잘 지어져서 교과서에까지 실렸지만, 2018년 이후 연구에서 그 설명이 원인이 아니라는 증거가 쌓였다. 이 문서는 계산 내용, 학습/추론의 비대칭, 설명이 뒤집힌 경위, 배치 의존이라는 대가, 그리고 추론 시 접기(folding)까지를 다룬다. 신경망 일반과 기울기 계산은 심층 학습·역전파 참고.

2. 무엇을 계산하는가[편집]

채널(또는 은닉 유닛) 하나에 대해, 크기 mm 인 미니배치 B={x1,,xm}\mathcal{B} = \{x_1,\dots,x_m\} 를 받아

μB=1mi=1mxi,σB2=1mi=1m(xiμB)2\mu_\mathcal{B} = \frac1m\sum_{i=1}^m x_i, \qquad \sigma_\mathcal{B}^2 = \frac1m\sum_{i=1}^m (x_i-\mu_\mathcal{B})^2 x^i=xiμBσB2+ϵ,yi=γx^i+β\hat x_i = \frac{x_i - \mu_\mathcal{B}}{\sqrt{\sigma_\mathcal{B}^2 + \epsilon}}, \qquad y_i = \gamma\,\hat x_i + \beta

를 계산한다. ϵ\epsilon10510^{-5} 근처의 수치 안정화 항이다. 합성곱층 뒤에 붙일 때는 채널마다 하나의 통계를 쓴다 — 배치·높이·너비 축을 모두 뭉개고 채널 축만 남긴다. 가중치 공유의 논리를 정규화에도 그대로 적용하는 것이며, 그래서 파라미터는 채널 수의 두 배(γ\gamma, β\beta)뿐이다.

γ,β\gamma,\beta 를 왜 다시 붙이는지가 논문의 첫 번째 포인트다. 강제로 평균 0·분산 1로 만들면 시그모이드의 선형 구간에 갇히는 등 표현력이 깎이므로, 필요하면 정규화를 되돌릴 수 있는 자유도를 준다. γ=σ2+ϵ\gamma = \sqrt{\sigma^2+\epsilon}, β=μ\beta = \mu 로 학습되면 항등변환이 복원된다.

두 번째 포인트는 더 중요하다. μB\mu_\mathcal{B}σB\sigma_\mathcal{B}역전파 경로에 포함되어야 한다. 통계를 상수로 취급하고 정규화만 하면, 갱신이 통계 변화를 고려하지 않아 바이어스가 발산하는 실패가 논문 2절에 예시로 나온다. 즉 BN은 “전처리”가 아니라 미분 가능한 계층이고, 표본 하나의 출력이 같은 배치의 다른 표본에 의존하는 — 신경망 계층으로서는 꽤 이례적인 — 구조다.

3. 학습과 추론의 비대칭[편집]

이 이례적 구조가 곧바로 문제를 만든다. 추론 시에는 표본 하나만 들어오는 경우가 많고, 무엇보다 예측이 같이 들어온 다른 표본에 의존하면 안 된다. 그래서 BN은 학습과 추론에서 다른 함수가 된다.

  • 학습 중: 미니배치 통계 μB,σB2\mu_\mathcal{B},\sigma^2_\mathcal{B} 를 쓰고, 동시에 이동평균 μrun(1α)μrun+αμB\mu_{\text{run}} \leftarrow (1-\alpha)\mu_{\text{run}} + \alpha\mu_\mathcal{B} 를 갱신한다(α\alpha 는 보통 0.1 또는 0.01).
  • 추론 중: 이동평균을 상수로 꽂는다. 원 논문은 분산에 불편 보정 mm1\frac{m}{m-1} 을 곱해 쓰는 쪽을 제시했다.

이 비대칭이 실무 버그의 온상이다. 대표적인 것들만.

  • 평가 모드 전환을 잊는다. 검증 루프에서 model.eval() 을 안 부르면 검증 데이터의 배치 통계로 정규화되어, 검증 정확도가 이유 없이 좋아지거나(정보 누출) 배치 구성에 따라 출렁인다. 초심자만 겪는 문제가 아니다.1
  • 이동평균이 덜 익었다. 학습 초반에 조기 종료하거나 학습률 스케줄 끝에서 통계가 급변하면 이동평균이 마지막 배치 통계를 못 따라간다. 학습 끝에 순전파만 몇백 배치 돌려 통계를 다시 추정하는 처방이 종종 쓰인다.
  • 분산 학습에서 통계가 안 맞춰진다. γ,β\gamma,\beta 는 파라미터라 기울기 동기화로 맞춰지지만, 이동평균은 버퍼라 자동으로 동기화되지 않는다. 체크포인트를 0번 랭크에서만 저장하는 관행이 이걸 가려 놓는다.

4. ”내부 공변량 변화”는 원인이 아니었다[편집]

원 논문의 서사는 이렇다 — 앞 층이 갱신되면 뒤 층이 받는 입력의 분포가 계속 바뀌고(내부 공변량 변화), 뒤 층은 움직이는 표적을 쫓느라 학습이 느려진다. BN이 분포를 고정해 이 문제를 없앤다. 직관적이고 그림도 잘 그려져서 널리 받아들여졌다.

산투르카·치프라스·일리아스·마드리(2018)가 이 설명을 정면으로 검증했고, 결과는 셋 다 부정적이었다.

  • BN 뒤에 일부러 분포 교란을 주입해도 학습이 빠르다. BN 계층 출력에 시간마다 변하는 평균·분산의 잡음을 더해 “공변량 변화”를 인위적으로 되살렸는데, 학습 속도는 BN 없는 쪽보다 여전히 훨씬 빨랐다. 설명이 맞다면 이득이 사라졌어야 한다.
  • BN이 통계량 변화를 딱히 줄이지도 않는다. 층 입력의 평균·분산 이동을 실제로 측정하면 BN 유무에 따른 차이가 서사만큼 극적이지 않다.
  • 대신 손실 지형이 매끄러워진다. BN을 넣으면 손실 함수의 립시츠 상수와 기울기의 립시츠 상수(즉 평활도)가 개선된다는 것을 이론적으로 보였다. 기울기가 예측 가능해지니 큰 스텝을 밟아도 손실이 튀지 않고, 그래서 큰 학습률이 안전해진다. 논문은 p\ell_p 정규화 같은 다른 변형도 — 공변량 변화를 오히려 늘리면서도 — 비슷한 이득을 낸다는 것을 덧붙였다.

여기에 스케일 불변성 관점이 겹친다. BN 바로 앞 층의 가중치를 aa 배 해도 BN 출력은 그대로이므로, 손실은 WW방향에만 의존한다. 연쇄법칙상 기울기는 1/a1/a 로 줄어들어, 가중치 노름이 커질수록 유효 학습률이 자동으로 작아진다. 아로라 외(2019)는 이 성질 덕분에 BN이 붙은 망은 학습률을 튜닝하지 않아도 수렴함을 보였다. 반대로 이 때문에 γ,β\gamma,\beta 와 BN 앞 가중치에 대한 가중치 감쇠의 의미가 통상적 정규화와 달라진다 — BN 앞 가중치의 감쇠는 “복잡도 억제”가 아니라 사실상 학습률 조절 장치로 작동한다.

현재의 합의는 대략 이 정도다. BN은 최적화를 쉽게 만든다. 그 메커니즘은 조건수 개선·지형 평활화·유효 학습률 자동 조절의 혼합이고, “분포 이동 제거”는 아니다. 다만 원 논문의 실험 결과 자체는 지금도 전부 재현된다는 점은 짚어 두자 — 틀린 것은 설명이지 현상이 아니다.2

5. 배치에 묶인다는 대가[편집]

BN의 모든 문제는 한 줄로 요약된다. 손실이 표본 하나가 아니라 배치의 함수가 된다.

  • 작은 배치에서 무너진다. 통계 추정의 분산이 1/m1/m 이라, 장치당 배치가 8 미만으로 내려가면 정확도가 눈에 띄게 떨어진다. 그룹 정규화 논문(우 & 허 2018)의 첫 그림이 정확히 이 붕괴를 보여 준다. 3D 유동장, 고해상도 검출·분할처럼 표본 하나가 메모리를 다 먹는 문제에서 BN이 기피되는 이유.
  • 분산 학습에서 결과가 장치 수에 의존한다. 데이터 병렬 학습에서 BN 통계는 보통 장치별 로컬 배치로 계산된다. 총 배치 1024를 GPU 8장에 나누면 실제 통계는 128 표본짜리이고, 16장으로 바꾸면 64 표본짜리가 되어 같은 코드·같은 총배치인데 모델이 달라진다. 재현 실패의 단골 원인이다.3 통계를 장치 간에 all-reduce 하는 SyncBN 이 대응책이지만 통신 비용이 붙는다.
  • 고스트 배치 정규화(Ghost BN). 위 성질을 버그가 아니라 손잡이로 쓰는 기법이다. 호페르·후바라·소우드리(2017)는 대형 배치 학습의 일반화 손실이 BN 통계가 너무 정확해진 탓이기도 하다고 보고, 큰 배치를 32~64짜리 “유령 배치”로 쪼개 각각의 통계로 정규화했다. 통계 잡음이 정규화(regularization) 역할을 되살려 대형 배치의 일반화 격차가 상당 부분 회복된다. 결과적으로 장치별 BN은 이미 고스트 BN을 하고 있는 것이고, SyncBN을 켜면 그 공짜 정규화를 반납하는 셈이다.
  • 표본 간 정보 누출. 배치 안의 다른 표본이 내 예측을 바꾼다. 대조학습에서 배치 통계를 통해 모델이 지름길을 학습하는 사고(MoCo 논문의 shuffling BN)가 이 계열이고, 표본 단위 결정성이 요구되는 시스템에서도 골치다.
  • 순환망과 궁합이 나쁘다. 시퀀스 길이마다 통계가 달라지고 시점별로 이동평균을 따로 들어야 해서, 순환 신경망트랜스포머는 층 정규화로 갈아탔다.
  • 미세조정 시 통계 불일치. 사전학습 모델을 작은 배치로 미세조정할 때는 BN 통계를 얼려 버리는(FrozenBN) 것이 검출·분할 쪽 관행이다.

6. 정규화 계층 지형도[편집]

정규화 계층들의 차이는 어느 축으로 평균·분산을 내는가 하나뿐이다. 입력 텐서를 (배치 N, 채널 C, 공간 H·W)로 두고 비교하면 이렇다.

기법통계를 내는 축배치 의존주 무대
배치 정규화N, H, W (채널마다)있음CNN 분류·백본
층 정규화C, H, W (표본마다)없음트랜스포머, RNN
인스턴스 정규화H, W (표본·채널마다)없음스타일 변환·생성
그룹 정규화채널 그룹 + H, W (표본마다)없음작은 배치 검출·분할
가중치 정규화활성값이 아니라 가중치 벡터없음소규모·강화학습
  • 층 정규화(Ba·Kiros·Hinton 2016)는 배치 축을 아예 안 쓰므로 학습/추론이 같은 함수다. 위에서 나열한 함정이 통째로 사라진다는 점이 트랜스포머 시대에 BN을 밀어낸 결정적 이유. 평균 빼기를 생략한 RMSNorm이 그 경량판이다.
  • 인스턴스 정규화는 표본마다 채널의 대비를 없애는데, 스타일 전이에서 “스타일 = 채널 통계”라는 해석과 맞물려 AdaIN 계열로 발전했다.
  • 그룹 정규화는 층 정규화와 인스턴스 정규화 사이를 그룹 수 GG 로 보간한다. G=1G=1 이면 층 정규화, G=CG=C 면 인스턴스 정규화. 배치 크기 2에서도 성능이 거의 안 떨어진다는 점이 세일즈 포인트다.

선택 기준은 실은 간단하다. 배치를 32 이상 안정적으로 확보할 수 있고 구조가 CNN이면 BN, 그렇지 않으면 배치 비의존 계열.

7. 추론 최적화 — BN 접기[편집]

추론 시 BN은 채널별 아핀변환일 뿐이다. 통계가 상수로 고정됐으니

y=γxμσ2+ϵ+β=γσ2+ϵsx+(βγμσ2+ϵ)ty = \gamma\,\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}} + \beta = \underbrace{\frac{\gamma}{\sqrt{\sigma^2+\epsilon}}}_{s}\,x + \underbrace{\left(\beta - \frac{\gamma\mu}{\sqrt{\sigma^2+\epsilon}}\right)}_{t}

이고, 앞에 오는 합성곱 x=Wu+bx = W * u + b 와 합치면 출력 채널 cc 마다

Wc=scWc,bc=scbc+tcW'_c = s_c\,W_c, \qquad b'_c = s_c\,b_c + t_c

가중치에 흡수된다. 이것이 BN 접기(BN folding)다. 함수는 수학적으로 동일하고, 계층 하나와 그에 딸린 메모리 대역폭 소모가 통째로 사라진다. BN은 연산량은 작지만 메모리 대역폭에 묶인 원소별 연산이라 실제 지연시간에서 차지하는 몫이 만만치 않다 — 모바일 추론에서 접기만으로 20~30% 빨라지는 사례가 흔하다.

부수 효과도 알아 두자.

  • 합성곱의 바이어스는 BN 앞에서 무의미하다. 어차피 μ\mu 를 빼면서 상쇄되므로 학습 시에 bias=False 로 두는 것이 표준이다(접을 때 bc=0b_c = 0).
  • 신경망 양자화와 함께 다뤄야 한다. 접고 나면 채널마다 가중치 스케일이 scs_c 배로 제각각이 되어, 텐서 단위 INT8 스케일 하나로는 표현이 깨진다. 채널별 양자화가 사실상 필수이고, 학습 중에 접기를 시뮬레이션하는 양자화 인지 학습(QAT)이 표준 절차가 된 이유가 이것이다.
  • 접기는 되돌릴 수 없다. 접은 모델을 다시 미세조정하려면 원본이 필요하다. 배포 파이프라인에서 접기는 언제나 마지막 단계여야 하고, 접기 전후 출력이 수치오차 범위에서 일치하는지 반드시 확인해야 한다.4

잔차 블록의 마지막 BN에서 γ\gamma 를 0으로 초기화하는 트릭(zero-init gamma)도 여기 얹어 둘 만하다. 블록이 항등사상에서 출발하게 만들어 깊은 잔차 연결 망의 초기 학습을 안정화하는데, 드롭아웃 같은 명시적 정규화보다 이런 초기화 트릭들이 실제로 더 큰 몫을 하는 경우가 많다.

8. 관련 문서[편집]

9. Footnotes[편집]

  1. model.eval() 을 안 불러서 벌어지는 사고는 BN과 드롭아웃이 절반씩 책임진다. 증상이 재밌는데, 검증 손실이 학습 손실보다 낮게 나오면 십중팔구 이거다. 모델이 천재라서가 아니라 정답 배치의 통계를 슬쩍 본 것이다.

  2. 논문의 설명이 뒤집혔는데 기법은 그대로 살아남는 일은 과학사에서 드물지 않다. BN의 경우 “내부 공변량 변화”라는 작명이 워낙 그럴싸해서, 설명이 반박된 지 한참인 지금도 강의 슬라이드와 면접 답안에는 그대로 살아 있다. 이름 잘 짓는 것이 논문 인용수에 미치는 영향에 관한 훌륭한 사례 연구.

  3. GPU 개수를 늘렸더니 정확도가 떨어졌다는 제보는 대부분 여기서 나온다. “총 배치는 똑같이 맞췄는데요?”라고 항변해도 소용없다. BN이 보는 배치는 총 배치가 아니라 카드 한 장의 배치이기 때문이다. 로그에 장치당 배치 크기를 반드시 남겨 두자.

  4. 접기 전후로 출력이 완전히 같아야 정상이다. 배정밀도로 비교했을 때 상대오차가 10610^{-6} 을 넘으면 ϵ\epsilon 을 빼먹었거나 이동평균이 아니라 배치 통계를 접은 것이다. 배포 스크립트에 이 비교를 자동 테스트로 박아 두는 것이 정신 건강에 좋다.