Bayes and Particle Filters·Lecture 5 of 7

L5 · Monte Carlo and Particles

Updated 2026-09-15·KO

시리즈: Bayes and Particle Filters · 이전: L4 · 다음: L6

이 강의는 belief를 함수 대신 sample 묶음으로 들고 갈 때 정확히 무엇이 성립하는지 답합니다. Sample을 뽑는다는 말의 뜻, sample 평균이 expectation을 근사하는 이유, particle을 transition model에 통과시키면 prediction step이 되는 이유까지 다룹니다.

형광펜: 정의·핵심 · 직관·메커니즘 · 조건·주의

목차


1. 분포 전체 대신 sample을 들고 간다

L4의 Bayes filter는 다음 두 식을 반복합니다.

bel‾t(xt)=∫p(xt∣xt−1) belt−1(xt−1) dxt−1,belt(xt)=η p(yt∣xt) bel‾t(xt)\overline{\mathrm{bel}}_t(x_t)=\int p(x_t\mid x_{t-1})\,\mathrm{bel}_{t-1}(x_{t-1})\,dx_{t-1}, \qquad \mathrm{bel}_t(x_t)=\eta\,p(y_t\mid x_t)\,\overline{\mathrm{bel}}_t(x_t)

두 식이 주고받는 것은 숫자 하나가 아니라 state space 전체 위에 정의된 함수입니다. State가 로봇의 1차원 위치라면 가능한 모든 xtx_t에 대해 belt(xt)\mathrm{bel}_t(x_t) 값을 알고 있어야 합니다.

1차원 belief가 Gaussian이라면 mean과 variance 두 숫자로 함수 전체가 정해집니다. 예를 들어 N(3.2, 0.42)\mathcal N(3.2,\,0.4^2)는 mean 3.2와 standard deviation 0.4 (variance 0.16)만으로 정해집니다. 하지만 똑같이 생긴 복도 두 곳 중 어디에 있는지 모르는 로봇의 belief는 x≈2x\approx 2 근처와 x≈8x\approx 8 근처에 mode가 하나씩 있습니다 (bimodal). 이런 모양은 Gaussian 하나로 표현되지 않습니다.

Gaussian이 아닌 모양도 담으려면 state를 칸으로 나누고 칸마다 확률 값을 저장하는 grid를 쓸 수 있습니다. 하지만 L4 §7에서 본 것처럼 칸 수가 MnM^n으로 늘어납니다.

이 강의는 세 번째 방법을 봅니다. Belief에서 뽑은 점 NN개 x(1),…,x(N)x^{(1)},\dots,x^{(N)}을 저장하고, belief에 대한 계산을 이 점들에 대한 평균으로 바꿉니다. 이 점을 일반적으로 sample이라고 하고, particle filter에서는 particle이라고 부릅니다.

표현 저장하는 것 모양에 대한 제약 비용·오차를 정하는 것
Gaussian parameter mean vector와 covariance matrix (n=10n=10이면 10+55=6510+55=65개 숫자) Gaussian 하나 실제 belief가 Gaussian에서 벗어난 정도 (모양 오차)
Grid 칸마다 확률 값 칸 해상도만큼 표현 칸 수 MnM^n
Sample 점 NN개 (각각 Rn\mathbb R^n의 vector) 없음 (근사) NN과 문제 (expectation 오차는 1/N1/\sqrt N에 비례하고, 비례 상수는 dimension·belief의 퍼짐 등 문제에 따라 다름, §4)

다만 sample 표현이 dimension 문제를 없애 준다는 뜻은 아닙니다. §4에서 오차가 줄어드는 속도와 그 전제를 보고, particle filter에만 생기는 어려움은 L7 §2에서 다룹니다.


2. Sample한다는 것의 정확한 뜻

표기 읽기

x(i)∼p(x)x^{(i)}\sim p(x)

이 식은 "ii번째 sample x(i)x^{(i)}는 distribution p(x)p(x)를 따른다", 또는 "x(i)x^{(i)}를 p(x)p(x)에서 뽑았다"라고 읽습니다. 위첨자 (i)(i)는 몇 번째 sample인지 나타내는 번호이고 거듭제곱이 아닙니다. 시간이 들어가면 xt(i)x_t^{(i)}처럼 아래첨자 tt가 시각, 위첨자 (i)(i)가 particle 번호를 맡습니다.

∼\sim은 "근사적으로 같다"는 뜻이 아닙니다. X∼pX\sim p는 random variable XX의 distribution이 pp라는 선언이고, x(i)∼px^{(i)}\sim p는 그 distribution을 따르는 random experiment를 한 번 실행해서 나온 값이 x(i)x^{(i)}라는 뜻입니다. 근사는 따로 ≈\approx로 씁니다.

이산 예시

X∈{A,B,C}X\in\{A,B,C\}이고 p=[0.1, 0.7, 0.2]p=[0.1,\,0.7,\,0.2]라고 합시다. 여기서 한 번 sample한다는 것은 AA가 0.1, BB가 0.7, CC가 0.2의 확률로 나오는 실험을 한 번 실행하는 것입니다.

실제로 10번 뽑았더니 C,C,B,B,A,B,B,A,A,CC,C,B,B,A,B,B,A,A,C가 나왔습니다. AA 3개, BB 4개, CC 3개이므로 비율은 [0.3, 0.4, 0.3][0.3,\,0.4,\,0.3]입니다. [0.1, 0.7, 0.2][0.1,\,0.7,\,0.2]와 꽤 다르고, NN이 작으면 이런 일이 흔합니다. 아래 표는 NN을 바꿔 가며 따로 뽑은 결과입니다.

NN AA 비율 BB 비율 CC 비율
10 0.3 0.4 0.3
100 0.09 0.63 0.28
1,000 0.078 0.730 0.192
100,000 0.0996 0.7000 0.2004

Sample 하나하나는 random이지만, 많이 모은 sample의 비율은 원래 확률에 가까워집니다. 이 성질이 sample 묶음으로 distribution을 대신할 수 있는 근거입니다. 어떤 조건에서 성립하는지는 §4에서 정확히 씁니다.

연속 예시

X∼N(0,1)X\sim\mathcal N(0,1)에서 다섯 번 뽑으면 0.35, 0.82, 0.33, −1.30, 0.910.35,\ 0.82,\ 0.33,\ -1.30,\ 0.91 같은 실수가 나옵니다. L1 §7에서 본 것처럼 XX가 density를 가지므로 P(X=0.35)=0P(X=0.35)=0입니다. 확률 0은 미리 정해 둔 한 점에 대한 이야기이고, 실험을 실행하면 매번 어떤 점이든 하나는 나옵니다.

그래서 연속에서는 점 대신 영역을 봅니다. 100,000개를 뽑았더니 구간 (−0.5, 0.5)(-0.5,\,0.5)에 들어간 비율이 0.3856이었고, 정확한 값 P(−0.5<X<0.5)P(-0.5<X<0.5)는 0.3829입니다. 구간 (3.5, 4.5)(3.5,\,4.5)에 들어간 비율은 0.00027이었고 정확한 값은 0.00023입니다. Density는 x=0x=0에서 0.399, x=4x=4에서 0.000134입니다.

한 점의 확률은 0이어도, 폭이 같은 두 영역이라면 density가 높은 쪽에 sample이 떨어질 확률이 더 크므로 sample이 모인 정도가 density의 모양을 따라갑니다. 정확히 말하면 구간 [a,b][a,b]에 떨어지는 sample의 비율이 ∫abp(x) dx\int_a^b p(x)\,dx에 가까워집니다. 아래 그림은 mode가 두 개인 density에서 NN을 늘려 가며 뽑은 결과입니다.

bpf l5 samples vs density
p(x)=0.7 N(2,0.82)+0.3 N(8,12)p(x)=0.7\,\mathcal N(2,0.8^2)+0.3\,\mathcal N(8,1^2)에서 seed를 고정해 뽑은 sample의 histogram이고, 아래 눈금은 sample 위치입니다. x(i)<5x^{(i)}<5인 비율은 N=20N=20에서 0.750, N=200N=200에서 0.755로 오히려 멀어졌다가 N=5000N=5000에서 0.703으로 정확한 값 P(X<5)≈0.700P(X<5)\approx 0.700에 가까워지는데, 한 번 뽑은 결과이므로 NN을 늘릴 때마다 단조롭게 가까워지지는 않습니다.

코드에서 sample은 random number generator 호출이다

컴퓨터에서 sample을 뽑는 방법은 해당 distribution용 random number generator를 부르는 것입니다.

# Gaussian N(0, 1)
for i = 1..N:
    x[i] = sample_normal(mean = 0, std = 1)

# discrete p = [0.1, 0.7, 0.2] on {A, B, C}
for i = 1..N:
    x[i] = sample_categorical(values = [A, B, C],
                              probs = [0.1, 0.7, 0.2])

# transition model x_t = f(x_{t-1}) + w,  w ~ N(0, Q)
for i = 1..N:
    w = sample_normal(mean = 0, cov = Q)
    x_next[i] = f(x_prev[i]) + w

Library 안에서는 [0,1][0,1] 위의 uniform random number를 원하는 distribution으로 변환합니다. 이산 distribution이면 누적합 CiC_i를 만들고 U∼Uniform(0,1)U\sim\mathrm{Uniform}(0,1)에 대해 I=min⁡{i:U≤Ci}I=\min\{i : U\le C_i\}를 고르며, 이 방법은 L7 §4에서 다시 씁니다. Sample한다는 것은 추상적인 동작이 아니라, 해당 distribution을 따르도록 만든 random number generator를 한 번 호출하는 것입니다.


3. Expectation

이산

X∈{1,2,3}X\in\{1,2,3\}이고 p(1)=0.2p(1)=0.2, p(2)=0.5p(2)=0.5, p(3)=0.3p(3)=0.3이라고 합시다. Expectation의 정의는 다음과 같습니다.

Ep[f(X)]=∑xf(x) p(x)\mathbb E_p[f(X)]=\sum_x f(x)\,p(x)

Ep[f(X)]\mathbb E_p[f(X)]는 "pp 아래에서 f(X)f(X)의 expectation"이라고 읽습니다. 합은 xx를 없애므로 결과는 xx의 함수가 아니라 숫자 하나입니다.

f(X)=Xf(X)=X로 두고 계산합니다.

Ep[X]=1(0.2)+2(0.5)+3(0.3)=0.2+1.0+0.9=2.1\mathbb E_p[X]=1(0.2)+2(0.5)+3(0.3)=0.2+1.0+0.9=2.1

2.1은 XX가 가질 수 있는 값이 아니지만 문제가 없습니다. Expectation은 가능한 값마다 그 값의 확률을 곱해 더한 weighted average입니다. 1, 2, 3의 단순 평균은 2인데, 3이 1보다 확률이 크므로 평균이 3 쪽으로 당겨져 2.1이 됩니다.

한 가지 특수한 경우를 봐 둡니다. f(x)=1{x∈S}f(x)=\mathbf 1\{x\in S\} (xx가 집합 SS에 들어가면 1, 아니면 0)로 두면 Ep[1{X∈S}]=∑x∈Sp(x)=P(X∈S)\mathbb E_p[\mathbf 1\{X\in S\}]=\sum_{x\in S}p(x)=P(X\in S)입니다. 확률도 expectation의 한 종류이므로, §2의 "비율이 확률에 가까워진다"는 §4의 결과에 포함됩니다.

연속

Continuous variable에서는 PMF 대신 density로 적분합니다.

Ep[f(X)]=∫f(x) p(x) dx\mathbb E_p[f(X)]=\int f(x)\,p(x)\,dx

여기서 p(x)p(x)는 확률이 아니라 density이고, dxdx는 xx를 없앱니다. Signals & Systems에서 적분을 Riemann sum으로 본 것처럼 폭 Δx\Delta x인 칸으로 나누면 의미가 보입니다.

∑kf(xk) p(xk) Δx  ⟶  ∫f(x) p(x) dx(Δx→0)\sum_k f(x_k)\,p(x_k)\,\Delta x\;\longrightarrow\;\int f(x)\,p(x)\,dx\qquad(\Delta x\to 0)

p(xk)Δxp(x_k)\Delta x는 XX가 kk번째 칸에 떨어질 확률의 근사이므로, 각 항은 "칸의 값 × 칸의 확률"입니다. 이산의 weighted average가 그대로 연속으로 넘어간 것입니다.

Variance

§4에서 오차의 크기를 말하려면 variance가 필요합니다. μ=Ep[f(X)]\mu=\mathbb E_p[f(X)]라고 두고 정의에서 전개합니다.

Varp(f(X))=Ep[(f(X)−μ)2](definition)=Ep[f(X)2]−2μ Ep[f(X)]+μ2(linearity of expectation)=Ep[f(X)2]−μ2(Ep[f(X)]=μ)\begin{aligned} \mathrm{Var}_p(f(X)) &= \mathbb E_p\big[(f(X)-\mu)^2\big] && \text{(definition)}\\ &= \mathbb E_p[f(X)^2]-2\mu\,\mathbb E_p[f(X)]+\mu^2 && \text{(linearity of expectation)}\\ &= \mathbb E_p[f(X)^2]-\mu^2 && (\mathbb E_p[f(X)]=\mu) \end{aligned}

위 예시에서 Ep[X2]=1(0.2)+4(0.5)+9(0.3)=4.9\mathbb E_p[X^2]=1(0.2)+4(0.5)+9(0.3)=4.9이므로 Varp(X)=4.9−2.12=0.49\mathrm{Var}_p(X)=4.9-2.1^2=0.49이고, standard deviation은 0.7입니다.


4. Monte Carlo estimator

적분 대신 평균

원하는 값이 Ep[f(X)]=∫f(x) p(x) dx\mathbb E_p[f(X)]=\int f(x)\,p(x)\,dx인데 이 적분을 식으로 풀기 어렵다고 합시다. 대신 x(1),…,x(N)∼px^{(1)},\dots,x^{(N)}\sim p를 뽑고 평균을 냅니다.

  I^N=1N∑i=1Nf(x(i))≈Ep[f(X)]  \boxed{\;\hat I_N=\frac1N\sum_{i=1}^N f\big(x^{(i)}\big)\approx \mathbb E_p[f(X)]\;}

I^N\hat I_N은 "sample마다 ff를 계산해서 산술평균한 값"이라고 읽습니다. 이것을 Monte Carlo estimator라고 합니다. 식에 p(x(i))p(x^{(i)}) 값이 한 번도 곱해지지 않습니다. pp의 정보는 곱셈이 아니라 sample이 어디에 많이 떨어지는지를 통해 들어갑니다.

빈도로 묶어 보기

§3의 p=[0.2, 0.5, 0.3]p=[0.2,\,0.5,\,0.3]에서 100,000개를 뽑았더니 1이 19,982개, 2가 49,990개, 3이 30,028개 나왔습니다. f(X)=Xf(X)=X의 sample 평균을 같은 값끼리 묶어 씁니다.

I^N=1100000∑i=1100000x(i)=19982⋅1+49990⋅2+30028⋅3100000(group equal values)=1⋅19982100000+2⋅49990100000+3⋅30028100000=2.10046\begin{aligned} \hat I_N &= \frac{1}{100000}\sum_{i=1}^{100000}x^{(i)} \\ &= \frac{19982\cdot 1+49990\cdot 2+30028\cdot 3}{100000} && \text{(group equal values)}\\ &= 1\cdot\frac{19982}{100000}+2\cdot\frac{49990}{100000}+3\cdot\frac{30028}{100000}\\ &= 2.10046 \end{aligned}

셋째 줄은 §3의 1(0.2)+2(0.5)+3(0.3)=2.11(0.2)+2(0.5)+3(0.3)=2.1과 모양이 같고, 확률 자리에 빈도가 들어가 있습니다. 이산 XX에서 NxN_x를 값이 xx인 sample 수라고 하면 1N∑if(x(i))=∑xf(x) NxN\frac1N\sum_i f(x^{(i)})=\sum_x f(x)\,\frac{N_x}{N}이고, sample 평균이 expectation을 근사하는 이유는 빈도 Nx/NN_x/N이 확률 p(x)p(x)를 대신하기 때문입니다. 연속 XX에서는 같은 값이 거의 반복되지 않으므로, 칸으로 묶으면 같은 논리가 근사적으로 성립합니다.

Law of large numbers와 조건

위 설명을 정확한 정리로 쓰면 다음과 같습니다. x(i)x^{(i)}들이 independent하고 모두 같은 pp를 따르며 (i.i.d.), Ep∣f(X)∣<∞\mathbb E_p\lvert f(X)\rvert<\infty일 때 N→∞N\to\infty에서 I^N\hat I_N은 확률 1로 Ep[f(X)]\mathbb E_p[f(X)]에 수렴합니다. 이것이 strong law of large numbers입니다.

두 조건은 이 정리의 전제입니다. Sample끼리 의존하면 이 정리를 그대로 쓸 수 없고, 수렴하는지는 따로 보여야 합니다. 이 절 끝에서 볼 particle filter가 그런 경우입니다. Ep∣f(X)∣<∞\mathbb E_p\lvert f(X)\rvert<\infty가 깨지는 예로, Cauchy distribution에서 f(x)=xf(x)=x로 두면 expectation이 존재하지 않고 sample 평균은 NN을 늘려도 한 값으로 모이지 않습니다.

오차는 1/√N으로 줄어든다

I^N\hat I_N은 sample에 따라 달라지는 random variable입니다. 같은 실험을 여러 번 반복했을 때 estimator의 평균이 참값에서 벗어난 정도가 bias이고, 흩어진 정도가 variance입니다 (Bias and Variance). 먼저 expectation을 계산합니다.

E[I^N]=1N∑i=1NE[f(x(i))](linearity of expectation)=1N⋅N Ep[f(X)](x(i)∼p for every i)=Ep[f(X)]\begin{aligned} \mathbb E\big[\hat I_N\big] &= \frac1N\sum_{i=1}^N\mathbb E\big[f(x^{(i)})\big] && \text{(linearity of expectation)}\\ &= \frac1N\cdot N\,\mathbb E_p[f(X)] && (x^{(i)}\sim p\ \text{for every}\ i)\\ &= \mathbb E_p[f(X)] \end{aligned}

따라서 Monte Carlo estimator는 unbiased입니다. 다음은 variance이고, 여기서는 Varp(f(X))<∞\mathrm{Var}_p(f(X))<\infty라고 가정합니다.

Var(I^N)=1N2 Var(∑i=1Nf(x(i)))(Var(cZ)=c2 Var(Z))=1N2∑i=1NVar(f(x(i)))(independence)=Varp(f(X))N(identically distributed)\begin{aligned} \mathrm{Var}\big(\hat I_N\big) &= \frac{1}{N^2}\,\mathrm{Var}\Big(\sum_{i=1}^N f(x^{(i)})\Big) && (\mathrm{Var}(cZ)=c^2\,\mathrm{Var}(Z))\\ &= \frac{1}{N^2}\sum_{i=1}^N \mathrm{Var}\big(f(x^{(i)})\big) && \text{(independence)}\\ &= \frac{\mathrm{Var}_p(f(X))}{N} && \text{(identically distributed)} \end{aligned}
  E[I^N]=Ep[f(X)],sd(I^N)=Varp(f(X))N  \boxed{\;\mathbb E\big[\hat I_N\big]=\mathbb E_p[f(X)],\qquad \mathrm{sd}\big(\hat I_N\big)=\frac{\sqrt{\mathrm{Var}_p(f(X))}}{\sqrt N}\;}

§3의 예시는 Varp(X)=0.49\mathrm{Var}_p(X)=0.49이므로 standard deviation이 N=100N=100에서 0.7/10=0.070.7/10=0.07, N=10,000N=10{,}000에서 0.0070.007입니다. 실제로 각 NN마다 estimator를 2,000번 다시 계산해 보면 흩어짐이 0.0701과 0.0068로 나옵니다. Sample을 100배 늘려야 오차가 10배 줄어듭니다.

이 식에는 xx의 dimension nn이 직접 들어가지 않고, 이 점이 grid의 MnM^n과 다릅니다. 하지만 필요한 NN이 dimension과 무관하다는 뜻은 아닙니다. 1/N1/\sqrt N 앞의 상수는 문제마다 다르고, particle filter에서 필요한 NN은 state dimension이 클수록, belief가 넓게 퍼질수록 크게 늘어납니다. Uniform에 가까운 belief는 좁은 영역에 모인 belief보다 훨씬 많은 particle이 필요합니다.

또 이 식은 pp에서 i.i.d. sample을 직접 뽑을 수 있다는 전제 위에 있습니다. 이 전제를 만족할 수 없을 때가 L6 §1의 출발점입니다.

Particle filter에서 resampling을 거친 particle들은 서로 independent가 아니므로, 위의 law of large numbers가 particle filter의 수렴을 그대로 보장하지는 않습니다. Particle filter의 수렴은 서로 영향을 주는 particle 집합에 대한 별도의 정리로 증명됩니다. 이 강의에서는 Monte Carlo가 왜 되는지에 대한 근거로만 씁니다.


5. Particle은 어디서 오는가

Particle 묶음이 belief를 나타낸다는 뜻

Particle filter는 함수 belt(x)\mathrm{bel}_t(x)를 저장하지 않고 xt(1),…,xt(N)x_t^{(1)},\dots,x_t^{(N)}을 저장합니다. §1의 복도 예시에서 belief의 mass가 x≈2x\approx 2 근처에 70%, x≈8x\approx 8 근처에 30% 있고 particle을 이 belief에서 뽑았다면, particle 1,000개 중 대략 700개가 2 근처에, 300개가 8 근처에 있게 됩니다. §2 그림의 N=5000N=5000 패널에서 x(i)<5x^{(i)}<5인 particle이 3514개(0.703)였던 것이 같은 상황입니다.

"대략"이라고 쓴 이유는 개수 자체가 random이기 때문입니다. Particle 묶음이 belief를 나타낸다는 말은, ∫∣f(x)∣ belt(x) dx<∞\int\lvert f(x)\rvert\,\mathrm{bel}_t(x)\,dx<\infty인 ff (예: bounded ff)에 대해 1N∑if(xt(i))≈∫f(x) belt(x) dx\frac1N\sum_i f(x_t^{(i)})\approx\int f(x)\,\mathrm{bel}_t(x)\,dx가 성립한다는 뜻입니다. 영역의 확률은 ff가 indicator인 경우이므로, 확률이 큰 영역일수록 particle이 많이 모여 있게 됩니다.

Particle 하나는 distribution이 아닙니다. xt(17)=3.42x_t^{(17)}=3.42는 "현재 state가 3.42일 수 있다"는 가설 하나일 뿐이고, 여러 particle이 모여야 distribution을 나타냅니다. 나중에 weight가 붙으면 {xt(i), wt(i)}\{x_t^{(i)},\,w_t^{(i)}\} 묶음이 distribution을 나타내며, 이것은 L6 §5에서 다룹니다.

초기 particle

Bayes filter는 초기 belief p(x0)p(x_0)가 있어야 시작합니다 (L2 §6). Particle filter도 같습니다. 초기 particle은 p(x0)p(x_0)에서 직접 뽑습니다.

x0(i)∼p(x0),i=1,…,Nx_0^{(i)}\sim p(x_0),\qquad i=1,\dots,N

이산 예시로 X0∈{1,2,3}X_0\in\{1,2,3\}, p(x0)=[0.2, 0.6, 0.2]p(x_0)=[0.2,\,0.6,\,0.2]에서 N=10N=10개를 뽑았더니 [2,3,2,2,3,2,2,2,1,2][2,3,2,2,3,2,2,2,1,2]가 나왔습니다. 1이 1개, 2가 7개, 3이 2개이므로 빈도는 [0.1, 0.7, 0.2][0.1,\,0.7,\,0.2]입니다. [0.2, 0.6, 0.2][0.2,\,0.6,\,0.2]와 정확히 같지 않은 것은 sampling이 random이기 때문이고, NN이 작으면 이 정도 차이는 흔합니다. 이 10개가 그대로 초기 belief의 particle 표현입니다.

위치를 [0,10][0,10] 안이라는 것 말고는 모른다면 p(x0)=Uniform(0,10)p(x_0)=\mathrm{Uniform}(0,10)으로 두고 x0(i)∼Uniform(0,10)x_0^{(i)}\sim\mathrm{Uniform}(0,10)을 뽑습니다. 예를 들어 2.6, 3.0, 8.1, 0.9, 6.0,…2.6,\ 3.0,\ 8.1,\ 0.9,\ 6.0,\dots이 나옵니다. Particle filter가 prior를 대신 만들어 주지는 않습니다. Prior는 여전히 설계자가 가정으로 정하고, 바뀌는 것은 그 prior를 함수 대신 sample로 표현한다는 점뿐입니다.

다음 시각의 particle: propagation

시각 t−1t-1의 particle xt−1(1),…,xt−1(N)x_{t-1}^{(1)},\dots,x_{t-1}^{(N)}이 있다고 합시다. 각 particle마다 transition model에서 다음 값을 하나씩 뽑습니다.

xt(i)∼p(xt∣xt−1(i))x_t^{(i)}\sim p\big(x_t\mid x_{t-1}^{(i)}\big)

이 식은 "ii번째 particle의 시각 tt 값은, 같은 particle의 시각 t−1t-1 값 xt−1(i)x_{t-1}^{(i)}를 조건으로 한 transition distribution에서 뽑는다"라고 읽습니다. 조건에 들어가는 것은 belief 전체가 아니라 그 particle이 가진 숫자 하나입니다.

숫자로 해 봅니다. 1차원 로봇이 한 step에 약 +1+1씩 움직이고 xt=xt−1+1+ϵtx_t=x_{t-1}+1+\epsilon_t, ϵt∼N(0, 0.22)\epsilon_t\sim\mathcal N(0,\,0.2^2)라고 합시다. L3 §3에서처럼 이 식은 p(xt∣xt−1)=N(xt; xt−1+1, 0.22)p(x_t\mid x_{t-1})=\mathcal N(x_t;\,x_{t-1}+1,\,0.2^2)를 정합니다. 이전 particle이 2.0, 2.2, 5.0이고 noise가 다음처럼 뽑혔다고 합시다.

ii xt−1(i)x_{t-1}^{(i)} Transition distribution 뽑힌 ϵ(i)\epsilon^{(i)} xt(i)x_t^{(i)}
1 2.0 N(3.0, 0.22)\mathcal N(3.0,\,0.2^2) 0.08 2.0+1+0.08=3.082.0+1+0.08=3.08
2 2.2 N(3.2, 0.22)\mathcal N(3.2,\,0.2^2) −0.12-0.12 2.2+1−0.12=3.082.2+1-0.12=3.08
3 5.0 N(6.0, 0.22)\mathcal N(6.0,\,0.2^2) 0.17 5.0+1+0.17=6.175.0+1+0.17=6.17

Particle 1과 2가 같은 값 3.08에 도착한 것은 표의 noise 값을 그렇게 되도록 고른 예시이기 때문입니다. Continuous noise에서 두 particle이 정확히 같은 값에 떨어질 확률은 0입니다. 이 예시에서 볼 점은, particle마다 noise를 따로 뽑으므로 가까이서 출발한 particle끼리는 도착 위치가 매우 가까워지거나 순서가 바뀔 수 있다는 것입니다. 코드로는 다음과 같습니다.

# particles at t-1
input : x_prev[1..N]
for i = 1..N:
    eps  = sample_normal(mean = 0, std = 0.2)
    # x[i] ~ p(x_t | x_prev[i])
    x[i] = x_prev[i] + 1 + eps
# particles at t
output: x[1..N]

Propagation은 particle을 만드는 별도의 알고리즘이 아니라, transition model을 random simulator로 보고 particle마다 한 번씩 실행하는 것입니다. 이 단계에서는 p(xt∣xt−1)p(x_t\mid x_{t-1})의 값을 계산할 필요가 없고, 그 distribution에서 뽑을 수만 있으면 됩니다.


6. Propagation이 prediction을 대신하는 이유

§5에서 만든 cloud가 왜 predicted belief bel‾t=p(xt∣y1:t−1)\overline{\mathrm{bel}}_t=p(x_t\mid y_{1:t-1})를 나타내는지 보입니다. 전제는 시각 t−1t-1의 particle들이 belt−1\mathrm{bel}_{t-1}을 나타내는 같은 weight의 sample이라는 것입니다. t=1t=1에서는 x0(i)∼p(x0)=bel0x_0^{(i)}\sim p(x_0)=\mathrm{bel}_0이므로 이 전제가 정확히 성립하고, 이후 시각에는 L6의 weighting과 L7의 resampling이 이 전제를 근사적으로 다시 만들어 줍니다.

이산 예시로 먼저 확인

State가 A,BA,B 두 개이고 belt−1\mathrm{bel}_{t-1}이 P(A)=0.3P(A)=0.3, P(B)=0.7P(B)=0.7이며, transition이 P(B∣A)=0.2P(B\mid A)=0.2, P(B∣B)=0.9P(B\mid B)=0.9라고 합시다. L4 §2에서 합으로 계산한 정확한 prediction은 다음과 같았습니다.

P(Xt=B)=0.2(0.3)+0.9(0.7)=0.06+0.63=0.69P(X_t=B)=0.2(0.3)+0.9(0.7)=0.06+0.63=0.69

이제 particle 1,000개 중 300개가 AA, 700개가 BB에 있다고 합시다. AA의 particle은 각각 0.2의 확률로 BB로 가므로, BB에 도착하는 개수의 expectation은 300×0.2=60300\times0.2=60개입니다. BB의 particle은 각각 0.9의 확률로 BB에 남으므로, 남는 개수의 expectation은 700×0.9=630700\times0.9=630개입니다. 두 expectation을 더하면 690개이고, 비율로는 0.69입니다.

이 0.69는 L3 §6과 L4 §2에서 합으로 얻은 숫자와 같습니다. 같은 숫자가 나오는 이유는 particle을 transition으로 한 번씩 보내는 과정이 합 ∑xt−1P(B∣xt−1) P(xt−1)\sum_{x_{t-1}}P(B\mid x_{t-1})\,P(x_{t-1})의 각 항을 개수로 세는 과정이기 때문입니다. 여기서는 particle 비율 300/700이 belief 0.3/0.7과 정확히 같게 잡혀 있어서 expectation이 정확히 일치했습니다.

실제 개수는 random입니다. 한 번 실행해 보니 BB에 696개가 도착했습니다 (AA에서 온 것 69개, BB에 남은 것 627개). 개수의 standard deviation은 300(0.2)(0.8)+700(0.9)(0.1)≈10.5\sqrt{300(0.2)(0.8)+700(0.9)(0.1)}\approx 10.5입니다.

일반식: prediction 적분은 expectation이다

xtx_t 값 하나를 고정하면, prediction 적분은 xt−1x_{t-1}에 대한 함수 p(xt∣xt−1)p(x_t\mid x_{t-1})의 expectation입니다. 그래서 §4의 Monte Carlo estimator를 그대로 쓸 수 있습니다.

bel‾t(xt)=∫p(xt∣xt−1) belt−1(xt−1) dxt−1(prediction step)=EXt−1∼belt−1[p(xt∣Xt−1)](definition of expectation)≈1N∑i=1Np(xt∣xt−1(i))(Monte Carlo with xt−1(i)∼belt−1)\begin{aligned} \overline{\mathrm{bel}}_t(x_t) &= \int p(x_t\mid x_{t-1})\,\mathrm{bel}_{t-1}(x_{t-1})\,dx_{t-1} && \text{(prediction step)}\\ &= \mathbb E_{X_{t-1}\sim\mathrm{bel}_{t-1}}\big[p(x_t\mid X_{t-1})\big] && \text{(definition of expectation)}\\ &\approx \frac1N\sum_{i=1}^N p\big(x_t\mid x_{t-1}^{(i)}\big) && \text{(Monte Carlo with } x_{t-1}^{(i)}\sim\mathrm{bel}_{t-1}\text{)} \end{aligned}

마지막 줄은 particle마다 하나씩 있는 transition density NN개를 1/N1/N씩 섞은 mixture입니다. 이것을 p^(xt∣y1:t−1)\hat p(x_t\mid y_{1:t-1})로 씁니다. 적분이 dxt−1dx_{t-1}로 없애던 xt−1x_{t-1}을, 이 식에서는 particle에 대한 합이 없앱니다.

Mixture에서 뽑는 두 단계

Mixture에서 sample 하나를 뽑으려면 두 단계를 거칩니다. 먼저 ancestor (조상) index JJ를 particle 값과 무관하게 {1,…,N}\{1,\dots,N\}에서 균등하게 고르고, 다음에 xt∼p(xt∣xt−1(J))x_t\sim p(x_t\mid x_{t-1}^{(J)})를 뽑습니다. 시각 t−1t-1의 particle 전체 xt−1(1),…,xt−1(N)x_{t-1}^{(1)},\dots,x_{t-1}^{(N)}을 xt−1(1:N)x_{t-1}^{(1:N)}으로 줄여 쓰고, 이 값들을 고정했을 때 나온 xtx_t의 density p(xt∣xt−1(1:N))p\big(x_t\mid x_{t-1}^{(1:N)}\big)를 계산합니다. 이것은 조건 없는 p(xt)p(x_t)와 다른 양입니다.

p(xt∣xt−1(1:N))=∑j=1NP(J=j∣xt−1(1:N)) p(xt∣J=j, xt−1(1:N))(law of total probability over J)=∑j=1N1N p(xt∣J=j, xt−1(1:N))(J uniform, independent of the particles)=∑j=1N1N p(xt∣xt−1(j))(child drawn from its ancestor’s transition)=p^(xt∣y1:t−1)(definition of p^)\begin{aligned} p\big(x_t\mid x_{t-1}^{(1:N)}\big) &= \sum_{j=1}^N P\big(J=j\mid x_{t-1}^{(1:N)}\big)\,p\big(x_t\mid J=j,\,x_{t-1}^{(1:N)}\big) && \text{(law of total probability over } J\text{)}\\ &= \sum_{j=1}^N \frac1N\,p\big(x_t\mid J=j,\,x_{t-1}^{(1:N)}\big) && (J\ \text{uniform, independent of the particles})\\ &= \sum_{j=1}^N \frac1N\,p\big(x_t\mid x_{t-1}^{(j)}\big) && \text{(child drawn from its ancestor's transition)}\\ &= \hat p(x_t\mid y_{1:t-1}) && \text{(definition of } \hat p\text{)} \end{aligned}

§5의 코드는 ancestor를 random하게 고르지 않고 모든 ii를 한 번씩 씁니다. 이 경우에도 ancestor xt−1(1:N)x_{t-1}^{(1:N)}을 고정해 두면, cloud에서 계산한 평균의 expectation은 mixture에 대한 expectation과 같습니다.

E[1N∑i=1Nf(xt(i)) ∣ xt−1(1:N)]=1N∑i=1NE[f(xt(i)) ∣ xt−1(1:N)](linearity of expectation)=1N∑i=1N∫f(xt) p(xt∣xt−1(i)) dxt(xt(i)∼p(xt∣xt−1(i)))=∫f(xt) 1N∑i=1Np(xt∣xt−1(i)) dxt(swap sum and integral)=∫f(xt) p^(xt∣y1:t−1) dxt(definition of p^)\begin{aligned} \mathbb E\Big[\frac1N\sum_{i=1}^N f\big(x_t^{(i)}\big)\,\Big|\,x_{t-1}^{(1:N)}\Big] &= \frac1N\sum_{i=1}^N \mathbb E\big[f(x_t^{(i)})\,\big|\,x_{t-1}^{(1:N)}\big] && \text{(linearity of expectation)}\\ &= \frac1N\sum_{i=1}^N \int f(x_t)\,p\big(x_t\mid x_{t-1}^{(i)}\big)\,dx_t && \big(x_t^{(i)}\sim p(x_t\mid x_{t-1}^{(i)})\big)\\ &= \int f(x_t)\,\frac1N\sum_{i=1}^N p\big(x_t\mid x_{t-1}^{(i)}\big)\,dx_t && \text{(swap sum and integral)}\\ &= \int f(x_t)\,\hat p(x_t\mid y_{1:t-1})\,dx_t && \text{(definition of } \hat p\text{)} \end{aligned}

t=1t=1에서는 더 강하게 말할 수 있습니다. x0(i)x_0^{(i)}가 p(x0)p(x_0)에서 i.i.d.로 뽑혔고 x1(i)x_1^{(i)}가 각각 독립적으로 뽑히므로, x1(i)x_1^{(i)}는 bel‾1=p(x1)\overline{\mathrm{bel}}_1=p(x_1)에서 뽑은 i.i.d. sample입니다.

Propagation은 Monte Carlo prediction이다

Particle을 transition model에 한 번씩 통과시키는 것은, prediction 적분의 belt−1\mathrm{bel}_{t-1}을 particle로 바꾼 mixture 1N∑ip(xt∣xt−1(i))\frac1N\sum_i p(x_t\mid x_{t-1}^{(i)})에서 sample을 뽑는 것입니다. 적분도 하지 않고, transition density의 값도 계산하지 않습니다.

오차는 두 곳에서 들어옵니다. 첫째, t−1t-1의 particle이 belt−1\mathrm{bel}_{t-1}의 유한한 근사이므로 mixture가 정확한 bel‾t\overline{\mathrm{bel}}_t와 다릅니다. 둘째, 새 particle은 그 mixture에서 random하게 뽑힌 값입니다. 앞의 전제가 성립하는 한 두 오차 모두 NN이 커지면 줄어듭니다.

bpf l5 propagation
위: §5의 세 particle이 각자의 transition distribution N(xt−1(i)+1, 0.22)\mathcal N(x_{t-1}^{(i)}+1,\,0.2^2)에서 값 하나씩을 받습니다. 아래: belt−1=0.7 N(2,0.252)+0.3 N(6,0.252)\mathrm{bel}_{t-1}=0.7\,\mathcal N(2,0.25^2)+0.3\,\mathcal N(6,0.25^2)에서 뽑은 40개를 같은 모델로 보낸 결과로, 실선은 정확한 bel‾t\overline{\mathrm{bel}}_t (component standard deviation 0.252+0.22≈0.32\sqrt{0.25^2+0.2^2}\approx0.32로 퍼짐), 점선은 mixture 1N∑ip(xt∣xt−1(i))\frac1N\sum_i p(x_t\mid x_{t-1}^{(i)})입니다.

아래 패널에서 두 mode가 +1+1만큼 이동하고 각 mode 주변이 조금 넓어진 것은 L4 §3에서 본 shift와 convolution이 particle에서도 그대로 나타난 것입니다.


7. 아직 빠진 것

지금까지 한 것은 초기 sampling과 propagation입니다. Measurement yty_t는 한 번도 쓰지 않았습니다.

§6의 전제가 성립하면 propagate된 cloud는 bel‾t=p(xt∣y1:t−1)\overline{\mathrm{bel}}_t=p(x_t\mid y_{1:t-1})를 나타냅니다. 우리가 원하는 것은 L4 §4의 belt=p(xt∣y1:t)∝p(yt∣xt) bel‾t\mathrm{bel}_t=p(x_t\mid y_{1:t})\propto p(y_t\mid x_t)\,\overline{\mathrm{bel}}_t입니다. Particle의 위치는 yty_t와 무관하게 정해졌으므로, p(yt∣xt)p(y_t\mid x_t)가 xtx_t에 따라 달라지는 한 이 cloud만으로는 posterior를 나타낼 수 없습니다.

Propagate만 한 cloud는 posterior가 아니다

Measurement를 한 번도 쓰지 않고 x0(i)∼p(x0)x_0^{(i)}\sim p(x_0)에서 propagation만 tt번 (t≥2t\ge 2) 반복하면, cloud는 p(xt∣y1:t−1)p(x_t\mid y_{1:t-1})이 아니라 데이터가 전혀 들어가지 않은 p(xt)p(x_t)를 나타냅니다. §6의 전제를 매 시각 다시 만들려면 update가 매번 필요합니다.

현재까지의 알고리즘은 다음과 같고, 비어 있는 두 줄이 다음 두 강의의 내용입니다.

for i = 1..N:
    # initial particles (this lecture)
    x[0][i] ~ p(x_0)
for t = 1, 2, ...:
    for i = 1..N:
        # propagate (this lecture)
        x[t][i] ~ p(x_t | x[t-1][i])
    # weight each x[t][i] using y_t  -> L6
    # resample                       -> L7

남은 질문은 두 가지입니다. 첫째, 이미 놓인 particle에 yty_t를 어떻게 반영하는가입니다. 이것은 importance sampling으로 답하고, particle이 predicted belief에 따라 이미 놓여 있으므로 weight가 likelihood만으로 정해진다는 결론은 L6 §6에서 유도합니다.

둘째, weight가 시간에 따라 쌓이면 무슨 일이 생기는가입니다. 이것은 L7 §1에서 시작합니다.


이해 확인

1. xt(7)∼p(xt∣xt−1(7))x_t^{(7)}\sim p(x_t\mid x_{t-1}^{(7)})를 말로 어떻게 읽는지 쓰시오. 조건에는 xt−1(7)x_{t-1}^{(7)} 한 값만 들어가는데, 이렇게 만든 particle cloud 전체가 bel‾t\overline{\mathrm{bel}}_t를 나타낼 수 있는 이유를 설명하시오.

2. Monte Carlo estimator 1N∑if(x(i))\frac1N\sum_i f(x^{(i)})에는 p(x(i))p(x^{(i)})가 곱해지지 않는다. 그런데도 ∫f(x) p(x) dx\int f(x)\,p(x)\,dx를 근사하는 이유를 설명하고, 이때 필요한 조건을 쓰시오.

3. 이전 시각에 particle 1,000개 중 400개가 AA, 600개가 BB에 있고 P(C∣A)=0.25P(C\mid A)=0.25, P(C∣B)=0.5P(C\mid B)=0.5이다. 다음 시각에 CC에 있는 particle 수의 expectation을 구하고, 이 계산이 prediction 식의 어느 부분에 해당하는지 쓰시오. 또 실제 개수가 정확히 그 값이라고 말할 수 없는 이유를 설명하시오.

4. 초기 particle에서 시작해 propagation만 반복한 cloud가 posterior p(xt∣y1:t)p(x_t\mid y_{1:t})를 나타내지 못하는 이유를 설명하시오.


답

1. "7번 particle의 시각 tt 값은, 같은 particle의 시각 t−1t-1 값을 조건으로 한 transition distribution에서 뽑는다"라고 읽습니다. Particle 하나는 자기 ancestor 값에만 조건을 겁니다. Ancestor index를 균등하게 고른 뒤 transition에서 뽑은 값은 law of total probability에 의해 mixture 1N∑ip(xt∣xt−1(i))\frac1N\sum_i p(x_t\mid x_{t-1}^{(i)})를 따르고, 모든 ii를 한 번씩 쓰는 코드에서도 ancestor를 고정하면 cloud 평균의 expectation이 이 mixture에 대한 expectation과 같습니다. Ancestor들이 belt−1\mathrm{bel}_{t-1}의 sample이므로 이 mixture가 prediction 적분의 Monte Carlo 근사입니다. → §6

2. pp의 정보는 곱셈이 아니라 sample이 떨어지는 위치로 들어갑니다. 같은 값끼리 묶으면 ∑xf(x) Nx/N\sum_x f(x)\,N_x/N이 되고 빈도 Nx/NN_x/N이 p(x)p(x)에 가까워집니다. Sample이 i.i.d.이고 Ep∣f(X)∣<∞\mathbb E_p\lvert f(X)\rvert<\infty이면 law of large numbers로 수렴하며, variance가 유한하면 오차가 1/N1/\sqrt N으로 줄어듭니다. → §4

3. 400×0.25+600×0.5=100+300=400400\times0.25+600\times0.5=100+300=400개입니다. 이것은 ∑xt−1P(C∣xt−1) belt−1(xt−1)\sum_{x_{t-1}}P(C\mid x_{t-1})\,\mathrm{bel}_{t-1}(x_{t-1})에서 belt−1\mathrm{bel}_{t-1} 자리에 빈도 0.4, 0.6을 넣은 계산입니다. 각 particle의 이동이 random이므로 개수도 random이고, 400은 expectation입니다 (standard deviation은 400(0.25)(0.75)+600(0.5)(0.5)=15\sqrt{400(0.25)(0.75)+600(0.5)(0.5)}=15). → §6

4. Propagation은 particle 위치를 yty_t와 무관하게 정합니다. 직전 시각에 update를 거친 particle에서 출발했더라도 propagation 결과는 p(xt∣y1:t−1)p(x_t\mid y_{1:t-1})까지만 나타내고, update를 한 번도 하지 않았다면 데이터가 들어가지 않은 p(xt)p(x_t)를 나타냅니다. p(yt∣xt)p(y_t\mid x_t)가 xtx_t에 따라 달라지면 posterior는 이것과 모양이 다르므로 p(yt∣xt)p(y_t\mid x_t)를 weight로 반영해야 하며, 이것이 L6의 내용입니다. → §7

lectureprobabilitybayes-filterparticle-filter