Importance Sampling이란?

복잡한 함수 $p(z)$를 가지는 $f(x)$의 기대값을 계산하고 싶지만, 수학적으로 계산하기 어려울 경우 사용하는 방법 중 하나이다. 특히 $p(z)$로부터 샘플을 추출하기가 어려울 경우 사용한다. 바로 $p(z)$ 대신 단순한 $q(z)$의 샘플을 사용하여 $f(z)$의 기대값을 계산한다. 비록 $p(z)$는 어려운 형태이지만,  모든 $z$값이 주어지면 $p(z)$의 값을 쉽게 계산할 수 있어야 한다. 더 자세히 말하면, $p(z)$보다는 $\tilde{p}(z) / Z_p$에서 $\tilde{p}(z)$이다. 이유는 $Z_p$(정규항)를 계산하기 어렵기 때문이다. 정규항이란 값을 정규범위 값으로 만들어주는 항이다. 모르기 때문에 그냥 퉁쳐서 역할상의 의미로 정규항이라고 칭한다. 여기서는 확률 분포이므로, 0~1까지의 값으로 만들어 준다.


Importance sampling 공식 살펴보기

$$E_{z \sim p}[f] \approx  \frac{1}{L} {\sum_{l=1}^{L}{  \color{Blue}\frac{p(z^l)} {q(z^l)}} f(z) } = \frac{1}{L} {\sum_{l=1}^{L}{  \color{Blue}w(z^l) }f(z) } \tag{1} \label{ef}$$

여기서 $\frac{p(q^l)}{q(z^l)}$이 샘플 $z^l$의 가중치(weight)라고 볼 수 있다. 즉, 가중치는 두 $p(z)$와 $q(z)$의 비율이라고 해석할 수 있다. 이 $q(z)$와 $p(z)$는 샘플로부터 근사적으로 계산할 수 있는 값이다. 즉, $w(z)$는 바로 계산이 가능하다. 단, $\sum_{l=1}^{L} w(z^{l}) = 1$이 되도록 정규화를 하면된다. 

Importance sampling 기법은 특별히 샘플 $z$를 버리거나 하지 않는다. 무조건 $f(z)$의 기대값[$\ref{ef}$]을 계산할 때 사용한다.

좋은 $q(z)$는 무엇일까?

  1. $p(z)$와 가능한한 모습이 비슷하면 좋다.
    1. 샘플링 낭비가 발생한다.
      1. Uniform sampling으로 하면 샘플$z^{l}$을 낭비할 수 있다.
      2. 모양이 다르면 $w(z^{l})$의 값이 0에 가까울 수 있다.
  2. 샘플링이 쉬운 확률 분포이면 좋다.
  3. 결과적으로 사용자의 안목이 중요하다.

댓글 없음:

댓글 쓰기

[Rust] Ownership, Scope, Transfer Ownership 과 Borrowing

Scope, Ownership, Transfer Rust에서 사용하는 영역, 소유, 소유권 이전, 복사, 빌림을 요약해 보는 것이 목적이다. 소유(Ownership)은 Java, Go와 같은 백그라운드에서 실행하는 garbage collector가 없...