《视觉SLAM十四讲》第6讲非线性优化,似然问题P(z,u|x,y)是如何变为最小二乘min J(x,y) (式6-13)的?

本文主要是介绍《视觉SLAM十四讲》第6讲非线性优化,似然问题P(z,u|x,y)是如何变为最小二乘min J(x,y) (式6-13)的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在学习高翔《视觉SLAM十四讲》中的理论知识,在第六章非线性优化中,解释了为何求解最大概率问题能够转化为最小二乘的优化问题。然而书中有些证明省略掉了,经过请教搞清楚了,特此记在这里。或许能够对其他朋友有帮助。

关键词:如何从求: max ⁡ P ( z , u ∣ x , y ) \max P(z, u|x, y) maxP(z,ux,y) 得到求:
min ⁡ J ( x , y ) = ∑ k e u , k T R k − 1 e u , k + ∑ k ∑ j e z , k , j T Q k , j − 1 e z , k , j \min J(x,y)=\sum_k e_{u,k}^T R_k^{-1} e_{u,k} + \sum_k \sum_j e_{z,k,j}^T Q_{k,j}^{-1} e_{z,k,j} minJ(x,y)=keu,kTRk1eu,k+kjez,k,jTQk,j1ez,k,j 采用的是《视觉SLAM十四讲(第二版)》,公式编号与第一版稍微有一点儿不一样,但不影响理解。

1. 从后验到似然

我们需要估计的量为:所有的状态 x x x 和路标 y y y,不加角标表示所有的时刻,即 x 0 , 1 , 2... K x_{0,1,2...K} x0,1,2...K。而我们已知的是实际的观测 z z z 和我们的输入量(控制量) u u u,所以我们要求的是 x , y x, y x,y 的条件概率分布(式6.4) P ( x , y ∣ z , u ) P(x, y|z, u) P(x,yz,u) 利用贝叶斯公式写成(式-6.5):
P ( x , y ∣ z , u ) = P ( z , u ∣ x , y ) P ( x , y ) P ( z , u ) ∝ P ( z , u ∣ x , y ) P ( x , y ) P(x, y|z, u) = \frac{P(z, u|x, y) P(x,y)}{P(z, u)} \propto P(z, u|x, y)P(x,y) P(x,yz,u)=P(z,u)P(z,ux,y)P(x,y)P(z,ux,y)P(x,y) 由于我们要求的是 x , y x,y x,y 所以不用考虑分母的 z , u z,u z,u ,而后面的 P ( x , y ) P(x,y) P(x,y) 是先验,我们在未知可能的先验时这部分没有用,(一般设为均匀分布?)所以省略,于是关于最优的 x , y x,y x,y 写成求解最大似然估计(式-6.7):
( x , y ) M L E ∗ = a r g max ⁡ P ( z , u ∣ x , y ) (x, y)^*_{MLE} = arg\max P(z, u|x, y) (x,y)MLE=argmaxP(z,ux,y) 从而得出了从后验到似然

2. 后验式子的变形

P ( z , u ∣ x , y ) = P ( z ∣ x , y ) P ( u ∣ x , y ) = P ( z ∣ x , y ) P ( u ∣ x ) P(z, u|x, y)=P(z|x, y) P(u|x, y) = P(z|x, y)P(u|x) P(z,ux,y)=P(zx,y)P(ux,y)=P(zx,y)P(ux)
因为观测与控制独立,所以有第一个等号;而控制只和实际的位置有关,与标志 y y y无关,所以有第二个等式。
对于观测,第 z k , j z_{k,j} zk,j 个观测(用 k k k 表示第 k k k 个位置, j j j 表示第 j j j 个标志物)只和第 k k k 个位置的状态 x x x,和第 j j j 个标志物有关,所以有:
P ( z ∣ x , y ) = P ( z 1 , 1 , z 2 , 1 , z 2 , 3 , . . . . z k , j ∣ x , y ) = ∏ k , j P ( z k , j ∣ x k , y j ) P(z|x, y)=P(z_{1,1}, z_{2,1}, z_{2,3}, .... z_{k, j}|x, y)=\prod_{k,j} P(z_{k, j}|x_k, y_j) P(zx,y)=P(z1,1,z2,1,z2,3,....zk,jx,y)=k,jP(zk,jxk,yj) 这里把 z z z 展开了,随意写了第二个式子(可以认为是在第1个位置看到了路标1,第2个位置看到了路标1和3,等),由于每次观测相互独立,所以可以写成条件概率连乘的形式。
对于控制,第 k k k 个控制量只和前一次与后一次的位置状态 x x x 有关(这也是马尔科夫假设)而与其它的位置无关,所以可以写成:
P ( u ∣ x ) = P ( u 1 : K ∣ x 0 : K ) = ∏ k P ( u k ∣ x k − 1 , x k ) P(u|x) = P(u_{1:K}|x_{0:K}) = \prod_k P(u_k|x_{k-1}, x_k) P(ux)=P(u1:Kx0:K)=kP(ukxk1,xk) 于是整理两个式子,可以得到书中的 式6.11
P ( z , u ∣ x , y ) = ∏ k P ( u k ∣ x k − 1 , x k ) ∏ k , j P ( z k , j ∣ x k , y j ) P(z, u|x, y)=\prod_k P(u_k|x_{k-1}, x_k) \prod_{k,j}P(z_{k,j}|x_k, y_j) P(z,ux,y)=kP(ukxk1,xk)k,jP(zk,jxk,yj) 然而按照这个式子继续推,不能直观的得到后续结果,因为观测部分有明确的观测模型,而控制部分没有! 具体的介绍请看第4部分。

3. 观测部分变形

首先补充观测方程:
z k , j = h ( y j , x k ) + v k , j z_{k,j} = h(y_j, x_k) + v_{k,j} zk,j=h(yj,xk)+vk,j 即观测 z z z 是实际的(与位置 x x x 和实际路标 y y y 有关的)观测模型(例如相机成像模型)的真实测量, h ( x , y ) h(x,y) h(x,y) 叠加一个观测噪声 v v v
如果我们假设实际的观测结果,是以:真实观测值为期望,协方差矩阵为噪声协方差的正态分布,即(省略了不重要的角标):
P ( z ∣ x , y ) = N ( h ( x , y ) , Q ) P(z|x, y) = N(h(x,y), Q) P(zx,y)=N(h(x,y),Q) 则我们在计算最大的 P ( z ∣ x , y ) P(z|x, y) P(zx,y)即为计算最小的 − l n ( P ( z ∣ x , y ) ) -ln(P(z|x, y)) ln(P(zx,y)),而这部分可以进一步写成(省略与 x , y x,y x,y无关项):
( z − h ( x , y ) ) T Q − 1 ( z − h ( x , y ) ) (z-h(x,y))^T Q^{-1}(z-h(x,y)) (zh(x,y))TQ1(zh(x,y)) 这就是式6.10,而如果定义观测误差如下:
e z = z − h ( x , y ) e_z = z-h(x, y) ez=zh(x,y) 则我们通过对(式-6.11),即连乘式子求对数,连乘变为累加,最小化后半部分的观测,则式6.11的观测部分写成:
∑ k ∑ j e z , k , j T Q − 1 e z , k , j \sum_k \sum_j e_{z,k,j}^T Q^{-1} e_{z, k, j} kjez,k,jTQ1ez,k,j 便得到了观测部分的目标函数形式。

4. 运动部分变形

而对于控制部分并不能直接从(式-6.11)得到!
因为运动方程写作:
x k = f ( x k − 1 , u ) + w k x_k = f(x_{k-1}, u) + w_k xk=f(xk1,u)+wk
即这一时刻的位置由上一时刻的位置和施加的控制量产生的运动模型 f f f 叠加一个噪声 w w w 确定。并不能写作(式-6.11)中的控制量由一个包含前一时刻和当前时刻的位置的方程决定。(其实也可以这样定义一个方程,但不能写成控制方程 f f f 的形式)。
于是需要将 P ( u ∣ x ) P(u|x) P(ux) 进行变形。
首先,有式子:
P ( x ∣ u ) = P ( x 0 ∣ x 0 ‾ ) ∏ k = 1 K P ( x k ∣ x k − 1 , u k ) P(x|u) = P(x_0|\overline{x_0}) \prod_{k=1}^K P(x_k|x_{k-1}, u_k) P(xu)=P(x0x0)k=1KP(xkxk1,uk) 这个关键的式子来自于《机器人学中的状态估计》第3章(式-3.5),具体解释为,在控制下的全部 x x x 可以写成在初始分布的估计值 x 0 ‾ \overline{x_0} x0 的一个条件概率分布和后面的连乘。补充一下个人的证明过程:
P ( x ∣ u ) = P ( x 0 : K ∣ u 1 : K , x 0 ‾ ) = P ( x 0 ∣ x 0 ‾ ) P ( x 1 ∣ x 0 , u 0 ) P ( x 2 ∣ x 1 , u 1 ) . . . P ( x K ∣ x K − 1 , u K ) P(x|u)=P(x_{0:K}|u_{1:K}, \overline{x_0}) = P(x_0|\overline{x_0}) P(x_1|x_0, u_0) P(x_2|x_1, u_1)...P(x_K|x_{K-1}, u_K) P(xu)=P(x0:Ku1:K,x0)=P(x0x0)P(x1x0,u0)P(x2x1,u1)...P(xKxK1,uK) 第一个等号为展开向量为所有单个的状态(注意 x 0 ‾ \overline{x_0} x0 是定义在条件中的),后面为条件独立+马尔科夫。
那么我重写了(式-6.11)的控制部分:
a r g max ⁡ P ( u ∣ x ) = a r g max ⁡ P ( x ∣ u ) P ( u ) P ( x ) = a r g max ⁡ P ( x ∣ u ) arg \max P(u|x)=arg \max \frac{P(x|u)P(u)}{P(x)} = arg \max P(x|u) argmaxP(ux)=argmaxP(x)P(xu)P(u)=argmaxP(xu) 第一个等号为贝叶斯公式,第二个等号由于所求 x x x 与控制 u u u 无关,且分母为先验是未知的,所以省略。再带入《机器人学中的状态估计》这个式子,便写成了(还不太具体明白 P ( x 0 ∣ x 0 ‾ ) P(x_0|\overline{x_0}) P(x0x0)这部分如何处理):
∏ k P ( x k ∣ x k − 1 , u k ) \prod_k P(x_k|x_{k-1}, u_k) kP(xkxk1,uk) 于是,式6.11在求取最大值时的参数 x , y x, y x,y 被改写成了:
a r g max ⁡ P ( z , u ∣ x , y ) = a r g max ⁡ ∏ k P ( x k ∣ x k − 1 , u k ) ∏ k , j P ( z k , j ∣ x k , y j ) arg \max P(z,u|x,y)= arg \max \prod_k P(x_k|x_{k-1}, u_k)\prod_{k,j}P(z_{k,j}|x_k, y_j) argmaxP(z,ux,y)=argmaxkP(xkxk1,uk)k,jP(zk,jxk,yj) 这样前半部分利用控制方程,与观测部分相同,定义运动误差 e u , k = x k − f ( x k − 1 , u k ) e_{u,k}=x_k-f(x_{k-1}, u_k) eu,k=xkf(xk1,uk),再假设正态分布的期望与方差,从而最终写成目标函数(式-6.13)形式:
min ⁡ J ( x , y ) = ∑ k e u , k T R k − 1 e u , k + ∑ k ∑ j e z , k , j T Q k , j − 1 e z , k , j \min J(x,y)=\sum_k e_{u,k}^T R_k^{-1} e_{u,k} + \sum_k \sum_j e_{z,k,j}^T Q_{k,j}^{-1} e_{z,k,j} minJ(x,y)=keu,kTRk1eu,k+kjez,k,jTQk,j1ez,k,j

5. 后续

后面将目标函数变形,得到求解最小二乘问题即可。

6. 小结

首先,书上没有写出来的可能不是那么直接就能看出来,实际自己一写就能发现问题。其次,折腾半天挺有成就感的。最后,多看别的书籍虽然很痛苦但确实有帮助。以及,写博客敲公式好累。

这篇关于《视觉SLAM十四讲》第6讲非线性优化,似然问题P(z,u|x,y)是如何变为最小二乘min J(x,y) (式6-13)的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/849081

相关文章

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例