【状态估计】非线性非高斯系统的状态估计——离散时间的批量估计
上一篇文章介绍了离散时间的递归估计,本文着重介绍离散时间的批量估计。
上一篇位置:【状态估计】非线性非高斯系统的状态估计——离散时间的递归估计。
离散时间的批量估计问题
最大后验估计
目标函数
利用高斯-牛顿法来解决估计问题的非线性版本,这种优化方法也可以认为是MAP方法。
首先建立最小化的目标函数,然后考虑如何解决它。
构建目标函数,优化变量为:
x = [ x 0 x 1 ⋮ x K ] x=\begin{bmatrix}x_0\\x_1\\\vdots\\x_K\end{bmatrix} x= x0x1⋮xK
即需要估计整条轨迹。
对于非线性情况,定于相对于先验和测量的误差为:
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ˇ0−x0=f(xk−1,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)=yk−g(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,k−1ev,k(x)=21ey,k(x)TWy,k−1ey,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=0∑K(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)TW−1e(x)
定义一个修改版本的误差项:
u ( x ) = L e ( x ) u(x)=Le(x) u(x)=Le(x)
其中, L T L = W − 1 L^TL=W^{-1} LTL=W−1。使用这些定义,可以得到更简单的目标函数:
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)+(∂x∂J(x)∣xop)δx+21δxT(∂x∂xT∂2J(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 ∂δx∂J(xop+δx)=(∂x∂J(x)∣xop)+δxT(∂x∂xT∂2J(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 (∂x∂xT∂2J(x)∣xop)δx=−(∂x∂J(x)∣xop)T
当海塞矩阵可逆时(必定可逆,因为前面假设为正定的),可以得到方程的解,然后根据下面的公式来更新工作点:
x o p ⟵ x o p + δ x x_{op}\longleftarrow x_{op}+\delta x xop⟵xop+δ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)+(∂x∂u(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)+(∂x∂u(x)∣xop)δx)T(u(xop)+(∂x∂u(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 ∂δx∂J(xop+δx)=(u(xop)+(∂x∂u(x)∣xop)δx)T(∂x∂u(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}) (∂x∂u(x)∣xop)T(∂x∂u(x)∣xop)δx=−(∂x∂u(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}}) ∂x∂J(x)∣xop=u(xop)T(∂x∂u(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}}) ∂x∂xT∂2J(x)∣xop=(∂x∂u(x)∣xxop)T(∂x∂u(x)∣xop)+i=1∑Mui(xop)(∂x∂xT∂2ui(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}}) ∂x∂xT∂2J(x)∣xop≈(∂x∂u(x)∣xxop)T(∂x∂u(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}) (∂x∂u(x)∣xop)T(∂x∂u(x)∣xop)δx=−(∂x∂u(x)∣xop)Tu(xop)
这个上面的推导结果保持一致。
高斯牛顿法的改进
由于高斯牛顿法不能保证收敛(因为对海塞矩阵进行了近似),可以使用两个实际的方法对其进行改进:
- 一旦计算出最优增量 δ x \delta x δx,则实际的更新为:
x o p ⟵ x o p + α δ x x_{op}\longleftarrow x_{op}+\alpha\delta x xop⟵xop+αδx
其中, α ∈ [ 0 , 1 ] \alpha\in[0,1] α∈[0,1]为自定义的参数。在实际上,常常通过线搜索的方式求得 α \alpha α的最优值。该方法能够有效的原因在于, δ x \delta x δx是下降方向;而只是调整了在该方向上的行进距离,使得收敛性质更加鲁棒(而不是更快)。
- 可以使用列文伯格-马夸尔特(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}) ((∂x∂u(x)∣xop)T(∂x∂u(x)∣xop)+λD)δx=−(∂x∂u(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(∂x∂u(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=W−1是一个常量。
将上式代入高斯牛顿的更新方程中,可以得到关于误差项 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)TLHδx=−(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} HFk−1Gk=−∂x∂e(x)∣xop= 1−F0G01−F1G1⋱⋱G21−FK−1⋱1GK =∂xk−1∂f(xk−1,vk,wk)∣xop,k−1,vk,0=∂xk∂g(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}) (HTW−1H)δx=HTW−1e(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}) (HTW−1H)δx=HTW−1e(xop)。当然,也可以使用捷径,对 e ( x ) e(x) e(x)进行线性化,再使用线性高斯系统的方法进行推导,最后会得到相同的结果。
贝叶斯推断,也可以使用线性化的方法进行讨巧,再证明得到。这里就不赘述了。
讨论
如果把EKF看作是全非线性高斯牛顿方法的近似,那么它的表现是不尽如人意的。主要原因是,EKF没有迭代至收敛的过程,其雅可比矩阵也只计算一次(可能远离最优估计)。从本质上看,EKF可以做得比单次高斯牛顿迭代更好,因为它没有一次性计算所有的雅可比矩阵。即EKF中,一部分雅可比计算是在运动先验中,另一部分在观测中,但是观测部分的雅可比是在推导运动先验之后再计算的。而单次高斯牛顿迭代中,两部分雅可比是一起计算的。
EKF的主要缺陷在于缺少迭代的过程。目前,在提升EKF的表现方面已经有不少的工作,包括IEKF。IEKF的问题在于,它仍然依赖于马尔可夫假设。它仅在一个时刻上进行了迭代,而非在整个轨迹上。
不过高斯牛顿的批量式的估计也存在一些问题。它必须离线运行,且不是一个恒定时间的算法。而EKF既可以是在线方法,也可以是恒定时间方法。所谓的滑动窗口滤波器(SWF),则是在由多个时间步长组成的窗口内进行选代,并且将这个窗口进行滑动,从而达到在线和恒定时间的实现。
原文地址:https://blog.csdn.net/qq_38410730/article/details/140180040
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!