【状态估计】偏差,匹配和外点

我们都知道:对于状态的估计可能是有偏差的,特别是在运动模型或观测模型是非线性的情况下。在简单的立体相机的例子中,我们看到MAP方法相比于全贝叶斯方法来说是有偏差的。同时,我们也看到批量ML方法对于真实值来说也是有偏差的,还推导了用来量化该偏差的表达式。

不幸的是,偏差的来源不仅仅是这些。

在众多状态估计的方法中,我们都假设输入或者测量是满足零地均值的高斯分布的。实际上,我们的输入和测量也可能受到其它未知偏差的影响。如果忽视它们,我们的估计也会出现偏差。典型的例子是加速度计,它的偏差与温度有关,并且会随着时间的推移而而变化。

状态估计问题中另一个十分重要的部分就是确定测量与模型之间的对应关系问题。例如,当我们测量距离一个路标的距离时,需要假设正在观测的是哪一个路标,这是非常重要的。天体跟踪器是一个很好的例子。当我们看到光点的时候,如何确定这个光点对应星图中的哪一个星星呢?测量与它对应的模型或映射的配对过程被称为建立匹配(determining corresspondences)或数据关联(data association)。

最后,尽管我们尽力消除偏差的影响,并找到正确的匹配关系,但还存在着一些问题。比如测量的外点,会对我们的测量产生不好影响,使算法一直在调整某个在预设的噪声模型看来完全不可能产生的数据上。如果我们没有正确地检测和别除外点,很多状态估计的方法都会面临灾难性的失败。

这本文中,我们将研究怎么处理不太完美的输入或测量。我们将介绍一些用于处理偏差,确定匹配关系,检测和剔除外点的经典方法。


处理输入和测量的偏差

在本节中,我们将研究偏差对于输入和测量的影响。我们会看到输入和测量的偏差都是可以处理的,而且输入偏差会比测量偏差更易于处理。在接下来的讨论中,我们将利用具有非零均值高斯噪声的、线性时不变的运动模型和观测模型来进行研究,但是其中的许多概念也可以拓展到非线性系统中。

偏差对于卡尔曼滤波器的影响

为了展示输入、测量的偏差,讨论下非零均值高斯噪声的情况下,对卡尔曼滤波器的影响。假设:

x k = A x k − 1 + B ( u k + u ˉ ) + w k y k = C x k + y ˉ + n k \begin{aligned}x_k&=Ax_{k-1}+B(u_k+\bar u)+w_k \\ y_k&=Cx_k+\bar y+n_k\end{aligned} xkyk=Axk1+B(uk+uˉ)+wk=Cxk+yˉ+nk

其中, u ˉ \bar u uˉ为输入的偏差, y ˉ \bar y yˉ为测量的偏差。在这里,仍然假设运动和观测模型都受到零均值高斯噪声影响:

w k ∼ N ( 0 , Q ) n k ∼ N ( 0 , R ) \begin{aligned}w_k\sim N(0,Q) \\ n_k\sim N(0,R)\end{aligned} wkN(0,Q)nkN(0,R)

并且噪声之间是相互独立的,即对于所有的 k ≠ l k\ne l k=l

E [ w k w l ] = E [ n k n l ] = E [ w k n l ] = E [ n k w l ] = 0 E[w_kw_l]=E[n_kn_l]=E[w_kn_l]=E[n_kw_l]=0 E[wkwl]=E[nknl]=E[wknl]=E[nkwl]=0

在卡尔曼滤波器中可以获得状态估计:

x ˇ k = A x ^ k − 1 + B u k x ^ k = x ˇ k + K k ( y k − C x ˇ k ) \begin{aligned}\check x_k&=A\hat x_{k-1}+Bu_k \\ \hat x_k&=\check x_k+K_k(y_k-C\check x_k)\end{aligned} xˇkx^k=Ax^k1+Buk=xˇk+Kk(ykCxˇk)

定义估计误差:

e ˇ k = x ˇ k − x k e ^ k = x ^ k − x k \begin{aligned}\check e_k=\check x_k-x_k \\ \hat e_k=\hat x_k-x_k\end{aligned} eˇk=xˇkxke^k=x^kxk

在这种情况下,构造的误差动态过程方程如下:

e ˇ k = A e ^ k − 1 − ( B u ˉ + w k ) e ^ k = ( 1 − K k C ) e ˇ k + K k ( y ˉ + n k ) \begin{aligned}\check e_k&=A\hat e_{k-1}-(B\bar u+w_k) \\ \hat e_k&=(1-K_kC)\check e_k+K_k(\bar y+n_k)\end{aligned} eˇke^k=Ae^k1(Buˉ+wk)=(1KkC)eˇk+Kk(yˉ+nk)

其中, e ^ 0 = x ^ 0 − x 0 \hat e_0=\hat x_0-x_0 e^0=x^0x0

为了让估计是无偏和一致的,需要保证对于所有的 k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K,有:

E [ e ^ k ] = E [ e ˇ k ] = 0 E [ e ^ k e ^ k T ] = P ^ k E [ e ˇ k e ˇ k T ] = P ˇ k \begin{aligned}E[\hat e_k]=E[\check e_k]=0 \\ E[\hat e_k\hat e_k^T]=\hat P_k \\ E[\check e_k\check e_k^T]=\check P_k\end{aligned} E[e^k]=E[eˇk]=0E[e^ke^kT]=P^kE[eˇkeˇkT]=Pˇk

u ˉ = y ˉ = 0 \bar u=\bar y=0 uˉ=yˉ=0的情况下,这些条件是成立的。

那么在不满足零偏置条件的情况下,会发生什么变化?假设:

E [ e ^ 0 ] = 0 E [ e ^ 0 e ^ 0 T ] = P ^ 0 \begin{aligned}E[\hat e_0]&=0 \\ E[\hat e_0\hat e_0^T]&=\hat P_0\end{aligned} E[e^0]E[e^0e^0T]=0=P^0

虽然这个初始条件是另一个可能引入偏差的地方。在 k = 1 k=1 k=1时,有:

E [ e ˇ 1 ] = A E [ e ^ 0 ] − ( B u ˉ + E [ w 1 ] ) = − B u ˉ E [ e ^ 1 ] = ( 1 − K 1 C ) E [ e ˇ 1 ] + K 1 ( y ˉ + E [ n 1 ] ) = − ( 1 − K 1 C ) B u ˉ + K 1 y ˉ \begin{aligned}E[\check e_1]&=AE[\hat e_0]-(B\bar u+E[w_1])\\&=-B\bar u \\ E[\hat e_1]&=(1-K_1C)E[\check e_1]+K_1(\bar y+E[n_1])\\&=-(1-K_1C)B\bar u+K_1\bar y\end{aligned} E[eˇ1]E[e^1]=AE[e^0](Buˉ+E[w1])=Buˉ=(1K1C)E[eˇ1]+K1(yˉ+E[n1])=(1K1C)Buˉ+K1yˉ

u ˉ ≠ 0 \bar u\ne 0 uˉ=0 y ˉ ≠ 0 \bar y\ne 0 yˉ=0时, k = 1 k=1 k=1就已经为有偏估计了

预测误差的协方差为:

E [ e ˇ 1 e ˇ 1 T ] = E [ ( A e ^ 0 − ( B u ˉ + w 1 ) ) ( A e ^ 0 − ( B u ˉ + w 1 ) ) T ] = E [ ( A e ^ 0 − w 1 ) ( A e ^ 0 − w 1 ) T ] + ( − B u ˉ ) ( − B u ˉ ) T = P ˇ 1 + E [ e ˇ 1 ] E [ e ˇ 1 ] T \begin{aligned}E[\check e_1\check e_1^T]&=E[(A\hat e_0-(B\bar u+w_1))(A\hat e_0-(B\bar u+w_1))^T]\\&=E[(A\hat e_0-w_1)(A\hat e_0-w_1)^T]+(-B\bar u)(-B\bar u)^T\\&=\check P_1+E[\check e_1]E[\check e_1]^T\end{aligned} E[eˇ1eˇ1T]=E[(Ae^0(Buˉ+w1))(Ae^0(Buˉ+w1))T]=E[(Ae^0w1)(Ae^0w1)T]+(Buˉ)(Buˉ)T=Pˇ1+E[eˇ1]E[eˇ1]T

因此,卡尔曼滤波器对真实的误差不确定性是欠估计(低估)的,从而导致不一致性

同理,最终估计误差的协方差为:

E [ e ^ 1 e ^ 1 T ] = E [ ( ( 1 − K 1 C ) e ˇ 1 + K 1 ( y ˉ + N 1 ) ) ( ( 1 − K 1 C ) e ˇ 1 + K 1 ( y ˉ + N 1 ) ) T ] = E [ ( ( 1 − K 1 C ) e ˇ 1 + K 1 n 1 ) ( ( 1 − K 1 C ) e ˇ 1 + K 1 n 1 ) T ] + ( − ( 1 − K 1 C ) B u ˉ + K 1 y ˉ ) ( − ( 1 − K 1 C ) B u ˉ + K 1 y ˉ ) = P ^ 1 + E [ e ^ 1 ] E [ e ^ 1 ] T \begin{aligned}E[\hat e_1\hat e_1^T]&=E[((1-K_1C)\check e_1+K_1(\bar y+N_1))((1-K_1C)\check e_1+K_1(\bar y+N_1))^T]\\&=E[((1-K_1C)\check e_1+K_1n_1)((1-K_1C)\check e_1+K_1n_1)^T]+(-(1-K_1C)B\bar u+K_1\bar y)(-(1-K_1C)B\bar u+K_1\bar y)\\&=\hat P_1+E[\hat e_1]E[\hat e_1]^T\end{aligned} E[e^1e^1T]=E[((1K1C)eˇ1+K1(yˉ+N1))((1K1C)eˇ1+K1(yˉ+N1))T]=E[((1K1C)eˇ1+K1n1)((1K1C)eˇ1+K1n1)T]+((1K1C)Buˉ+K1yˉ)((1K1C)Buˉ+K1yˉ)=P^1+E[e^1]E[e^1]T

可以发现,卡尔曼滤波器对协方差的估计仍然是过度确信(高估)的,因此也是不一致的。有趣的是,不管偏差的正负性如何,卡尔曼滤波器都是过度确信的。并且,很容易看出,随着 k k k的增大,偏差带来的影响将会无限制地增长。

对卡尔曼滤波做如下的修正:

P ˇ k = A P ^ k − 1 A T + Q x ˇ k = A x ^ k − 1 + B u k + B u ˉ K k = P ˇ k C T ( C P ˇ k C T + R ) − 1 P ^ k = ( 1 − K k C ) P ˇ k x ^ k = x ˇ k + K k ( y k − C x ˇ k − y ˉ ) \begin{aligned}\check P_k&=A\hat P_{k-1}A^T+Q \\ \check x_k&=A\hat x_{k-1}+Bu_k+B\bar u \\ K_k&=\check P_kC^T(C\check P_kC^T+R)^{-1} \\ \hat P_k&=(1-K_kC)\check P_k \\ \hat x_k&=\check x_k+K_k(y_k-C\check x_k-\bar y)\end{aligned} PˇkxˇkKkP^kx^k=AP^k1AT+Q=Ax^k1+Buk+Buˉ=PˇkCT(CPˇkCT+R)1=(1KkC)Pˇk=xˇk+Kk(ykCxˇkyˉ)

通过上面的修正,重新恢复了一个无偏的和一致的估计。但这里的问题是,为了有效抑制偏差带来的影响,必须知道偏差的准确值。但大多数情况下,并没有办法知道其精确值(偏差有时甚至会随着时间而变化)。因此,在估计问题中,应该尝试把偏差也估计出来

未知的输入偏差

假设测量偏差 y ˉ = 0 \bar y=0 yˉ=0,但输入偏差 u ˉ ≠ 0 \bar u\ne 0 uˉ=0,因此除了估计系统状态 x k x_k xk,还需要估计输入偏差。即需要估计的增广状态为:

x k ′ = [ x k u ˉ k ] x_k^{'}=\begin{bmatrix}x_k\\\bar u_k\end{bmatrix} xk=[xkuˉk]

其中,为了使偏差作为状态的一部分,令偏差为时间的函数,所以需要为偏差定义一个运动模型。一个典型的模型为:

u ˉ k = u ˉ k − 1 + s k \bar u_k=\bar u_{k-1}+s_k uˉk=uˉk1+sk

其中, s k ∼ N ( 0 , W ) s_k\sim N(0,W) skN(0,W),这是有偏差的布朗运动模型。由于影响运动的内部偏差是服从零均值高斯分布的,在某些意义上,可以简单地利用一个积分器来处理。此时,增广运动模型为:

x k ′ = [ A B 0 1 ] x k − 1 ′ + [ B 0 ] u k + [ w k s k ] = A ′ x k − 1 ′ + B ′ u k + w k ′ \begin{aligned}x_k^{'}&=\begin{bmatrix}A&B\\0&1\end{bmatrix}x_{k-1}^{'}+\begin{bmatrix}B\\0\end{bmatrix}u_k+\begin{bmatrix}w_k\\s_k\end{bmatrix}\\&=A^{'}x_{k-1}^{'}+B^{'}u_k+w_k^{'}\end{aligned} xk=[A0B1]xk1+[B0]uk+[wksk]=Axk1+Buk+wk

注意到:

w k ′ ∼ N ( 0 , Q ′ ) Q ′ ∼ [ Q 0 0 W ] \begin{aligned}w_k^{'}&\sim N(0,Q^{'}) \\ Q^{'}&\sim \begin{bmatrix}Q&0\\0&W\end{bmatrix}\end{aligned} wkQN(0,Q)[Q00W]

于是又变成了无偏估计系统的形式。在这种情况下,观测模型为:

y k = [ C 0 ] x k ′ + n k = C ′ x k ′ + n k \begin{aligned}y_k&=\begin{bmatrix}C&0\end{bmatrix}x_k^{'}+n_k\\&=C^{'}x_k^{'}+n_k\end{aligned} yk=[C0]xk+nk=Cxk+nk

一个至关重要的问题是,该增广状态构建的滤波器会不会收敛到正确的结果。上面的技巧是否真实有效?对于线性高斯批量估计(没有初始状态的先验信息),解存在且唯一的条件为:

Q > 0 R > 0 r a n k ( O ) = N \begin{aligned}Q&>0 \\ R&>0\\rank(O)&=N\end{aligned} QRrank(O)>0>0=N

当系统偏差为0时,即 u ˉ = 0 \bar u=0 uˉ=0,我们假设上述条件成立。定义:

O ′ = [ C ′ C ′ A ′ ⋮ C ′ ( A ′ ) N + U − 1 ] O^{'}=\begin{bmatrix}C^{'}\\C^{'}A^{'}\\\vdots\\C^{'}(A^{'})^{N+U-1}\end{bmatrix} O= CCAC(A)N+U1

其中, d i m ( u ˉ k ) = U dim(\bar u_k)=U dim(uˉk)=U

为了证明增广状态构建的批量估计问题中解的存在性和唯一性,需要证明:

r a n k ( Q ′ ) = N + U rank(Q^{'})=N+U rank(Q)=N+U

一般情况下,这个条件不一定会成立。

未知的测量偏差

假设输入偏差 u ˉ = 0 \bar u=0 uˉ=0,但测量偏差 y ˉ ≠ 0 \bar y\ne 0 yˉ=0。因此需要估计的增广状态为:

x k ′ = [ x k y ˉ k ] x_k^{'}=\begin{bmatrix}x_k\\\bar y_k\end{bmatrix} xk=[xkyˉk]

其中,偏差仍然是时间的函数,假设一个随机游走的噪声模型:

y ˉ k = y ˉ k − 1 + s k \bar y_k=\bar y_{k-1}+s_k yˉk=yˉk1+sk

其中, s k ∈ N ( 0 , W ) s_k\in N(0,W) skN(0,W)。在这种偏差运动模型下,增广状态系统的运动模型为:

x k ′ = [ A 0 0 1 ] x k − 1 ′ + [ B 0 ] u k + [ w k s k ] = A ′ x k − 1 ′ + B ′ u k + w ′ \begin{aligned}x_k^{'}&=\begin{bmatrix}A&0\\0&1\end{bmatrix}x_{k-1}^{'}+\begin{bmatrix}B\\0\end{bmatrix}u_k+\begin{bmatrix}w_k\\s_k\end{bmatrix}\\&=A^{'}x_{k-1}^{'}+B^{'}u_k+w^{'}\end{aligned} xk=[A001]xk1+[B0]uk+[wksk]=Axk1+Buk+w

注意到:

w k ′ ∼ N ( 0 , Q ′ ) Q ′ ∼ [ Q 0 0 W ] \begin{aligned}w_k^{'}&\sim N(0,Q^{'}) \\ Q^{'}&\sim \begin{bmatrix}Q&0\\0&W\end{bmatrix}\end{aligned} wkQN(0,Q)[Q00W]

观测模型为:

y k = [ C 1 ] x k ′ + n k = C ′ x k ′ + n k \begin{aligned}y_k&=\begin{bmatrix}C&1\end{bmatrix}x_k^{'}+n_k \\ & =C^{'}x_k^{'}+n_k\end{aligned} yk=[C1]xk+nk=Cxk+nk

同样,此时的估计问题还不一定是能观的。

小结

无论是运动还是测量方程,都可以把偏差引入到状态中,形成增广的状态估计问题。大部分情况下,引入偏差后的问题是不完全能观的

对于不完全能观的情况下,对应的批量估计:

( H T W − 1 H ) x ^ = H T W − 1 z (H^TW^{-1}H)\hat x=H^TW^{-1}z (HTW1H)x^=HTW1z

左侧的矩阵存在零空间,使得它无法直接求逆(但可以求广义逆)。此时,线性方程组有无穷多组解

可以引入偏差量的初始估计,并在求解过程中保持零空间不变,来计算这种情况下的状态估计。


数据关联

数据关联问题就是找出每一个测量信息对应于模型中的哪一部分。事实上,几乎所有的估计技术,特别是机器人技术,都采用某种形式的模型或地图来确定机器人的状态,如机器人的位置/方向。

一些常见例子是:

  1. GPS卫星定位。在固联于地球的参考坐标系中,假设GPS卫星的位置(随时间的函数)是已知的(通过其轨道参数计算),地面上的GPS接收器可以测量自己距离多颗卫星的距离(利用飞行时间原理以及卫星传递的时间信息)。在这个例子里,很容易知道GPS接收器获得的距离信息是相对于哪颗卫星的,因为每颗卫星发送的时间戳中带有唯一的编码信息。
  2. 使用天体观测确定姿态。星敏感器使用天空中所有最亮星星绘制而成的星图(或星表)来确定传感器指向的方位。因此可以将自然世界看作为地图(提前绘制的),而这个例子中数据关联问题,就是确定现在看到的星星是哪一颗,要比GPS例子要难得多。只有提前生成星表,这个系统才能实用。

数据关联技术本质上分为两类:外部关联和内部关联。

外部数据关联

在外部数据关联中,需要用到基于模型和测量的专业知识。这些专业知识对于估计问题来说是外部的。从估计问题的角度来看,数据关联的任务已经完成,因此外部数据关联有时被称为已知的数据关联。

例如,一些观测物体被涂上了不同的颜色,而通过立体相机观测到的这些物体,可以利用颜色信息来进行数据关联。颜色信息在估计问题中也就不会再用到。诸如视觉条形码,特定频率的信号或者编码信息(如GPS卫星)也是外部数据关联。

如果我们能够通过某种手段,搭建或修改成合作的系统,让外部数据关联就可以很好地工作,就可以大幅简化的状态估计问题。与此同时,前沿的计算机视觉技术也可以使用未经过预处理的模型进行外部数据关联,虽然可能很容易出现错误的数据关联。

内部数据关联

在内部数据关联中,只能用测量和模型的数据来计算数据关联。因此内部数据关联有时被称为未知的数据关联。通常,对于给定的模型,内部数据关联与给定观测的似然有关。在最简单的版本中,只有最有可能的数据关联被接受,而其它可能性的关联将会被忽略。更复杂的算法中,也允许存在多种数据关联的假设,用于估计问题中。

对于一些特定的模型,比如三维空间中的路标或者星表、路标构成的星座,有时可以用于数据关联。

如下图所示。数据对齐的刚体约束穷举搜索(data-aligned rigidity-constrained exhaustive search)算法是一个典型的基于群集的数据关联算法。其主要思想为,同同一群集中点对间的距离可以作为数据关联中独一无二的标识。

请添加图片描述
不管采用什么类型的数据关联,只要问题估计失败了,那么极有可能是错误的数据关联导致的。因此,我们应该认识到,在实际应用中数据的误关联是很有可能发生的,所以在技术设计中就应该考虑到如何处理误关联,从而提高系统的鲁棒性。下面,我们将在外点的检测和剔除部分,讨论一些处理此类问题的方法。


处理外点

数据误关联有时会使得估计器完全发散。然而,驱使估计器发散的原因不仅仅是数据关联。比如,我们的测量会受到许多因素的干扰而变得不可靠。一个典型型的例子是,GPS信号在建筑物附近存在多路径效应。通过反射信号,我们可以得到测量距离。然而当视距路径被阻挡,并且没有任何附加信息时,接收机是无法知道较长的路径测得的距离是不正确的。

我们通常将非常不可能的测量值(根据观测模型)称为外点。这里,可能性的评判基准有待选择,但一种常见的方法(在一维度数据中)是将超出平均值三个标准差的测量值作为外点。

如果我们认为系统中存在一部分(也可能是很大一部分)外点,那么我们将需要设计一种检测,减少或移除外点对估计问题影响的方案。我们将讨会论处理外点的的两种最常用的方案:

  1. 随机采样一致性(Random sample consensus)
  2. M-估计(M-Estimation)

两种方案可以单独使用或串联使用。

随机采样一致性

随机采样一致性(RANSAC)是一种根据含有外点的数据拟合参数模型的选代方法。外点是不符合模型的测量,内点是符合模型的测量。RANSAC是一种概率算法,只有花费足够时间去搜索,才能确保(提高)找到合理答案的概率

RANSAC以迭代的方式进行。在基础版本中,每个选代包括以下五个步骤:

  1. 在原始数据中随机选取一个子集作为假设的内点;

  2. 根据假设的内点拟合一个模型;

  3. 判断剩余的原始数据是否符合拟合的模型,并将其分为内点和外点。如果内点太少,则该次迭代被标记为无效并中止;

  4. 根据假设的内点和上一步中划分出的内点重新拟合模型;

  5. 计算所有内点的残差,根据残差和评估模型。迭代上述步骤,把具有最小残差和的模型作为最佳模型。

这里一个重要的问题是,需要多少次选代,比方说 k k k次,才可以确保有概率 p p p选到仅由内点组成的子集?一般而言,该问题很难求解。然而,如果我们假设每个测量被选取是相互独立的,并且每个测量为内点的概率均为 w w w,那么有以下关系:

1 − p = ( 1 − w n ) k 1-p=(1-w^n)^k 1p=(1wn)k

其中, n n n为拟合模型所需的最少数据个数。迭代次数 k k k可解得:

k = l n ( 1 − p ) l n ( 1 − w n ) k=\frac{ln(1-p)}{ln(1-w^n)} k=ln(1wn)ln(1p)

实际上,这也可以认为是 k k k的上限。

M-估计

早期的很多估计技术都是以最小化误差平方和为代价函数。该代价函数的问题是,它非常容易受到外点的干扰。一个偏离较大的外点可以对估计结果产生巨大的影响,因为它主导了代价函数

M-估计修改代价函数的形状,这样在求解过程中外点就不会占主导地位

总体非线性MAP目标函数(对于批量估计)可以写为二次型的形式:

J ( x ) = 1 2 ∑ i = 1 N e i ( x ) T W i − 1 e i ( x ) J(x)=\frac{1}{2}\sum_{i=1}^Ne_i(x)^TW^{-1}_ie_i(x) J(x)=21i=1Nei(x)TWi1ei(x)

目标函数的梯度为:

∂ J ( x ) ∂ x = ∑ i = 1 N e i ( x ) T W i − 1 ∂ e i ( x ) ∂ x \frac{\partial J(x)}{\partial x}=\sum_{i=1}^Ne_i(x)^TW^{-1}_i\frac{\partial e_i(x)}{\partial x} xJ(x)=i=1Nei(x)TWi1xei(x)

在目标函数取极小值时梯度为0。

现一般化这个目标函数,并将其写成:

J g e n e r a l ( x ) = ∑ i = 1 N α i ρ ( u i ( x ) ) J_{general}(x)=\sum_{i=1}^N\alpha_i\rho(u_i(x)) Jgeneral(x)=i=1Nαiρ(ui(x))

其中, α i > 0 \alpha_i>0 αi>0是一个标量权重值,而

u i ( x ) = e i ( x ) T W i − 1 e i ( x ) u_i(x)=\sqrt{e_i(x)^TW^{-1}_ie_i(x)} ui(x)=ei(x)TWi1ei(x)

同时, ρ ( ) \rho() ρ()为非线性代价函数。满足:有界,在 u = 0 u=0 u=0处有唯一的零点,在 u > 0 u>0 u>0时单调递增。

有很多这样的函数,如:

Quadratic函数:

ρ ( u ) = 1 2 u 2 \rho(u)=\frac{1}{2}u^2 ρ(u)=21u2

Cauchy函数:

ρ ( u ) = 1 2 l n ( 1 + u 2 ) \rho(u)=\frac{1}{2}ln(1+u^2) ρ(u)=21ln(1+u2)

Geman-MeClure函数:

ρ ( u ) = u 2 2 ( 1 + u 2 ) \rho(u)=\frac{u^2}{2(1+u^2)} ρ(u)=2(1+u2)u2

这些比二次函数增长较慢的函数称为鲁棒代价函数。由于梯度的减小,这意味着大的误差对应的权重不会太大,对结果的影响也就减弱了。下图展示了,不同的鲁棒函数曲线。

请添加图片描述

利用链式法则,新的代价函数的梯度为:

∂ J g e n e r a l ( x ) ∂ x = ∑ i = 1 N α i ∂ ρ ∂ u i ∂ u i ∂ e i ∂ e i ∂ x \frac{\partial J_{general}(x)}{\partial x}=\sum_{i=1}^N\alpha_i\frac{\partial \rho}{\partial u_i}\frac{\partial u_i}{\partial e_i}\frac{\partial e_i}{\partial x} xJgeneral(x)=i=1Nαiuiρeiuixei

如果寻找最小值,则应该使梯度为零。代入:

∂ u i ∂ e i = 1 u i ( x ) e i ( x ) T W i − 1 \frac{\partial u_i}{\partial e_i}=\frac{1}{u_i(x)}e_i(x)^TW^{-1}_i eiui=ui(x)1ei(x)TWi1

则梯度可以写成:

∂ J g e n e r a l ( x ) ∂ x = ∑ i = 1 N e i ( x ) T Y i ( x ) ∂ e i ( x ) ∂ x \frac{\partial J_{general}(x)}{\partial x}=\sum_{i=1}^Ne_i(x)^TY_i(x)\frac{\partial e_i(x)}{\partial x} xJgeneral(x)=i=1Nei(x)TYi(x)xei(x)

其中,

Y i ( x ) = α i u i ( x ) ∂ ρ ∂ u i ∣ u i ( x ) W i − 1 Y_i(x)=\frac{\alpha_i}{u_i(x)}\frac{\partial \rho}{\partial u_i}|_{u_i(x)}W_i^{-1} Yi(x)=ui(x)αiuiρui(x)Wi1

Y i ( x ) Y_i(x) Yi(x)是一个依赖于 x x x的新的协方差矩阵。

对比:

∂ J ( x ) ∂ x = ∑ i = 1 N e i ( x ) T W i − 1 ∂ e i ( x ) ∂ x \frac{\partial J(x)}{\partial x}=\sum_{i=1}^Ne_i(x)^TW^{-1}_i\frac{\partial e_i(x)}{\partial x} xJ(x)=i=1Nei(x)TWi1xei(x)

可以看出,鲁棒函数某种意义上可以理解为对协方差进行修改,由固定的 W W W修改成可变的 Y Y Y

在最小二乘的迭代过程中,可以使用当前的工作点计算 Y Y Y

Y i ( x o p ) − 1 = α u i ( x o p ) ∂ ρ ∂ u i ∣ u i ( x o p ) W i − 1 Y_i(x_{op})^{-1}=\frac{\alpha}{u_i(x_{op})}\frac{\partial \rho}{\partial u_i}|u_i(x_{op})W_i^{-1} Yi(xop)1=ui(xop)αuiρui(xop)Wi1

这种做法也称为迭代重加权最小二乘(Iteratively Reweighted Least Squares, IRLS)。此类方法实际上把目标函数变为了:

J ( x ) ′ ′ = 1 2 ∑ i = 1 N e i ( x ) T Y i − 1 ( x o p ) e i ( x ) J(x)^{''}=\frac{1}{2}\sum_{i=1}^Ne_i(x)^TY^{-1}_i(x_{op})e_i(x) J(x)′′=21i=1Nei(x)TYi1(xop)ei(x)


总结

  1. 总是有非理想的因素(例如偏差和外点),使得实际的估计问题与本书中纯数学的推导不同。这些非理想因素是实际应用中误差的主要来源。
  2. 在某些情况下,我们可以将估计的偏差叠加到估计框架中,而在有些情况不能这么做。这是由问题的能观性来决定的。
  3. 在大多数实际的估计问题中,外点是真实存在的,因此有必要使用某种形式的预处理(如RANSAC)以及鲁棒代价函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openEuler操作系统下Oracle 19c 从19.3补丁更新到19.17

Oracle 19c 从补丁19.3更新到19.17的过程涉及到多个步骤,包括备份、下载补丁、替换OPatch、验证清单信息、冲突检测、空间检测、应用补丁等。以下是一个概括性的流程,但请注意,具体步骤可能会根据实际的Oracle环境、补丁内容和Oracle的官方指…

【接口自动化_07课_Pytest+Excel+Allure完整框架集成_下】

目标:优化框架场景 1. 生成对应的接口关联【重点】 2. 优化URL基础路径封装【理解】 3. 利用PySQL操作数据库应用【理解】--- 怎么用python连接数据库、mysql 4. 通过数据库进行数据库断言【重点】 5. 通过数据库进行关联操作【重点】 一、接口关联&#xff1a…

【QAC】分布式部署下其他机器如何连接RLM

1、 文档目标 解决分布式部署下其他机器如何连接RLMLicense管理器。 2、 问题场景 分布式部署下QAC要在其他机器上单独运行扫描,必须先连接RLMLicense管理器,如何连接? 3、软硬件环境 1、软件版本:HelixQAC23.04 2、机器环境…

【算法/训练】:前缀和差分

🚀 前言: 前面我们已经通过 【算法/学习】前缀和&&差分-CSDN博客 学习了前缀和&&差分的效相关知识,现在我们开始进行相关题目的练习吧 1. 校门外的树 思路:给[0, n]的数组都标记为1,然后输出m行范围…

基于 PyTorch 的模型瘦身三部曲:量化、剪枝和蒸馏,让模型更短小精悍!

基于 PyTorch 的模型量化、剪枝和蒸馏 1. 模型量化1.1 原理介绍1.2 PyTorch 实现 2. 模型剪枝2.1 原理介绍2.2 PyTorch 实现 3. 模型蒸馏3.1 原理介绍3.2 PyTorch 实现 参考文献 1. 模型量化 1.1 原理介绍 模型量化是将模型参数从高精度(通常是 float32&#xff0…

Elasticsearch:Retrievers 介绍 - Python Jupyter notebook

在今天的文章里,我是继上一篇文章 “Elasticsearch:介绍 retrievers - 搜索一切事物” 来使用一个可以在本地设置的 Elasticsearch 集群来展示 Retrievers 的使用。在本篇文章中,你将学到如下的内容: 从 Kaggle 下载 IMDB 数据集…

Linux云计算 |【第一阶段】SERVICES-DAY5

主要内容: 源码编译安装、rsync同步操作、inotify实时同步、数据库服务基础 实操前骤:(所需tools.tar.gz与users.sql) 1.两台主机设置SELinnx和关闭防火墙 setenforce 0 systemctl stop firewalld.service //停止防火墙 sy…

MySQL定时备份数据,并上传到oss

1.环境准备 1.安装阿里云的ossutil 2.安装mysql 2.编写脚本 脚本内容如下 #!/bin/bash # 数据库的配置信息,根据自己的情况进行填写 db_hostlocalhost db_usernameroot db_passwordroot db_namedb_root # oss 存贮数据的bucket地址 bucket_namerbsy-backup-buck…

软件更新的双刃剑:从”微软蓝屏”事件看网络安全的挑战与对策

引言 原文链接 近日,一场由微软视窗系统软件更新引发的全球性"微软蓝屏"事件震惊了整个科技界。这次事件源于美国电脑安全技术公司"众击"提供的一个带有"缺陷"的软件更新,如同一颗隐形炸弹在全球范围内引爆,…

Python面试宝典第17题:Z字形变换

题目 将一个给定字符串 s 根据给定的行数numRows ,以从上往下、从左到右进行Z字形排列。比如:输入字符串为"PAYPALISHIRING",行数为3时,排列如下。最后,你的输出需要从左往右逐行读取,产生出一个…

unity 实现图片的放大与缩小(根据鼠标位置拉伸放缩)

1创建UnityHelper.cs using UnityEngine.Events; using UnityEngine.EventSystems;public class UnityHelper {/// <summary>/// 简化向EventTrigger组件添加事件的操作。/// </summary>/// <param name"_eventTrigger">要添加事件监听的UI元素上…

DevExpress中文教程 - 如何在.NET MAUI应用中实现Material Design 3?

DevExpress .NET MAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件&#xff0c;该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。 获取DevExpress v24.1正式版下载 Material Design是一个由Google开发的跨平台指南系统…

HydraRPC: RPC in the CXL Era——论文阅读

ATC 2024 Paper CXL论文阅读笔记整理 问题 远程过程调用&#xff08;RPC&#xff09;是分布式系统中的一项基本技术&#xff0c;它允许函数在远程服务器上通过本地调用执行来促进网络通信&#xff0c;隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心…

【Hot100】LeetCode—279. 完全平方数

目录 题目1- 思路2- 实现⭐完全平方数——题解思路 3- ACM 实现 题目 原题连接&#xff1a;279. 完全平方数 1- 思路 思路 动规五部曲 2- 实现 ⭐完全平方数——题解思路 class Solution {public int numSquares(int n) {// 1. 定义 dpint[] dp new int[n1];//2. 递推公式…

论文学习记录之一种具有边缘增强特点的医学图像分割网络

标题&#xff1a;一种具有边缘增强特点的医学图像分割网络 期刊&#xff1a;电子与信息学报-&#xff08;2022年5月出刊&#xff09; 摘要&#xff1a;针对传统医学图像分割网络存在边缘分割不清晰、缺失值大等问题&#xff0c;该文提出一种具有边缘增强特点的医学图像分割网…

社交圈子小程序搭建-源码部署-服务公司

消息通知:当有新的消息、评论或回复时&#xff0c;用户需要收到系统的推送通知&#xff0c;以便及时查看和回复 活动发布与参加:用户可以在社交圈子中发布各种类型的活动&#xff0c;如聚餐、旅游、运动等。其他用户可以参加这些活动&#xff0c;并与组织者进行交流和沟通 社交…

C#初级——输出语句和转义字符

输出语句 在C#中&#xff0c;C#的输出语句是通过Console类进行输出&#xff0c;该类是一个在控制台下的一个标准输入流、输出流和错误流。使用该类下的Write()函数&#xff0c;即可打印要输出的内容。 Console.Write("Hello World!"); //在控制台应用中打印Hell…

通过QT进行服务器和客户端之间的网络通信

客户端 client.pro #------------------------------------------------- # # Project created by QtCreator 2024-07-02T14:11:20 # #-------------------------------------------------QT core gui network #网络通信greaterThan(QT_MAJOR_VERSION, 4): QT widg…

Docker安装nacos(详细教程)

Nacos 是一个开源的动态服务发现、配置管理和服务管理平台&#xff0c;广泛用于微服务架构中。在本文章中&#xff0c;博主将详细介绍如何使用 Docker 来安装 Nacos&#xff0c;以便快速启动并运行这个强大的服务管理工具。 前置条件 在开始安装 Nacos 之前&#xff0c;请确保…

pytorch 笔记:torch.optim.Adam

torch.optim.Adam 是一个实现 Adam 优化算法的类。Adam 是一个常用的梯度下降优化方法&#xff0c;特别适合处理大规模数据集和参数的深度学习模型 torch.optim.Adam(params, lr0.001, betas(0.9, 0.999), eps1e-08, weight_decay0, amsgradFalse, *, foreachNone, maximizeFa…