박스-뮐러 변환

편집 역사 토론
통계 수치해석 마지막 수정: 2026-08-02 04:25:12

1. 개요[편집]

박스-뮐러 변환
Box–Muller transform
제안G. E. P. Box · M. E. Muller (1958)
입력독립 균등난수 $U_1, U_2$
출력독립 표준정규난수 $Z_1, Z_2$
변형극형식(Marsaglia polar), 수락률 $\pi/4$
주 경쟁자지구랏(Ziggurat), 역변환 + AS241

정규분포의 누적분포함수는 역함수가 없다. 그런데 두 개를 동시에 뽑으면 있다.

박스-뮐러 변환(Box–Muller transform)은 독립인 균등난수 두 개 U1,U2U(0,1)U_1, U_2 \sim \mathcal{U}(0,1)로부터 독립인 표준정규난수 두 개를 한 번에 만들어 내는 변환이다.

Z1=2lnU1cos(2πU2),Z2=2lnU1sin(2πU2)Z_1 = \sqrt{-2\ln U_1}\,\cos(2\pi U_2), \qquad Z_2 = \sqrt{-2\ln U_1}\,\sin(2\pi U_2)

역변환 표본추출이 정규분포 앞에서 막히는 이유는 Φ1\Phi^{-1}이 초등함수로 안 써지기 때문인데, 이 방법은 1차원 문제를 2차원으로 올려서 우회한다. 2차원 표준정규분포는 회전대칭이라 극좌표에서 반지름과 각도가 분리되고, 그 둘은 각각 지수분포와 균등분포라 둘 다 역함수가 닫힌 형태로 존재한다. 차원을 하나 늘려 문제를 쉽게 만드는, 수학에서 종종 보이는 그 수법이다.

2. 유도 — 극좌표에서 보면 당연하다[편집]

(Z1,Z2)(Z_1, Z_2)가 독립 표준정규라면 결합밀도는

p(z1,z2)=12πe(z12+z22)/2p(z_1, z_2) = \frac{1}{2\pi} e^{-(z_1^2 + z_2^2)/2}

로 원점 대칭이다. 극좌표 z1=rcosθz_1 = r\cos\theta, z2=rsinθz_2 = r\sin\theta로 바꾸면 야코비안이 (z1,z2)/(r,θ)=r\lvert \partial(z_1,z_2)/\partial(r,\theta)\rvert = r이므로

p(r,θ)drdθ=12πer2/2rdrdθp(r,\theta)\,dr\,d\theta = \frac{1}{2\pi} e^{-r^2/2}\, r \,dr\,d\theta

여기서 s=r2s = r^2로 치환하면 ds=2rdrds = 2r\,dr이므로

p(s,θ)dsdθ=12es/2dsExp(1/2)12πdθU(0,2π)p(s,\theta)\,ds\,d\theta = \underbrace{\frac{1}{2}e^{-s/2}\,ds}_{\mathrm{Exp}(1/2)} \cdot \underbrace{\frac{1}{2\pi}\,d\theta}_{\mathcal{U}(0,2\pi)}

곱 형태로 완전히 분리됐다. 즉 R2Exp(1/2)=χ22R^2 \sim \mathrm{Exp}(1/2) = \chi^2_2이고 ΘU(0,2π)\Theta \sim \mathcal{U}(0,2\pi)이며 둘은 독립이다. 각각을 역변환으로 뽑으면

R=2lnU1,Θ=2πU2R = \sqrt{-2\ln U_1}, \qquad \Theta = 2\pi U_2

가 되고, 이를 직교좌표로 되돌린 것이 위 공식이다. 정규분포의 제곱합이 카이제곱 2자유도이고 그게 하필 지수분포라는 우연이 이 방법의 전부다.1

3. 극형식 — 삼각함수를 지운다[편집]

sin\sincos\cos은 1958년 기준으로 상당히 비쌌다. 마살리아의 극형식(polar method)은 기각을 한 번 넣어 삼각함수를 통째로 제거한다.

  1. V1,V2U(1,1)V_1, V_2 \sim \mathcal{U}(-1,1)을 뽑고 S=V12+V22S = V_1^2 + V_2^2를 계산한다.
  2. S1S \ge 1이거나 S=0S = 0이면 버리고 1로 돌아간다.
  3. 아니면 Z1=V12lnSSZ_1 = V_1\sqrt{\dfrac{-2\ln S}{S}}, Z2=V22lnSSZ_2 = V_2\sqrt{\dfrac{-2\ln S}{S}}.

수락된 (V1,V2)(V_1,V_2)는 단위원 위에 균등하게 깔리므로 (V1/S,V2/S)(V_1/\sqrt S, V_2/\sqrt S)가 정확히 (cosΘ,sinΘ)(\cos\Theta, \sin\Theta) 역할을 하고, SS 자체가 조건부로 U(0,1)\mathcal{U}(0,1)이라 U1U_1 역할을 대신한다. 삼각함수 두 번이 제곱근 한 번과 기각으로 바뀐 셈. **수락률은 정사각형 대비 원의 넓이 비율 π/478.54%\pi/4 \approx 78.54\%**다.

다만 요즘 하드웨어에서는 이 거래가 항상 이득은 아니다. SIMD로 벡터화하면 sincos는 꽤 싸고, 반대로 극형식의 기각 분기는 벡터 레인을 깨뜨린다. GPU 커널에서는 기본형이 더 빠른 경우가 흔하다. 1958년의 최적화 상식이 2020년대에 뒤집힌 사례.

4. 수치적 함정[편집]

U1=0U_1 = 0은 즉사다. ln0=\ln 0 = -\infty이므로 ZZinf 또는 NaN이 된다. 대부분의 난수 생성기는 [0,1)[0,1)을 반환하므로 U1=0U_1 = 0이 실제로 나온다. 32비트 생성기라면 2322^{-32} 확률이니 표본 수십억 개를 뽑는 분자동역학 잡에서는 반드시 만난다. 해법은 간단하다 — (0,1](0,1]에서 뽑거나 1U11-U_1을 쓴다. U2U_2는 상관없다(cos0\cos 0은 멀쩡하다).

선형합동생성기(LCG)와 조합하면 나선이 생긴다. 곱셈형 LCG는 un+1=aunmod1u_{n+1} = a u_n \bmod 1이라, unu_n이 아주 작으면 나머지 연산이 발동하지 않아 un+1=aunu_{n+1} = a\,u_n결정론적으로 따라온다. 그런데 박스-뮐러에서 작은 U1U_1은 곧 큰 반지름이고, 그때 Θ=2πaU1\Theta = 2\pi a U_1도 함께 작아지므로 cos1\cos \approx 1, sin0\sin \approx 0이 된다. 결과적으로 극단적인 꼬리 표본이 거의 전부 Z1Z_1 축 방향에만 몰린다. 산점도를 그리면 원점에서 뻗어 나가는 나선 줄무늬가 선명하게 보인다. 1973년 니브(Neave)가 보고한 이 아티팩트는 “변환이 나쁜 게 아니라 생성기가 나쁜 것”의 교과서적 사례이며, 극형식이나 역변환은 같은 생성기에서도 훨씬 덜 티가 난다.2 참고로 계수 mm짜리 LCG의 최소 출력이 1/m1/m이므로, 얻을 수 있는 최대 Z\lvert Z\rvert2lnm\sqrt{2\ln m}으로 원리적으로 유계다 — m=231m = 2^{31}이면 약 6.55다.

꼬리 정확도. 위 한계 때문에 6σ6\sigma 너머의 사건이 중요한 신뢰성 해석류 계산에서는 생성기 품질이 곧 답의 품질이다. 메르센 트위스터나 PCG/philox 계열의 64비트 출력을 쓰는 것이 기본이다.

5. 왜 실무 표준은 지구랏인가[편집]

박스-뮐러는 교과서의 왕이지만 라이브러리 내부의 왕은 대개 지구랏(Ziggurat, Marsaglia & Tsang 2000)이다.

  • 정규밀도를 넓이가 같은 계단 조각 272^7282^8개로 덮어 두고, 난수 하나로 층과 위치를 정한 뒤 비교 한 번으로 통과시킨다. 통과율이 9899%라 대부분의 호출이 로그·제곱근·삼각함수를 한 번도 쓰지 않는다.
  • 통과하지 못한 소수의 경우와 최외곽 꼬리 층만 별도 기각표본추출 경로로 처리한다.
  • 대가는 초기화 테이블과 구현 난이도다. 원 논문의 예제 코드에 결함이 있어 후속 논문들이 정정한 이력도 있고, 층 수와 생성기 비트 수를 잘못 맞추면 꼬리 통계가 조용히 틀어진다.

정리하면 선택 기준은 이렇다. 속도 최우선이면 지구랏, 준몬테카를로와 함께 쓰려면 역변환 + AS241(단조 사상이라 소볼 수열의 저불일치 구조를 보존한다), 코드 열 줄로 끝내고 싶으면 박스-뮐러. 박스-뮐러도 결정론적인 2입력 2출력 사상이라 준몬테카를로에 못 쓸 것은 없지만, 원점 근처의 강한 비선형성 때문에 역변환보다 수렴이 나쁜 것으로 알려져 있다. 반면 극형식은 소비 난수 개수가 표본마다 달라져 저불일치 수열과는 원리적으로 궁합이 안 맞는다.

6. 어디에 쓰이나[편집]

정규난수는 시뮬레이션에서 거의 소모품이다.

  • 랑주뱅 동역학서모스탯의 잡음항. mx¨=Uγx˙+2γkBTξ(t)m\ddot{x} = -\nabla U - \gamma \dot{x} + \sqrt{2\gamma k_B T}\,\xi(t)ξ\xi가 매 스텝 필요하다. 랑주뱅 열욕이나 안데르센 열욕은 사실상 정규난수 생성기 성능이 곧 시뮬레이션 성능이다.
  • 해밀토니안 몬테카를로의 운동량 재추출. 반복마다 pN(0,M)p \sim \mathcal{N}(0, M)을 새로 뽑는 단계가 있고, 차원이 수천이면 이 비용도 무시 못 한다.
  • 브라운 운동과 SDE 적분. 위너 증분 ΔW=ΔtZ\Delta W = \sqrt{\Delta t}\,Z가 오일러-마루야마 도식의 심장이다.
  • 상관 있는 다변량 정규. 공분산 Σ=LL\Sigma = LL^\top촐레스키 분해로 구한 뒤 X=μ+LZX = \mu + LZ. 불확실성 정량화에서 상관 입력을 만드는 표준 경로다.
  • 가우시안 잡음 모형 전반 — 칼만 필터의 프로세스·관측 잡음, 입자 필터의 제안분포, 딥러닝 가중치 초기화까지.

7. 여담[편집]

박스와 뮐러의 1958년 논문은 두 쪽짜리 노트다.3 정작 두 사람 다 이 변환으로 유명해질 생각은 없었고, 박스는 실험계획법과 시계열(ARIMA의 그 Box-Jenkins)로 이름을 남긴 통계학자다. 그리고 이 변환의 아이디어 자체 — 2차원 가우시안의 극좌표 분해 — 는 라플라스가 가우스 적분 ex2dx=π\int e^{-x^2}dx = \sqrt\pi를 계산할 때 쓴 그 수법과 정확히 같다.4 200년 묵은 적분 요령이 난수 생성 알고리즘이 된 셈.

8. 관련 문서[편집]

9. Footnotes[편집]

  1. “정규분포는 역함수가 없어서 못 뽑는다”고 배운 다음 주에 이 공식을 보면 사기당한 기분이 든다. 차원을 하나 더 붙였을 뿐인데 갑자기 풀린다. 수학에서 문제를 어렵게 만든 건 대개 문제가 아니라 좌표계다.

  2. 니브 효과는 “난수 검정을 통과한 생성기”라도 특정 변환과 만나면 무너질 수 있다는 경고이기도 하다. 균등성 검정은 1차원 주변분포를 보지, 연속한 두 출력이 만드는 격자 구조를 보지 않는다. 검정을 통과했다는 말은 그 검정이 못 잡는 결함이 없다는 뜻이 아니다.

  3. 제목이 A Note on the Generation of Random Normal Deviates, 총 2페이지, 참고문헌 3개. 요즘 저널에 내면 데스크 리젝당할 분량인데 인용 수는 수천 회다.

  4. 가우스 적분을 제곱해서 극좌표로 바꾸는 그 계산. 학부 1학년 미적분에서 “신기한 트릭” 취급받던 것이 60년 뒤 난수 생성 알고리즘으로 재취업했다. 트릭은 죽지 않는다, 다만 응용 분야를 옮길 뿐.