粒子滤波 Particle Filtering¶
有时候HMM的状态空间\(X\)太大或者是连续的,无法推理/储存/计算,就需要用采样的方法解决
- 粒子:对系统真实状态的一个采样样本,带有权重
- 滤波:根据截至当前时刻的所有观测数据,实时推断当前时刻真实状态
例如,下面这个3*3表格的状态,每个状态都有一个概率值,总共存储9个数
| 概率;y\x | 1 | 2 | 3 |
|---|---|---|---|
| 3 | 0.0 | 0.1 | 0.0 |
| 2 | 0.0 | 0.0 | 0.2 |
| 1 | 0.0 | 0.2 | 0.5 |
假设总共使用10个粒子,可能是这样:
| 个数;y\x | 1 | 2 | 3 |
|---|---|---|---|
| 3 | 1 | ||
| 2 | 2 | ||
| 1 | 2 | 5 |
最后只需要储存这10个粒子的坐标和对应权重:(3,1,w=1),(3,1,w=1)...
某一个状态的\(P(x)\)就由粒子的加权占比决定,一开始初始化所有权重为1/N
粒子滤波的循环步骤是:预测(时间流逝更新),更新(观测更新),归一化,重采样
时间流逝更新¶
遍历所有粒子,对选中的粒子,假设在状态\(x\),从转移概率\(P(X' \mid x)\)中采样一个状态\(x'\)
然后把这个粒子移动到这个状态
与前向算法的关系
这其实就是在模拟前向算法的时间流逝更新
粒子的情况相当于这里的信念分布\(B(x_t)\),如果粒子数量足够多,这就可以反映转移概率的情况
观测更新¶
观测一个新的证据,然后根据这个证据,和粒子(假设位于状态\(x\))的匹配程度,为所有粒子分配权重\(w(x)\)
其中\(P(e \mid x)\)是观测概率,是HMM中给定的量
这个值越大,说明粒子的状态越支持这个证据,似然值越高,分配的权重也越大
与前向算法的关系
这其实就是在模拟前向算法的观测更新
粒子的情况相当于这里的信念分布\(B'(X_{t+1})\),通过分配权重,就是乘以了这个式子的系数\(P(e_{t+1} \mid X_{t+1})\)
归一化¶
正如刚刚所说,模拟观测更新引入了系数,之后也和前向算法一样,要对所有粒子的权重进行归一化
使得这个采样集合能满足概率分布,可以进行下一步重采样
重采样 Resample¶
根据当前粒子的权重情况作为概率,抽取个数相同的新粒子,然后放弃当前所有的粒子
详细的说是:
- 一开始有 \(N\) 个带权重的粒子,把这 \(N\) 个粒子的归一化权重,看作概率分布
- 采样,从这个分布里,独立取 \(N\) 次,得到 \(N\) 个新粒子
- 完全替换,用这个新粒子集替换掉之前的旧粒子集,这时每个粒子,权重都是一致的,为 \(1/N\)
总结¶
和推理方法不同,粒子滤波这种采样的方法直接模拟HMM里那些不可知的状态
应用(强烈建议观看1h出头的演示):
- 机器人定位
- SLAM: Simultaneous Localization And Mapping
- Dynamic Bayes Net