중요 샘플링(importance sampling)

Kiwoong Park·2024년 3월 13일

정의

중요 샘플링(importance sampling)은 기댓값을 계산하고자 하는 확률분포함수는 알고 있지만 샘플을 생성하기가 어려울 때 해당 확률분포함수 대신에 샘플을 생성하기가 쉬운 다른 확률분포함수를 이용해 기댓값을 추정하는 방법이다.
즉, 샘플 x\mathbf{x}에 대한 확률 p(x)p(\mathbf{x})는 쉽게 계산할 수 있지만, p(x)p(\mathbf{x})에서 샘플을 생성하는 것이 어려울 때 사용하는 방법이다.
다음과 같이 확률밀도함수 p(x)p(\mathbf{x})에 기반한 함수 f(x)f(\mathbf{x})의 기댓값을 구한다.
아래의 q(x)q(\mathbf{x})p(x)p(\mathbf{x})와 다른 확률밀도함수이다.

Exp(x)[f(x)]=xp(x)f(x)dx=xq(x)p(x)q(x)f(x)dx=Exq(x)[p(x)q(x)f(x)]E_{\mathbf{x} \sim p(\mathbf{x})}[f(\mathbf{x})]=\int_\mathbf{x}p(\mathbf{x})f(\mathbf{x})dx \\ = \int_\mathbf{x}q(\mathbf{x})\frac{p(\mathbf{x})}{q(\mathbf{x})}f(\mathbf{x})d\mathbf{x} \\ = E_{\mathbf{x} \sim q(\mathbf{x})}[\frac{p(\mathbf{x})}{q(\mathbf{x})}f(\mathbf{x})]

기대값의 아래 첨자 xp(x)\mathbf{x} \sim p(\mathbf{x})는 기댓값을 계산할 때 확률밀도함수로 p(x)p(\mathbf{x})를 사용한다는 의미이다.
위 식에서 보듯이 p(x)p(\mathbf{x})에 기반한 함수 f(x)f(\mathbf{x})의 기댓값을 q(x)q(\mathbf{x})에 기반해 계산할 수 있다는 것을 알 수 있다.
중요도(importance)라는 가중치를 통해서 샘플링하여 원래 목표한 p(x)p(\mathbf{x})에 가까울 경우 더 큰 값을 계산하고, 쉽게 샘플링할 수 있는 q(x)q(\mathbf{x})가 크다면 중요도를 낮게 판단하여 계산하는 방식이다.

함수 f(x)f(\mathbf{x})의 분산은 정의에 의해 다음과 같다.

Varp(x)[f(x)]=Exp(x)[(f(x))2](Exp(x)[f(x)])2Var_{p(\mathbf{x})}[f(\mathbf{x})]=E_{\mathbf{x} \sim p(\mathbf{x})}[(f(\mathbf{x}))^2]-(E_{\mathbf{x} \sim p(\mathbf{x})}[f(\mathbf{x})])^2

중요 샘플링의 분산도 정의에 의해 아래와 같이 된다.

Varq(x)[p(x)q(x)f(x)]=Exq(x)[(p(x)q(x)f(x))2](Exq(x)[p(x)q(x)f(x)])2=x(p(x)q(x)f(x))2q(x)dx(Exp(x)[f(x)])2=Exp(x)[p(x)q(x)(f(x))2](Exp(x)[f(x)])2Var_{q(\mathbf{x})}[\frac{p(\mathbf{x})}{q(\mathbf{x})}f(\mathbf{x})]=E_{\mathbf{x} \sim q(\mathbf{x})}[(\frac{p(\mathbf{x})}{q(\mathbf{x})}f(\mathbf{x}))^2]-(E_{\mathbf{x} \sim q(\mathbf{x})}[\frac{p(\mathbf{x})}{q(\mathbf{x})}f(\mathbf{x})])^2 \\ =\int_\mathbf{x}(\frac{p(\mathbf{x})}{q(\mathbf{x})}f(\mathbf{x}))^2q(\mathbf{x})d\mathbf{x}-(E_{\mathbf{x} \sim p(\mathbf{x})}[f(\mathbf{x})])^2 \\ = E_{\mathbf{x}\sim p(\mathbf{x})}[\frac{p(\mathbf{x})}{q(\mathbf{x})}(f(\mathbf{x}))^2]-(E_{\mathbf{x} \sim p(\mathbf{x})}[f(\mathbf{x})])^2

📌 중요 샘플링의 분산과 원래 분산을 비교해보면 중요 샘플링의 분산 값이 p(x)q(x)\frac{p(\mathbf{x})}{q(\mathbf{x})}값에 따라서 원래 분산보다 매우 커질 수도 있음을 알 수 있다.

예시

예를 들어, 1500만 명의 한국 성인 남성의 평균 키를 구하고 싶다고 생각할 때 1500만 명의 키에 대한 확률분포를 p(x)p(\mathbf{x}), 1500명의 한국 성인 남성에 대한 키의 확률분포를 q(x)q(\mathbf{x})라고 하면
위 식을 통해 1500명의 샘플만을 가지고도 1500만명의 키의 기댓값을 알 수 있다.

  • 1500명의 샘플에서 뽑았더니 키가 170cm(+/-0.5cm 내외)인 사람이 나왔다. q(x)q(\mathbf{x})에서는 0.5이라는 확률로 존재하지만, 반면에 p(x)p(\mathbf{x})에서는 0.6라는 확률로 존재한다.
  • 따라서 중요도 샘플링비인 0.60.5\frac{0.6}{0.5}을 곱해주면 1.2*170 = 204가 나온다. ~ 즉 1500만 명의 키에 대한 확률분포에서 나온 높은 확률값이 더 중요하므로 더 큰 가중치를 곱해준다.
  • 그리고 다음 샘플을 1500명의 샘플에서 뽑았는데 180cm인 사람이 나왔다. q(x)q(\mathbf{x})에서는 0.05인데 p(x)p(\mathbf{x})에서는 0.04이다. 따라서 중요도 샘플링비를 곱한 값은 0.8*180 = 144가 나온다. ~ 즉 1500만 명의 키에 대한 확률분포에서 나온 낮은 확률값이 더 중요하므로 더 작은 가중치를 곱해준다.
  • 그리고 샘플의 갯수 2로 나눠주면 174라는 값이 나왔다.
  • 이런 식으로, 샘플의 개수를 늘려가면서 계산한다면 중요도 샘플링을 통해 효율적으로 기댓값이나 분산을 구할 수 있다.

References
[1] 박성수. (2020). 수학으로 풀어보는 강화학습 원리와 알고리즘. 위키북스

profile
You matter, never give up

0개의 댓글