第二十一课.粒子滤波器
目录
- 粒子滤波
- 问题引入
- 采样获取数值解
- 权重递推关系推导
- 粒子滤波过程
- 粒子滤波采样流程
- 观测变量与隐变量的关系分析
- 滤波中的分布变化
- 粒子滤波的权重衰减问题
- 重采样解决权重衰减问题
粒子滤波
问题引入
卡尔曼滤波基于"高斯噪声+线性"的假设,由于高斯分布的特性,我们可以得到解析解,如果更一般化,变量之间服从任意关系,则称为粒子滤波。
粒子滤波的关注问题同样是p(zt∣x1,x2,...,xt)p(z_{t}|x_{1},x_{2},...,x_{t})p(zt∣x1,x2,...,xt)的分布,回顾卡尔曼滤波器中介绍的解决方案:
- predict,利用t−1t-1t−1时刻的滤波结果估计ztz_{t}zt作为先验概率:p(zt∣x1,x2,...,xt−1)=∫zt−1p(zt∣zt−1)p(zt−1∣x1,x2,...,xt−1)dzt−1p(z_{t}|x_{1},x_{2},...,x_{t-1})=\int_{z_{t-1}}p(z_{t}|z_{t-1})p(z_{t-1}|x_{1},x_{2},...,x_{t-1})dz_{t-1}p(zt∣x1,x2,...,xt−1)=∫zt−1p(zt∣zt−1)p(zt−1∣x1,x2,...,xt−1)dzt−1
- update,在得到ttt时刻的观测变量xtx_{t}xt后,对预测的先验概率进行修正,得到ztz_{t}zt的后验概率:p(zt∣x1,...,xt)∝p(xt∣zt)p(zt∣x1,...,xt−1)p(z_{t}|x_{1},...,x_{t})\propto p(x_{t}|z_{t})p(z_{t}|x_{1},...,x_{t-1})p(zt∣x1,...,xt)∝p(xt∣zt)p(zt∣x1,...,xt−1)
现在抛弃卡尔曼滤波器中变量间的假设关系,我们不能得到解析解,为了实现滤波,我们利用蒙特卡洛方法获取数值解。
采样获取数值解
具体采样方法为重要性采样。在predict和update不断迭代的过程中,都在计算zzz的概率分布,获取到分布(获取到参数)后,我们用期望作为滤波的结果。对于数值解方法,如果ztz_{t}zt服从概率分布p(zt∣x1,...,xt)p(z_{t}|x_{1},...,x_{t})p(zt∣x1,...,xt),则数值解的结果即直接得到ztz_{t}zt的期望。
首先回顾重要性采样,例如变量zzz服从分布p(z)p(z)p(z),现在要获得zzz的期望。
按照连续型随机变量期望的定义:E[z]=∫zp(z)dzE[z]=\int zp(z)dzE[z]=∫zp(z)dz,根据大数定理,从分布p(z)p(z)p(z)中采样NNN个样本ziz_{i}zi,样本均值与期望近似,所以期望表示为:E[z]=∫zp(z)dz≈1N∑i=1NziE[z]=\int zp(z)dz\approx \frac{1}{N}\sum_{i=1}^{N}z_{i}E[z]=∫zp(z)dz≈N1i=1∑Nzi
但问题是p(z)p(z)p(z)本来就是未知的分布,我们难以采样得到样本ziz_{i}zi。为了解决该问题,我们引入建议分布q(z)q(z)q(z),建议分布是我们已知且熟悉的分布,即得到重要性采样的期望:E[z]=∫zp(z)dz=∫zp(z)q(z)q(z)dz≈1N∑i=1Nzip(zi)q(zi)E[z]=\int zp(z)dz=\int z\frac{p(z)}{q(z)}q(z)dz\approx \frac{1}{N}\sum_{i=1}^{N}z_{i}\frac{p(z_{i})}{q(z_{i})}E[z]=∫zp(z)dz=∫zq(z)p(z)q(z)dz≈N1i=1∑Nziq(zi)p(zi)
其中,p(zi)q(zi)\frac{p(z_{i})}{q(z_{i})}q(zi)p(zi)称为ziz_{i}zi的权重,记作wiw_{i}wi,并且,现在的ziz_{i}zi不是从p(z)p(z)p(z)中采样得到的,而是来自q(z)q(z)q(z)采样。
现在回到粒子滤波问题,在ttt时刻,用数值解法计算滤波的近似结果,实际上就是求p(zt∣x1:t)p(z_{t}|x_{1:t})p(zt∣x1:t)中变量zzz的期望,利用重要性采样方法,引入建议分布q(zt∣x1:t)q(z_{t}|x_{1:t})q(zt∣x1:t),每一轮过程中,比如在ttt时刻,我们用建议分布q(zt∣x1:t)q(z_{t}|x_{1:t})q(zt∣x1:t)生成NNN个样本:zt1,zt2,...,ztNz_{t}^{1},z_{t}^{2},...,z_{t}^{N}zt1,zt2,...,ztN;
再利用权重公式获得权重:wti=p(zti∣x1:t)q(zti∣x1:t)w_{t}^{i}=\frac{p(z_{t}^{i}|x_{1:t})}{q(z_{t}^{i}|x_{1:t})}wti=q(zti∣x1:t)p(zti∣x1:t)
从而计算滤波结果:1N∑i=1Nztiwti\frac{1}{N}\sum_{i=1}^{N}z_{t}^{i}w_{t}^{i}N1i=1∑Nztiwti
目前又面临一个实际问题,在以往的重要性采样中,虽然不能便利地从p(z)p(z)p(z)中采样,但毕竟是知道p(z)p(z)p(z)的解析式的,因为这样才能计算p(z)p(z)p(z)的概率值,对于粒子滤波问题,我们不知道p(zti∣x1:t)p(z_{t}^{i}|x_{1:t})p(zti∣x1:t)的解析式,只有当t=1t=1t=1时,p(z1i∣x1)p(z_{1}^{i}|x_{1})p(z1i∣x1)可以由p(z1i∣x1)∝p(z1i)p(x1∣z1i)p(z_{1}^{i}|x_{1})\propto p(z_{1}^{i})p(x_{1}|z_{1}^{i})p(z1i∣x1)∝p(z1i)p(x1∣z1i)获得。所以,我们利用递推法解决该问题。
权重递推关系推导
在t−1t-1t−1时刻,NNN个样本zt−11,zt−12,zt−13,...,zt−1Nz_{t-1}^{1},z_{t-1}^{2},z_{t-1}^{3},...,z_{t-1}^{N}zt−11,zt−12,zt−13,...,zt−1N所对应的权重为wt−11,wt−12,wt−13,...,wt−1Nw_{t-1}^{1},w_{t-1}^{2},w_{t-1}^{3},...,w_{t-1}^{N}wt−11,wt−12,wt−13,...,wt−1N;
在ttt时刻,NNN个样本zt1,zt2,zt3,...,ztNz_{t}^{1},z_{t}^{2},z_{t}^{3},...,z_{t}^{N}zt1,zt2,zt3,...,ztN所对应的权重为wt1,wt2,wt3,...,wtNw_{t}^{1},w_{t}^{2},w_{t}^{3},...,w_{t}^{N}wt1,wt2,wt3,...,wtN;
我们只要求出样本两个对应位置的样本zt−1iz_{t-1}^{i}zt−1i和ztiz_{t}^{i}zti权重的递推关系,即wt−1iw_{t-1}^{i}wt−1i和wtiw_{t}^{i}wti之间的递推关系,从t=1t=1t=1开始,一步一步采样ztiz_{t}^{i}zti,一轮一轮迭代wtiw_{t}^{i}wti,就实现了滤波。
下面是具体求解过程:
为了简化计算,使用概率p(z1:t∣x1:t)p(z_{1:t}|x_{1:t})p(z1:t∣x1:t),这是一种简化运算的假设,权重的表达式变为:wt=p(z1:t∣x1:t)q(z1:t∣x1:t)w_{t}=\frac{p(z_{1:t}|x_{1:t})}{q(z_{1:t}|x_{1:t})}wt=q(z1:t∣x1:t)p(z1:t∣x1:t)
现在研究如何化简该表达式,首先对于分子:p(z1:t∣x1:t)=p(z1:t,x1:t)p(x1:t)=1Cp(z1:t,x1:t)p(z_{1:t}|x_{1:t})=\frac{p(z_{1:t},x_{1:t})}{p(x_{1:t})}=\frac{1}{C}p(z_{1:t},x_{1:t})p(z1:t∣x1:t)=p(x1:t)p(z1:t,x1:t)=C1p(z1:t,x1:t)
其中,由于p(x1:t)p(x_{1:t})p(x1:t)是观测变量x1:tx_{1:t}x1:t的概率,所以可以记作常数CCC,然后:p(z1:t∣x1:t)=1Cp(z1:t,x1:t)=1Cp(xt∣z1:t,x1:t−1)p(z1:t,x1:t−1)p(z_{1:t}|x_{1:t})=\frac{1}{C}p(z_{1:t},x_{1:t})=\frac{1}{C}p(x_{t}|z_{1:t},x_{1:t-1})p(z_{1:t},x_{1:t-1})p(z1:t∣x1:t)=C1p(z1:t,x1:t)=C1p(xt∣z1:t,x1:t−1)p(z1:t,x1:t−1)=1Cp(xt∣z1:t,x1:t−1)p(zt∣z1:t−1,x1:t−1)p(z1:t−1,x1:t−1)=\frac{1}{C}p(x_{t}|z_{1:t},x_{1:t-1})p(z_{t}|z_{1:t-1},x_{1:t-1})p(z_{1:t-1},x_{1:t-1})=C1p(xt∣z1:t,x1:t−1)p(zt∣z1:t−1,x1:t−1)p(z1:t−1,x1:t−1)=1Cp(xt∣z1:t,x1:t−1)p(zt∣z1:t−1,x1:t−1)p(z1:t−1∣x1:t−1)p(x1:t−1)=\frac{1}{C}p(x_{t}|z_{1:t},x_{1:t-1})p(z_{t}|z_{1:t-1},x_{1:t-1})p(z_{1:t-1}|x_{1:t-1})p(x_{1:t-1})=C1p(xt∣z1:t,x1:t−1)p(zt∣z1:t−1,x1:t−1)p(z1:t−1∣x1:t−1)p(x1:t−1)
根据观测独立性假设有:p(xt∣z1:t,x1:t−1)=p(xt∣zt)p(x_{t}|z_{1:t},x_{1:t-1})=p(x_{t}|z_{t})p(xt∣z1:t,x1:t−1)=p(xt∣zt)
根据齐次马尔科夫假设有:p(zt∣z1:t−1,x1:t−1)=p(zt∣zt−1)p(z_{t}|z_{1:t-1},x_{1:t-1})=p(z_{t}|z_{t-1})p(zt∣z1:t−1,x1:t−1)=p(zt∣zt−1)
同时,p(x1:t−1)p(x_{1:t-1})p(x1:t−1)是一组观测变量的概率,记作常数DDD,最终化简为:p(z1:t∣x1:t)=DCp(xt∣zt)p(zt∣zt−1)p(z1:t−1∣x1:t−1)p(z_{1:t}|x_{1:t})=\frac{D}{C}p(x_{t}|z_{t})p(z_{t}|z_{t-1})p(z_{1:t-1}|x_{1:t-1})p(z1:t∣x1:t)=CDp(xt∣zt)p(zt∣zt−1)p(z1:t−1∣x1:t−1)
再研究分母的化简,先按照条件概率公式转化一下:q(z1:t∣x1:t)=q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t)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})q(z1:t∣x1:t)=q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t)
此处有一个技巧,时刻ttt以前的隐变量取值显然不受时刻ttt的观测变量取值的影响,于是有:q(z1:t−1∣x1:t)=q(z1:t−1∣x1:t−1)q(z_{1:t-1}|x_{1:t})=q(z_{1:t-1}|x_{1:t-1})q(z1:t−1∣x1:t)=q(z1:t−1∣x1:t−1)
所以:q(z1:t∣x1:t)=q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t−1)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})q(z1:t∣x1:t)=q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t−1)
此时,权重的表达式为:wt=p(z1:t∣x1:t)q(z1:t∣x1:t)∝p(xt∣zt)p(zt∣zt−1)p(z1:t−1∣x1:t−1)q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t−1)w_{t}=\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})}wt=q(z1:t∣x1:t)p(z1:t∣x1:t)∝q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t−1)p(xt∣zt)p(zt∣zt−1)p(z1:t−1∣x1:t−1)
即:wt∝p(xt∣zt)p(zt∣zt−1)q(zt∣z1:t−1,x1:t)wt−1w_{t}\propto\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}wt∝q(zt∣z1:t−1,x1:t)p(xt∣zt)p(zt∣zt−1)wt−1
qqq分布是可以任意选择的提议分布,我们不妨让qqq分布与ppp分布相同,则有:q(zt∣z1:t−1,x1:t)=p(zt∣z1:t−1,x1:t)=p(zt∣zt−1)q(z_{t}|z_{1:t-1},x_{1:t})=p(z_{t}|z_{1:t-1},x_{1:t})=p(z_{t}|z_{t-1})q(zt∣z1:t−1,x1:t)=p(zt∣z1:t−1,x1:t)=p(zt∣zt−1)
进一步化简为:wt∝p(xt∣zt)wt−1w_{t}\propto p(x_{t}|z_{t})w_{t-1}wt∝p(xt∣zt)wt−1
发现p(xt∣zt)p(x_{t}|z_{t})p(xt∣zt)反映的是ttt时刻隐变量ztz_{t}zt到观测变量xtx_{t}xt的转移概率,这个是模型的已知内容,因此,ttt时刻和t−1t-1t−1时刻的权重递推关系就可以方便地计算出来。
粒子滤波过程
粒子滤波采样流程
在上面内容中,已经得到了t−1t-1t−1时刻和ttt时刻的权重递推关系:wt=p(xt∣zt)wt−1w_{t}=p(x_{t}|z_{t})w_{t-1}wt=p(xt∣zt)wt−1,那么粒子滤波中的采样过程具体描述如下,这是一个迭代的过程:
前提:在t−1t-1t−1时刻采样过程已完成;
在ttt时刻,我们采样NNN个样本ztiz_{t}^{i}zti
fori=1,2,...,N:for\quad i=1,2,...,N:fori=1,2,...,N:
zti∼q(zt∣zt−1i,x1:t)\quad\quad z_{t}^{i}\sim q(z_{t}|z_{t-1}^{i},x_{1:t})zti∼q(zt∣zt−1i,x1:t)
wti=p(xt∣zti)p(zti∣zt−1i)q(zti∣z1:t−1i,x1:t)wt−1i\quad\quad w_{t}^{i}=\frac{p(x_{t}|z_{t}^{i})p(z_{t}^{i}|z_{t-1}^{i})}{q(z_{t}^{i}|z_{1:t-1}^{i},x_{1:t})}w_{t-1}^{i}wti=q(zti∣z1:t−1i,x1:t)p(xt∣zti)p(zti∣zt−1i)wt−1i
end:end:end:对wtiw_{t}^{i}wti进行归一化,使得∑i=1Nwti=1\sum_{i=1}^{N}w_{t}^{i}=1∑i=1Nwti=1
由于我们让建议分布q=pq=pq=p,则有:q(zti∣z1:t−1i,x1:t)=p(zti∣z1:t−1i,x1:t)=p(zti∣zt−1i)q(z_{t}^{i}|z_{1:t-1}^{i},x_{1:t})=p(z_{t}^{i}|z_{1:t-1}^{i},x_{1:t})=p(z_{t}^{i}|z_{t-1}^{i})q(zti∣z1:t−1i,x1:t)=p(zti∣z1:t−1i,x1:t)=p(zti∣zt−1i)
此时,采样和权重迭代的过程简化为:
fori=1,2,...,N:for\quad i=1,2,...,N:fori=1,2,...,N:
zti∼p(zt∣zt−1i)\quad\quad z_{t}^{i}\sim p(z_{t}|z_{t-1}^{i})zti∼p(zt∣zt−1i)
wti=p(xt∣zti)wt−1i\quad\quad w_{t}^{i}=p(x_{t}|z_{t}^{i})w_{t-1}^{i}wti=p(xt∣zti)wt−1i
end:end:end:对wtiw_{t}^{i}wti进行归一化,使得∑i=1Nwti=1\sum_{i=1}^{N}w_{t}^{i}=1∑i=1Nwti=1
实际上在ttt时刻,我们需要从分布p(zt∣zt−1i)p(z_{t}|z_{t-1}^{i})p(zt∣zt−1i)中采样NNN个样本ztiz_{t}^{i}zti,同时我们在上一步t−1t-1t−1时刻曾经也得到了一轮采样样本zt−11,...,zt−1Nz_{t-1}^{1},...,z_{t-1}^{N}zt−11,...,zt−1N,其中每一个采样样本zt−1iz_{t-1}^{i}zt−1i对应的权重就是wt−1iw_{t-1}^{i}wt−1i,那么在时刻ttt的采样中,我们对每一个样本ztiz_{t}^{i}zti,仅通过p(xt∣zti)wt−1ip(x_{t}|z_{t}^{i})w_{t-1}^{i}p(xt∣zti)wt−1i的迭代计算,我们就能获得样本ztiz_{t}^{i}zti的权重wtiw_{t}^{i}wti。
对于初始时刻w1iw_{1}^{i}w1i的获取,当t=1t=1t=1时,代入w1i=p(x1∣z1i)w0iw_{1}^{i}=p(x_{1}|z_{1}^{i})w_{0}^{i}w1i=p(x1∣z1i)w0i,令w0i=1w_{0}^{i}=1w0i=1,并令t=1t=1t=1时,zti∼p(zt∣zt−1i)z_{t}^{i}\sim p(z_{t}|z_{t-1}^{i})zti∼p(zt∣zt−1i)中的p(zt∣zt−1i)p(z_{t}|z_{t-1}^{i})p(zt∣zt−1i)为初始概率分布p(z1)p(z_{1})p(z1);
所以粒子滤波过程为:
t=1:t=1:t=1:
fori=1,2,...,N:for\quad i=1,2,...,N:fori=1,2,...,N:
z1i∼p(z1)\quad\quad z_{1}^{i}\sim p(z_{1})z1i∼p(z1)
w1i=p(x1∣z1i)\quad\quad w_{1}^{i}=p(x_{1}|z_{1}^{i})w1i=p(x1∣z1i)
end:end:end:对w1iw_{1}^{i}w1i进行归一化,使得∑i=1Nw1i=1\sum_{i=1}^{N}w_{1}^{i}=1∑i=1Nw1i=1
t≥2:t\geq 2:t≥2:
fori=1,2,...,N:for\quad i=1,2,...,N:fori=1,2,...,N:
zti∼p(zt∣zt−1i)\quad\quad z_{t}^{i}\sim p(z_{t}|z_{t-1}^{i})zti∼p(zt∣zt−1i)
wti=p(xt∣zti)wt−1i\quad\quad w_{t}^{i}=p(x_{t}|z_{t}^{i})w_{t-1}^{i}wti=p(xt∣zti)wt−1i
end:end:end:对wtiw_{t}^{i}wti进行归一化,使得∑i=1Nwti=1\sum_{i=1}^{N}w_{t}^{i}=1∑i=1Nwti=1
观测变量与隐变量的关系分析
初始概率p(z1)p(z_{1})p(z1),状态转移概率p(zt∣zt−1)p(z_{t}|z_{t-1})p(zt∣zt−1)和发射概率p(xt∣zt)p(x_{t}|z_{t})p(xt∣zt),这三种概率在隐马尔科夫模型,卡尔曼滤波器和粒子滤波器中都有,但表现形式不同,回顾一下:
对于HMM,初始概率p(z1)p(z_{1})p(z1)取自概率向量π\piπ,状态转移概率p(zt∣zt−1)p(z_{t}|z_{t-1})p(zt∣zt−1)和发射概率p(xt∣zt)p(x_{t}|z_{t})p(xt∣zt)取自状态转移概率矩阵AAA和发射概率矩阵BBB中的对应项;
对于卡尔曼滤波器,三个概率均服从高斯分布:p(zt∣zt−1)=N(Azt−1+B,Q)p(z_{t}|z_{t-1})=N(Az_{t-1}+B,Q)p(zt∣zt−1)=N(Azt−1+B,Q)p(xt∣zt)=N(Czt+D,R)p(x_{t}|z_{t})=N(Cz_{t}+D,R)p(xt∣zt)=N(Czt+D,R)p(z1)=N(μ1,σ1)p(z_{1})=N(\mu_{1},\sigma_{1})p(z1)=N(μ1,σ1)
粒子滤波器没有约束,三个概率都可以定义为任意函数:p(zt∣zt−1)=f(zt−1)p(z_{t}|z_{t-1})=f(z_{t-1})p(zt∣zt−1)=f(zt−1)p(xt∣zt)=g(zt)p(x_{t}|z_{t})=g(z_{t})p(xt∣zt)=g(zt)p(z1)=f0(z1)p(z_{1})=f_{0}(z_{1})p(z1)=f0(z1)
滤波中的分布变化
比较卡尔曼滤波和粒子滤波,比较从时间t−1t-1t−1时刻到ttt时刻的迭代。对于卡尔曼滤波,关于隐变量ztz_{t}zt的估计,实际是一个高斯分布:
我们知道,在t−1t-1t−1时刻,通过predict步,得到一个预测概率:p(zt∣x1,x2,...,xt−1)=∫zt−1p(zt∣zt−1)p(zt−1∣x1,x2,...,xt−1)dzt−1p(z_{t}|x_{1},x_{2},...,x_{t-1})=\int_{z_{t-1}}p(z_{t}|z_{t-1})p(z_{t-1}|x_{1},x_{2},...,x_{t-1})dz_{t-1}p(zt∣x1,x2,...,xt−1)=∫zt−1p(zt∣zt−1)p(zt−1∣x1,x2,...,xt−1)dzt−1
这本质上是先获得ztz_{t}zt的先验高斯分布,然后在ttt时刻进行update步,利用观察到ttt时刻的观测变量xtx_{t}xt,对先验分布进行修正,得到后验分布:p(zt∣x1,x2,...,xt)∝p(xt∣zt)p(zt∣x1,x2,...,xt−1)p(z_{t}|x_{1},x_{2},...,x_{t})\propto p(x_{t}|z_{t})p(z_{t}|x_{1},x_{2},...,x_{t-1})p(zt∣x1,x2,...,xt)∝p(xt∣zt)p(zt∣x1,x2,...,xt−1)
简单地说,从t−1t-1t−1时刻的predict步到ttt时刻的update步,就是从一个高斯分布变化到另一个高斯分布的过程,高斯分布仅由均值和方差决定,因此前后需要发生改变的就是均值和方差,如下图:
而粒子滤波,因为没有高斯分布的解析形式,我们没有办法在每一轮迭代中获得其解析式,所以采用蒙特卡洛方法采样。
即在t−1t-1t−1时刻,我们获得NNN个采样的样本:zt−11,zt−12,...,zt−1Nz_{t-1}^{1},z_{t-1}^{2},...,z_{t-1}^{N}zt−11,zt−12,...,zt−1N,对应了各自不同的权重wt−11,wt−12,...,wt−1Nw_{t-1}^{1},w_{t-1}^{2},...,w_{t-1}^{N}wt−11,wt−12,...,wt−1N,这实际是一个分布列,这个分布列近似表示了ztz_{t}zt的后验分布,而我们正是通过这个分布列求得期望,作为这一轮滤波的估计值。到了ttt时刻,我们通过zti∼p(zt∣zt−1i)z_{t}^{i}\sim p(z_{t}|z_{t-1}^{i})zti∼p(zt∣zt−1i)和wti=wt−1ip(xt∣zti)w_{t}^{i}=w_{t-1}^{i}p(x_{t}|z_{t}^{i})wti=wt−1ip(xt∣zti)来获取ttt时刻的分布列和各自对应的权重;
如果我们明确了概念,即离散型随机变量的分布列就是连续型随机变量概率分布的一种近似,则粒子滤波从t−1t-1t−1时刻到ttt时刻也是从一个分布到另一个分布的变化过程,这里变化的是所有随机变量ztiz_{t}^{i}zti的取值和对应的权重,而分布列的两个要素就是随机变量的取值和其对应的权重。
从图中可以看出,从t−1t-1t−1时刻到ttt时刻,虚线箭头表示采样过程zti∼p(zt∣zt−1i)z_{t}^{i}\sim p(z_{t}|z_{t-1}^{i})zti∼p(zt∣zt−1i)和权重更新wti=wt−1ip(xt∣zti)w_{t}^{i}=w_{t-1}^{i}p(x_{t}|z_{t}^{i})wti=wt−1ip(xt∣zti):每一个采样点ziz_{i}zi的取值发生了变化,权重也发生了变化。
粒子滤波的权重衰减问题
粒子滤波还存在一个问题,即权重衰减问题,一般粒子滤波在经过迭代几轮后,会出现以下情况,在其分布列中,某一个取值的权重很大,其他都很小:
也就是当某一个采样点的权重很大,而其他采样点的权值很小的情况下,后续迭代都会保持这个趋势,而导致采样点的权值出现衰退,首先这种情况是没有意义的,因为一枝独秀的情况不能很好反映整体分布。
在考虑如何解决这种问题前,先来想想为什么,在前面的粒子滤波算法中,NNN个样本进行迭代,每个样本都被处理一次,这一次处理通过zti∼p(zt∣zt−1i)z_{t}^{i}\sim p(z_{t}|z_{t-1}^{i})zti∼p(zt∣zt−1i)确定ttt时刻采样点的值,通过wti=wt−1ip(xt∣zti)w_{t}^{i}=w_{t-1}^{i}p(x_{t}|z_{t}^{i})wti=wt−1ip(xt∣zti)确定权重。
因此,那个权重极大的采样点,下一轮权重依然很大,而权重很小的(近似0),总体上看,下一轮权重依旧接近0,即:在t−1t-1t−1时刻到ttt时刻,NNN个样本,每个采样点只处理一次,权重随之一起转移了。
重采样解决权重衰减问题
为了解决权重衰减问题,应该让采样点的值转移过程与权值脱钩,但又要反映各个采样点的权重属性,这个"既要又要"可以由重采样实现。
考虑一种极端情况,比如zt−1jz_{t-1}^{j}zt−1j的权重是0.85,zt−1kz_{t-1}^{k}zt−1k的权重是0.1,zt−1mz_{t-1}^{m}zt−1m的权重是0.05,其他采样点的权重都为0(实际情况应该是每个采样点都有权重,此处只是为了简化描述)。
在t−1t-1t−1时刻到ttt时刻的采样过程中,我们还是进行NNN次采样,但在每次采样中,我们让其有0.85的概率去处理zt−1jz_{t-1}^{j}zt−1j,0.1的概率去处理zt−1kz_{t-1}^{k}zt−1k,0.05的概率去处理zt−1mz_{t-1}^{m}zt−1m,假设N=100N=100N=100,那么按照大数定理,zt−1jz_{t-1}^{j}zt−1j的处理次数就为85次,这样它同样照顾到t−1t-1t−1时刻各个采样点的权重属性,其好处体现在:每次都是依照ztj∼p(zt∣zt−1j)z_{t}^{j}\sim p(z_{t}|z_{t-1}^{j})ztj∼p(zt∣zt−1j)的概率分布进行采样确定下一轮的采样值,而85次采样的结果不会再集中于一点。
对于权重的处理,在t−1t-1t−1时刻,NNN次采样过程中,我们每一次所选中的采样点,他的权重都是1N\frac{1}{N}N1,在这个例子中,N=100N=100N=100,每一次采样的权重就是0.010.010.01,但是每次采样又0.85的概率处理zt−1jz_{t-1}^{j}zt−1j,依照大数定理,zt−1jz_{t-1}^{j}zt−1j的处理次数就为85次,仍然包含了原始采样点的权重信息,那么迭代到下一轮wtj=1Np(xt∣ztj)w_{t}^{j}=\frac{1}{N}p(x_{t}|z_{t}^{j})wtj=N1p(xt∣ztj),决定了ttt时刻这个采样点的权重;
我们依照zti∼p(zt∣zt−1i)z_{t}^{i}\sim p(z_{t}|z_{t-1}^{i})zti∼p(zt∣zt−1i)概率取出ttt时刻的样本ztiz_{t}^{i}zti,如果这个样本对于生成观测变量xtx_{t}xt是合适的,则p(xt∣zti)p(x_{t}|z_{t}^{i})p(xt∣zti)取值会更大,那么这个样本在ttt时刻所对应的权重wti=1Np(xt∣zti)w_{t}^{i}=\frac{1}{N}p(x_{t}|z_{t}^{i})wti=N1p(xt∣zti)就更大。
因此在前面基本的粒子滤波算法上,我们在t−1t-1t−1轮生成新的NNN个样本点zt−1iz_{t-1}^{i}zt−1i以及它们的权重wt−1iw_{t-1}^{i}wt−1i后,在向ttt时刻迭代的过程中,目标还是采样NNN个样本,首先更新zt−1iz_{t-1}^{i}zt−1i的权重,将其变成1N\frac{1}{N}N1,但是在每次采样的过程中,我们依照更新前的权重wt−11,wt−12,...,wt−1Nw_{t-1}^{1},w_{t-1}^{2},...,w_{t-1}^{N}wt−11,wt−12,...,wt−1N,依概率选择一个采样点进行处理,利用zti∼p(zt∣zt−1i)z_{t}^{i}\sim p(z_{t}|z_{t-1}^{i})zti∼p(zt∣zt−1i)获得下一轮ttt时刻的新采样点,并更新权重wti=1Np(xt∣zti)w_{t}^{i}=\frac{1}{N}p(x_{t}|z_{t}^{i})wti=N1p(xt∣zti)得到ttt时刻第iii个采样点的权重。
第二十一课.粒子滤波器相关推荐
- NeHe OpenGL教程 第二十一课:线的游戏
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十一课:Cocos2D-X网格特效1-3
[麦可网]Cocos2d-X跨平台游戏开发---学习笔记 第二十一课:Cocos2D-X网格特效1-3 ================================================ ...
- 实践数据湖iceberg 第二十一课 flink1.13.5 + iceberg0.131 CDC(测试成功INSERT,变更操作失败)
系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql ...
- OpenGL教程翻译 第二十一课 聚光灯
第二十一课 聚光灯 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) 背景 聚光灯是第三个也是最后一个我们将要介绍的光源类型(至少在一段时间内).他比平行光和 ...
- Python界面编程第二十一课:Pyside2 (Qt For Python)打印预览QTextEdit内容
Pyside2 的QPrintSupport类中的QPrinter 和 QPrintPreviewDialog支持打印功能. 先看完整代码: from PySide2.QtWidgets import ...
- 第二十一课.DeepGraphLibrary(二)
目录 构建GNN模块 官方SAGEConv和HeteroGraphConv用法 SAGEConv HeteroGraphConv 利用DGL构建SAGE DGL图数据集 DGLDataset 下载原始 ...
- 第二十课.卡尔曼滤波器
目录 卡尔曼滤波器的参数 滤波问题的解决方案 卡尔曼滤波的predict和update 基于正态分布得到解析结果 证明解析解存在 解析解计算 卡尔曼滤波器的参数 首先回顾卡尔曼滤波的概率图: 基于之前 ...
- 第二十一课.GBDT
目录 集成学习:Boosting 提升决策树 梯度提升算法 梯度提升决策树(Gradient Boosting Decision Tree,简称 GBDT),它属于集成学习中 Boosting 类的算 ...
- 大三小学期进阶课程第二十一课:reinforcement learning and data driven approaches
第21课.reinforcement learning and data driven approaches 解决规划问题,不能一上来就开始data driven,而是一步步来从rule based这 ...
最新文章
- 解决在onCreate()过程中获取View的width和Height为0的4种方法
- js实现表格无缝滚动效果
- 成本中心和内部订单浅析
- boost::log::expressions::channel_severity_filter_actor用法的测试程序
- P2184 贪婪大陆
- [C++STL]list容器用法介绍
- 虚拟内存分页机制的页面置换
- 在Visual C++中用ADO进行数据库编程(下)
- 各种ListView列表方法
- POJ1009 Edge Detection
- IOS6 编程:Core Data持久化数据存储(5)-使用Core Data模板创建EntLibCart项目
- ZK(7.0.1)将zul页面引入作为组件标签的简单示例
- 一种定位激光在摄像头画面中位置的方法(附安卓源码)
- 【活字格案例】综合报表信息管理系统搭建
- Unity3d+C#斗地主学习探究1
- 软件测试需求频繁变更,软件测试人员如何测试需求频繁变动的项目
- 公司测试员用例写得乱七八糟,测试总监制定了这份《测试用例编写规范》
- 关于Google账号被封、被下架、提审被拒等原因分析及建议
- linux服务器科学上网,开源一年,openGauss诠释什么是快速成长
- TestDirector概念