본문 바로가기
유도항법제어/칼만필터를 넘어서

[PF-1] 순차 중요 샘플링 (Sequential Importance Sampling)

by 깊은대학 2021. 6. 13.

베이즈 필터(Bayes filter) 문제는 측정값의 시퀀스 z0:t 와 제어입력의 시퀀스 u0:t1 을 조건으로 한 상태변수 xt 의 조건부 확률밀도함수 p(xt|z0:t,u0:t1) 을 계산하는 문제였다.

 

 

상태변수 xt 의 사후(posterior) 조건부 확률밀도함수p(xt|z0:t,u0:t1) 이 주어지면 다양한 종류의 상태변수 추정이 가능하다. 예를 들어 칼만필터(Kalman filter)는 최적 MMSE(minimum mean-square error) 추정값을 계산하는 필터로서 상태변수xt 의 추정값을 x^t=E[xt|z0:t,u0:t1] 로 계산한다.

하지만 베이즈 필터 알고리즘을 이용하여 해석적으로 조건부 확률밀도함수 p(xt|z0:t,u0:t1) 을 계산할 수 있는 경우는 극히 제한적이다. 따라서 수치적인 계산 방법이 필요한데 그 중의 하나가 샘플링(sampling)을 이용하는 방법이다.

디랙 델타(Dirac delta) 함수 δ(x) 를 이용하면 확률밀도함수 p(xt|z0:t,u0:t1) 을 다음과 같이 근사화 할 수 있다.

 

(1)p(xt|z0:t,u0:t1)i=1Nwt(i)δ(xtxt(i))

 

여기서 xt(i) 는 확률밀도함수가 p(xt|z0:t,u0:t1) 인 모집단에서 추출한 샘플(또는 파티클)이다. N 개의 샘플이 독립적이고 공평하게 추출됐다면(iid 샘플) 각 샘플이 추출될 확률 wt(i) 는 다음과 같이 동일하게 주어진다.

 

(2)wt(i)=P{xt=xt(i)}=1N

 

그러면 xt 의 함수인 f(xt) 의 기댓값 E[f(xt)|z0:t,u0:t1] 는 다음과 같이 샘플 평균(sample mean)으로 추정할 수 있다.

 

(3)Extp(xt|z0:t,u0:t1)[f(xt)|z0:t,u0:t1]       =xtf(xt)p(xt|z0:t,u0:t1) dxt       xtf(xt)i=1N1Nδ(xtxt(i)) dxt       =i=1N1Nf(xt(i))

 

여기서 문제는 사후 확률밀도함수인 p(xt|z0:t,u0:t1) 로부터 샘플을 추출할 수 있는가이다. 보통 임의의 확률밀도함수에서 샘플을 직접 추출하는 것은 사실상 불가능하다. 그래서 대신 쉽게 샘플을 추출할 수 있는 확률밀도함수인 중요분포(importance distribution)함수 q(xt|z0:t,u0:t1) 를 도입한다.

중요 샘플링(importance sampling)에 의하면 xt 의 기댓값은 다음과 같이 표현할 수 있다.

 

(4)Extp(xt|z0:t,u0:t1)[xt|z0:t,u0:t1]       =xtxtp(xt|z0:t,u0:t1) dxt       =xtxtp(xt|z0:t,u0:t1)q(xt|z0:t,u0:t1)q(xt|z0:t,u0:t1) dxt       =xt(xtp(xt|z0:t,u0:t1)q(xt|z0:t,u0:t1))q(xt|z0:t,u0:t1) dxt       =Extq(xt|z0:t,u0:t1)[(xtp(xt|z0:t,u0:t1)q(xt|z0:t,u0:t1))|z0:t,u0:t1]

 

식 (4)에 의하면 확률밀도함수 p(xt|z0:t,u0:t1)xt(i)q(xt|z0:t,u0:t1) 에서 추출한 샘플을 이용하여 다음과 같이 근사화할 수 있다.

 

(5)p(xt|z0:t,u0:t1)i=1Nwt(i)δ(xtxt(i))

 

여기서 wt(i) 를 중요 가중치(importance weights)라고 하며 다음과 같이 계산한다.

 

(6)wt(i)p(xt(i)|z0:t,u0:t1)q(xt(i)|z0:t,u0:t1)

 

식 (5)에서 근사화된 확률밀도함수도 확률밀도함수의 성질을 가져야 하므로 중요 가중치 wt(i) 는 항상 정규화 되어야 한다. 즉,

 

(7)i=1Nwt(i)=1

 

식 (4), (5)와 (6)에 의하면 Extp(xt|z0:t,u0:t1)[xt|z0:t,u0:t1] 는 샘플 xt(i)q(xt|z0:t,u0:t1) 과 그 샘플의 중요도를 나타내는 중요 가중치 wt(i) 를 이용하여 다음과 같이 근사적으로 계산할 수 있다.

 

(8)Extp(xt|z0:t,u0:t1)[xt|z0:t,u0:t1]i=1Nwt(i)xt(i)

 

 

 

한편, 순차 중요 샘플링(SIS, sequential importance sampling)은 중요 샘플링의 순차적인 버전이다. SIS는 베이즈 필터에서 고려했던 상태변수 xt 의 조건부 확률밀도함수인 사후 확률밀도함수 p(xt|z0:t,u0:t1) 대신에 이를 시간스텝 0부터 t까지의 전체 상태변수 시퀀스 x0:t 로 확장시킨 전체 조건부 확률밀도함수 p(x0:t|z0:t,u0:t1) 을 다룬다.

이 확률밀도함수를 근사화 하기 위해서 중요 샘플링에서 했던 것과 같이 N 개의 시퀀스 x0:t(i) 를 샘플링해야 하는데, 시간스텝이 증가할 때 마다 새로운 시퀀스를 다시 샘플링하는 것이 아니라 한 시간스텝 전까지 샘플링된 시퀀스 x0:t1(i) 에다가 현재 시간스텝 t 에서 추가적으로 샘플링한 N 개의 샘플 xt(i) 를 덧붙여서 샘플링 시퀀스 x0:t(i) 를 만드는 방법을 사용한다. 즉 '순차적인 버전' 이란 시간스텝 t 가 증가하면서 순차적으로 샘플링한다는 의미다.

 

x0:t(i)={x0:t1(i), xt(i)}

 

 

 

전체 조건부 확률밀도함수 p(x0:t|z0:t,u0:t1) 을 전개해 보자.

 

(9)p(x0:t|z0:t,u0:t1)       =p(zt|x0:t,z0:t1,u0:t1)p(x0:t,z0:t1|u0:t1)p(z0:t|u0:t1)       =p(zt|xt)p(x0:t,z0:t1|u0:t1)p(zt|z0:t1,u0:t1)p(z0:t1|u0:t1)       =p(zt|xt)p(x0:t|z0:t1,u0:t1)p(zt|z0:t1,u0:t1)       =p(zt|xt)p(xt|x0:t1,z0:t1,u0:t1)p(x0:t1|z0:t1,u0:t1)p(zt|z0:t1,u0:t1)       =η p(zt|xt)p(xt|xt1,ut1)p(x0:t1|z0:t1,u0:t2)

 

여기서 η=1p(zt|z0:t1,u0:t1) 는 정규화 항이고, 베이즈 필터에서 사용한 마르코프 시퀀스와 비메모리 측정 모델 가정을 이용하였다.

 

(10)p(xt|x0:t1,z0:t1,u0:t1)=p(xt|xt1,ut1)p(zt|x0:t,z0:t1,u0:t1)=p(zt|xt)

 

중요 샘플링 방법과 마찬가지로 중요분포함수 q(x0:t|z0:t,u0:t1) 에서 N 개의 시퀀스 x0:t(i) 를 샘플링한다면 중요 가중치는 다음과 같이 계산할 수 있다.

 

(11)wt(i)p(zt|xt(i))p(xt(i)|xt1(i),ut1)p(x0:t1(i)|z0:t1,u0:t2)q(x0:t(i)|z0:t,u0:t1)

 

여기서 중요분포함수에 다음과 같은 가정을 한다.

 

(12)q(x0:t|z0:t,u0:t1)=q(xt|x0:t1,z0:t,u0:t1)q(x0:t1|z0:t1,u0:t2)

 

식 (12)는 순차적인 샘플링을 가능하게 하는 가정이다(중요분포함수를 한 스텝 전개하면 q(x0:t|z0:t,u0:t1)=q(xt|x0:t1,z0:t,u0:t1)q(x0:t1|z0:t,u0:t1) 가 되나 q(x0:t1|z0:t,u0:t1)=q(x0:t1|z0:t1,u0:t2)로 가정한 것이다. 중요분포함수는 설계자의 선택의 문제이므로 타당한 가정이다). 식 (12)를 반복하면 다음과 같은 연쇄적인 식을 얻을 수 있다.

 

(13)q(x0:t|z0:t,u0:t1)=q(x0)k=1tq(xk|x0:k1,z0:k,u0:k1)

 

식 (13)에 의하면 q(x0:t1|z0:t1,u0:t2) 에서 샘플링한 N 개의 시퀀스 x0:t1(i) 에 중요분포인 q(xt|x0:t1,z0:t,u0:t1) 에서 샘플링한 N 개의 샘플 xt(i) 를 합치면 q(x0:t|z0:t,u0:t1) 에서 N 개의 시퀀스 x0:t(i) 를 샘플링 한 것이 된다.

식 (12)를 식 (11)에 대입하면 중요 가중치는 다음과 같이 된다.

 

(14)wt(i)p(zt|xt(i))p(xt(i)|xt1(i),ut1)q(xt(i)|x0:t1(i),z0:t,u0:t1)p(x0:t1(i)|z0:t1,u0:t2)q(x0:t1(i)|z0:t1,u0:t2)

 

그런데 여기서

 

(15)wt1(i)p(x0:t1(i)|z0:t1,u0:t2)q(x0:t1(i)|z0:t1,u0:t2)

 

이므로 시간스텝 t 에서의 중요 가중치와 시간스텝 t1 에서의 중요 가중치는 다음과 같이 재귀(recursive)식 (보통 재귀식이라고 번역하는데 순 우리말인 도돌이식이라고 번역하는 것도 괜찮을 것 같다)을 만족하게 된다.

 

(16)wt(i)p(zt|xt(i))p(xt(i)|xt1(i),ut1)q(xt(i)|x0:t1(i),z0:t,u0:t1)wt1(i)

 

정리하면 q(x0:t1|z0:t1,u0:t2) 에서 샘플링한 N 개의 시퀀스 x0:t1(i)) 의 중요 가중치가 wt1(i) 라고 할 때, q(x0:t|z0:t,u0:t1)에서 샘플링한 N 개의 시퀀스 x0:t(i)) 와 중요 가중치 wt(i) 를 계산하려면 시간스텝 t 에서 xt(i)q(xt(i)|x0:t1(i),z0:t,u0:t1) 를 샘플링하고 식 (16)으로 그 때의 중요 가중치를 계산하면 된다. 이것이 순차 중요 샘플링 또는 SIS 알고리즘이다.

SIS 알고리즘을 정리하면 다음과 같다.

[1] N 개의 샘플 x0(i) 를 추출한다.

 

x0(i)p(x0),   i=1,...,N

 

      중요 가중치는 w0(i)=1N 으로 한다.

[2] 시간스텝 t=1,...,T 동안 다음을 수행한다.

      1. 중요분포에서 샘플 xt(i) 를 추출한다.

 

xt(i)q(xt|x0:t1(i),z0:t,u0:t1),   i=1,...,N

 

      2. 중요 가중치를 다음 식으로 계산하고,

 

wt(i)p(zt|xt(i))p(xt(i)|xt1(i),ut1)q(xt(i)|x0:t1(i),z0:t,u0:t1)wt1(i)

 

        정규화 시킨다.

여기서 중요분포 q(xt|x0:t1,z0:t,u0:t1) 에 마르코프 시퀀스적인 가정을 도입한다면,

 

(17)q(xt|x0:t1,z0:t,u0:t1)=q(xt|xt1,zt,ut1)

 

중요밀도함수는 xt1,zt,ut1 에만 의존적이 되므로 SIS 알고리즘에서 상태변수의 전체 시퀀스 샘플 x0:t1(i) 와 측정값의 시퀀스 z0:t 와 제어입력의 시퀀스 u0:t1 를 저장하지 않아도 된다.

순차 중요 샘플링에 의해서 중요 가중치를 계산하면 전체 확률밀도함수 p(x0:t|z0:t,u0:t1) 을 다음과 같이 근사화할 수 있다.

 

(18)p(x0:t|z0:t,u0:t1)i=1Nwt(i)δ(x0:tx0:t(i))

 

또한 Ex0:tp(x0:t|z0:t,u0:t1)[x0:t|z0:t,u0:t1] 는 샘플 x0:t(i) 와 그 샘플의 중요도를 나타내는 중요 가중치 wt(i) 를 이용하여 다음과 같이 근사적으로 계산할 수 있다.

 

(19)Ex0:tp(x0:t|z0:t,u0:t1)[x0:t|z0:t,u0:t1]i=1Nwt(i)x0:t(i)

 

그런데 식 (18)과 (19)는 상태변수 xt 의 조건부 확률밀도함수인 사후 확률밀도함수 p(xt|z0:t,u0:t1) 가 아니라 시간스텝 0 부터 t 까지의 전체 상태변수 시퀀스 x0:t 로 확장시킨 전체 조건부 확률밀도함수 p(x0:t|z0:t,u0:t1) 에 관한 것이다.

그렇다면 p(x0:t|z0:t,u0:t1) 에서 p(xt|z0:t,u0:t1) 를 어떻게 계산할 수 있을까.

 

 

 

댓글