Monte-Carlo Method

Roh's warehouse·2025년 9월 20일

Statistics

목록 보기
6/8

Monte Carlo Method

몬테카를로 방법 (Monte Carlo Method)이란, 어떤 값 (또는 함수값)을 근사적(approximation)으로 계산하는데 있어 확률분포로부터 생성한 무작위 샘플(표본)들을 이용하는 방법이다.

이를 위해 큰 수의 법칙 (Law of large number, LLN)를 이용한다.

  • LLN: X1,,Xni.i.d.fX_1, \cdots, X_n \overset{i.i.d.}{\sim} f에 대하여
Xˉn=1ni=1nXipE(X1)\bar{X}_n = \frac{1}{n} \sum_{i=1}^n X_i \overset{p}{\to} E(X_1)

우리가 구하고자 하는 값을 θ\theta라고 할 때, θ\theta를 어떤 확률변수의 기대값으로 표현할 수 있다고 하자. 즉, θ=E(h(X)),Xf\theta = E(h(X)), X \sim f.

만약 X1,,XnX_1, \cdots, X_nff로부터 생성한 무작위 샘플(표본)이라면, LLN에 의해 다음이 성립한다.

1ni=1nh(Xi)pE(h(X))=θ\frac{1}{n}\sum_{i=1}^n h(X_i) \overset{p}{\to} E(h(X)) = \theta

따라서, 몬테카를로 방법을 쓰기 위해서는 주어진 확률분포로부터 무작위 샘플을 생성하는 (난수생성) 알고리즘이 필요하다.

대부분의 알려진 확률분포들은 무작위 샘플을 생성하는 알고리즘들이 연구되어, R, Python 등에서 쉽게 사용할 수 있다.

Sampling Methods

Inverse CDF

Inverse CDF 샘플링 방법은 Probability Integral Transform (PIT)를 이용한 방법이다.

  • PIT: 연속 확률 변수 X의 CDF를 FXF_X라고 할 때, FX(X)F_X(X)Unif(0,1)\text{Unif}(0,1)을 따른다.

만약 FX(X)U,UF_X(X) \sim U, U(0,1)(0, 1)에서의 균일분포 (Unif(0,1))(\text{Unif}(0,1))이면 다음이 성립한다.

XFX1(U)=inf{x:F(x)U}X \sim F_X^{-1}(U) = \inf \{x : F(x) \ge U\}

즉, U1,,UkU_1, \cdots, U_k(Unif(0,1))(\text{Unif}(0,1))에서 생성하면, X1=F1(U1)X_1 = F^{-1}(U_1), \cdots, Xk=F1(Uk)X_k = F^{-1}(U_k)F(x)F(x) (또는 f(x)f(x))를 따르는 랜덤 샘플이 된다.

만약 F1(u)F^{-1}(u)를 구하기가 어려운 경우에는 다음과 같은 방법을 따른다.

  1. f(x)f(x)의 support 내의 숫자열 x1,,xmx_1, \cdots, x_m을 적당히 찾아 ui=F(xi)u_i = F(x_i)를 구한다.

    • ff의 support = {xf(x)>0}\{x \mid f(x) > 0 \}
  2. UUnif(0,1)U \sim \text{Unif}(0,1)UU를 생성하여 uiUuju_i \leq U \leq u_j를 만족하는 가장 가까운 ui,uju_i, u_j에 대하여 다음의 XX를 구한다.

    X=ujUujuixi+UuiujuixjX = \frac{u_j - U}{u_j - u_i} x_i + \frac{U - u_i}{u_j - u_i} x_j
    • 위의 XX(xi,F(xi)),(xj,F(xj))(x_i, F(x_i)), (x_j, F(x_j))를 linear interpolation 한 값이다.

Example of Inverse CDF

f(x)=12xf(x) = \frac{1}{2} x, 0<x<20 < x < 2 인 확률밀도함수를 갖는 확률변수를 무작위 생성한다고 하자.

F(x)=0xf(y)dy=14x2F(x) = \int_{0}^{x} f(y) dy = \frac{1}{4} x^2, 0<x<20 < x < 2 이므로 F1(u)=4u=2uF^{-1}(u) = \sqrt{4u} = 2 \sqrt{u}, 0<u<10 < u < 1 이 된다.

따라서 U1,,UkUnif(0,1)U_1, \cdots, U_k \sim \text{Unif}(0,1) 분포로부터 생성한 샘플이라면, X1=2U1,,Xk=2UkX_1 = 2 \sqrt{U_1}, \cdots, X_k = 2 \sqrt{U_k}는 주어진 f(x)f(x)에서 생성된 샘플이 된다.

Rejection Sampling

확률분포 ff를 따르는 XX를 생성하고자 한다: XfX \sim f.

Rejection Sampling은 다음과 같은 순서로 진행된다.

  1. ff보다 난수생성이 쉽고 다음을 만족하는 확률분포 gg를 찾는다.

    βf(x)g(x),0<β<1\beta f(x) \leq g(x), 0 < \beta < 1
    • g(x)/β=e(x)g(x)/\beta = e(x)f(x)f(x)의 upper envelop이라고 한다.

  2. gg로부터 XX를 생성한다.

  3. Unif(0,1)\text{Unif}(0, 1)으로부터 UU를 생성한다.

  4. 만약 Ug(X)βf(X)Ug(X) \leq \beta f(X) (또는 Uf(X)/e(X)U \leq f(X)/e(X))를 만족하면 XXff로부터 생성된 난수로 받아들인다 (accept). 아니라면 (reject), 1번으로 돌아간다.

  5. 위 과정을 원하는 크기의 샘플을 얻을때까지 반복한다.

Example of Rejection Sampling

Inverse CDF방법에서의 예시와 같은 함수 f(x)=12x,0<x<2f(x) = \frac{1}{2}x, 0 < x < 2인 확률밀도함수로 갖는 확률변수를 Rejection sampling을 이용해 생성해보자.

g(x)=12,0<x<2g(x) = \frac{1}{2}, 0 < x < 2Unif(0,2)\text{Unif}(0,2)의 확률밀도함수이면서 f(x)g(x)/β,β=1/2f(x) \leq g(x)/\beta, \beta = 1/2를 만족한다. 또한 Unif(0,2)\text{Unif}(0, 2)로부터 데이터를 생성하는것은 쉽다.

이때 envelop 함수는 e(x)=2g(x)=1e(x) = 2g(x) = 1가 된다.

이 경우, rejection sampling 알고리즘은 다음과 같다.

  1. XUnif(0,2)X \sim \text{Unif}(0,2)XX 생성하기

  2. UUnif(0,1)U \sim \text{Unif}(0, 1)UU 생성하기

  3. Uf(X)/e(X)=12XU \leq f(X)/e(X) = \frac{1}{2}X를 만족하면 XXf(x)f(x)로 부터 생성된 샘플로 받아들이고 아니면 버린다.

Importance Sampling

θ=E(h(X))\theta = E(h(X))θ\theta를 구하는 문제로 다시 돌아가보자. 여기서 XfX \sim f로 가정한다.

ff보다 난수생성이 쉽고 support가 ff의 support를 포함하는 확률분포 gg가 있다고 하자.

θ\thetagg를 이용하여 다음과 같이 표현할 수 있다.

θ=Ef(h(X))=h(x)f(x)dx=h(x)f(x)g(x)g(x)dx=Eg(h(X)f(X)g(X))\begin{aligned} \theta &= E_{f}(h(X)) = \int h(x) f(x) dx \\ &= \int h(x) \frac{f(x)}{g(x)} g(x) dx = E_{g} \left( h(X) \frac{f(X)}{g(X)} \right) \end{aligned}

X1,,XnX_{1}, \ldots, X_{n}gg로부터 생성된 난수라고 하자. w(x)=f(x)g(x)w^\ast(x) = \frac{f(x)}{g(x)}라고 하면, 다음은 θ\theta를 근사(approximate)하는 값이 된다.

θ^=1nih(Xi)w(Xi),\hat{\theta} = \frac{1}{n} \sum_{i} h(X_{i}) w^\ast(X_{i}),

이 때의 ggimportance sampling 함수라고 부른다.

Example of Importance Sampling

Inverse CDF 방법에서의 예시와 같은 함수 f(x)=12x,0<x<2f(x) = \frac{1}{2}x, 0 < x < 2 인 확률밀도함수를 갖는 확률변수를 XX 라고 하자.

이 때, θ=E(X2)\theta = E(X^{2})θ\theta를 추정하는 문제를 생각해보자.

f(x)=12x,0<x<2f(x) = \frac{1}{2}x, 0 < x < 2이므로 E(X2)=02(12)x3dx=2E(X^{2}) = \int_{0}^{2} (\frac{1}{2}) x^{3} dx = 2로 쉽게 계산할 수 있지만, Importance sampling방법으로 근사적으로 θ\theta를 구해볼수도 있다.

θ=Ef(X2)=x2f(x)dx=x2(f(x)g(x))g(x)dx=x2x(12)dx\theta = E_{f}(X^{2}) = \int x^{2} f(x) dx = \int x^{2} (\frac{f(x)}{g(x)}) g(x) dx = \int x^{2} \cdot x \cdot (\frac{1}{2}) dx

g(x)=12g(x) = \frac{1}{2}로 보면, θ=Eg(X3)\theta = E_{g}(X^{3})이 된다.

따라서 Unif(0,2)\text{Unif}(0, 2)에서 데이터 X1,,XnX_{1}, \cdots, X_{n}을 생성하여 θ^=1nh(Xi)w(Xi)=1nXi2Xi\hat{\theta} = \frac{1}{n} \sum h(X_{i}) w^{*}(X_{i}) = \frac{1}{n} \sum X_{i}^{2} \cdot X_{i}를 이용하여 구할 수 있다.

profile
공부랑 연구랑 생각

0개의 댓글