最大似然估计/最大后验概率估计/贝叶斯估计

一、最大似然估计/最大后验概率估计/贝叶斯估计

首先给出贝叶斯公式

P(\theta \mid X)=\frac{P(X \mid \theta) P(\theta)}{P(X)}=\frac{\text { causal knowledge(likehood)-prior knowledge }}{\text { evidence }}

贝叶斯公式的本质就是利用条件概率先验概率得到后验概率

其中P(\theta \mid X)表示后验(posterior)概率,即通过样本X得到参数\theta的概率,是基于观测对状态的推断;

casual knowledge(likehood)表示条件概率,也可称作似然函数,通常为数据集的表现;

prior knowledge表示参数\theta的先验概率,一般是根据人的先验知识来得出的。比如人们倾向于认为抛硬币实验会符合先验分布:beta分布。当我们选择beta分布的参数\alpha =\beta =0.5时,代表人们认为抛硬币得到正反面的概率都是0.5。

evidence:p(X)=\int p(X \mid \theta) p(\theta) d \theta表示样本X发生的概率,是各种\theta条件下发生的概率的积分,为全概率公式。贝叶斯准则的分母p(X)不依赖于\theta,因此p(X)^{-1}对于任何\theta的后验概率P(\theta \mid X)都是相同的,因此p(X)^{-1}经常作为贝叶斯准则中的归一化变量,通常用\eta表示,为

P(\theta \mid X)=\eta {P(X \mid \theta) P(\theta)}

\eta=p(X)^{-1}=\frac{1}{\int p(X \mid \theta) p(\theta) d \theta}

用一个归一化符号\eta表示最终结果必须归一为1。

1.1 最大似然估计

\text{argmax }_\theta \prod_{i=1}^n p\left(x_i \mid \theta\right)=\sum_{i=1}^{n}\text{In} p\left(x_i \mid \theta\right)

即将$\theta$看做未知参数,找使似然函数最大的\hat{\theta}。其本质就是最大化观测数据的发生概率,需显示规定概率分布。求对数似然函数最大化,可以通过导数为0来求解。极大似然估计只关注当前的样本,也就是只关注当前发生的事情,不考虑事情的先验情况。由于计算简单,而且不需要关注先验知识,因此在机器学习中的应用非常广,最常见的就是逻辑回归。

1.2 最大后验概率

估计进一步考虑了\theta的先验分布:

\text{argmax }_\theta p\left( \theta \mid X\right)=\text{argmax }_\theta \prod_{i=1}^n p\left(x_i \mid \theta\right)p(\theta)

由于分母f(X)不影响对θ的估计,所以等同于最大化分子,其本质是最大化观测数据的后验概率,得到参数的点估计。同样为了便于计算,对两边取对数,后验概率最大化就变成了:

\operatorname{argmax}\left(\sum_{i=1}^{n} \operatorname{ln}p(x_i \mid \theta)+\operatorname{ln}p(\theta)\right)

最大后验估计不只是关注当前的样本的情况,还关注已经发生过的先验知识。这在样本很少的时候是很有用的,因为样本很少的时候我们的观测结果很可能出现偏差,此时先验知识会把估计的结果“拉”向先验.

1.3 贝叶斯估计:

不同于最大后验概率估计输出的是一个点估计,贝叶斯估计需获得参数完整的后验概率分布p\left( \theta \mid X\right)(由全概率公式可推导\theta的先验分布)。然后如果需要点估计,可以在这个后验分布上取期望(通常取后验均值)作为\theta估计的<后验期望估计>,即E\left( \theta \mid X\right)。但贝叶斯估计的核心在于保留整个分布贝叶斯估计要解决的不是如何估计参数,而是用来估计新测量数据出现的概率。其本质在于根据样本信息,修正先验分布,得到后验分布。实际上,贝叶斯估计会比最大后验概估计的结果往先验结果“拉”的程度还提高了一些,从而使估计结果更靠近先验结果。

区别主要体现在,在对新样本预测时,最大似然估计使用\theta_{\text{MAP}}进行预测,即P(x_{new} \mid \theta_{\text{MAP}}),而贝叶斯估计则使用整个后验分布进行预测,即p\left(x_{\text {new }} \mid x \right)=\int p\left(x_{\text {new }} \mid \theta\right) p(\theta \mid x ) d \theta,贝叶斯估计的预测通常更准确,因为它对所有可能的θ进行了平均(即考虑了参数的后验不确定性)。

二、贝叶斯滤波

2.1贝叶斯递推公式

由此,我们来推导贝叶斯滤波的递推公式,首先有

\begin{aligned} &\begin{aligned} & P(x \mid y, z)=\frac{P(x, y, z)}{P(y, z)} \\ & =\frac{P(y \mid x, z) p(x, z)}{P(y, z)} \\ & =\frac{P(y \mid x, z) p(x \mid z) p(z)}{P(y \mid z) p(z)} \\ & =\frac{P(y \mid x, z) p(x \mid z)}{P(y \mid z)} \end{aligned}\\ &P(x \mid y, z)=\frac{P(y \mid x, z) P(x \mid z)}{P(y \mid z)} \end{aligned}

z_n看做y,将z_1, ... , z_{n-1}看做z,有P\left(x \mid z_1, \ldots, z_n\right)=\frac{P\left(z_n \mid x, z_1, \ldots, z_{n-1}\right) P\left(x \mid z 1, \ldots, z_{n-1}\right)}{P\left(z_n \mid z_1, \ldots, z_{n-1}\right)}


再由Markov属性,在 x 已知的情况下,$z_n$$\left\{z_1, \ldots, z_{n-1}\right\}$无关,所以:

\begin{gathered} P\left(x \mid z_1, \ldots, z_n\right)=\frac{P\left(z_n \mid x, z_1, \ldots, z_{n-1}\right) P\left(x \mid z 1, \ldots, z_{n-1}\right)}{P\left(z_n \mid z_1, \ldots, z_{n-1}\right)} \\ =\frac{P\left(z_n \mid x\right) P\left(x \mid z 1, \ldots, z_{n-1}\right)}{P\left(z_n \mid z_1, \ldots, z_{n-1}\right)} \end{gathered}
从而我们得到贝叶斯的递推公式:

\begin{aligned} P\left(x \mid z_1, \ldots, z_n\right) & =\frac{P\left(z_n \mid x\right) P\left(x \mid z_1, \ldots, z_{n-1}\right)}{P\left(z_n \mid z_1, \ldots, z_{n-1}\right)} \\ & =\eta_n P\left(z_n \mid x\right) P\left(x \mid z_1, \ldots, z_{n-1}\right) \\ & =\eta_n P\left(z_n \mid x\right) \eta_{n-1} P\left(z_{n-1} \mid x\right) P\left(x \mid z_1, \ldots, z_{n-2}\right) \\ & =\eta_1 \cdots \eta_n \prod_{i=1 \ldots n} P\left(z_i \mid x\right) P(x) \end{aligned}

2.2 贝叶斯滤波算法

(1)算法设定

由上述推导和示例,我们可以给出贝叶斯滤波的算法,算法的输入输出设定如下。

  1.系统输入:

①1到$t$时刻的状态观测和动作:$d_t=\left\{u_1, z_1 \ldots, u_t, z_t\right\}$

②观测模型:$P(z \mid x)$

③动作的状态转移模型:$P\left(x \mid u, x^{\prime}\right)$

④系统状态的先验概率分布$P(x)$
  2.期望输出
①计算状态的后延概率,称为状态的置信概率: $\operatorname{Bel}\left(x_t\right)=P\left(x_t \mid u_1, z_1 \ldots, u_t, z_t\right)$

(2)贝叶斯滤波算法基本假设

  1. Markov性假设: t时刻的状态由t−1时刻的状态和t时刻的动作决定。t时刻的观测仅同t时刻的状态相关,如图4所示:

这样的时间生成模型也称为隐马尔可夫模型(Hidden Markov Model,HMM)或者动态贝叶斯网络(Dynamic Bayes Network,DBN)。对于一阶马尔科夫模型,有:如果第i时刻上的取值依赖于且仅依赖于第$\mathrm{i}-1$时刻的取值,即P\left(x_i \mid x_{i-1}, x_{i-2}, \ldots, x_1\right)=P\left(x_i \mid x_{i-1}\right)
从这个式子可以看出, x_i仅仅与$x_{i-1}$ 有关,而跟他前面的都没有关系了,这就是一阶马尔科夫过程。

  2. 静态环境,即对象周边的环境假设是不变的

  3. 观测噪声、模型噪声等是相互独立的

(3)算法流程

\begin{aligned} & \operatorname{Bel}\left(x_t\right)=P\left(x_t \mid u_1, z_1 \ldots, u_t, z_t\right) \\ & =\eta P\left(z_t \mid x_t, u_1, z_1, \ldots, u_t\right) P\left(x_t \mid u_1, z_1, \ldots, u_t\right) \quad<\text { Bayes } \\ & =\eta P\left(z_t \mid x_t\right) P\left(x_t \mid u_1, z_1, \ldots, u_t\right) \quad<\text { Markov } \\ & \left.=\eta P\left(z_t \mid x_t\right) \int P\left(x_t \mid u_1, z_1, \ldots, u_t, x_{t-1}\right) P\left(x_{t-1} \mid u_1, z_1, \ldots, u_t\right) d x_{t-1}\right)<\text { TotalProb. } \\ & \left.=\eta P\left(z_t \mid x_t\right) \int P\left(x_t \mid u_t, x_{t-1}\right) P\left(x_{t-1} \mid u_1, z_1, \ldots, u_t\right) d x_{t-1}\right)<\text { Markov } \\ & \left.=\eta P\left(z_t \mid x_t\right) \int P\left(x_t \mid u_t, x_{t-1}\right) P\left(x_{t-1} \mid u_1, z_1, \ldots, z_{t-1}\right) d x_{t-1}\right)<\text { Markov } \\ & =\eta P\left(z_t \mid x_t\right) \int P\left(x_t \mid u_t, x_{t-1}\right) \operatorname{Bel}\left(x_{t-1}\right) d x_{t-1} \end{aligned}

其中\eta_t=P(z_t\mid u_1,z_1,\cdots,z_{t-1},u_{t})=P(z_t\mid z_{t-1},u_{t}),可见递推公式中分为两个步骤,\int {P({x_t}|{u_t},{x_{t - 1}})} Bel({x_{t - 1}})\;d{x_{t - 1}}部分是基于x_{t-1},u_t预测x_t的状态(利用运动方程),其中Bel({x_{t - 1}})先验置信度P({x_t}|{u_t},{x_{t - 1}})则是利用运动方程进行预测;\eta P({z_t}|{x_t})部分是基于观测z_t更新状态x_t利用观测方程)。详细推导见贝叶斯滤波器-CSDN博客

所以,Bayes滤波的算法流程图如图5所示。如果d是观测,则进行一次状态更新,如果d是动作,则进行一次状态预测。

上图以伪代码形式描述了基本的贝叶斯滤波。贝叶斯滤波是递归的,也就是说,时刻t的置信度bel(x_t)由时刻t-1的置信度bel(x_{t-1})来计算。其输入是时刻t-1的置信度,和最近的控制作用u_t及最近的一次测量z_t。其输出就是时刻t的置信度bel(x_t)

贝叶斯滤波算法具有两个基本的步骤。在第3行,它处理控制u_t。通过基于状态x_{t-1}的置信度和控制u_t来计算状态x_t的置信度。具体来说,机器人分配给状态x_t的置信度\bar{bel}(x_t)通过两个分布(分配给x_{t-1}的置信度和由控制u_t引起的从x_{t-1}x_{t}的转移概率)的积分(求和)得到。这种更新步骤叫做控制更新或者预测。

第二个步骤叫做测量更新。在第4行,贝叶斯滤波算法用已经观测到的测量z_t的概率乘以置信度\bar{bel}(x_t) 。对每一个假想的后验状态x_{t}都这样做。乘积结果通常不再是一个概率,它的总和可能不为1。因此,结果需要通过归一化常数\eta进行归一化。

为了递归地计算后验置信度,算法需要一个时刻t=0的初始置信度bel(x_0)作为边界条件。如果知道x_0的确定值,bel(x_0)应该用一个点式群体分布进行初始化,该点式群体分布将所有概率集中在x_0的修正值周围,而其他点的概率为0。如果将初始值x_0完全忽略,bel(x_0)可使用在x_0邻域上的均匀分布来进行初始化。

三、卡尔曼滤波

详细推导过程见【卡尔曼滤波】图文结合带你详细推导卡尔曼滤波(超详解)-CSDN博客滤波笔记一:卡尔曼滤波(Kalman Filtering)详解-CSDN博客主要思想为:

贝叶斯滤波是理论框架,卡尔曼滤波则是工程实现,因此卡尔曼滤波其实就是贝叶斯滤波在高斯线性假设下的解析解,而当系统非线性时,各种卡尔曼变体(扩展卡尔曼滤波/无迹卡尔曼滤波等)是贝叶斯滤波的近似实现,两者都遵循“预测-更新”的贝叶斯闭环。工程中常用卡尔曼滤波而非广义贝叶斯滤波——核心在于计算可行性。贝叶斯滤波理论上要计算无穷维积分,而卡尔曼滤波只需要传播均值和协方差。在理想线性高斯系统中,卡尔曼滤波不仅是实用的最优估计器,同时它自然达到了理论极限PCRB。卡尔曼滤波的协方差矩阵其实就是达到PCRB的最优体现。

由贝叶斯滤波得到的公式我们可以看到,我们的目的是计算x_t的后验概率,如果bel(x_t)任意分布,我们需要在x_t的所有可能取值点上,计算该取值的概率,这在计算上是难于实现的。这一计算问题可以有多种方法来近似,比如利用采样的方法,就是后面要讲的粒子滤波和无迹Kalman滤波。

而当假设bel(x_t)服从Gauss分布,那么我们只需要分布的均值和方差就可以完全描述bel(x_t),而无需在x_t的每个可能取值点上进行概率计算。这也是用高斯分布来近似bel(x_t)的好处,因为我们在每一个时刻,只需要计算均值\mu_t和方差\Sigma_t这两个数值,就可以对bel(x_t)完全描述,所以我们就可以推导出这两个数值的递推公式,从而在每个时刻由这两个数值的递推公式完全获得状态估计,这就是The Kalman Filter的基本思想。

3.1 正态分布(Guassian Distribution)

正态分布的特点

3.2 卡尔曼滤波

(1)模型假设

Kalman滤波所解决的问题,是对一个动态变化的系统的状态跟踪的问题,基本的模型假设包括:1)系统的状态方程是线性的;2)观测方程是线性的;3)过程噪声符合零均值高斯分布;4)观测噪声符合零均值高斯分布;从而,一直在线性变化的空间中操作高斯分布,状态的概率密度符合高斯分布。

①状态方程{x_t} = {A_t}{x_{t - 1}} + {B_t}{u_t} + {\varepsilon _t}

②观测方程{z_t} = {H_t}{x_t} + {\delta _t}

其中过程噪声{\varepsilon _t}假设符合零均值高斯分布;观测噪声{\delta _t}假设符合零均值高斯分布。对于上述模型,我们可以用如下参数描述整个问题:

(2)具体算法

具体代码可参考

B站用户东爱北的GitHub​​​​​​https://github.com/liuchangji/2D-Kalman-Filter-Example_Dr_CAN_in_python 

滤波笔记一:卡尔曼滤波(Kalman Filtering)详解-CSDN博客

卡尔曼滤波理论讲解与应用(matlab和python)_matlab+卡尔曼滤波的公式讲解和与应用-CSDN博客

参考:(一):细说贝叶斯滤波:Bayes filters - 王永才 - 博客园

(二). 细说Kalman滤波:The Kalman Filter - 王永才 - 博客园

四、扩展卡尔曼滤波

当状态(运动、过程)方程和观测方程均为非线性时,如果将高斯分布作为输入,输入到一个非线性函数中,得到的结果将不再符合高斯分布,也就将导致卡尔曼滤波器的公式不再适用。因此我们需要将上面的非线性函数转化为近似的线性函数求解。扩展卡尔曼滤波(EKF)的思路是利用泰勒级数展开将非线性系统线性化,然后采用卡尔曼滤波框架对信号进行滤波,因此它是一种次优滤波。

EKF通过泰勒级数展开,省略高阶项得到一个近似的线性系统。EKF只取到一阶导,同样也能有较好的结果。取一阶导时,状态转移方程和观测方程就近似为线性方程,高斯分布的变量经过线性变换之后仍然是高斯分布,这样就能够延用标准卡尔曼滤波的框架。

具体而言,EKF对于一般的非线性函数就是这样进行一阶展开的:

\mathrm{h}(\mathrm{x}) \approx \mathrm{h}(\mathrm{u})+\frac{\partial \mathrm{h}(\mathrm{u})}{\partial \mathrm{x}}(\mathrm{x}-\mathrm{u})

对于多元函数,也就是

其中,Df(a)叫雅可比矩阵,它是多元函数中各个因变量关于各个自变量的一阶偏导,一般记作J。

 ps:在实际编程的时候可以直接调用函数计算雅克比矩阵。 

4.1 扩展卡尔曼滤波计算公式

4.2 扩展卡尔曼滤波迭代过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值