贝叶斯推理以及贝叶斯滤波算法推导
最近重新翻了下《probability robotics》中对贝叶斯的数学推导和应用,恍然发现其大道至简,以及在卡尔曼滤波器,粒子滤波器等等的体现,以下给出相应的整理和理解以共分享和记录:
贝叶斯准则(Bayes rule):
p
(
x
∣
y
)
=
η
p
(
y
∣
x
)
p
(
x
)
p(x|y) =\eta p(y|x)p(x)
p(x∣y)=ηp(y∣x)p(x)
其实这里是由两次条件概率公式推出的:
p
(
x
,
y
)
=
p
(
x
∣
y
)
p
(
y
)
=
p
(
y
∣
x
)
p
(
x
)
p(x,y) =p(x|y)p(y) = p(y|x)p(x)
p(x,y)=p(x∣y)p(y)=p(y∣x)p(x)
所以这里的
η
\eta
η其实也就是
p
(
y
)
p(y)
p(y),因为这里很多时候是一个常数,所以也称作归一化常数。贝叶斯准则说明了一个什么道理呢?就是:
后验概率
=
先验概率
×
似然概率
后验概率=先验概率\times 似然概率
后验概率=先验概率×似然概率
先验概率由以往的经验给出,似然概率又当前模型给出,贝叶斯准则简短的一行公式提供了很多工程应用指导。
贝叶斯滤波器
接下来将基于贝叶斯准则推理其应用,也就是贝叶斯滤波器:
- 首先定义表示:
t 时刻的状态量: x t t 时刻的观测量: z t t 时刻的控制量: u t t 时刻的转移概率: p ( x t ∣ x t − 1 , u t ) t 时刻的观测概率: p ( z t ∣ x t ) t 时刻的置信度: b e l ( x t ) = p ( x t ∣ z 1 : t , u 1 : t ) 基于 t 时刻以前的置信度 : b e l ‾ ( x t ) = p ( x t ∣ z 1 : t − 1 , u 1 : t ) t时刻的状态量:x_t \\ t时刻的观测量:z_t \\ t时刻的控制量:u_t \\ t时刻的转移概率:p(x_t|x_{t-1},u_t) \\ t时刻的观测概率:p(z_t|x_t) \\ t时刻的置信度:bel(x_t) = p(x_t|z_{1:t},u_{1:t}) \\ 基于t时刻以前的置信度: \overline{bel}(x_t) = p(x_t|z_{1:t-1},u_{1:t}) t时刻的状态量:xtt时刻的观测量:ztt时刻的控制量:utt时刻的转移概率:p(xt∣xt−1,ut)t时刻的观测概率:p(zt∣xt)t时刻的置信度:bel(xt)=p(xt∣z1:t,u1:t)基于t时刻以前的置信度:bel(xt)=p(xt∣z1:t−1,u1:t)
同时给出假设:- 状态 x t x_t xt是完整的
- 马尔可夫性质
给出贝叶斯滤波算法,其实主要就是迭代两行公式:
B
a
y
e
s
f
i
l
t
e
r
(
b
e
l
(
x
t
−
1
)
,
u
t
,
z
t
)
:
Bayes filter(bel(x_{t-1}), u_t, z_t):
Bayesfilter(bel(xt−1),ut,zt):
for all
x
t
x_t
xt do
b
e
l
‾
(
x
t
)
=
∫
p
(
x
t
∣
u
t
,
x
t
−
1
)
b
e
l
(
x
t
−
1
)
d
x
t
−
1
\quad \overline{bel}(x_t) = \int p(x_t|u_t,x_{t-1})bel(x_{t-1})dx_{t-1}
bel(xt)=∫p(xt∣ut,xt−1)bel(xt−1)dxt−1
b
e
l
(
x
t
)
=
η
p
(
z
t
∣
x
t
)
b
e
l
‾
(
x
t
)
\quad bel(x_t) = \eta p(z_t|x_t)\overline{bel}(x_t)
bel(xt)=ηp(zt∣xt)bel(xt)
end
return
b
e
l
(
x
t
)
bel(x_t)
bel(xt)
具体来说就是系统给出了一个机器人系统上一时刻的置信度和限制的控制量和观测量,第一步预测现在的置信度也就是先验的部分,而第二部分更新结合了测量结果得到当前的后验概率。
- 数学推导:
同样两次条件概率公式:
p ( x t , z t ∣ z 1 : t − 1 , u 1 : t ) = p ( x t ∣ z 1 : t , u 1 : t ) p ( z t ∣ z 1 : t − 1 , u 1 : t ) = p ( z t ∣ x t , z 1 : t − 1 , u 1 : t ) p ( x t ∣ z 1 : t − 1 u 1 : t ) p(x_t,z_t|z_{1:t-1},u_{1:t}) = p(x_t|z_{1:t},u_{1:t})p(z_t|z_{1:t-1},u_{1:t}) \\ \quad\quad\quad\quad\quad\quad\quad\quad =p(z_t|x_t,z_{1:t-1},u_{1:t})p(x_t|z_{1:t-1}u_{1:t}) p(xt,zt∣z1:t−1,u1:t)=p(xt∣z1:t,u1:t)p(zt∣z1:t−1,u1:t)=p(zt∣xt,z1:t−1,u1:t)p(xt∣z1:t−1u1:t)
所以有了: p ( x t ∣ z 1 : t , u 1 : t ) = p ( z t ∣ x t , z 1 : t − 1 , u 1 : t ) p ( x t ∣ z 1 : t − 1 u 1 : t ) p ( z t ∣ z 1 : t − 1 , u 1 : t ) = η p ( z t ∣ x t , z 1 : t − 1 , u 1 : t ) p ( x t ∣ z 1 : t − 1 u 1 : t ) p(x_t|z_{1:t},u_{1:t}) =\frac{p(z_t|x_t,z_{1:t-1},u_{1:t})p(x_t|z_{1:t-1}u_{1:t})}{p(z_t|z_{1:t-1},u_{1:t})} \\ =\eta p(z_t|x_t,z_{1:t-1},u_{1:t})p(x_t|z_{1:t-1}u_{1:t}) p(xt∣z1:t,u1:t)=p(zt∣z1:t−1,u1:t)p(zt∣xt,z1:t−1,u1:t)p(xt∣z1:t−1u1:t)=ηp(zt∣xt,z1:t−1,u1:t)p(xt∣z1:t−1u1:t)
由于之前的假设,x状态是完整的,所以我们可以有: p ( z t ∣ x t , z 1 : t − 1 , u 1 : t ) = p ( z t ∣ x t ) p(z_t|x_t,z_{1:t-1},u_{1:t}) = p(z_t|x_t) p(zt∣xt,z1:t−1,u1:t)=p(zt∣xt)。
所以简化为:
p ( x t ∣ z 1 : t , u 1 : t ) = η p ( z t ∣ x t ) p ( x t ∣ z 1 : t − 1 u 1 : t ) 即 : b e l ( x t ) = η p ( z t ∣ x t ) b e l ‾ ( x t ) p(x_t|z_{1:t},u_{1:t}) = \eta p(z_t|x_t)p(x_t|z_{1:t-1}u_{1:t}) \\ 即: bel(x_t) = \eta p(z_t|x_t)\overline{bel}(x_t) p(xt∣z1:t,u1:t)=ηp(zt∣xt)p(xt∣z1:t−1u1:t)即:bel(xt)=ηp(zt∣xt)bel(xt)
那么 b e l ‾ ( x t ) \overline{bel}(x_t) bel(xt)怎么由已知条件得到呢?由全概率公式推广: b e l ‾ ( x t ) = p ( x t ∣ z 1 : t − 1 u 1 : t ) = ∫ p ( x t ∣ x t − 1 , z 1 : t − 1 , u 1 : t ) p ( x t − 1 ∣ z 1 : t − 1 u 1 : t ) d x t − 1 \overline{bel}(x_t) = p(x_t|z_{1:t-1}u_{1:t})=\int p(x_t|x_{t-1},z_{1:t-1},u_{1:t})p(x_{t-1}|z_{1:t-1}u_{1:t})dx_{t-1} bel(xt)=p(xt∣z1:t−1u1:t)=∫p(xt∣xt−1,z1:t−1,u1:t)p(xt−1∣z1:t−1u1:t)dxt−1
又一次因为知道 x t − 1 x_{t-1} xt−1的完整状态,有: p ( x t ∣ x t − 1 , z 1 : t − 1 , u 1 : t ) = p ( x t ∣ x t − 1 , u t ) p(x_t|x_{t-1},z_{1:t-1},u_{1:t})=p(x_t|x_{t-1},u_t) p(xt∣xt−1,z1:t−1,u1:t)=p(xt∣xt−1,ut),同时后一项也可以安全的省掉 u t u_t ut对 x t − 1 的估计 x_{t-1}的估计 xt−1的估计,所以有了:
b e l ‾ ( x t ) = ∫ p ( x t ∣ x t − 1 , u t ) p ( x t − 1 ∣ z 1 : t − 1 , u 1 : t − 1 ) d x t − 1 = ∫ p ( x t ∣ x t − 1 , u t ) b e l ( x − 1 ) d x t − 1 \overline{bel}(x_t)=\int p(x_t|x_{t-1},u_t)p(x_{t-1}|z_{1:t-1},u_{1:t-1})dx_{t-1} \\ = \int p(x_t|x_{t-1},u_t) bel(x-1) dx_{t-1} bel(xt)=∫p(xt∣xt−1,ut)p(xt−1∣z1:t−1,u1:t−1)dxt−1=∫p(xt∣xt−1,ut)bel(x−1)dxt−1
也就是当前时刻的状态置信度由上一时刻的置信度以及状态转移概率给出。值得一提的是,还需要知道初始的置信度,这样便可以不断迭代。