Least Squares
LS
一般最小二乘:
- 计算超定系统的解的方法
- 方程多于未知数
- 方程中的平均误差之和最小
- 解决大型问题的标准方法
- 使用线性化近似值
- Gauss-Newton 是非线性问题的迭代方法
问题:
- 给定一个由一组n 个观察函数描述的系统
{
f
i
(
x
}
=
1
:
n
{\{f_i(x\}=1:n}
{fi(x}=1:n
- x x x 状态向量(状态)
- z i z_i zi 是状态 x x x的一个测量(实际测量)
- z i ^ = f i ( x ) {\hat{z_i}=f_i(x)} zi^=fi(x)是一个函数, x x x 到一个预测 z i ^ {\hat{z_i}} zi^的映射,(预测)
- 给了 n n n 个噪声测量 z 1 : n {z_{1:n}} z1:n,关于状态 x x x
- 目的:估计最优状态 x x x通过测量 z 1 : n {z_{1:n}} z1:n
误差函数:
- 误差 e i ( x ) e_i(x) ei(x) 是预测和实际测量的差异: e i ( x ) = z i − f i ( x ) {e_i(x)=z_i-f_i(x)} ei(x)=zi−fi(x)
- 我们假设误差是均值为0的正态分布
- 高斯误差的信息矩阵 Ω i {\Omega_i} Ωi,均方误差仅依赖状态和尺度: e i ( x ) = e i ( x ) T Ω i e i ( x ) {e_i(x)=e_i(x)^T\Omega _i e_i(x)} ei(x)=ei(x)TΩiei(x)
目的:
- 找一个状态 x ∗ {x^*} x∗ 使得所有的测量误差最小: x ∗ = a r g m i n x ∑ i e i ( x ) T Ω i e i ( x ) {x^*= \underset{x}{argmin} \sum_i e_i(x)^T\Omega _i e_i(x)} x∗=xargmin∑iei(x)TΩiei(x)
假设:
- 一个“好的”初始预测是可用的
- 误差函数在(希望是全局坐标系下)最小值附近是“平滑的”
- 然后,我们可以通过迭代局部线性化来解决问题
通过迭代局部线性化求解
- 围绕当前解决解或初始值预测线性化误差项
- 计算平方误差函数的一阶导数
- 将其设置为零并求解线性系统
- 获得新状态(希望更接近最小值)
- 迭代
线性误差函数:
- 通过泰勒展开近似初始估计 x ^ {\hat{x}} x^ 的误差函数: e i ( x ^ + Δ x ) ≃ e i ( x ^ ) ⏟ e i + J i ( x ^ ) Δ x {e_i(\hat{x}+\Delta x)\simeq \underset{e_i}{\underbrace{e_i(\hat{x})}}+ J_i(\hat{x})\Delta{x}} ei(x^+Δx)≃ei ei(x^)+Ji(x^)Δx
均方误差:
- 通过之前的线性化,我们可以固定 x x x 并执行最小化。
- 我们在平方误差项中替换泰勒展开:
- e i ( x ^ + Δ x ) = e i ( x ^ + Δ x ) T Ω i e i ( x ^ + Δ x ) ≃ ( e i + J i Δ x ) T Ω i ( e i + J i Δ x ) {e_i(\hat{x}+\Delta{x})=e_i(\hat{x}+\Delta{x})^T\Omega _i e_i(\hat{x}+\Delta{x})\simeq (e_i+J_i \Delta{x})^T\Omega_i(e_i+J_i \Delta{x})} ei(x^+Δx)=ei(x^+Δx)TΩiei(x^+Δx)≃(ei+JiΔx)TΩi(ei+JiΔx)
- e i T Ω i e i + e i T Ω i J i Δ x + Δ x T J i T Ω i e i + Δ x T J i T Ω i J i Δ x {e_i^T\Omega_i e_i+e_i^T\Omega_i J_i\Delta x + \Delta x^TJ_i^T\Omega_i e_i + \Delta x^TJ_i^T\Omega_i J_i\Delta x} eiTΩiei+eiTΩiJiΔx+ΔxTJiTΩiei+ΔxTJiTΩiJiΔx
- 所有的加数都是标量,因此转置无效:
- e i ( x ^ + Δ x ) = e i T Ω i e i + 2 e i T Ω i J i Δ x + Δ x T J i T Ω i J i Δ x = c i + 2 b i T Δ x + Δ x T H i Δ x {e_i(\hat{x}+\Delta x)=e_i^T\Omega_i e_i+2e_i^T\Omega_i J_i\Delta x +\Delta x^TJ_i^T\Omega_i J_i\Delta x = c_i+2b_i^T\Delta x + \Delta x^T H_i \Delta x} ei(x^+Δx)=eiTΩiei+2eiTΩiJiΔx+ΔxTJiTΩiJiΔx=ci+2biTΔx+ΔxTHiΔx
- 全局误差是对应于各个测量值的平方误差项的总和,形成一个新的表达式,它近似于当前解附近的全局误差
- F ( x ^ + Δ x ) ≃ ∑ i ( c i ) + 2 ( ∑ i b i T ) Δ x + Δ x T ( ∑ i H i ) Δ x = c + 2 b T Δ x + Δ x T H Δ x {F(\hat{x}+\Delta x)\simeq \sum_i(c_i)+2(\sum_i b_i^T)\Delta x + \Delta x^T (\sum_i H_i) \Delta x = c+2b^T\Delta x + \Delta x^T H \Delta x} F(x^+Δx)≃∑i(ci)+2(∑ibiT)Δx+ΔxT(∑iHi)Δx=c+2bTΔx+ΔxTHΔx
- b T = ∑ i e i T Ω i J i {b^T=\sum_i e_i^T\Omega_i J_i} bT=∑ieiTΩiJi 和 H = ∑ i J i T Ω i J i {H=\sum_i J_i^T\Omega_i J_i} H=∑iJiTΩiJi
- 我们需要迭代 F ( x ^ + Δ x ) {F(\hat{x}+\Delta x)} F(x^+Δx),变量 Δ x \Delta x Δx
- 导出二次形式
- 假设一个二次式: f ( x ) = x T H x + b T x {f(x)= x^T Hx+b^T x} f(x)=xTHx+bTx
- 求偏导:
-
- ∂ f ∂ x = ( H + H T ) x + b {\frac{\partial f}{\partial x}=(H+H^T)x+b} ∂x∂f=(H+HT)x+b
- 则其对变量的偏导有:
- ∂ F ( x ^ + Δ x ) ∂ Δ x ≃ 2 H Δ x + 2 b {\frac{\partial F(\hat{x}+\Delta x)}{\partial \Delta x}\simeq 2H\Delta x+2b} ∂Δx∂F(x^+Δx)≃2HΔx+2b
- 另其偏导等于0,则 0 = 2 b + 2 H Δ x {0=2b+2H\Delta{x}} 0=2b+2HΔx
- 因此解增量为 Δ x ∗ \Delta x^* Δx∗ : Δ x ∗ = − H − 1 b {\Delta x^*=-H^{-1}b} Δx∗=−H−1b
Gauss-Newton
高斯牛顿:
-
线性化 x x x 计算每个测量: e i ( x ^ + Δ x ) ≃ e i ( x ^ ) ⏟ e i + J i ( x ^ ) Δ x {e_i(\hat{x}+\Delta x)\simeq \underset{e_i}{\underbrace{e_i(\hat{x})}}+ J_i(\hat{x})\Delta{x}} ei(x^+Δx)≃ei ei(x^)+Ji(x^)Δx
-
均方误差:
- e i ( x ^ + Δ x ) = e i ( x ^ + Δ x ) T Ω i e i ( x ^ + Δ x ) ≃ ( e i + J i Δ x ) T Ω i ( e i + J i Δ x ) {e_i(\hat{x}+\Delta{x})=e_i(\hat{x}+\Delta{x})^T\Omega _i e_i(\hat{x}+\Delta{x})\simeq (e_i+J_i \Delta{x})^T\Omega_i(e_i+J_i \Delta{x})} ei(x^+Δx)=ei(x^+Δx)TΩiei(x^+Δx)≃(ei+JiΔx)TΩi(ei+JiΔx)
- e i T Ω i e i + e i T Ω i J i Δ x + Δ x T J i T Ω i e i + Δ x T J i T Ω i J i Δ x {e_i^T\Omega_i e_i+e_i^T\Omega_i J_i\Delta x + \Delta x^TJ_i^T\Omega_i e_i + \Delta x^TJ_i^T\Omega_i J_i\Delta x} eiTΩiei+eiTΩiJiΔx+ΔxTJiTΩiei+ΔxTJiTΩiJiΔx
-
为线性系统计算每一项:
- b T = ∑ i e i T Ω i J i {b^T=\sum_i e_i^T\Omega_i J_i} bT=∑ieiTΩiJi
- H = ∑ i J i T Ω i J i {H=\sum_i J_i^T\Omega_i J_i} H=∑iJiTΩiJi
-
解线性系统: Δ x ∗ = − H − 1 b {\Delta x^*=-H^{-1}b} Δx∗=−H−1b
高斯牛顿总结:
- 目的:使得均方误差最小
- 开始初始化高斯噪声
- 求偏导线性化误差
- 这导致二次形式
- 通过将其导数设置为零来获得线性系统
- 求解线性系统导致状态更新
- 迭代
Eg Odo Calib
-
这儿有一个函数 f i ( x ) {f_i(x)} fi(x),给一些偏差参数 x x x ,返回一个无偏(校准)的里程计 u i ′ {u_i'} ui′,如下:
- u i ′ = f i ( x ) = ( x 11 x 12 x 13 x 21 x 22 x 23 x 31 x 32 x 33 ) u i {u_i'=f_i(x)=\begin{pmatrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \\ x_{31} & x_{32} & x_{33} \end{pmatrix} u_i} ui′=fi(x)=⎝⎛x11x21x31x12x22x32x13x23x33⎠⎞ui
-
为了得到修正函数 f ( x ) f(x) f(x),我们需要找到参数 x x x。
-
设其状态向量为: x = ( x 11 x 12 x 13 x 14 x 15 x 16 x 17 x 18 x 19 ) T {x=\begin{pmatrix}x_{11} & x_{12} & x_{13} & x_{14} & x_{15} & x_{16} & x_{17} & x_{18} & x_{19}\end{pmatrix}^T} x=(x11x12x13x14x15x16x17x18x19)T
-
误差函数为: e i ( x ) = u i ∗ − ( x 11 x 12 x 13 x 21 x 22 x 23 x 31 x 32 x 33 ) u i {e_i(x)=u_i^* - \begin{pmatrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \\ x_{31} & x_{32} & x_{33} \end{pmatrix} u_i} ei(x)=ui∗−⎝⎛x11x21x31x12x22x32x13x23x33⎠⎞ui
-
其偏导为: J i = ∂ e i ( x ) ∂ x = − ( u i , x u i , y u i , θ u i , x u i , y u i , θ u i , x u i , y u i , θ ) {J_i=\frac{\partial e_i(x)}{\partial x}=-\begin{pmatrix} u_{i,x}& u_{i,y} & u_{i,\theta} &&&&&\\ &&& u_{i,x}& u_{i,y} & u_{i,\theta} &&& \\ &&&&&&u_{i,x}& u_{i,y} & u_{i,\theta} \end{pmatrix} } Ji=∂x∂ei(x)=−⎝⎛ui,xui,yui,θui,xui,yui,θui,xui,yui,θ⎠⎞
-
线性系统: H Δ x = − b {H\Delta{x}=-b} HΔx=−b
-
为啥求导是那个呢?
- [ u i , x u i , y u i , θ u i , x u i , y u i , θ u i , x u i , y u i , θ ] ∗ [ x 11 ⋮ x 33 ] = [ x i x ∗ x i y ∗ x i θ ∗ ] {\begin{bmatrix}u_{i,x}& u_{i,y} & u_{i,\theta} &&&&&\\ &&& u_{i,x}& u_{i,y} & u_{i,\theta} &&& \\ &&&&&&u_{i,x}& u_{i,y} & u_{i,\theta} \end{bmatrix} * \begin{bmatrix} x_{11} \\ \vdots \\ x_{33}\end{bmatrix} = \begin{bmatrix} x_{ix}^* \\ x_{iy}^* \\ x_{i\theta}^* \end{bmatrix}} ⎣⎡ui,xui,yui,θui,xui,yui,θui,xui,yui,θ⎦⎤∗⎣⎢⎡x11⋮x33⎦⎥⎤=⎣⎡xix∗xiy∗xiθ∗⎦⎤
- A i X ⃗ = b i A_i \vec{X}=b_i AiX=bi 可直接求出: X ⃗ = ( A t A ) − 1 A T b {\vec{X}=(A^tA)^{-1}A^Tb} X=(AtA)−1ATb
求解线性系统的 Cholesky 分解
- A是对称正定矩阵
- 求解: A x = b {Ax=b} Ax=b
- Cholesky 导致
A
=
L
L
T
{A=LL^T}
A=LLT,其中
L
L
L 是一个下三角矩阵
- 第一步解: L y = b {Ly=b} Ly=b
- 然后: L T x = y {L^T x =y} LTx=y