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

[PF-2] SIS에서 파티클 필터로

by 깊은대학 2021. 7. 11.

전체 조건부 확률밀도함수 p(x0:t|z0:t,u0:t1) 를 순차 샘플링 x0:t(i) 로 다음과 같이 근사화 할 수 있었다.

 

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

 

베이즈 필터는 상태변수 xt 의 조건부 확률밀도함수인 사후 확률밀도함수 p(xt|z0:t,u0:t1) 를 계산하기 위한 것이므로 식 (1)에서 p(xt|z0:t,u0:t1) 를 유도해 낼 필요가 있다.

 

 

p(xt|z0:t,u0:t1)p(x0:t|z0:t,u0:t1) 의 한계밀도함수이므로 다음 식이 성립한다.

 

(2)p(xt|z0:t,u0:t1)=x0:t1p(x0:t|z0:t,u0:t1) dx0:t1x0:t1i=1Nwt(i)δ(x0:tx0:t(i)) dx0:t1=i=1Nwt(i)x0:t1δ(x0:tx0:t(i)) dx0:t1

 

여기서 디랙 델타(Dirac delta) 함수 δ(x0:t) 를 전개하면 다음과 같으므로,

 

(3)δ(x0:t)=δ(x0)δ(x1)δ(xt)

 

식 (2)는 다음과 같이 된다.

 

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

 

그러면 Extp(xt|z0:t,u0:t1)[xt|z0:t,u0:t1] 는 순차 샘플 xt(i)q(xt|x0:t1(i),z0:t,u0:t1) 과 중요 가중치 wt(i) 를 이용하여 다음과 같이 근사적으로 계산할 수 있다.

 

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

 

여기서 중요 가중치 wt(i) 는 순차 중요 샘플링(SIS, sequential importance sampling) 알고리즘으로 주어진다.

 

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

 

파티클 필터(PF, particle filter)의 기본 알고리즘은 SIS를 이용한 상태변수의 샘플링과 중요 가중치 계산을 반복하는 재귀식으로 구성되어 있다.

식 (6)에서 중요밀도함수는 샘플(또는 파티클)을 추출할 수 있는 밀도함수이며 이 샘플로 중요 가중치(importance weight) wt(i) 를 계산하기 때문에 이 중요밀도함수의 선정은 파티클 필터의 성능을 좌우하는 중요한 문제다. 몇 가지 선택 방법에 대해서 알아본다.

 

 

먼저 가장 간단한 방법으로서 중요밀도함수를 다음과 같이 선정하는 방법이 있다.

 

(7)q(xt|x0:t1,z0:t,u0:t1)=p(xt|xt1,ut1)

 

여기서 p(xt|xt1,ut1) 는 시스템의 모델을 나타낸다. 만약 시스템 모델이 다음과 같이 주어졌다면,

 

(8)xt=f(xt1,ut1,wt1),     wt1N(0,Qt1)

 

프로세스 노이즈 wt1N(0,Qt1) 를 먼저 샘플링 한 후, 샘플 xt(i)=f(xt1(i),ut1,wt1i)) 을 계산할 수 있다. 또는 노이즈가 덧셈형으로 주어진 시스템이라면

 

(9)xt=f(xt1,ut1)+wt1,     wt1N(0,Qt1)

 

p(xt|xt1,ut1)=N(f(xt1,ut1),Qt1) 이므로 쉽게 샘플 xt(i)p(xt|xt1(i),ut1)=N(f(xt1(i),ut1),Qt1) 을 추출할 수 있다.

식 (7)을 (6)에 대입하면 중요 가중치는 다음과 같이 전파된다.

 

(10)wt(i)p(zt|xt(i)) wt1(i)

 

이 방법은 간단한 반면에 시간스텝 t 에서 xt(i) 를 샘플링할 때 최신 측정값 zt 에 관한 정보를 이용하지 않기 때문에 식 (9)로 중요 가중치를 계산할 때 빈도함수(likelihood) p(zt|xt) 의 범위 내에 있는 몇 개의 샘플만 큰 가중치를 가질 수 있다. 따라서 중요 가중치의 분산이 매우 커질 수 있다.

 

 

두번째는 가장 인기있는 방법으로서 부트스트랩 필터(bootstrap filter)로 알려진 방법이다. 샘플링은 첫번째 방법과 동일하게 한다. 그러면 식 (10)으로 주어지는 중요 가중치 전파식을 얻을 수 있다. 부트스트랩 방법은 여기서 더 나아가 모든 시간스텝에서 재샘플링(resampling)을 수행한다. 그러면 wt1(i)=1N,   i=1,...,N 이 되기 때문에 식 (10)은 다음과 같이 쓸 수 있다.

 

(11)wt(i)p(zt|xt(i))

 

식 (11)이 의미하는 바는 첫번째 방법과는 달리 중요 가중치가 다음 시간스텝으로 전파되지 않는다는 것이다. 이 방법의 단점은 첫번째 방법과 마찬가지로 시간스텝 t 에서 xt(i) 를 샘플링할 때 최신 측정값 zt 에 관한 정보를 이용하지 않기 때문에 중요 가중치의 분산이 매우 커질 수 있다는 것과 또한 매 시간스텝마다 재샘플링하기 때문에 파티클의 다양성을 상실할 수 있다는 점이다. 사실 재샘플링은 순차 중요 샘플링(SIS) 방법에서는 피할 수 없는 과정이다. 이에 대해서는 다음에 논하기로 한다.

부트스트랩 방법의 장점으로는 중요 가중치를 쉽게 계산할 수 있다는 것과 샘플링이 쉽다는 것이다.

세번째 방법은 최적 중요 확률밀도함수를 선택하는 것이다. 최적 중요 확률밀도함수란 중요 가중치의 분산을 최소로 만드는 밀도함수로서 본래 샘플링하고자 하는 확률밀도함수와 동일하게 정하는 것이다.

 

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

 

식 (12)를 식 (6)에 대입하면 다음과 같다.

 

(13)wt(i)p(zt|xt1(i),ut1) wt1(i)

 

식 (13)에 의하면 시간스텝 t 에서 중요 가중치는 샘플이 시간스텝 t 로 전파되기 전에 계산할 수 있다.

이 방법을 사용하게 위해서는 먼저 p(xt|xt1(i),zt,ut1) 에서 샘플을 추출할 수 있어야 한다. 그리고 다음 적분식을 풀 수 있어야 한다.

 

(14)p(zt|xt1(i),ut1)=xtp(zt|xt)p(xt|xt1(i),ut1) dxt

 

특별한 경우를 제외하고는 두가지를 충족하기가 쉽지 않다. 하지만 이 부분에 주목하여 언센티드 파티클필터(Unscented Particle Filter)등 여러가지 새로운 필터가 개발되었다.

이제, 중요 가중치를 계산하는 방법과 샘플링을 하기 위한 중요밀도함수까지 정했으므로 파티클 필터의 알고리즘이 완성된 된 것 같지만, 아직 해결해야 할 중요한 문제가 남아있다. 바로 퇴화(degeneracy), 곤궁(impoverishment) 또는 샘플 마모(sample attrition)로 불리는 문제다. 이에 대해서는 다음에 논하기로 한다.

 

 

 

댓글