부트 스트랩 필터 / 입자 필터 알고리즘 (이해)


12

부트 스트랩 필터의 작동 방식에 대한 이해가 부족합니다. 나는 대략 개념을 알고 있지만 특정 세부 사항을 파악하지 못합니다. 이 질문은 혼란을 없애기위한 것입니다. 여기에서는 doucet의 참조 에서이 인기있는 필터 알고리즘을 사용합니다 (지금까지 이것이 가장 쉬운 참조라고 생각합니다). 먼저 알려진 문제와 알려지지 않은 배포판을 이해하는 것이 문제입니다.

부트 스트랩 필터

이것들은 나의 질문입니다 :

  1. 2)에서 분포 무엇입니까? 이 배포판이 알려져 있습니까? 우리는 모두이 배포 알아 ? 그렇다면 표본을 추출 할 수 없으면 어떻게해야합니까? 그들이이 중요도 샘플링 단계라고 부르는 것은 재미 있지만 제안서 배포는 없습니다.p(xt|xt1(i))t
  2. 또한 2) 는 알려진 분포입니까? "중요도 가중치는 ? 와 의 틸드는 무엇을 의미합니까? 각각 리샘플링되지 않았거나 정규화되지 않은 것입니까?p(yt|x~t(i))wt(i)=w~t(i)i=1Nw~t(i)xw
  3. 이 부트 스트랩 필터를 사용하기 위해 잘 알려진 배포판을 사용하여 간단한 장난감 예제를 제공 할 수 있다면 고맙겠습니다. 부트 스트랩 필터의 최종 목표는 분명하지 않습니다.

답변:


10
  1. 이것이 모델의 일부이므로 알려진 상태의 전이 밀도 ( )입니다. 기본 알고리즘으로 샘플링해야하지만 근사값이 가능합니다. 제안서 배포입니다. 분포 는 일반적으로 다루기 어렵 기 때문에 사용됩니다.xtp(xt|xt1) p(xt|x0:t1,y1:t)

  2. 그렇습니다. 관측 밀도는 모델의 일부이기도하므로 알려진 밀도입니다. 예, 이것이 정규화의 의미입니다. 물결표는 "예비"와 같은 것을 나타내는 데 사용됩니다. 는 리샘플링하기 전에 이고, 는 다시 정규화하기 전에 입니다. 나는 리샘플링 단계가없는 알고리즘의 변형들 사이에서 표기법이 일치하도록이 방법으로 수행 될 것이라고 추측합니다 (즉, 는 항상 최종 추정치입니다).x~xw~wx

  3. 부트 스트랩 필터의 최종 목표는 조건부 분포들 시퀀스 추정하는 것이다 (관측 상태에서 까지 모든 관찰 주어 ).p(xt|y1:t)tt

간단한 모델을 고려하십시오.

Xt=Xt1+ηt,ηtN(0,1)
X0N(0,1)
Yt=Xt+εt,εtN(0,1)

이 소음으로 관찰 랜덤 워크이다 (당신은 단지 관찰 가 아닌 ). 칼만 필터를 사용하여 정확하게 계산할 수 있지만 요청시 부트 스트랩 필터를 사용합니다. 파티클 필터에 더 유용한 상태 전이 분포, 초기 상태 분포 및 관찰 분포 (순서대로)로 모델을 다시 설명 할 수 있습니다.YXp(Xt|Y1,...,Yt)

Xt|Xt1N(Xt1,1)
X0N(0,1)
Yt|XtN(Xt,1)

알고리즘 적용 :

  1. 초기화. 에 따라 입자를 (독립적으로) 생성 합니다.NX0(i)N(0,1)

  2. 우리는각 에 대해 .NX1(i)|X0(i)N(X0(i),1)N

    그런 다음 가능성 . 여기서 는 평균 및 분산 (관측 밀도)를 갖는 정규 밀도 . 우리는 우리 가 기록한 관측 값 를 생성 할 가능성이 높은 입자에 더 많은 가중치를 부여하려고합니다 . 이 가중치를 정규화하여 합계는 1이됩니다.φ(X,μ,σ2)μσ2Ytw~t(i)=ϕ(yt;xt(i),1)ϕ(x;μ,σ2)μσ2yt

  3. 이 가중치 에 따라 입자를 다시 샘플링합니다 . 참고 • 그래도 입자 의 전체 경로입니다 (즉, 단지 그들이으로 나타내는 모든 일,의, 마지막 점을 재 샘플링하지 않습니다 ). x x ( i ) 0 : twtxx0:t(i)

전체 시리즈를 처리 할 때까지 다시 샘플링 된 입자 버전으로 진행하여 2 단계로 돌아갑니다.

R의 구현은 다음과 같습니다.

# Simulate some fake data
set.seed(123)

tau <- 100
x <- cumsum(rnorm(tau))
y <- x + rnorm(tau)

# Begin particle filter
N <- 1000
x.pf <- matrix(rep(NA,(tau+1)*N),nrow=tau+1)

# 1. Initialize
x.pf[1, ] <- rnorm(N)
m <- rep(NA,tau)
for (t in 2:(tau+1)) {
  # 2. Importance sampling step
  x.pf[t, ] <- x.pf[t-1,] + rnorm(N)

  #Likelihood
  w.tilde <- dnorm(y[t-1], mean=x.pf[t, ])

  #Normalize
  w <- w.tilde/sum(w.tilde)

  # NOTE: This step isn't part of your description of the algorithm, but I'm going to compute the mean
  # of the particle distribution here to compare with the Kalman filter later. Note that this is done BEFORE resampling
  m[t-1] <- sum(w*x.pf[t,])

  # 3. Resampling step
  s <- sample(1:N, size=N, replace=TRUE, prob=w)

  # Note: resample WHOLE path, not just x.pf[t, ]
  x.pf <- x.pf[, s]
}

plot(x)
lines(m,col="red")

# Let's do the Kalman filter to compare
library(dlm)
lines(dropFirst(dlmFilter(y, dlmModPoly(order=1))$m), col="blue")

legend("topleft", legend = c("Actual x", "Particle filter (mean)", "Kalman filter"), col=c("black","red","blue"), lwd=1)

결과 그래프 :여기에 이미지 설명을 입력하십시오

유용한 튜토리얼은 Doucet와 Johansen의 튜토리얼입니다 ( 여기 참조) .


글 머리 기호 2) 알고리즘 -> ?? 정말 고맙습니다. 이 모델에는 작동하는 부트 스트랩 필터가 있습니다. t 번째 입자뿐만 아니라 경로를 리샘플링하는 것을 강조해 주셔서 감사합니다. X ( i ) 1 | X ( i ) 0 ~ N ( X ( i ) 0 , 1 )X1(i)|X0(i)N(0,1)X1(i)|X0(i)N(X0(i),1)
tintinthong

맞습니다, 오타를 고쳤습니다
Chris Haug

경로를 다시 샘플링 할 필요는 없습니까? 다른 문헌에서는 경로를 샘플링 할 필요가 없습니다. 각 시간 단계에서 입자를 샘플링하기 만하면됩니다. 나는 경로를 재 샘플링해야 할 이유가 있는지 궁금해하고 있었다
tintinthong
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.