【状态估计】非线性非高斯系统的状态估计——离散时间的批量估计

上一篇文章介绍了离散时间的递归估计,本文着重介绍离散时间批量估计

上一篇位置:【状态估计非线性非高斯系统的状态估计——离散时间的递归估计。


离散时间批量估计问题

最大后验估计

目标函数

利用高斯-牛顿法来解决估计问题的非线性版本,这种优化方法也可以认为是MAP方法

首先建立最小化的目标函数,然后考虑如何解决它。

构建目标函数,优化变量为:

x = [ x 0 x 1 ⋮ x K ] x=\begin{bmatrix}x_0\\x_1\\\vdots\\x_K\end{bmatrix} x= x0x1xK

即需要估计整条轨迹。

对于非线性情况,定于相对于先验和测量的误差为:

e v , 0 ( x ) = x ˇ 0 − x 0 e v , k ( x ) = f ( x k − 1 , v k , 0 ) − x k \begin{aligned}e_{v,0}(x)&=\check x_0-x_0 \\ e_{v,k}(x)&=f(x_{k-1},v_k,0)-x_k\end{aligned} ev,0(x)ev,k(x)=xˇ0x0=f(xk1,vk,0)xk

其中, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K

e y , k ( x ) = y k − g ( x k , 0 ) e_{y,k}(x)=y_k-g(x_k,0) ey,k(x)=ykg(xk,0)

其中, k = 0 , 1 , . . . , K k=0,1,...,K k=0,1,...,K

它们对目标函数的贡献为:

J v , k ( x ) = 1 2 e v , k ( x ) T W v , k − 1 e v , k ( x ) J y , k ( x ) = 1 2 e y , k ( x ) T W y , k − 1 e y , k ( x ) \begin{aligned}J_{v,k}(x)&=\frac{1}{2}e_{v,k}(x)^TW_{v,k}^{-1}e_{v,k}(x) \\ J_{y,k}(x)&=\frac{1}{2}e_{y,k}(x)^TW_{y,k}^{-1}e_{y,k}(x)\end{aligned} Jv,k(x)Jy,k(x)=21ev,k(x)TWv,k1ev,k(x)=21ey,k(x)TWy,k1ey,k(x)

那么完整的代价函数为:

J ( x ) = ∑ k = 0 K ( J v , k ( x ) + J y , k ( x ) ) J(x)=\sum_{k=0}^K(J_{v,k}(x)+J_{y,k}(x)) J(x)=k=0K(Jv,k(x)+Jy,k(x))

通常,可以 W v , k W_{v,k} Wv,k W y , k W_{y,k} Wy,k简单的认为是对称正定的权重矩阵。通过设置权重矩阵和测量噪声的协方差相关联,则最小化目标函数等同于最大化状态的联合似然函数

同时,定义:

e ( x ) = [ e v ( x ) e y ( x ) ] e v ( x ) = [ e v , 0 ( x ) e v , 1 ( x ) ⋮ e v , K ( x ) ] e y ( x ) = [ e y , 0 ( x ) e y , 1 ( x ) ⋮ e y , K ( x ) ] \begin{aligned}e(x)&=\begin{bmatrix}e_v(x)\\e_y(x)\end{bmatrix} \\ e_v(x)&=\begin{bmatrix}e_{v,0}(x)\\e_{v,1}(x)\\\vdots\\e_{v,K}(x)\end{bmatrix} \\ e_y(x)&=\begin{bmatrix}e_{y,0}(x)\\e_{y,1}(x)\\\vdots\\e_{y,K}(x)\end{bmatrix}\end{aligned} e(x)ev(x)ey(x)=[ev(x)ey(x)]= ev,0(x)ev,1(x)ev,K(x) = ey,0(x)ey,1(x)ey,K(x)

W = d i a g ( W v , W y ) W v = d i a g ( W v , 0 , W v , 1 , . . . , W v , K ) W y = d i a g ( W y , 0 , W y , 1 , . . . , W y , K ) \begin{aligned}W&=diag(W_v,W_y) \\ W_v&=diag(W_{v,0},W_{v,1},...,W_{v,K}) \\ W_y&=diag(W_{y,0},W_{y,1},...,W_{y,K})\end{aligned} WWvWy=diag(Wv,Wy)=diag(Wv,0,Wv,1,...,Wv,K)=diag(Wy,0,Wy,1,...,Wy,K)

因此,目标函数可以写成:

J ( x ) = 1 2 e ( x ) T W − 1 e ( x ) J(x)=\frac{1}{2}e(x)^TW^{-1}e(x) J(x)=21e(x)TW1e(x)

定义一个修改版本的误差项:

u ( x ) = L e ( x ) u(x)=Le(x) u(x)=Le(x)

其中, L T L = W − 1 L^TL=W^{-1} LTL=W1。使用这些定义,可以得到更简单的目标函数:

J ( x ) = 1 2 u ( x ) T u ( x ) J(x)=\frac{1}{2}u(x)^Tu(x) J(x)=21u(x)Tu(x)

这正是二次型的形式,但不是关于设定变量 x x x的二次型。目标是最小化目标函数,得到最优参数 x ^ \hat x x^

x ^ = a r g m i n ( J ( x ) ) \hat x=argmin(J(x)) x^=argmin(J(x))

可以使用许多非线性优化的方法来求解这个二次型的表达式。最经典的方法是高斯牛顿优化方法,但还有许多其他的选择。

牛顿法

牛顿法是指,以迭代的方式,不断用二次函数来近似目标函数,朝着二次近似极小值移动的方法。假设自变量的初始估计,或者说工作点为 x o p x_{op} xop,那么可对原函数 J ( ) J() J()在工作点附近进行二阶泰勒展开:

J ( x o p + δ x ) ≈ J ( x o p ) + ( ∂ J ( x ) ∂ x ∣ x o p ) δ x + 1 2 δ x T ( ∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p ) δ x J(x_{op}+\delta x)\approx J(x_{op})+(\frac{\partial J(x)}{\partial x}|_{x_{op}})\delta x+\frac{1}{2}\delta x^T(\frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}})\delta x J(xop+δx)J(xop)+(xJ(x)xop)δx+21δxT(xxT2J(x)xop)δx

其中, δ x \delta x δx表示相对于初始估计 x o p x_{op} xop的微小增量,一阶偏导称为雅可比矩阵,二阶偏导称为海塞矩阵。注意,海塞矩阵必须是正定的,才能判断该二次近似的极小值存在,才能使用牛顿法

下一步是找到 δ x \delta x δx的值,最小化该二次近似。令 δ x \delta x δx的导数为0:

∂ J ( x o p + δ x ) ∂ δ x = ( ∂ J ( x ) ∂ x ∣ x o p ) + δ x T ( ∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p ) = 0 \frac{\partial J(x_{op}+\delta x)}{\partial \delta x}=(\frac{\partial J(x)}{\partial x}|_{x_{op}}) + \delta x^T(\frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}})=0 δxJ(xop+δx)=(xJ(x)xop)+δxT(xxT2J(x)xop)=0

化简,求得:

( ∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p ) δ x = − ( ∂ J ( x ) ∂ x ∣ x o p ) T (\frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}})\delta x=-(\frac{\partial J(x)}{\partial x}|_{x_{op}})^T (xxT2J(x)xop)δx=(xJ(x)xop)T

当海塞矩阵可逆时(必定可逆,因为前面假设为正定的),可以得到方程的解,然后根据下面的公式来更新工作点:

x o p ⟵ x o p + δ x x_{op}\longleftarrow x_{op}+\delta x xopxop+δx

不停地迭代上述过程,直到 δ x \delta x δx变得足够小为止。对于牛顿法,有几点需要注意:

  • 局部收敛,这意味着当初始估计已经足够接近解时,不断地改进可以保证结果收敛到一个解

  • 收敛速度是二次的(比简单梯度下降收敛得快得多)

  • 海塞矩阵的计算可能很复杂,使得牛顿法在现实中应用存在困难。

高斯牛顿法

最优化目标函数,对 u ( ) u() u()进行泰勒展开,而不是对 J ( ) J() J()进行泰勒展开:

u ( x o p + δ x ) ≈ u ( x o p ) + ( ∂ u ( x ) ∂ x ∣ x o p ) δ x u(x_{op}+\delta x)\approx u(x_{op})+(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x u(xop+δx)u(xop)+(xu(x)xop)δx

将其代入 J ( ) J() J()中,则:

J ( x o p + δ x ) ≈ 1 2 ( u ( x o p ) + ( ∂ u ( x ) ∂ x ∣ x o p ) δ x ) T ( u ( x o p ) + ( ∂ u ( x ) ∂ x ∣ x o p ) δ x ) J(x_{op}+\delta x)\approx \frac{1}{2}(u(x_{op})+(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x)^T(u(x_{op})+(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x) J(xop+δx)21(u(xop)+(xu(x)xop)δx)T(u(xop)+(xu(x)xop)δx)

针对 δ x \delta x δx最小化:

∂ J ( x o p + δ x ) ∂ δ x = ( u ( x o p ) + ( ∂ u ( x ) ∂ x ∣ x o p ) δ x ) T ( ∂ u ( x ) ∂ x ∣ x o p ) = 0 \frac{\partial J(x_{op}+\delta x)}{\partial \delta x}=(u(x_{op})+(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x)^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})=0 δxJ(xop+δx)=(u(xop)+(xu(x)xop)δx)T(xu(x)xop)=0

化简,求得:

( ∂ u ( x ) ∂ x ∣ x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) δ x = − ( ∂ u ( x ) ∂ x ∣ x o p ) T u ( x o p ) (\frac{\partial u(x)}{\partial x}|_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x=-(\frac{\partial u(x)}{\partial x}|_{x_{op}})^Tu(x_{op}) (xu(x)xop)T(xu(x)xop)δx=(xu(x)xop)Tu(xop)

高斯牛顿法的另一种推导方式

从牛顿法到高斯牛顿法,主要就是海塞矩阵的近似。那么我们看:

J ( x ) = 1 2 u ( x ) T u ( x ) J(x)=\frac{1}{2}u(x)^Tu(x) J(x)=21u(x)Tu(x)

它的雅可比矩阵为:

∂ J ( x ) ∂ x ∣ x o p = u ( x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) \frac{\partial J(x)}{\partial x}|_{x_{op}} = u(x_{op})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}}) xJ(x)xop=u(xop)T(xu(x)xop)

海塞矩阵为:

∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p = ( ∂ u ( x ) ∂ x ∣ x x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) + ∑ i = 1 M u i ( x o p ) ( ∂ 2 u i ( x ) ∂ x ∂ x T ∣ x o p ) \frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}} = (\frac{\partial u(x)}{\partial x}|x_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})+\sum_{i=1}^M u_i(x_{op})(\frac{\partial^2u_i(x)}{\partial x\partial x^T}|_{x_{op}}) xxT2J(x)xop=(xu(x)xxop)T(xu(x)xop)+i=1Mui(xop)(xxT2ui(x)xop)

其中: u ( x ) = ( u 1 ( x ) , u 2 ( x ) , . . . , u M ( x ) u(x)=(u_1(x),u_2(x),...,u_M(x) u(x)=(u1(x),u2(x),...,uM(x)

注意到在海塞矩阵的表达式中,我们可以假设在 J J J的极小值附近,第二项相对于第一项是很小的。直观上看,在极小值附近 u i ( x ) u_i(x) ui(x)的值应该是很小的(理想情况下为零)。因此在忽略了包含二阶导的项时,海塞可以近似为:

∂ 2 J ( x ) ∂ x ∂ x T ∣ x o p ≈ ( ∂ u ( x ) ∂ x ∣ x x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) \frac{\partial^2 J(x)}{\partial x\partial x^T}|_{x_{op}} \approx (\frac{\partial u(x)}{\partial x}|x_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}}) xxT2J(x)xop(xu(x)xxop)T(xu(x)xop)

将雅可比矩阵和海塞矩阵的近似,带入到牛顿法的公式,可以得到:

( ∂ u ( x ) ∂ x ∣ x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) δ x = − ( ∂ u ( x ) ∂ x ∣ x o p ) T u ( x o p ) (\frac{\partial u(x)}{\partial x}|_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})\delta x=-(\frac{\partial u(x)}{\partial x}|_{x_{op}})^Tu(x_{op}) (xu(x)xop)T(xu(x)xop)δx=(xu(x)xop)Tu(xop)

这个上面的推导结果保持一致。

高斯牛顿法的改进

由于高斯牛顿法不能保证收敛(因为对海塞矩阵进行了近似),可以使用两个实际的方法对其进行改进:

  1. 一旦计算出最优增量 δ x \delta x δx,则实际的更新为:

x o p ⟵ x o p + α δ x x_{op}\longleftarrow x_{op}+\alpha\delta x xopxop+αδx

其中, α ∈ [ 0 , 1 ] \alpha\in[0,1] α[0,1]为自定义的参数。在实际上,常常通过线搜索的方式求得 α \alpha α的最优值。该方法能够有效的原因在于, δ x \delta x δx是下降方向;而只是调整了在该方向上的行进距离,使得收敛性质更加鲁棒(而不是更快)

  1. 可以使用列文伯格-马夸尔特(LM)改进高斯牛顿法:

( ( ∂ u ( x ) ∂ x ∣ x o p ) T ( ∂ u ( x ) ∂ x ∣ x o p ) + λ D ) δ x = − ( ∂ u ( x ) ∂ x ∣ x o p ) T u ( x o p ) ((\frac{\partial u(x)}{\partial x}|_{x_{op}})^T(\frac{\partial u(x)}{\partial x}|_{x_{op}})+\lambda D)\delta x=-(\frac{\partial u(x)}{\partial x}|_{x_{op}})^Tu(x_{op}) ((xu(x)xop)T(xu(x)xop)+λD)δx=(xu(x)xop)Tu(xop)

其中, D D D为正定对角矩阵。当 D = 1 D=1 D=1时,随着 λ ≥ 0 \lambda\ge0 λ0变大,海塞矩阵近似所占的比重相对较小,此时:

δ x = − 1 λ ( ∂ u ( x ) ∂ x ∣ x o p ) T u ( x o p ) \delta x=-\frac{1}{\lambda}(\frac{\partial u(x)}{\partial x}|_{x_{op}})^Tu(x_{op}) δx=λ1(xu(x)xop)Tu(xop)

即最速下降(即负梯度)中非常小的一个步长。当 λ = 0 \lambda=0 λ=0时,则恢复为通常的高斯牛顿更新。

LM法通过缓慢增加 λ \lambda λ的值,可以在海塞矩阵近似较差或病态的情况下工作

关于误差项的高斯牛顿法

前面提到:

J ( x ) = 1 2 u ( x ) T u ( x ) u ( x ) = L e ( x ) \begin{aligned}J(x)&=\frac{1}{2}u(x)^Tu(x) \\ u(x)&=Le(x)\end{aligned} J(x)u(x)=21u(x)Tu(x)=Le(x)

其中, L T L = W − 1 L^TL=W^{-1} LTL=W1是一个常量。

将上式代入高斯牛顿的更新方程中,可以得到关于误差项 e ( x ) e(x) e(x)的更新:

( L H ) T L H δ x = − ( L H ) T L e ( x o p ) (LH)^TLH\delta x=-(LH)^TLe(x_{op}) (LH)TLx=(LH)TLe(xop)

其中,

H = − ∂ e ( x ) ∂ x ∣ x o p = [ 1 − F 0 1 − F 1 ⋱ ⋱ 1 − F K − 1 1 G 0 G 1 G 2 ⋱ G K ] F k − 1 = ∂ f ( x k − 1 , v k , w k ) ∂ x k − 1 ∣ x o p , k − 1 , v k , 0 G k = ∂ g ( x k , n k ) ∂ x k ∣ x o p , k , 0 \begin{aligned}H&=-\frac{\partial e(x)}{\partial x}|_{x_{op}}=\begin{bmatrix}1\\-F_0&1\\&-F_1&\ddots\\&&\ddots&1\\&&&-F_{K-1}&1\\G_0\\&G_1\\&&G_2\\&&&\ddots\\&&&&G_K\end{bmatrix} \\ F_{k-1}&=\frac{\partial f(x_{k-1},v_k,w_k)}{\partial x_{k-1}}|_{x_{op},k-1,v_k,0} \\ G_{k}&=\frac{\partial g(x_{k},n_k)}{\partial x_{k}}|_{x_{op},k,0}\end{aligned} HFk1Gk=xe(x)xop= 1F0G01F1G1G21FK11GK =xk1f(xk1,vk,wk)xop,k1,vk,0=xkg(xk,nk)xop,k,0

化简可得:

( H T W − 1 H ) δ x = H T W − 1 e ( x o p ) (H^TW^{-1}H)\delta x=H^TW^{-1}e(x_{op}) (HTW1H)δx=HTW1e(xop)

贝叶斯推断

从贝叶斯推断的角度也可以得到相同的更新方程。

MAP方法是通过定义目标函数,通过高斯-牛顿法得到 ( H T W − 1 H ) δ x = H T W − 1 e ( x o p ) (H^TW^{-1}H)\delta x=H^TW^{-1}e(x_{op}) (HTW1H)δx=HTW1e(xop)。当然,也可以使用捷径,对 e ( x ) e(x) e(x)进行线性化,再使用线性高斯系统的方法进行推导,最后会得到相同的结果。

贝叶斯推断,也可以使用线性化的方法进行讨巧,再证明得到。这里就不赘述了。


讨论

如果把EKF看作是全非线性高斯牛顿方法的近似,那么它的表现是不尽如人意的。主要原因是,EKF没有迭代至收敛的过程,其雅可比矩阵也只计算一次(可能远离最优估计)。从本质上看,EKF可以做得比单次高斯牛顿迭代更好,因为它没有一次性计算所有的雅可比矩阵。即EKF中,一部分雅可比计算是在运动先验中,另一部分在观测中,但是观测部分的雅可比是在推导运动先验之后再计算的。而单次高斯牛顿迭代中,两部分雅可比是一起计算的。

EKF的主要缺陷在于缺少迭代的过程。目前,在提升EKF的表现方面已经有不少的工作,包括IEKF。IEKF的问题在于,它仍然依赖于马尔可夫假设。它仅在一个时刻上进行了迭代,而非在整个轨迹上。

不过高斯牛顿的批量式的估计也存在一些问题。它必须离线运行,且不是一个恒定时间的算法。而EKF既可以是在线方法,也可以是恒定时间方法。所谓的滑动窗口滤波器(SWF),则是在由多个时间步长组成的窗口内进行选代,并且将这个窗口进行滑动,从而达到在线和恒定时间的实现

请添加图片描述


http://www.niftyadmin.cn/n/5546694.html

相关文章

c语言中运算符的优先级

在C语言中,运算符的优先级决定了表达式中各个部分执行的顺序。了解运算符的优先级对于编写正确和预期行为的代码非常重要。下面是一个简化的C语言运算符优先级列表,从高到低排列: 括号 ():用于改变运算顺序,具有最高优…

C语言希尔排序详解与实例

希尔排序(Shell Sort),是由Donald Shell在1959年提出的一种排序算法。它是插入排序的一种高效改进版,通过引入“增量”概念,将原本的线性查找转换为分段查找,从而显著提升了排序效率。本文将深入探讨希尔排…

windows JDK11 与JDK1.8自动切换,以及切换后失效的问题

1.windows安装不同环境的jdk 2.切换jdk 3.切换失败 原因:这是因为当我们安装并配置好JDK11之后它会自动生成一个环境变量(此变量我们看不到),此环境变量优先级较高,导致我们在切换回JDK8后系统会先读取到JDK11生成的…

TransDecoder:转录本基因预测(真菌)

安装 Home TransDecoder/TransDecoder Wiki GitHub wget -c https://data.broadinstitute.org/Trinity/CTAT_SINGULARITY/MISC/TransDecoder/transdecoder.v5.7.1.simg mamba create -n TransDecoder mamba activate TransDecoder mamba install -c conda-forge singulari…

【Python】已解决:SyntaxError: invalid character in identifier

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:SyntaxError: invalid character in identifier 一、分析问题背景 在Python编程中,SyntaxError: invalid character in identifier是一个常见的编译…

成都百洲文化传媒有限公司电商服务的领跑者

在电商行业的风起云涌中,成都百洲文化传媒有限公司凭借其专业的服务能力和对市场的敏锐洞察,成为了众多品牌争相合作的伙伴。作为电商服务领域的佼佼者,百洲文化传媒凭借其独特的优势,帮助众多品牌实现了从线下到线上的华丽转身&a…

振动分析-11-轴承数据库之深度学习一维故障分类Transformer

Pytorch-Transformer轴承故障一维信号分类(三) 1 制作数据集 import pandas as pd filename = "CWRU_1797.csv" df = pd.read_csv(filename)from sklearn.model_selection import train_test_split df_x=df.drop(labels=1024,axis=1)

leetcode:编程基础0到1

文章目录 交替合并字符串str.length();StringBuilder类型 ,toString()append() ,chatAt()题目描述 交替合并字符串 str.length(); 输出字符串str的长度 StringBuilder类型 ,toString() append() ,chatAt() 题目描述 class Solution {public String …