14 粒子滤波
Kalman 滤波根据线性高斯模型可以求得解析解,但是在非线性,非高斯的情况,是无法得到解析解的,对这类一般的情况,我们叫做粒子滤波,我们需要求得概率分布,需要采用采样的方式。
我们希望应用 Monte Carlo 方法来进行采样,对于一个概率分布,如果我们希望计算依这个分布的某个函数 \(f(z)\) 的期望,可以利用某种抽样方法,在这个概率分布中抽取 \(N\) 个样本,则 \(\mathbb{E}[f(z)]\simeq\frac{1}{N}\sum\limits_{i=1}^Nf(z_i)\)。但是如果这个概率十分复杂,那么采样比较困难。对于复杂的概率分布,我们可以通过一个简单的概率分布 \(q(z)\) 作为桥梁(重要值采样): \[ \mathbb{E}[f(z)]=\int_zf(z)p(z)dz=\int_zf(z)\frac{p(z)}{q(z)}q(z)dz=\sum\limits_{i=1}^Nf(z_i)\frac{p(z_i)}{q(z_i)} \] 于是直接通过对 \(q(z)\) 采样,然后对每一个采样的样本应用权重就得到了期望的近似,当然为了概率分布的特性,我们需要对权重进行归一化。
在滤波问题中,需要求解 \(p(z_t|x_{1:t})\),其权重为: \[ w_t^i=\frac{p(z_t^i|x_{1:t})}{q(z_t^i|x_{1:t})},i=1,2,\cdots,N \] 于是在每一个时刻 \(t\),都需要采样 \(N\) 个点,但是即使采样了这么多点,分子上面的那一项也十分难求,于是希望找到一个关于权重的递推公式。为了解决这个问题,引入序列重要性采样(SIS)。
14.1 SIS
在 SIS 中,解决的问题是 \(p(z_{1:t}|x_{1:t})\)。 \[ w_t^i\propto\frac{p(z_{1:t}|x_{1:t})}{q(z_{1:t}|x_{1:t})} \] 根据 LDS 中的推导: \[ \begin{align}p(z_{1:t}|x_{1:t})\propto p(x_{1:t},z_{1:t})&=p(x_t|z_{1:t},x_{1:t-1})p(z_{1:t},x_{1:t-1})\nonumber\\ &=p(x_t|z_t)p(z_t|x_{1:t-1},z_{1:t-1})p(x_{1:t-1},z_{1:t-1})\nonumber\\ &=p(x_t|z_t)p(z_t|z_{t-1})p(x_{1:t-1},z_{1:t-1})\nonumber\\ &\propto p(x_t|z_t)p(z_t|z_{t-1})p(z_{1:t-1}|x_{1:t-1}) \end{align} \] 于是分子的递推式就得到了。对于提议分布的分母,可以取: \[ q(z_{1:t}|x_{1:t})=q(z_t|z_{1:t-1},x_{1:t})q(z_{1:t-1}|x_{1:t-1}) \] 所以有: \[ w_t^i\propto\frac{p(z_{1:t}|x_{1:t})}{q(z_{1:t}|x_{1:t})}\propto \frac{p(x_t|z_t)p(z_t|z_{t-1})p(z_{1:t-1}|x_{1:t-1})}{q(z_t|z_{1:t-1},x_{1:t})q(z_{1:t-1}|x_{1:t-1})}=\frac{p(x_t|z_t)p(z_t|z_{t-1})}{q(z_t|z_{1:t-1},x_{1:t})}w_{t-1}^i \] 我们得到的对权重的算法为:
- \(t-1\) 时刻,采样完成并计算得到权重
- t 时刻,根据 \(q(z_t|z_{1:t-1},x_{1:t})\) 进行采样得到 \(z_t^i\)。然后计算得到 \(N\) 个权重。
- 最后对权重归一化。
SIS 算法会出现权值退化的情况,在一定时间后,可能会出现大部分权重都逼近0的情况,这是由于空间维度越来越高,需要的样本也越来越多。解决这个问题的方法有:
- 重采样,以权重作为概率分布,重新在已经采样的样本中采样,然后所有样本的权重相同,这个方法的思路是将权重作为概率分布,然后得到累积密度函数,在累积密度上取点(阶梯函数)。
- 选择一个合适的提议分布,\(q(z_t|z_{1:t-1},x_{1:t})=p(z_t|z_{t-1})\),于是就消掉了一项,并且采样的概率就是 \(p(z_t|z_{t-1})\),这就叫做生成与测试方法。
采用重采样的 SIS 算法就是基本的粒子滤波算法。如果像上面那样选择提议分布,这个算法叫做 SIR 算法。