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)은 독립인 균등난수 두 개 로부터 독립인 표준정규난수 두 개를 한 번에 만들어 내는 변환이다.
역변환 표본추출이 정규분포 앞에서 막히는 이유는 이 초등함수로 안 써지기 때문인데, 이 방법은 1차원 문제를 2차원으로 올려서 우회한다. 2차원 표준정규분포는 회전대칭이라 극좌표에서 반지름과 각도가 분리되고, 그 둘은 각각 지수분포와 균등분포라 둘 다 역함수가 닫힌 형태로 존재한다. 차원을 하나 늘려 문제를 쉽게 만드는, 수학에서 종종 보이는 그 수법이다.
2. 유도 — 극좌표에서 보면 당연하다[편집]
가 독립 표준정규라면 결합밀도는
로 원점 대칭이다. 극좌표 , 로 바꾸면 야코비안이 이므로
여기서 로 치환하면 이므로
곱 형태로 완전히 분리됐다. 즉 이고 이며 둘은 독립이다. 각각을 역변환으로 뽑으면
가 되고, 이를 직교좌표로 되돌린 것이 위 공식이다. 정규분포의 제곱합이 카이제곱 2자유도이고 그게 하필 지수분포라는 우연이 이 방법의 전부다.1
3. 극형식 — 삼각함수를 지운다[편집]
과 은 1958년 기준으로 상당히 비쌌다. 마살리아의 극형식(polar method)은 기각을 한 번 넣어 삼각함수를 통째로 제거한다.
- 을 뽑고 를 계산한다.
- 이거나 이면 버리고 1로 돌아간다.
- 아니면 , .
수락된 는 단위원 위에 균등하게 깔리므로 가 정확히 역할을 하고, 자체가 조건부로 이라 역할을 대신한다. 삼각함수 두 번이 제곱근 한 번과 기각으로 바뀐 셈. **수락률은 정사각형 대비 원의 넓이 비율 **다.
다만 요즘 하드웨어에서는 이 거래가 항상 이득은 아니다. SIMD로 벡터화하면 sincos는 꽤 싸고, 반대로 극형식의 기각 분기는 벡터 레인을 깨뜨린다. GPU 커널에서는 기본형이 더 빠른 경우가 흔하다. 1958년의 최적화 상식이 2020년대에 뒤집힌 사례.
4. 수치적 함정[편집]
은 즉사다. 이므로 가 inf 또는 NaN이 된다. 대부분의 난수 생성기는 을 반환하므로 이 실제로 나온다. 32비트 생성기라면 확률이니 표본 수십억 개를 뽑는 분자동역학 잡에서는 반드시 만난다. 해법은 간단하다 — 에서 뽑거나 을 쓴다. 는 상관없다(은 멀쩡하다).
선형합동생성기(LCG)와 조합하면 나선이 생긴다. 곱셈형 LCG는 이라, 이 아주 작으면 나머지 연산이 발동하지 않아 이 결정론적으로 따라온다. 그런데 박스-뮐러에서 작은 은 곧 큰 반지름이고, 그때 도 함께 작아지므로 , 이 된다. 결과적으로 극단적인 꼬리 표본이 거의 전부 축 방향에만 몰린다. 산점도를 그리면 원점에서 뻗어 나가는 나선 줄무늬가 선명하게 보인다. 1973년 니브(Neave)가 보고한 이 아티팩트는 “변환이 나쁜 게 아니라 생성기가 나쁜 것”의 교과서적 사례이며, 극형식이나 역변환은 같은 생성기에서도 훨씬 덜 티가 난다.2 참고로 계수 짜리 LCG의 최소 출력이 이므로, 얻을 수 있는 최대 는 으로 원리적으로 유계다 — 이면 약 6.55다.
꼬리 정확도. 위 한계 때문에 너머의 사건이 중요한 신뢰성 해석류 계산에서는 생성기 품질이 곧 답의 품질이다. 메르센 트위스터나 PCG/philox 계열의 64비트 출력을 쓰는 것이 기본이다.
5. 왜 실무 표준은 지구랏인가[편집]
박스-뮐러는 교과서의 왕이지만 라이브러리 내부의 왕은 대개 지구랏(Ziggurat, Marsaglia & Tsang 2000)이다.
- 정규밀도를 넓이가 같은 계단 조각
개로 덮어 두고, 난수 하나로 층과 위치를 정한 뒤 비교 한 번으로 통과시킨다. 통과율이 9899%라 대부분의 호출이 로그·제곱근·삼각함수를 한 번도 쓰지 않는다. - 통과하지 못한 소수의 경우와 최외곽 꼬리 층만 별도 기각표본추출 경로로 처리한다.
- 대가는 초기화 테이블과 구현 난이도다. 원 논문의 예제 코드에 결함이 있어 후속 논문들이 정정한 이력도 있고, 층 수와 생성기 비트 수를 잘못 맞추면 꼬리 통계가 조용히 틀어진다.
정리하면 선택 기준은 이렇다. 속도 최우선이면 지구랏, 준몬테카를로와 함께 쓰려면 역변환 + AS241(단조 사상이라 소볼 수열의 저불일치 구조를 보존한다), 코드 열 줄로 끝내고 싶으면 박스-뮐러. 박스-뮐러도 결정론적인 2입력 2출력 사상이라 준몬테카를로에 못 쓸 것은 없지만, 원점 근처의 강한 비선형성 때문에 역변환보다 수렴이 나쁜 것으로 알려져 있다. 반면 극형식은 소비 난수 개수가 표본마다 달라져 저불일치 수열과는 원리적으로 궁합이 안 맞는다.
6. 어디에 쓰이나[편집]
정규난수는 시뮬레이션에서 거의 소모품이다.
- 랑주뱅 동역학과 서모스탯의 잡음항. 의 가 매 스텝 필요하다. 랑주뱅 열욕이나 안데르센 열욕은 사실상 정규난수 생성기 성능이 곧 시뮬레이션 성능이다.
- 해밀토니안 몬테카를로의 운동량 재추출. 반복마다 을 새로 뽑는 단계가 있고, 차원이 수천이면 이 비용도 무시 못 한다.
- 브라운 운동과 SDE 적분. 위너 증분 가 오일러-마루야마 도식의 심장이다.
- 상관 있는 다변량 정규. 공분산 를 촐레스키 분해로 구한 뒤 . 불확실성 정량화에서 상관 입력을 만드는 표준 경로다.
- 가우시안 잡음 모형 전반 — 칼만 필터의 프로세스·관측 잡음, 입자 필터의 제안분포, 딥러닝 가중치 초기화까지.
7. 여담[편집]
박스와 뮐러의 1958년 논문은 두 쪽짜리 노트다.3 정작 두 사람 다 이 변환으로 유명해질 생각은 없었고, 박스는 실험계획법과 시계열(ARIMA의 그 Box-Jenkins)로 이름을 남긴 통계학자다. 그리고 이 변환의 아이디어 자체 — 2차원 가우시안의 극좌표 분해 — 는 라플라스가 가우스 적분 를 계산할 때 쓴 그 수법과 정확히 같다.4 200년 묵은 적분 요령이 난수 생성 알고리즘이 된 셈.
8. 관련 문서[편집]
- 역변환 표본추출 · 기각표본추출 · 중요도 표본추출
- 몬테카를로 방법 · 마르코프 연쇄 몬테카를로
- 해밀토니안 몬테카를로 · 랑주뱅 동역학 · 서모스탯
- 브라운 운동 · 맥스웰-볼츠만 분포
- 촐레스키 분해 · 소볼 수열 · 라틴 하이퍼큐브 표본추출
- 불확실성 정량화 · 신뢰성 해석
- 칼만 필터 · 입자 필터
- 난수 생성기
9. Footnotes[편집]
-
“정규분포는 역함수가 없어서 못 뽑는다”고 배운 다음 주에 이 공식을 보면 사기당한 기분이 든다. 차원을 하나 더 붙였을 뿐인데 갑자기 풀린다. 수학에서 문제를 어렵게 만든 건 대개 문제가 아니라 좌표계다. ↩
-
니브 효과는 “난수 검정을 통과한 생성기”라도 특정 변환과 만나면 무너질 수 있다는 경고이기도 하다. 균등성 검정은 1차원 주변분포를 보지, 연속한 두 출력이 만드는 격자 구조를 보지 않는다. 검정을 통과했다는 말은 그 검정이 못 잡는 결함이 없다는 뜻이 아니다. ↩
-
제목이 A Note on the Generation of Random Normal Deviates, 총 2페이지, 참고문헌 3개. 요즘 저널에 내면 데스크 리젝당할 분량인데 인용 수는 수천 회다. ↩
-
가우스 적분을 제곱해서 극좌표로 바꾸는 그 계산. 학부 1학년 미적분에서 “신기한 트릭” 취급받던 것이 60년 뒤 난수 생성 알고리즘으로 재취업했다. 트릭은 죽지 않는다, 다만 응용 분야를 옮길 뿐. ↩