logo

중요도 샘플링 📂머신러닝

중요도 샘플링

개요1

중요도 샘플링은 몬테카를로 방법 중 하나로, 유한합으로 적분(기댓값)을 근사할 때 사용할 수 있는 일종의 샘플링 트릭이다.

빌드업

표준정규분포에서 zz 값이 44이상일 확륙은 약 3.167×1053.167 \times 10^{-5}이다.

412πez2/2dz3.167×105 \begin{equation} \int_{4}^{\infty} \dfrac{1}{\sqrt{2\pi}} e^{-z^{2}/2}dz \approx 3.167 \times 10^{-5} \end{equation}

이 적분을 몬테카를로적분으로 계산하는 줄리아 코드는 다음과 같다.

using Distributions

n = 50000                      # sample size
z₀ = 4.0

for i in 1:5
    z = rand(Normal(), n)      # n-samples drawn from a standard normal distribution 
    est_MC = sum(z .> z₀)/n    # estmiates using Monte Carlo
    println(est_MC)
end

4.0e-5
6.0e-5
0.0
4.0e-5
4.0e-5

다섯번 정도 해보면 계산된 값이 참값과 비슷하지 않고, 심지어는 00으로 계산될 때도 있다. 이런 부정확함은 표준정규분포의 꼬리가 너무 얇기 때문에 생긴다. 종이 위에서 적분할 때는 꼬리가 아무리 얇아도 그에 대한 계산이 적분에 포함되지만, 컴퓨터로 샘플링할 때는 유한한 샘플만을 다루기 때문에 너무 발생확률이 낮은 사건은 계산에 포함되지 않을 수 있다. 물론 nn을 늘리면 더 정확해질테지만 이는 너무 당연한 말이고, 이런걸 해결방법이라고 부르지는 않는다.

f(x)p(x)dx=f(x)p(x)q(x)q(x)dx=[f(x)p(x)q(x)]q(x)dx \int f(x)p(x) dx = \int f(x)\dfrac{p(x)}{q(x)} q(x) dx = \int \left[ f(x)\dfrac{p(x)}{q(x)} \right] q(x) dx

이제 확률밀도함수pp인 확률변수 XX에 대해서, f(X)f(X)의 기댓값을 계산하는 상황을 생각해보자. 이는 위 식의 좌변과 같이 계산할 수 있는데, 여기서 어떤 q(x)q(x)를 나눠주고 곱해줘도 여전히 같은 값이다. 식의 우변은 좌변과 같은 값을 갖지만, 의미는 '확률밀도함수가 qq인 확률변수 XX에 대해서 f(X)p(X)q(X)f(X)\dfrac{p(X)}{q(X)}의 기댓값'이 된다. 여기서 qqpp보다 꼬리가 두꺼운 확률밀함수로 선택한다면, 발생확률이 너무 낮은 사건에 의한 부정확함을 줄일 수 있다.

정의

XX를 확률밀도함수가 pp인 확률변수라고 하자. qq를 다음을 만족하는 또 다른 확률밀도함수라고 하자.

supppsuppq(    q0 if p0) \supp p \subset \supp q \qquad (\iff q\ne 0 \text{ if } p \ne 0)

중요도 샘플링importance sampling이란 f(X)f(X)의 기댓값 Ep[f(X)]E_{p}[f(X)]Eq[f(X)p(X)q(X)]E_{q}[f(X)\frac{p(X)}{q(X)}]로 계산하여 구하는 방법을 말한다. 이때 supp\supp는 함수의 서포트이다.

Ep[f]=f(x)p(x)dx=[f(x)p(x)q(x)]q(x)dx=Eq[fp/q] E_{p}[f] = \int f(x)p(x) dx = \int \left[ f(x)\dfrac{p(x)}{q(x)} \right] q(x) dx = E_{q}[fp/q]

여기서 qq제안 분포proposal distribution, w=pqw = \frac{p}{q}중요도 가중치importance weight라고 한다.

설명

다시말해 중요도 샘플링이란 몬테카를로 적분을 다음과 같이 계산하는 것이다.

1nf(xi)p(xi)q(xi),Xiq(x)(instead of 1nf(xi),Xip(x)) \dfrac{1}{n}\sum f(x_{i})\dfrac{p(x_{i})}{q(x_{i})}, X_{i} \sim q(x) \quad \left( \text{instead of } \dfrac{1}{n}\sum f(x_{i}), X_{i} \sim p(x) \right)

다음과 같이 사용하면 도움이 된다.

  • 빌드업에서의 예제와 같이 p(x)p(x)의 꼬리가 너무 얇을 때 서포트가 더 큰 분포를 제안함수로 둔다.
  • p(x)p(x)의 분포로 샘플링 하기 어려울 때 샘플링하기 쉬운 분포를 제안함수를 q(x)q(x)로 둔다.

qqpp의 분모로 곱해지기 때문에 suppq\supp qsuppp\supp p를 포함해야한다.

빌드업의 적분 (1)(1)코시분포를 제안분포로 두고 중요도 샘플링으로 다시 계산한 결과는 다음과 같다.

3516_IS.png

# Julia code

using Distributions

n = 50000                      # sample size
z₀ = 4.0

for i in 1:5
    z = rand(Cauchy(), n)                       # n-samples drawn from a Cauchy distribution 
    w = pdf.(Normal(), z) ./ pdf.(Cauchy(), z)
    est_IS = sum(w[z .> z₀])/n                  # estmiates using Importance Sampling
    println(est_IS)
end

3.0330744703037005e-5
3.1808448538011614e-5
3.049259883894785e-5
3.305423127141489e-5
3.1807695818207125e-5

성질

불편추정량

1nf(xi)p(xi)q(xi)\dfrac{1}{n}\sum\limits f(x_{i})\dfrac{p(x_{i})}{q(x_{i})}Ep[f(X)]E_{p}[f(X)]불편추정량이다.

증명

Eq[1ninf(Xi)p(Xi)q(Xi)]=1ninEq[f(Xi)p(Xi)q(Xi)]by linearity of E=Eq[f(X)p(X)q(X)]=Ep[f(X)] \begin{align*} E_{q}\left[ \frac{1}{n}\sum_{i}^{n}f(X_{i})\dfrac{p(X_{i})}{q(X_{i})} \right] &= \frac{1}{n}\sum_{i}^{n} E_{q}\left[ f(X_{i})\dfrac{p(X_{i})}{q(X_{i})} \right] &\text{by linearity of EE} \\ &= E_{q}\left[ f(X)\dfrac{p(X)}{q(X)} \right] \\ &= E_{p}\left[ f(X) \right] \end{align*}

분산

중요도샘플링에서의 분산은

Var[fpq]=Eq[(fpq)2](Eq[fpq])2=f(x)2p(x)2q(x)dx(f(x)p(x)dx)2 \begin{align} \Var \left[ \frac{fp}{q} \right] &= E_{q}\left[ \left( \frac{fp}{q} \right)^{2} \right] - \left( E_{q}\left[ \frac{fp}{q} \right] \right)^{2} \\ &= \int \frac{f(x)^{2}p(x)^{2}}{q(x)} dx - \left( \int f(x)p(x) dx \right)^{2} \nonumber \end{align}

이므로, 유한한 분산을 갖기 위해선 다음이 성립해야한다.

f(x)2p(x)2q(x)dx< \int \frac{f(x)^{2}p(x)^{2}}{q(x)} dx \lt \infty

이는 p(x)/q(x)p(x)/q(x)유계여야한다는 말이고, 이는 다시 q(x)q(x)의 꼬리가 p(x)p(x)의 꼬리보다 두꺼워야한다는 말과 같다. 분산을 최소화하는 qq는 다음과 같다.

q=arg minqVar[fp/q]=f(x)p(x)f(x)p(x)dx q^{\ast} = \argmin\limits_{q} \Var [fp/q] = \frac{ \left| f(x) \right| p(x)}{ \int \left| f(x) \right| p(x) dx}

증명

(2)(2)에서 두번째 항은 qq에 의존하는 것처럼 보여도, Eq[fpq]=f(x)p(x)dxE_{q}\left[ \frac{fp}{q} \right] = {\displaystyle \int} f(x)p(x)dx이므로 qq와는 무관한 값이다.

arg minqVar[fp/q]=arg minqEq[(fpq)2] \argmin\limits_{q} \Var [fp/q] = \argmin\limits_{q} E_{q}\left[ \left( \frac{fp}{q} \right)^{2} \right]

옌센 부등식

개구간 II 에서 함수 ϕ\phi 가 컨벡스하고 두 번 미분가능, 확률변수 XX 의 기댓값 μ\mu 가 존재하며 XIX \subset I ϕ[E(X)]E[ϕ(X)] \phi [ E(X) ] \le E [ \phi (X)]

그런데 이차함수는 컨벡스이므로,

(Eq[fpq])2Eq[(fpq)2]    (f(x)p(x)dx)2f(x)2p(x)2q(x)dx \begin{align*} && \left( E_{q}\left[ \frac{fp}{q} \right] \right)^{2} &\le E_{q}\left[ \left( \frac{fp}{q} \right)^{2} \right] \\ \implies && \left( \int f(x)p(x) dx \right)^{2} &\le \int \frac{f(x)^{2} p(x)^{2}}{q(x)} dx \end{align*}

여기서 q(x)=f(x)p(x)f(x)p(x)dxq(x) = \frac{ \left| f(x) \right| p(x)}{ \int \left| f(x) \right| p(x) dx}이면 등호가 성립한다.


  1. Christoper M. Bishop, Pattern Recognition annd Machine Learning (2006), p532-534 ↩︎