《视觉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

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错