Least Squares

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)=zifi(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=xargminiei(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} xf=(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} ΔxF(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=H1b

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=H1b

高斯牛顿总结:

  • 目的:使得均方误差最小
  • 开始初始化高斯噪声
  • 求偏导线性化误差
  • 这导致二次形式
  • 通过将其导数设置为零来获得线性系统
  • 求解线性系统导致状态更新
  • 迭代

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)=x11x21x31x12x22x32x13x23x33ui
  • 为了得到修正函数 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)=uix11x21x31x12x22x32x13x23x33ui

  • 其偏导为: 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=xei(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,θx11x33=xixxiyxiθ
    • 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值