수학

MATH / 중급 22번

정규분포가 어디에나 있는 이유: 성질과 중심극한정리

torch.randn이 가중치 초기화·확산 노이즈·VAE에 전부 등장하는 근거를 셉니다. 정규분포가 선형변환과 독립 합에 닫혀 있다는 두 성질을 세우고, 중심극한정리의 수렴 속도를 왜도가 2/√n으로 줄어드는 것으로 직접 확인합니다.

PALDYN Team19 MIN READ

torch.randn은 딥러닝 코드에서 가장 자주 보는 난수 함수입니다. 가중치를 초기화할 때 나오고, 확산 모델이 이미지에 노이즈를 얹을 때 나오고, VAE의 잠재변수를 뽑을 때 나옵니다. 활성함수인 GELU조차 정규분포의 누적분포함수로 정의됩니다.

왜 하필 정규분포인가. 균등분포도 있고 라플라스 분포도 있는데 말입니다.

답이 둘입니다. 하나는 정규분포가 다뤄야 할 연산에 닫혀 있다는 것 — 상수배를 하고 더해도 여전히 정규분포입니다. 다른 하나는 많이 더하면 무엇이든 정규분포가 된다는 것, 즉 중심극한정리입니다. 지난 글에서 표본평균이 얼마나 흔들리는지까지 왔으니, 이제 어떤 모양으로 흔들리는지를 볼 차례입니다.

밀도와 두 개의 손잡이

정의. 평균 μ\mu, 분산 σ2\sigma^2 인 정규분포 N(μ,σ2)\mathcal{N}(\mu, \sigma^2) 의 밀도는

f(x)=1σ2πexp⁡ ⁣(−(x−μ)22σ2)f(x) = \frac{1}{\sigma\sqrt{2\pi}}\exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)

기호가 많아 보이지만 손잡이는 두 개뿐입니다. μ\mu 는 종의 중심을 좌우로 옮기고, σ\sigma 는 폭을 정합니다. 앞의 1/(σ2π)1/(\sigma\sqrt{2\pi}) 는 폭을 바꿔도 곡선 아래 넓이가 1로 유지되도록 높이를 맞추는 정규화 상수입니다 — 폭이 넓어지면 높이가 그만큼 낮아집니다.

지수 안의 (x−μ)2(x-\mu)^2 이 모양의 전부입니다. 중심에서 벗어난 거리를 제곱해 음의 부호를 붙였으니, 중심에서 멀어질수록 지수적으로 빠르게 작아집니다. 정규분포가 «이상치가 드문» 분포인 이유입니다.

2π\sqrt{2\pi} 라는 어색한 상수가 붙은 것도 여기서 나옵니다. e−x2/2e^{-x^2/2} 를 실수 전체에서 적분하면 정확히 2π\sqrt{2\pi} 가 되기 때문에 — 이 결과를 가우스 적분이라고 합니다 — 넓이를 1로 맞추려면 그 값으로 나누어야 합니다. 원주율이 확률분포에 등장하는 것이 뜬금없어 보이지만, 그 적분을 계산하는 표준적인 방법이 평면 위의 극좌표를 쓰는 것이라 각도가 한 바퀴 도는 자리에서 2π2\pi 가 나옵니다.

μ=0\mu=0, σ=1\sigma=1 인 것을 표준정규분포라 하고 보통 ZZ 로 적습니다. torch.randn이 뽑아 주는 것이 정확히 이것입니다.

표준화 — 자를 바꾸기

정규분포는 손잡이가 둘뿐이므로 어떤 정규분포든 표준정규분포로 옮길 수 있습니다.

Z=X−μσ∼N(0,1)Z = \frac{X - \mu}{\sigma} \sim \mathcal{N}(0, 1)

빼서 중심을 0으로 옮기고, 나눠서 폭을 1로 맞춘 것입니다. 이 조작을 표준화라고 합니다. 값 하나를 표준화하면 «평균에서 표준편차 몇 개만큼 떨어져 있는가»라는 뜻이 됩니다 — 층 정규화가 활성값에 하는 일이 바로 이 계산입니다.

반대 방향도 됩니다.

X=μ+σZX = \mu + \sigma Z

여기서 첫 번째 성질이 나옵니다. 정규분포는 선형변환에 닫혀 있습니다 — X∼N(μ,σ2)X \sim \mathcal{N}(\mu,\sigma^2) 이면 aX+b∼N(aμ+b, a2σ2)aX+b \sim \mathcal{N}(a\mu+b,\ a^2\sigma^2) 입니다. 평균은 그대로 따라가고 분산은 지난 글대로 a2a^2 이 곱해집니다.

실용적인 결과가 큽니다. 표준정규분포 난수 하나만 뽑을 줄 알면 모든 정규분포를 만들 수 있습니다. randn(...) * sigma + mu 한 줄이 그것이고, 라이브러리가 normal(mu, sigma)를 그렇게 구현합니다.

VAE의 재파라미터화 트릭도 같은 식입니다. z∼N(μ,σ2)z \sim \mathcal{N}(\mu, \sigma^2) 에서 직접 뽑으면 μ\mu 와 σ\sigma 로 미분할 길이 없는데, z=μ+σεz = \mu + \sigma\varepsilon 으로 적으면 무작위한 부분이 ε\varepsilon 하나로 밀려나고 나머지는 그냥 사칙연산이라 그래디언트가 통과합니다. 선형변환에 닫혀 있다는 성질이 없었다면 이 재작성이 같은 분포를 주지 않았을 것입니다.

표준정규분포를 옮기고 늘려 임의의 정규분포를 만드는 그림

68-95-99.7

표준화가 되니 «몇 σ\sigma 안에 얼마나 들어 있는가»를 한 번만 외우면 모든 정규분포에 쓸 수 있습니다.

구간 안에 들어갈 확률
μ±σ\mu \pm \sigma 68.3%
μ±2σ\mu \pm 2\sigma 95.4%
μ±3σ\mu \pm 3\sigma 99.7%

지난 글의 평가 예에 붙여 봅니다. 문제 200개에서 정답률 0.7을 쟀을 때 표준오차가 3.24%p였으니, 참 정답률은 대략 95% 확률로 63.5%에서 76.5% 사이입니다. 두 모델이 5%p 차이라면 이 폭 안에 파묻힙니다.

이 «95%»가 정규분포를 가정하고 나온 수라는 점을 짚어 둡니다. 정답 개수는 이항분포를 따르는 이산값이지 정규분포가 아닙니다. 그런데도 그렇게 계산하는 근거가 이 글의 뒤쪽에 있습니다 — 정답률은 0과 1을 200번 더해 나눈 값, 즉 표본평균이기 때문입니다.

정규분포 곡선 위에 1σ·2σ·3σ 구간과 각각의 확률을 표시한 그림

독립 합의 재생성

두 번째 성질입니다. X∼N(μ1,σ12)X \sim \mathcal{N}(\mu_1, \sigma_1^2) 과 Y∼N(μ2,σ22)Y \sim \mathcal{N}(\mu_2, \sigma_2^2) 가 독립이면

X+Y∼N(μ1+μ2, σ12+σ22)X + Y \sim \mathcal{N}(\mu_1 + \mu_2,\ \sigma_1^2 + \sigma_2^2)

입니다. 평균과 분산이 각각 더해지는 것은 지난 글에서 이미 안 것이고 — 새로운 것은 결과가 다시 정규분포라는 사실입니다. 이 성질을 재생성성이라고 합니다. 대부분의 분포는 이렇지 않습니다. 균등분포 둘을 더하면 삼각형이 되고, 더 더하면 균등분포에서 점점 멀어집니다.

여기서 딥러닝의 두 자리가 곧장 설명됩니다.

가중치 초기화. 뉴런의 출력은 ∑iwixi\sum_i w_i x_i 라는 합입니다. 가중치를 정규분포에서 뽑으면 이 합도 정규분포이고, 분산은 항의 개수 ninn_{\text{in}} 배가 됩니다. 그래서 층을 지날 때 신호가 커지거나 죽지 않게 하려면 1/nin1/n_{\text{in}} 정도에 비례하도록 분산을 미리 줄여 둬야 합니다 — Xavier와 He 초기화의 2/nin\sqrt{2/n_{\text{in}}} 같은 수가 이 계산에서 나옵니다.

확산 모델. 노이즈를 한 스텝씩 얹는 과정이 정규분포의 합이므로, 여러 스텝을 합쳐도 여전히 정규분포입니다. 그래서 tt 스텝을 하나씩 밟지 않고

xt=αˉt x0+1−αˉt ε,ε∼N(0,I)x_t = \sqrt{\bar\alpha_t}\,x_0 + \sqrt{1-\bar\alpha_t}\,\varepsilon, \qquad \varepsilon \sim \mathcal{N}(0, I)

로 한 번에 건너뜁니다. 학습에서 임의의 tt 를 뽑아 바로 그 시점의 이미지를 만들 수 있는 것이 재생성성 덕분이고, 이 성질이 없었다면 스텝 수만큼 순차 계산을 해야 했습니다.

중심극한정리

이제 «왜 하필 정규분포인가»의 나머지 절반입니다.

중심극한정리. 평균 μ\mu, 분산 σ2\sigma^2 인 같은 분포에서 서로 독립으로 뽑은 X1,…,XnX_1,\dots,X_n 에 대해, nn 이 커지면 표본평균의 분포가 정규분포에 가까워진다.

Xˉ  ≈  N ⁣(μ, σ2n)\bar{X} \;\approx\; \mathcal{N}\!\left(\mu,\ \frac{\sigma^2}{n}\right)

지난 글이 중심과 폭을 이미 알려 주었습니다 — E[Xˉ]=μ\mathbb{E}[\bar X] = \mu, Var⁡(Xˉ)=σ2/n\operatorname{Var}(\bar X) = \sigma^2/n 이었습니다. 중심극한정리가 더해 주는 것은 «모양»입니다.

그리고 이 정리의 놀라운 점은 조건이 거의 없다는 것입니다. 원래 분포가 무엇이든 상관없습니다 — 균등이든, 한쪽으로 심하게 치우쳤든, 0과 1만 나오는 이산분포든, 평균과 분산만 유한하면 됩니다.

딥러닝이 정규분포로 뒤덮인 이유가 이것입니다. 손실의 미니배치 평균, 활성값의 합, 여러 실행의 평가 점수 — 전부 «많은 것을 더한 값»이고, 더한 값은 원래 무엇이었든 정규분포에 가까워집니다.

앞의 평가 예를 이 정리로 마저 닫아 봅시다. 문제 하나의 채점 결과는 맞으면 1, 틀리면 0인 베르누이 확률변수이고 — 종 모양과는 거리가 먼, 막대 두 개짜리 분포입니다. 그런데 측정한 정답률은 그것을 200개 평균 낸 값입니다. 중심극한정리가 그 평균을 정규분포로 만들어 주고, 그래서 «±2σ\pm 2\sigma 가 95%»라는 계산이 성립합니다. 원래 분포가 정규분포일 필요가 없다는 것이 이 정리의 전부입니다.

두 성질과 이 정리의 관계도 짚어 둘 만합니다. 재생성성은 «정규분포끼리 더하면 정확히 정규분포»라는 등식이고, 중심극한정리는 «무엇이든 많이 더하면 가까워진다»는 근사입니다. 앞은 nn 이 2여도 참이고, 뒤는 nn 이 커져야 쓸 만해집니다.

원래 분포가 무엇이든 표본평균이 종 모양으로 모여드는 그림

얼마나 빨리 가까워지는가

«nn 이 커지면»이 실무에서는 «nn 이 얼마면»이라는 질문이 됩니다. 흔히 30을 기준으로 말하지만, 실제로는 원래 분포가 얼마나 치우쳤는가에 달려 있습니다.

치우침을 재는 값이 왜도입니다 — 표준화한 편차의 세제곱을 평균 낸 값이고, 좌우 대칭이면 0, 오른쪽으로 꼬리가 길면 양수입니다. 표본평균의 왜도에는 깔끔한 결과가 있습니다.

왜도(Xˉ)=왜도(X)n\text{왜도}(\bar{X}) = \frac{\text{왜도}(X)}{\sqrt{n}}

n\sqrt{n} 이 또 나왔습니다. 지수분포는 왜도가 2로 꽤 치우쳐 있는데, 실제로 재 보면 예측과 맞습니다.

import numpy as np
rng = np.random.default_rng(3)

def skew(a):
    return float((((a - a.mean()) / a.std()) ** 3).mean())

for n in [1, 2, 5, 30, 100]:
    m = rng.exponential(1.0, size=(200_000, n)).mean(axis=1)
    print(n, round(skew(m), 3), round(2 / np.sqrt(n), 3))
# 1 1.995 2.0
# 2 1.417 1.414
# 5 0.902 0.894
# 30 0.37 0.365
# 100 0.202 0.2

왼쪽이 실제로 잰 왜도, 오른쪽이 2/n2/\sqrt{n} 입니다. n=30n=30 에서도 왜도가 0.37이라 완전한 종 모양은 아닙니다. 30이라는 관습적인 기준은 원래 분포가 크게 치우치지 않았을 때의 이야기입니다.

치우친 분포에서 표본 크기에 따라 왜도가 2/√n으로 줄어드는 그림

반대로 균등분포처럼 대칭인 분포는 왜도가 처음부터 0이라 훨씬 빨리 종 모양이 됩니다. 셋만 더해도 눈으로는 거의 구별이 안 됩니다.

언제 기대면 안 되는가

조건이 «평균과 분산이 유한하면 된다»라고 했으니, 그 조건이 깨지는 자리를 알아 둘 필요가 있습니다.

분산이 무한한 분포에서는 성립하지 않습니다. 꼬리가 두꺼운 분포 — 예를 들어 코시 분포 — 는 아무리 많이 평균 내도 좁아지지 않습니다. 표본평균의 분포가 원래 분포와 똑같습니다. 학습 손실에 아주 드물게 거대한 값이 섞이는 상황이 이것에 가깝고, 그래서 그래디언트 클리핑 같은 장치가 실제로 필요해집니다.

곱은 합이 아닙니다. 중심극한정리는 «더한 것»에 대한 정리입니다. 여러 배율을 곱해 나가는 양은 로그를 취해야 합이 되므로, 그 로그가 정규분포에 가까워집니다 — 값 자체는 한쪽으로 길게 늘어진 로그정규분포가 됩니다. 층마다 배율이 곱해지는 심층망의 신호 크기가 이런 모양을 갖기 쉽고, 초기화의 분산을 맞춰 두는 것이 곱을 1 근처로 붙잡아 두려는 시도입니다.

«대략 정규»는 중심에서만 좋습니다. 수렴이 가장 느린 곳이 꼬리라, 3σ3\sigma 바깥의 아주 작은 확률을 정규분포로 계산하면 자릿수째 틀릴 수 있습니다. 68-95-99.7까지가 안전한 범위입니다.

GELU — cdf가 활성함수가 된 자리

정규분포의 누적분포함수 Φ(x)=P(Z≤x)\Phi(x) = P(Z \le x) 도 그 자체로 쓰입니다.

GELU(x)=x Φ(x)\text{GELU}(x) = x\,\Phi(x)

ReLU가 «0보다 크면 통과, 아니면 차단»이라는 딱딱한 게이트라면, GELU는 그 게이트를 «표준정규분포에서 뽑은 값보다 클 확률»로 부드럽게 만든 것입니다. xx 가 크면 Φ(x)≈1\Phi(x) \approx 1 이라 거의 그대로 통과하고, 아주 작으면 Φ(x)≈0\Phi(x) \approx 0 이라 거의 차단되며, 0 근처에서만 매끄럽게 섞입니다. 여기서도 표준정규분포가 «기준이 되는 자» 역할을 합니다.

Φ\Phi 를 고른 것도 우연이 아닙니다. 잘 초기화되고 정규화된 층의 활성값은 앞에서 본 이유로 대략 표준정규분포를 따르므로, 그 분포를 그대로 게이트의 자로 쓰면 «이 값이 같은 층의 다른 값들보다 큰가»를 묻는 것이 됩니다. 세제곱을 쓴 tanh 근사식이 함께 쓰이는 것은 Φ\Phi 자체에 초등함수로 된 닫힌 꼴이 없어 계산이 비싸기 때문입니다.

정리

  • 정규분포의 손잡이는 μ\mu 와 σ\sigma 둘뿐이고, 지수 안의 −(x−μ)2-(x-\mu)^2 이 꼬리를 빠르게 눌러 이상치를 드물게 만든다.
  • 표준화 Z=(X−μ)/σZ=(X-\mu)/\sigma 로 모든 정규분포가 하나로 모인다. 68-95-99.7을 한 번 외우면 어디에나 쓸 수 있다.
  • 선형변환에 닫혀 있다. 그래서 randn 하나로 모든 정규분포를 만든다.
  • 독립 합에 닫혀 있다(재생성성). 가중치 초기화의 분산 규칙과 확산 모델이 여러 스텝을 한 번에 건너뛰는 근거가 이것이다.
  • 중심극한정리는 원래 분포를 묻지 않는다. 평균과 분산만 유한하면 표본평균이 N(μ,σ2/n)\mathcal{N}(\mu, \sigma^2/n) 에 가까워진다.
  • 수렴 속도는 왜도가 1/n1/\sqrt{n} 로 줄어드는 속도다. 치우친 분포라면 n=30n=30 도 충분하지 않다.

torch.randn이 도처에 있는 이유가 두 성질과 한 정리로 정리되었습니다. 다음은 자리를 하나에서 여럿으로 늘릴 차례입니다 — 변수가 dd 개일 때 «퍼진 정도»는 수 하나가 아니라 행렬이 되고, 그 행렬로 상관 있는 표본을 만드는 법이 이어집니다.


읽어주셔서 감사합니다. 😊

LATEST

수학의 최신 글

수학2026.09.07

양자화 오차: 격자 사상, 오차 분산, 이상치 채널

실수를 2^b개 격자에 사상할 때 오차의 분산이 왜 Δ²/12인지 유도하고, 그것이 비트당 6.02dB라는 SNR로 번역되는 과정을 실측과 대조했습니다. 이상치 하나가 나머지 값의 유효 비트를 어떻게 먹는지, 그리고 int4에서 성능이 무너지는 지점을 오차 예산으로 미리 계산하는 법까지.

중급18 MIN
수학2026.09.07

수치적으로 안정한 계산 패턴 모음

최댓값 빼기, 로그 공간, log1p·expm1, 분산의 두 공식, 정규화의 ε, fp32 누산, 역행렬 대신 solve — 프레임워크가 몰래 해 주는 일곱 가지를 하나씩 꺼내 각각 어떤 고장을 막는지 직접 재 봤습니다. 수식을 그대로 옮긴 코드가 왜 라이브러리보다 나쁜지에 대한 목록입니다.

중급22 MIN
수학2026.09.07

부동소수점은 어디서 새는가: 반올림, 상쇄, 더하는 순서

0.1 + 0.2가 0.3이 아닌 이유부터 시작해 머신 엡실론을 유도하고, 같은 16비트인데 fp16과 bf16이 서로 다른 지점에서 터지는 이유, 비슷한 수를 뺄 때 유효자리가 사라지는 파괴적 상쇄, 그리고 1,000만 개를 순서만 바꿔 더했을 때 오차가 백만 배 갈리는 실험까지 직접 재 봤습니다.

중급23 MIN