최근 수정 시각 : 2024-10-16 10:51:19

몬테 카를로 방법

통계학
Statistics
{{{#!wiki style="margin:0 -10px -5px; min-height:calc(1.5em + 5px); word-break: keep-all"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-5px -1px -11px"
<colbgcolor=#4d4d4d><colcolor=#fff> 수리통계학 기반 실해석학 ( 측도론) · 선형대수학 · 이산수학
확률론 사건 · 가능성 · 확률 변수 · 확률 분포 ( 표본 분포 · 정규 분포 · 이항 분포 · 푸아송 분포 · 카이제곱분포 · t분포 · Z분포 · F-분포 · 결합확률분포) · 확률밀도함수 · 확률질량함수 · 조건부확률 · 조건부기댓값 · 조건부분산 · 전체 확률의 법칙 · 베이즈 정리 · 도박사의 오류 · 도박꾼의 파산 · 몬티 홀 문제 · 뷔퐁의 바늘 · 마르코프 부등식 · 체비쇼프 부등식 · 큰 수의 법칙 ( 무한 원숭이 정리) · 중심극한정리 · 벤포드의 법칙
통계량 평균 ( 제곱평균제곱근 · 산술 평균 · 기하 평균 · 조화 평균 · 멱평균 · 대수 평균) · 기댓값 · 편차 ( 절대 편차 · 표준 편차) · 분산 ( 공분산) · 결정계수 · 변동계수 · 상관계수 · 대푯값 · 자유도
추론통계학 가설 · 변인 · 추정량 · 점추정 · 신뢰 구간 · 상관관계와 인과관계 · 실험통계학 · p-해킹 · 통계의 함정 · 그레인저 인과관계 · 신뢰도와 타당도
통계적 방법 회귀 분석 · 최소제곱법 · 분산 분석 · 주성분 분석 ( 요인 분석) · 시계열 분석 · 패널 분석 · 2SLS · 생존 분석 · GARCH · 비모수통계학 · 준모수통계학 · 기계학습 ( 군집 분석 · 분류 분석) · 위상 데이터분석 · 외삽법 · 메타 분석 · 모델링 ( 구조방정식)
기술통계학 ·
자료 시각화
도표 ( 그림그래프 · 막대그래프 · 선 그래프 · 원 그래프 · 상자 수염 그림 · 줄기와 잎 그림 · 산포도 · 산점도 · 히스토그램 · 도수분포표) · 그래프 왜곡 · 이상점 }}}}}}}}}

원자력공학
Nuclear Engineering
{{{#!wiki style="margin:0 -10px -5px; min-height:calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-5px -1px -11px; word-break: keep-all"
기반 학문
물리학( 핵물리학 · 상대성 이론 · 양자역학 · 열역학 · 물리화학 · 통계역학) · 수학( 수치해석학 · 미분방정식 · 선형대수학 · 통계학)
<colbgcolor=#ddd,#555><colcolor=#000,#fff> 기술
핵분열
핵분열 발전
사이클로트론 · 원자로 · 핵연료 · 감속재 · RBMK · 경수로 · 중수로 · PWR · PHWR · BWR · 증식로 · TBR · FBR · System 80 · CANDU · OPR1000 · APR1400 · APR+ · ECCS · Magnox · ACR · MCP · MCG · MELCOR · PUREX · VVER · 파이로프로세싱 · 원자폭탄 · 더티밤 · 폭축렌즈
핵융합
핵융합 발전
사이클로트론 · Lawson Criterion · Flux Loop · NBI · Langmuir probe · 자기장 가둠 핵융합로 · Magnetic Mirror · 토카막(구형 토카막) · 스텔러레이터 · bumpy torus · Tandem Mirror · Spheromak · RFP · 관성 가둠식 핵융합로 · ICF · Fast Ignition · 레이저 빛 핵융합로 · 정전 핀치식 핵융합로 · Z-핀치 식 핵융합로 · θ-Pinch 식 핵융합로 · 스크류 핀치식 핵융합로 · 관성 &정전식 핵융합로 · Fusor · MTF · MIF · MagLIF · Levitated Dipole · 거품핵융합로 · 뮤온 촉매 핵융합로 · 상온 핵융합로 · 수소폭탄(열핵폭탄) · 폭축렌즈 · 텔러-울람 설계
방사선 전달 전산 모사 몬테카를로 코드 · MCNP · MCNPX · Geant4 · Serpent · FLUKA · PENELOPE
방사선의과학 영상의학 · CT · X선 · PET · SPECT · MRI · 핵의학 · 양성자치료
기타
국제원자력기구 · 한국수력원자력 · 한국원자력연구원 · 한국핵융합에너지연구원 ( KSTAR) · 원자력 사고 · 탈원전 ( 탈원전/대한민국)
}}}}}}}}} ||
1. 개요2. 몬테 카를로 방법3. 마르코프 체인 몬테 카를로 방법4. 활용
4.1. 몬테 카를로 알고리즘
5. 관련 문서

1. 개요

Monte Carlo method

동명의 카지노 몬테 카를로에서 이름을 따온, 무작위 추출된 난수를 이용하여 함수의 값을 계산하는 통계학 방법. 수학적 최적화, 수치적분, 확률 분포로부터의 추출 등에 쓰인다.

2. 몬테 카를로 방법

몬테 카를로 방법은 무작위 추출된 난수를 이용하여 원하는 함수의 값을 계산하기 위한 시뮬레이션 방법이다. 자유도가 높거나 닫힌꼴(closed form)의 해가 없는 문제들에 널리 쓰이는 방법이지만, 어느 정도의 오차를 감안해야만 하는 특징이 있다.

몬테카를로 방법의 간단한 예시로 원의 면적을 구하는 것을 들 수 있다.[1] [math( x^2 + y^2 = 1 )]이라는 식으로 표현되는 원의 면적을 구하고 싶다고 하자. 이 원은 [math( -1 \leq x \leq 1, -1 \leq y \leq 1 )]으로 표현되는, 넓이가 4인 정사각형 공간 안에 완전히 포함되는데, 이 공간 안에서 무작위로 (예를 들어) 10,000개의 난수 순서쌍 [math( (x, y) )]을 추출한다.

10,000개의 난수 순서쌍 [math( (x, y) )] 가운데에는 [math( x^2 + y^2 \leq 1 )]을 만족하여 원 안의 범위에 포함되는 것들이 있을 것이다. 그런 순서쌍들의 개수를 세어 전체 난수에 대한 비율을 계산하면 대략적인 원의 면적을 구할 수 있다. 무작위로 뽑힌 난수의 개수가 늘어날수록 더 정확한 결과를 얻을 수 있으나, 그만큼 더 많은 시간이 걸리는 것을 감안해야 한다. 또한 시뮬레이션 기반 방법이기 때문에, 해석적인 방법과 달리 항상 어느 정도 오차가 있을 수 있음을 감안해야만 한다.

MATLAB 코드

[ 펼치기 · 접기 ]
#!syntax cpp
iter=100000

point=[rand(iter,1) rand(iter,1)];

circle_in_out=((point(:,1).^2+point(:,2).^2)<1);
circle_in_idx=find(circle_in_out==1);
circle_out_idx=find(circle_in_out==0);
circle_in_count=length(circle_in_idx);

Pi=circle_in_count/iter*4;

scatter(point(circle_in_idx,1),point(circle_in_idx,2), 'B.')
hold on
scatter(point(circle_out_idx,1),point(circle_out_idx,2), 'R.')

title('Monte-Carlo Pi')

fprintf(['=== Iteration : ' num2str(iter) ', Pi = ' num2str(Pi) ', accuracy : ' num2str((1-abs(1-(Pi/pi)))*100) '%% ===\n'])

몬테 카를로란 이름이 붙은 이유는 이 방법이 알려지게 된 연구가 바로 로스 알라모 과학 연구소의 핵무기 개발 연구였기 때문이다. 해당 연구에는 스타니스와프 울람(Stanislaw Ulam)이 존 폰 노이만과 함께 이 새로운 수치 해석 방법을 만들고 있었다. 핵무기 연구는 극비사항이라서 코드명이 필요했는데, 울람의 동료였던 니콜라스 메트로폴리스가 울람의 삼촌이 친척들에게 돈을 빌려서 자주 가던 카지노의 이름을 코드명으로 추천했고, 그것이 받아들여진 것이다.

몬테 카를로 방법은 맨해튼 계획으로 원자폭탄을 성공적으로 개발하고 난 뒤, 수소폭탄 개발 계획을 세울 때 고안된 것이다. 이 당시에 제2차 세계 대전은 이미 끝났고 끝내주는 위력을 가진 원자폭탄도 확보했는데, 또 막대한 예산을 들여 수소폭탄을 개발하려니까 일단 핵융합을 실제로 일으킬 수 있는지부터 확인해 볼 필요가 있었다. 그런데 당연히 아직 수소폭탄 제조를 위한 참고 자료가 없었기 때문에, 이것을 확인하기 위해서는 일단 많은 돈이 들어가는 실험부터 해야 한다는 딜레마에 빠지게 되었다. 그래서 1946년에 예산을 타내기 위해 당시 막 등장한 컴퓨터를 사용해서 간단한 (하지만 당시로는 복잡한) 시뮬레이션을 돌려봤는데, 이 때 사용한 알고리즘이 바로 몬테 카를로 방법이다.[2] 참고로 몬테 카를로 방법은 컨셉 디자인이 말이 되는지 확인하는데만 사용되었고, 컨셉 디자인이 통과된 이후에 실제 수소폭탄 설계와 제작은 '엄청난 수의 연구원과 많은 예산을 갈아넣어서 될 때까지 만들어 본다'는 전통적인 공밀레 방식으로 수행되었다. 실험 없이 오직 컴퓨터 시뮬레이션만으로 수소폭탄을 설계하는 것은 2010년대 후반의 세계 최상급의 슈퍼 컴퓨터를 써도 불가능하다.

3. 마르코프 체인 몬테 카를로 방법

마르코프 체인 몬테 카를로 방법(Markov Chain Monte Carlo Method, 약칭 MCMC)은 몬테 카를로 방법 중에서도 특정한 확률분포에 수렴하는 난수들을 추출하고 싶을 경우에 사용하는 방법이다. 이름은 난수를 추출하는 '몬테 카를로' 방식을 사용하되 여기에 '마르코프 체인'이라는 수학적 개념의 성질을 이용한 것에서 유래했다. 몬테 카를로 방법을 명명한 사람들 중 하나로 앞에서 언급되었던 니콜라스 메트로폴리스는 이 방법을 위한 알고리즘을 제안했고, 이것이 이후 윌프레드 해이스팅스(Wilfred Hastings)라는 통계학자에 의해 일반화되면서 '메트로폴리스-해이스팅스 알고리즘'이라는 이름을 갖게 되었다.

마르코프 체인(Markov Chain)은 시간이 지나감에 따라 현재 상태가 다른 상태로 변화하는 과정을 확률로 표현한 것인데, 러시아 수학자인 안드레이 마르코프(Andrey Markov, 1856-1922)에 의해 만들어졌다. 마르코프 체인이 특정한 수학적 성질을 만족하게 되면, 체인을 무수히 반복한 뒤에는 특정한 확률 분포의 형태로 수렴하게 되는 성질이 있다.

예를 들어, 오늘 날씨가 맑다면 내일의 날씨가 맑을지, 흐릴지, 비가 올지를 확률적으로 표현할 수 있다. 오늘 날씨가 흐리거나 비가 오는 경우에도 내일 날씨가 어떨지에 대한 확률을 각각 표현할 수 있을 것이다. 단, 이 때 내일의 날씨는 반드시 오늘의 날씨에 의해서만 결정되어야 하는데, 이것이 마르코프 체인의 핵심적인 성질이다.(이 확률들의 묶음은 행렬로 표현된다.)

오늘 날씨로 내일의 날씨가 어떨지에 대한 확률을 계산하고, 이렇게 계산한 내일 날씨의 확률로 모레의 날씨가 어떨지에 대한 확률을 계산하는 식의 작업을 충분히 많이 반복한다고 해 보자. 내일 날씨가 어떨지에 대한 확률들의 묶음(행렬)이 특정한 성질을 만족한다면, 이렇게 무한히 확률 계산을 반복하면 오늘 날씨가 어떻느냐와는 상관 없이 일반적으로 날이 맑거나 흐리거나 비가 올 확률이 특정하게 수렴하게 된다.

때문에 난수를 추출하는 과정을 마르코프 체인에 의존하면 특정한 확률 분포를 모사하도록 할 수 있다. 즉, 다음과 같은 절차를 밟는 것이다.
  • 가능한 입력값을 제시한다.
  • 입력값으로부터 난수를 추출한다.
  • 새로이 만들어진 난수를 바탕으로 또 다른 난수를 추출한다.
  • 위의 과정을 통해 추출된 난수들을 모아놓고 보면 특정한 확률분포로 수렴하게 된다.[3]

마르코프 체인의 개념은 1900년대에 등장하였지만, 앞의 '날씨' 사례와 같은 간단한 사례가 아니라면 보통 사람의 손으로 체인을 일일이 계산하는 것은 불가능하다. 더군다나 무수히 반복한다는 정도가 아무리 적어도 수백번, 기본적으로는 1,000번이 넘기 마련이기 때문에 컴퓨터의 도움이 필수적이다. 따라서 CPU가 어느정도 따라와야 발전하는 학문이였고, 이제서야 빛을 본다고 해도 과언이 아니다. 2000년대로 넘어서면서 확률과 관련된 거의 모든 시뮬레이션의 결과는 이 MCMC의 결과라고 봐도 될 정도로, 매우 중요한 위치를 차지하고 있다.

다만 실제로는 특정한 분포로 수렴한다고 해도 여러 가지 이슈들이 있어서 분포가 수렴되지 않는 경우도 있기 때문에, 앞에서 서술한 것처럼 간단한 기법은 아니다. 때문에 앞에서 언급한 '메트로폴리스-해이스팅스 알고리즘'부터 시작하여 난수를 추출하기 위한 알고리즘들이 많이 개발되어 왔다.

4. 활용

몬테 카를로 방법의 활용이 가장 알려진 분야는 인공지능이다. 대표적으로 알려진, 구글 딥마인드의 바둑 AI 알파고는 몬테 카를로 트리 탐색 (Monte Carlo Tree Search) 알고리즘이 적용됐다.

확률을 기반으로 하는 시뮬레이션은 거의 대부분 마르코프 체인 몬테 카를로 방법을 사용한다고 해도 과언이 아니다. 특히 베이즈 확률론 베이즈 정리를 기반으로 두는 통계학의 흐름인 '베이즈 통계학'은 실제 활용을 해야 하는 상황에서는 계산의 복잡도가 높아, 이 MCMC 방법이 없었으면 도저히 발전하지 못했을 것이라 말할 정도로 해당 기법에 많이 의존하고 있다.[4]

핵 및 입자물리학에서도 광범위하게 활용된다. 여기서는 난수 하나를 만드는 게 아니라 아예 충돌 이벤트 자체를 만든다. 예를 들어 LHC에서의 충돌 실험에서 검출된 전자들의 에너지를 모아다 그 분포를 보고 싶다고 하자. 이 분포에 대한 이론적 예측과 실험과의 비교가 필요할텐데, 사실 입자물리에서 어떤 이론적 예측을 계산하는 건 결코 쉬운 일이 아니다. 입자가 두세 개 생성되는 거면 모를까, 고에너지 충돌에서 생성되는 입자 수는 엄청나게 많다. 거기다 충돌 과정 그 자체도 굉장히 복잡하거니와 검출기 자체도 너무 복잡해서 손으로 계산할 만한 일이 절대 아니다. 이 상황에서 물리학자들은 이론적 예측을 시뮬레이션으로 해결한다. 즉 충돌이라든가 입자 간의 상호작용 및 붕괴, 검출기와의 상호작용 같은 중요한 부분들을 따로 쪼개어 이들 각각에서의 확률 분포를 계산한 다음, 이 확률들을 토대로 하여 몬테 카를로 시뮬레이션을 돌리는 것이다.[5] 말 그대로 무작위 가상 실험을 하는 것이다. 실험 한 번으로는 별 의미가 없지만 이걸 수십, 수백억 번 반복한 다음 이것들을 모아 히스토그램을 그리면 비로소 원하는 확률 분포를 얻을 수 있을 것이다. 괜히 LHC 같은 실험에서 고성능 컴퓨터가 많이 필요한 것이 아니다.[6] 이 가상 실험 결과물들을 가지고 전자들만 골라내어 그 에너지를 히스토그램으로 그린 것이 바로 우리가 원하는 이론적 예측이 되는 것이다. 그 복잡함이라든가 몬테 카를로 기법이 어떻게 쓰이는 지에 대한 자세한 내용은 LHC 문서를 참고하면 좋다. LHC만 설명했는데, 사실 대부분의 대형 실험에서는 이와 같은 방식으로 몬테 카를로 기법을 애용하다시피 한다. 아예 이론적 예측 혹은 가상 실험 결과들을 모은 걸 가지고 몬테 카를로, 아니면 MC(Monte Carlo)라고 지칭하기도 한다.[7]

임상시험에서도 종종 활용된다. 실제로는 인간에게 할 수 없는 조작(예를 들어 암 환자를 일부러 치료를 안 하는 상황)을 MCMC로 시뮬레이션하는 경우가 많다. 허나 임상시험에서는 아무리 우량한 알고리즘으로 예측한 데이터도 실제 시험이나 후향적 관측을 통해 얻은 데이터에 비하면 가치가 떨어진다고 평가하는 경우가 많기 때문에, 차선의 방법이라 할 수 있다.

이외에도 각종 컴퓨터 시뮬레이터, 컴퓨터 게임을 개발할 때도 활용된다.

4.1. 몬테 카를로 알고리즘

Monte Carlo algorithm.

무작위성이 들어가는 몬테 카를로 방법을 활용한 알고리즘으로, 수행에 걸리는 시간은 확정적이지만 대신 결과물에 어떤 확률로 오차가 발생할 수 있는 알고리즘을 일컫는다. 즉 정확한 답을 보장할 수 없는 단점이 있지만, 정확한 답을 보장하는 알고리즘이 시간을 너무 많이 잡아먹거나 너무 복잡해 이용하기 어려울 경우 현실적으로 써먹기 힘들기 때문에 대신 이용하는 것이다.

관련된 것으로 라스베이거스 알고리즘이 있는데 이 경우는 시간이 무작위적이고 결과물은 확정적이다.

5. 관련 문서



[1] 물론 원 문서의 면적을 증명하는 문단에서 보듯 미적분을 이용하면 닫힌 형식으로 나타낼 수 있지만, 가장 고전적으로 사용되는 예시이다. [2] 실제 투입됐을 때가 1946년이고, 몬테 카를로 방법의 아이디어 자체는 울람이 예전부터 생각해보고 있었다고 한다. [3] 단, 처음에 제시한 입력값에 따라서는 안정적인 연쇄과정에 이르기까지 시간이 조금 걸릴 수도 있다. 그래서 MCMC 방법을 시행할 때 난수 추출을 시작한 뒤부터 최초의 불안정한 체인들을 조금 잘라버리기도 하는데, 이를 전문가들의 속어로 'burn-in'이라고 한다. [4] 비공액 사전분포 인해 생기는 복잡한 사후분포를 계산하는데 있어 필수이다. [5] 부루마불 같은 주사위 게임을 생각하면 쉽다. 각 분기 별로 주사위를 던지고, 나온 수에 따라 어디로 간 다음, 거기서 다음 분기를 만나 또 주사위를 던지는 식이다. 예를 들어 시물레이션에서 힉스 입자 하나가 생성되었다고 하자. 이 분기에서 생성된 난수(주사위 수)가 얼마냐에 따라 이 힉스 입자가 아래 쿼크 두 개로 쪼개질지, 타우온 두 개로 쪼개질지, Z 보손 두 개로 쪼개질지 결정하는 것이다. (여기서 난수를 더 발생시켜서 어느 각도로 쪼개져서 날아갈 건지 같은 것도 결정한다.) 그러면 그 다음 단계에서 또 주사위를 던져 그 다음을 따른다. 아래 쿼크의 경우, 아래 쿼크 하나가 이제 어떤 식으로 강한 상호작용을 할 것인지, 타우온의 경우, 타우온이 (타우온 중성미자와) 다른 렙톤-중성미자로 쪼개질지 아니면 쿼크 두 개로 쪼개질지, Z 보손의 경우, Z로부터 렙톤 두 개가 쌍생성될 지 아니면 쿼크 두 개가 쌍생성될 지 결정하는 것이다. 이걸 (검출기에 도달할 수 있을 정도로) 안정한 입자들로 다 붕괴할 때까지 반복하는 것이다. 그러고 나서 이 최종 입자들이 검출기에 도달했을 때 검출기와 상호작용할 때에도 또 분기와 난수를 적용시켜서 검출기 내에서 어떻게 반응하는가를 결정한다. [6] 게다가 검출기에서 나온 신호를 분석하는 것 또한 연산량이 장난 아니기 때문에 (언급했다시피 검출기 자체가 복잡하기도 하고 입자가 너무 많이 나와서 대충 계산해서는 입자들의 제대로 된 경로 및 에너지를 정확하게 얻을 수 없다) 그쪽에도 슈퍼컴퓨터가 많이 필요하다. [7] 예: 실험이랑 몬테 카를로랑 비교해 봤어요?