翻译自:iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree

摘要

提出了一种新型的贝斯树处理稀疏矩阵,在转化为因子图,可以更好的求解平方根信息和映射问题。
文中提出了三个概念

  1. 使用概率密度项进行矩阵分解
  2. 介绍如何将矩阵分解转换为贝叶斯数和条件概率密度
  3. 基于贝叶斯树提供了一种新的系数非线性优化:ISAM2(进行重新排序和重新线性化,避免了批量更新)

问题描述

文章聚焦与如何用增量实时解决非线性问题,

  1. 利用增量即新的测量值实时更新估计值?:比如机器人的导航和规划

  2. 使用因子图求解一个状态估计文题
    (1):定义一个因子图
    F:因子图所有函数节点,fi∈FF:因子图所有函数节点,f_i\in FF:因子图所有函数节点,fi​∈F
    Θ:因子图所有因子节点θj∈Θ\Theta:因子图所有因子节点\theta_j \in \ThetaΘ:因子图所有因子节点θj​∈Θ
    E:边:两个因子图之间的关系E:边:两个因子图之间的关系E:边:两个因子图之间的关系
    G:一个因子图G:一个因子图G:一个因子图
    G=(F,Θ,E)G=(F,\Theta,E)G=(F,Θ,E)
    (2):由因子图可以得到因式分解为:
    Θi:表示所有与函数fi相邻因子节点θj的集合\Theta_i:表示所有与函数f_i相邻因子节点\theta_j的集合Θi​:表示所有与函数fi​相邻因子节点θj​的集合
    eij:表示一个因子节点ei与一个函数节点ej的联系e_{ij}:表示一个因子节点e_i与一个函数节点e_j的联系eij​:表示一个因子节点ei​与一个函数节点ej​的联系
    f(Θ)=Πi(fi(Θi))f(\Theta)=\Pi_i(f_i(\Theta_i))f(Θ)=Πi​(fi​(Θi​))
    (3):得到目标函数为:
    Θ∗=argmaxΘf(Θ)\Theta^*=argmax_\Theta f(\Theta)Θ∗=argmaxΘ​f(Θ)
    例如下图:
    m:路标测量值m:路标测量值m:路标测量值
    c:回环c:回环c:回环
    u:里程计u:里程计u:里程计

  3. 假设测量模型为高斯模型
    hi(Θi):测量函数模型(理论值)h_i(\Theta_i):测量函数模型(理论值)hi​(Θi​):测量函数模型(理论值)
    zi:测量值z_i:测量值zi​:测量值
    ∣∣e∣∣∑2=eT∑−1e||e||^2_{\sum}=e^T\sum^{-1}e∣∣e∣∣∑2​=eT∑−1e
    fi(Θi)=e−12∣∣hi(Θi)−zi∣∣∑i2f_i(\Theta_i)=e^{-\frac{1}{2}||h_i(\Theta_i)-z_i||^2_{\sum_i}}fi​(Θi​)=e−21​∣∣hi​(Θi​)−zi​∣∣∑i​2​
    目标函数更新为:
    argminΘ(−logf(Θ))=argminΘ12∣∣hi(Θi)−zi)∣∣∑i2argmin_\Theta (-logf(\Theta))=argmin_\Theta \frac{1}{2}||h_i(\Theta_i)-z_i)||^2_{\sum_i}argminΘ​(−logf(Θ))=argminΘ​21​∣∣hi​(Θi​)−zi​)∣∣∑i​2​
    定义协防差矩阵为(马氏距离):
    Σ:协防差矩阵Σ:协防差矩阵Σ:协防差矩阵
    ∣∣e∣∣Σ2=eTΣ−1e||e||^2_Σ=e^T Σ^{-1}e∣∣e∣∣Σ2​=eTΣ−1e

  4. 使用高斯牛顿/列文伯格方法求解非线性方程:hi(Θi)h_i(\Theta_i)hi​(Θi​)
    于是目标函数变为:
    A:m×n阶的雅克比矩阵,m:测量值的个数A:m×n 阶的雅克比矩阵,m:测量值的个数A:m×n阶的雅克比矩阵,m:测量值的个数
    Δ:n维向量\Delta:n维向量Δ:n维向量

    argminΘ(−logf(Δ))=argminΘ12∣∣AΔ−b)∣∣2argmin_\Theta (-logf(\Delta))=argmin_\Theta \frac{1}{2}||A\Delta-b)||^2argminΘ​(−logf(Δ))=argminΘ​21​∣∣AΔ−b)∣∣2
    此时的协防差为:
    ∣∣Δ∣∣Σ2=ΔTΣ−1Δ=ΔTΣ−T/2Σ−1/2Δ=∣∣Σ−1/2Δ∣∣2||\Delta||^2_Σ=\Delta^TΣ^{-1}\Delta=\Delta^TΣ^{-T/2}Σ^{-1/2}\Delta=||Σ^{-1/2}\Delta||^2∣∣Δ∣∣Σ2​=ΔTΣ−1Δ=ΔTΣ−T/2Σ−1/2Δ=∣∣Σ−1/2Δ∣∣2
    参数Δ\DeltaΔ:
    迭代时,一旦找到当前的Δ\DeltaΔ,使用Θ⊕Δ\Theta\oplus\DeltaΘ⊕Δ作为下一次迭代值
    ⊕:一般为加法,但是在用四元数做3D旋转和映射时使用相关李群代替\oplus:一般为加法,但是在用四元数做3D旋转和映射时使用相关李群代替⊕:一般为加法,但是在用四元数做3D旋转和映射时使用相关李群代替
    参数AAA:
    A为稀疏块矩阵,对应非线性高斯因子图在Θ\ThetaΘ处的线性化,与原非线性图一样,均在Δ\DeltaΔ处服从高斯分布,
    定义函数:P(Δ)P(\Delta)P(Δ):
    定义函数:P(Δ)=e−logf(Δ)=e−12∣∣AΔ−b∣∣2P(\Delta)=e^{-logf(\Delta)}=e^{- \frac{1}{2}||A\Delta-b||^2}P(Δ)=e−logf(Δ)=e−21​∣∣AΔ−b∣∣2
    AΔ−bA\Delta-bAΔ−b:可以使用Cholesky或者QR分解:
    在dΔ:Δ的微分为0时d\Delta:\Delta的微分为0时dΔ:Δ的微分为0时:
    (1):Choleskyf分解得到ATA=RTRA^TA=R^TRATA=RTR
    (2):y=RΔy=R\Deltay=RΔ
    可以得到正规方程,先求解y,(或使用QR分解正规方程)就可以得到更新Δ\DeltaΔ
    ATAΔ=(1)ATb⟺RTy(1)=AbA^TA\Delta=^{(1)}A^Tb \iff R^Ty^{(1)}=A^bATAΔ=(1)ATb⟺RTy(1)=Ab,

  5. 最后得到GTSAM中的迭代求解方法(用直接方程求解器(Cholesky,QR)求解SLAM的平滑解的一般结构。)

(1):Θ\ThetaΘ:
(2):Θ′=Θ⊕Δ\Theta'=\Theta\oplus\DeltaΘ′=Θ⊕Δ:更新下一步
(3):step3-6步使用信赖区域法迭代求解

1. 添加测量值
2. 添加并初始化变量
3. 在(1)处线性化
4. 使用QR或者Cholesky分解
5. 求解Δ
6. 获得更新的估计值(2)

6.总结
上述迭代方法可以使用局部进行迭代,从而避免了批量处理,然而当加入了新的因子,变量顺序往往不是最优的,ISAM会进行周期性的批量分解,对变量重新排序并进行隐式分解,然而该方法只在批量处理中试探进行,不能得到线性最优解。

贝叶斯树

将状态估计文体直接转换为图模型解决,无需将因子图转换为稀疏矩阵,然后应用稀疏线性代数方法。

  1. 将因子图转换为贝叶斯网络(变量消除)
    伪代码:变量消除法

(1):θj\theta_jθj​
(2):fjoint(θj,Sj)=Πifi(ΘI),(Θi:θj相关函数节点)f_{joint}(\theta_j,S_j)=\Pi_if_i(\Theta_I),(\Theta_i:\theta_j相关函数节点)fjoint​(θj​,Sj​)=Πi​fi​(ΘI​),(Θi​:θj​相关函数节点)
(3):fjoint(θj,Sj)=P(θj∣Sj)fnew(Sj)f_{joint}(\theta_j,S_j)=P(\theta_j|S_j)f_{new}(S_j)fjoint​(θj​,Sj​)=P(θj​∣Sj​)fnew​(Sj​)

1.移除所有相邻与(1)相邻的函数节点,定义Sj,所有移除函数节点相关因子节点,除了(1)
2.得到联合概率密度矩阵(2)
3.使用链式规则,条件概率密度(3),

消除顺序见下图
原始函数节点:f(x1),f(x1,x2),f(x2,x3),,f(l1,l1),f(l1,x2),f(l2,x3)原始函数节点:f(x_1),f(x_1,x_2),f(x_2,x_3),,f(l_1,l_1),f(l_1,x_2),f(l_2,x_3)原始函数节点:f(x1​),f(x1​,x2​),f(x2​,x3​),,f(l1​,l1​),f(l1​,x2​),f(l2​,x3​)
原始因子节点:f(x1),f(x2),f(x2),f(l1),f(l2)原始因子节点:f(x_1),f(x_2),f(x_2),f(l_1),f(l_2)原始因子节点:f(x1​),f(x2​),f(x2​),f(l1​),f(l2​)
消除顺序l1−>l2−>x1−>x2−>x3a−>b−>c−>d−>el_1->l_2->x_1->x_2->x_3\\ a->b->c->d->el1​−>l2​−>x1​−>x2​−>x3​a−>b−>c−>d−>e
结果为:I
l1:fjoint(l1,x1,x2)=P(l1∣x1,x2)P(x1,x2)l_1:f_{joint}(l_1,x_1,x_2)=P(l_1|x_1,x_2)P(x_1,x_2)l1​:fjoint​(l1​,x1​,x2​)=P(l1​∣x1​,x2​)P(x1​,x2​)
l2:fjoint(l2,x3)=P(l2∣x3)P(x3)l_2:f_{joint}(l_2,x_3)=P(l_2|x_3)P(x_3)l2​:fjoint​(l2​,x3​)=P(l2​∣x3​)P(x3​)
x1:fjoint(x1,x2)=P(x1∣x2)P(x2)x_1:f_{joint}(x_1,x_2)=P(x_1|x_2)P(x_2)x1​:fjoint​(x1​,x2​)=P(x1​∣x2​)P(x2​)
x2:fjoint(x2,x3)=P(x2∣x3)P(x3)x_2:f_{joint}(x_2,x_3)=P(x_2|x_3)P(x_3)x2​:fjoint​(x2​,x3​)=P(x2​∣x3​)P(x3​)
x3:fjoint(x3)x_3:f_{joint}(x_3)x3​:fjoint​(x3​)
2. 高斯消元
上述使用fjoint(θj,Sj)=P(θj∣Sj)fnew(Sj)f_{joint}(\theta_j,S_j)=P(\theta_j|S_j)f_{new}(S_j)fjoint​(θj​,Sj​)=P(θj​∣Sj​)fnew​(Sj​)可以使用Gram-Schmidt或者Householder分解求解,所以变量消除法等价于QR隐式分解
定义高斯联合概率密度为:
Δj∈R,待消除因子节点\Delta_j\in R,待消除因子节点Δj​∈R,待消除因子节点
sj∈Rnj,点集Sj的长度为njs_j\in R^{n_j},点集S_j的长度为n_jsj​∈Rnj​,点集Sj​的长度为nj​
mj:所有测量值中(因子节点)与Δj相连的个数m_j:所有测量值中(因子节点)与\Delta_j相连的个数mj​:所有测量值中(因子节点)与Δj​相连的个数
a∈Rmj,AS∈Rmj×nj,b∈Rmja\in R^{m_j},A_S\in R^{m_j×n_j},b\in R^{m_j}a∈Rmj​,AS​∈Rmj​×nj​,b∈Rmj​
fjoint(Δj,sj)=exp{−12∣∣aΔj+ASsj−b∣∣2}f_{joint}(\Delta_j,s_j)=exp\{-\frac{1}{2}||a\Delta_j+A_Ss_j-b||^2\}fjoint​(Δj​,sj​)=exp{−21​∣∣aΔj​+AS​sj​−b∣∣2}
当给定点集sjs_jsj​时,可以得到条件概率密度:
a†(伪逆)=(aTa)−1aTa^†(伪逆)=(a^Ta)^{-1}a^Ta†(伪逆)=(aTa)−1aT
r=a†ASr=a^†A_Sr=a†AS​
d=a†bd=a^†bd=a†b
P(Δj∣sj)=exp{−12(Δj+rsj−d)2}P(\Delta_j|s_j)=exp\{-\frac{1}{2}(\Delta_j+rs_j-d)^2\}P(Δj​∣sj​)=exp{−21​(Δj​+rsj​−d)2}
得到的边缘密度:
A′=As−a∗rA'=A_s-a*rA′=As​−a∗r
b′=b−a∗db'=b-a*db′=b−a∗d
fnew(Sj)=exp(−12∣∣A′sj−b′∣∣)f_{new}(S_j)=exp(-\frac{1}{2}||A's_j-b'||)fnew​(Sj​)=exp(−21​∣∣A′sj​−b′∣∣)
-向量rrr,和表量d,对应着贝叶斯网络的一个联合条件概率密度和平方根信息矩阵的单行,因次变量消除法的到的贝叶斯网络等价于变量消除的到的平方根信息矩阵。
-最后就变成了一个最小二乘问题:
–第一步:计算所有从树叶到树根的Δ∗定义所有函数\Delta *定义所有函数Δ∗定义所有函数(在构造贝叶斯过程中完程)
–第二步:在从上到下一次性检索所有最优解,,得到这些解构成的Δ\DeltaΔ:
(通过P(Δj∣sj)P(\Delta_j|s_j)P(Δj​∣sj​),求解每一个Δj\Delta_jΔj​)
Δj:在稀疏线性代数称之为反置换\Delta_j:在稀疏线性代数称之为反置换Δj​:在稀疏线性代数称之为反置换
Δj=d−rsj\Delta_j=d-rs_jΔj​=d−rsj​
3. 创建贝叶斯树
-由贝叶斯网络消元导出,以便可以更好的进行迭代和边缘化
-贝叶斯树是有向的,使用因子概率密度保存
-定义条件函数(联合概率密度拆分):
Ck:团,两点之间有边点的集合C_k:团,两点之间有边点的集合Ck​:团,两点之间有边点的集合
Πk:Ck的父团\Pi_k:C_k的父团Πk​:Ck​的父团
Sk=Ck∩ΠkS_k=C_k\cap \Pi_kSk​=Ck​∩Πk​
-定义联合概率密度为:
Θi:θj相关函数节点\Theta_i:\theta_j相关函数节点Θi​:θj​相关函数节点
P(Θ)=ΠkP(Fk∣Sk)P(\Theta)=\Pi_kP(F_k|S_k)P(Θ)=Πk​P(Fk​∣Sk​)
-根节点的FrF_rFr​为空,容易求解
-因为Sk总是ΠkS_k总是 \Pi_kSk​总是Πk​的点集,隐私有向边在图中的定义与贝叶斯相同,具有相同的条件概率函数。
-将贝叶斯网络转换为贝叶斯树的步骤(伪代码):

#这里我们已经将因子图转换为贝叶斯网络,使用贝叶斯网络构造,消除的顺序与因子图变为贝叶斯相反
对于每一个贝叶斯网络的条件函数,使用反向消元顺序进行转换
if no parent(S_j={})从包含根节点θj的团Fr开始
else找到父团Cp,将第一个被消元的Sj作为条件变量if 如果父节点Cp中Fp和Sp的并集,等于分解节点S_j的条件变量将条件变量插入团Cpelse创建一个新的团C'作为Cp的子团

已知:
l1:fjoint(l1,x1,x2)=P(l1∣x1,x2)P(x1,x2)l_1:f_{joint}(l_1,x_1,x_2)=P(l_1|x_1,x_2)P(x_1,x_2)l1​:fjoint​(l1​,x1​,x2​)=P(l1​∣x1​,x2​)P(x1​,x2​)
l2:fjoint(l2,x3)=P(l2∣x3)P(x3)l_2:f_{joint}(l_2,x_3)=P(l_2|x_3)P(x_3)l2​:fjoint​(l2​,x3​)=P(l2​∣x3​)P(x3​)
x1:fjoint(x1,x2)=P(x1∣x2)P(x2)x_1:f_{joint}(x_1,x_2)=P(x_1|x_2)P(x_2)x1​:fjoint​(x1​,x2​)=P(x1​∣x2​)P(x2​)
x2:fjoint(x2,x3)=P(x2∣x3)P(x3)x_2:f_{joint}(x_2,x_3)=P(x_2|x_3)P(x_3)x2​:fjoint​(x2​,x3​)=P(x2​∣x3​)P(x3​)
x3:fjoint(x3)x_3:f_{joint}(x_3)x3​:fjoint​(x3​)
ex:

step:1,x3,x3:fjoint(x3)x_3, x_3:f_{joint}(x_3)x3​,x3​:fjoint​(x3​)
S1={},找到包含x3的子团Fr(没有创建)S_1=\{\},找到包含x_3的子团F_r(没有创建)S1​={},找到包含x3​的子团Fr​(没有创建)
step:2 ,x2:fjoint(x2,x3)=P(x2∣x3)P(x3)x_2:f_{joint}(x_2,x_3)=P(x_2|x_3)P(x_3)x2​:fjoint​(x2​,x3​)=P(x2​∣x3​)P(x3​)
P(x3),S1={},找到包含x3的子团FrP(x_3),S_1=\{\},找到包含x_3的子团F_rP(x3​),S1​={},找到包含x3​的子团Fr​
P(x2∣x3),S2=x3,F2=x2,Cp=x3,Cp=F2,将S2,插入团Cp=x2,x3P(x_2|x_3),S_2=x_3,F_2=x_2,C_p=x_3,C_p=F_2,将S_2,插入团Cp=x_2,x_3P(x2​∣x3​),S2​=x3​,F2​=x2​,Cp​=x3​,Cp​=F2​,将S2​,插入团Cp=x2​,x3​
step:3 ,x1:fjoint(x1,x2)=P(x1∣x2)P(x2)x_1:f_{joint}(x_1,x_2)=P(x_1|x_2)P(x_2)x1​:fjoint​(x1​,x2​)=P(x1​∣x2​)P(x2​)
P(x2),S1={},找到包含x2的子团FrP(x_2),S_1=\{\},找到包含x_2的子团F_rP(x2​),S1​={},找到包含x2​的子团Fr​
P(x1∣x2),S2=x2,F2=x1,Cp=x2,x3,Cp≠F2,Cp=x1:x2,作为Cp子团插入P(x_1|x_2),S_2=x_2,F_2=x_1,C_p=x_2,x_3,C_p\neq F_2,Cp=x_1:x_2,作为C_p子团插入P(x1​∣x2​),S2​=x2​,F2​=x1​,Cp​=x2​,x3​,Cp​​=F2​,Cp=x1​:x2​,作为Cp​子团插入
step:4 ,l2:fjoint(l2,x3)=P(l2∣x3)P(x3)l_2:f_{joint}(l_2,x_3)=P(l_2|x_3)P(x_3)l2​:fjoint​(l2​,x3​)=P(l2​∣x3​)P(x3​)
P(x3),S1={},找到包含x3的子团FrP(x_3),S_1=\{\},找到包含x_3的子团F_rP(x3​),S1​={},找到包含x3​的子团Fr​
P(l2∣x3),S2=x3,F2=l2,Cp=x2,x3,Cp≠F2,Cp=l2:x2,作为Cp子团插入P(l_2|x_3),S_2=x_3,F_2=l_2,C_p=x_2,x_3,C_p\neq F_2,Cp=l_2:x_2,作为C_p子团插入P(l2​∣x3​),S2​=x3​,F2​=l2​,Cp​=x2​,x3​,Cp​​=F2​,Cp=l2​:x2​,作为Cp​子团插入
step:5 ,l1:fjoint(l1,x1,x2)=P(l1∣x1,x2)P(x1,x2)l_1:f_{joint}(l_1,x_1,x_2)=P(l_1|x_1,x_2)P(x_1,x_2)l1​:fjoint​(l1​,x1​,x2​)=P(l1​∣x1​,x2​)P(x1​,x2​)
P(x1,x2),S1={},找到包含x1,x2的子团FrP(x_1,x_2),S_1=\{\},找到包含x_1,x_2的子团F_rP(x1​,x2​),S1​={},找到包含x1​,x2​的子团Fr​
P(l2∣x1,x2),S2=l2,F2=x1,x2;将x1,x2前挪,Cp=x1,x2,Cp=F2,l1插入子团CpP(l_2|x_1,x_2),S_2=l_2,F_2=x_1,x_2;将x_1,x_2前挪,C_p=x_1,x_2,C_p= F_2,l_1插入子团C_pP(l2​∣x1​,x2​),S2​=l2​,F2​=x1​,x2​;将x1​,x2​前挪,Cp​=x1​,x2​,Cp​=F2​,l1​插入子团Cp​

  1. 增量推理
    F:贝叶斯树平方根信息矩阵F:贝叶斯树平方根信息矩阵F:贝叶斯树平方根信息矩阵
    已有一个子团f′(xj,xj′)f'(x_j,x'_j)f′(xj​,xj′​),当一个新的测量值添加子团,只有xj,xj′x_j,x'_jxj​,xj′​分别与其root的的路径受到影响,其他不包含xj,xj′x_j,x'_jxj​,xj′​子团不受影响,将受影响的贝叶斯树转换为因子图,再将新值添加进去,这里采用一种新的次序进行消元:

x1,x2,x3:位置姿态x_1,x_2,x_3:位置姿态x1​,x2​,x3​:位置姿态
l1,l2,路标观测点l_1,l_2,路标观测点l1​,l2​,路标观测点
a:原始问题的因子图,A:因子图的雅可比矩阵关系
b:因子图消元得到的贝叶斯网络 R:因子图消元得到的平方根信息矩阵,消元顺序l1,...,ln,x1,...,xnl_1,...,l_n,x_1,...,x_nl1​,...,ln​,x1​,...,xn​
c:贝叶斯树与平方根信息矩阵R的关系,(贝叶斯树将信息矩阵R描述为描述为团结构的贝叶斯结构)

//更新
输入:F:贝叶斯树 f':新的线性因子
输出:F':更新后的贝叶斯树
1.移除顶部的贝叶斯数并将其重构为因子图
(1)对于每一个受新因素影响的变量,去掉相应的团和其到root的贝叶斯树。
(2)使用F(orgh) 存储剩下的孤立子树
2.添加新的因子到f'到第一步得到的因子图
3.将因子图顺序重构
4.消除变量(将因子图转换为贝叶斯网络),重新创建新的贝叶斯树(构造贝叶斯树的方法)
5.F(orgh) 插入重构的网络

实例

a:原始贝叶斯树
b:装化为因子图,x1,x2x_1,x_2x1​,x2​蓝线表示添加了一个回环,l2l_2l2​没有受到影响
c:转换为贝叶斯网络
d更新后的贝叶斯树
已知:
l1:fjoint(l1,x1,x2)=P(l1∣x1,x2)P(x1,x2)l_1:f_{joint}(l_1,x_1,x_2)=P(l_1|x_1,x_2)P(x_1,x_2)l1​:fjoint​(l1​,x1​,x2​)=P(l1​∣x1​,x2​)P(x1​,x2​)
x1:fjoint(x1,x2,x3)=P(x1∣x2,x3)P(x2,x3)x_1:f_{joint}(x_1,x_2,x_3)=P(x_1|x_2,x_3)P(x_2,x_3)x1​:fjoint​(x1​,x2​,x3​)=P(x1​∣x2​,x3​)P(x2​,x3​)
x2:fjoint(x2,x3)=P(x2∣x3)P(x3)x_2:f_{joint}(x_2,x_3)=P(x_2|x_3)P(x_3)x2​:fjoint​(x2​,x3​)=P(x2​∣x3​)P(x3​)
x3:fjoint(x3)x_3:f_{joint}(x_3)x3​:fjoint​(x3​)
step:1,x3,x3:fjoint(x3)x_3, x_3:f_{joint}(x_3)x3​,x3​:fjoint​(x3​)
S1={},找到包含x3的子团Fr(没有创建)S_1=\{\},找到包含x_3的子团F_r(没有创建)S1​={},找到包含x3​的子团Fr​(没有创建)
step:2 ,x2:fjoint(x2,x3)=P(x2∣x3)P(x3)x_2:f_{joint}(x_2,x_3)=P(x_2|x_3)P(x_3)x2​:fjoint​(x2​,x3​)=P(x2​∣x3​)P(x3​)
P(x3),S1={},找到包含x3的子团FrP(x_3),S_1=\{\},找到包含x_3的子团F_rP(x3​),S1​={},找到包含x3​的子团Fr​
P(x2∣x3),S2=x3,F2=x2,Cp=x3,Cp=F2,将S2,插入团Cp=x2,x3P(x_2|x_3),S_2=x_3,F_2=x_2,C_p=x_3,C_p=F_2,将S_2,插入团Cp=x_2,x_3P(x2​∣x3​),S2​=x3​,F2​=x2​,Cp​=x3​,Cp​=F2​,将S2​,插入团Cp=x2​,x3​
step:3 ,x1:fjoint(x1,x2,x3)=P(x1∣x2,x3)P(x2,x3)x_1:f_{joint}(x_1,x_2,x_3)=P(x_1|x_2,x_3)P(x_2,x_3)x1​:fjoint​(x1​,x2​,x3​)=P(x1​∣x2​,x3​)P(x2​,x3​)
P(x2,x3),S1={},找到包含x2,x3的子团FrP(x_2,x_3),S_1=\{\},找到包含x_2,x_3的子团F_rP(x2​,x3​),S1​={},找到包含x2​,x3​的子团Fr​
P(x1∣x2,x3),S2=x2,x3,F2=x1,Cp=x2,x3,Cp=F2插入子团Cp=x1,x2,x3P(x_1|x_2,x_3),S_2=x_2,x_3,F_2=x_1,C_p=x_2,x_3,C_p= F_2插入子团C_p=x_1,x_2,x_3P(x1​∣x2​,x3​),S2​=x2​,x3​,F2​=x1​,Cp​=x2​,x3​,Cp​=F2​插入子团Cp​=x1​,x2​,x3​
step:4 ,l2:fjoint(l1,x1,x2)=P(l1∣x1,x2)P(x1,x2)l_2:f_{joint}(l_1,x_1,x_2)=P(l_1|x_1,x_2)P(x_1,x_2)l2​:fjoint​(l1​,x1​,x2​)=P(l1​∣x1​,x2​)P(x1​,x2​)
P(x1,x2),S1=x1,x2,找到包含x1,x2的子团FrP(x_1,x_2),S_1=x_1,x_2,找到包含x_1,x_2的子团F_rP(x1​,x2​),S1​=x1​,x2​,找到包含x1​,x2​的子团Fr​
P(l1∣x1,x2),S2=x1,x2,F2=l1,Cp=x1,x2,x3,Cp≠F2,Cp=l1:x1,x2作为Cp子团插入P(l_1|x_1,x_2),S_2=x_1,x_2,F_2=l_1,C_p=x_1,x_2,x_3,C_p\neq F_2,Cp=l_1:x_1,x_2作为C_p子团插入P(l1​∣x1​,x2​),S2​=x1​,x2​,F2​=l1​,Cp​=x1​,x2​,x3​,Cp​​=F2​,Cp=l1​:x1​,x2​作为Cp​子团插入

  1. 增量顺序(COLAMD)列最近最小排序
    -选择一种好的变量顺序可以加速稀疏矩阵求解诶,在贝叶斯树中是一样的。
    -贝叶斯树中团的规模越大,填充时计算速度越慢
    -子图、生成子图、导出子图
    -环
    -本文所有贝叶斯网络均匀弦图,既有完美的消除序列。
    -寻找最优变量顺序时及其困难的(NP问题),可以使用列最小近似角度求解(column approximate minimum degree,COLMAD)最优顺序
    -在进行增量推理时,变量可以在每次更新、消除时重新排序(图模型况阶),对于贝叶斯树只需要找到其中受影响的部分,对齐进行优化排序,gtsam提供了一增量排序方法。
  2. 理解排序对后续更新的影响
    对于一个循环实例(上图),可以使用两种方法进行切割:
    -a:垂直切分,不包括回环
    -b:水平切分 包括回环
    两者实际上求解是相等,然而再增量模型中,a没有包含最新变量t6t6t6,增量更新时,t6t6t6会在树模型的更深处,然而对于b,只需要更新根(包含最新的变量),显然b更加高效。相应的问题在应用COLAMD时叶会出现,在SLAM中,我们希望一系列新的测量值与最近的历史相连(比如,仍在传感器范围内的路标、相邻位姿),其代价表示为更新中受影响的树大小,只要更新的值距离根足够近,而COLAMD没有考虑到这点,文中提出了带约束的COLAMD法:强制最近更新的变量排在最后面,并且使用COLAMD。
    下图为效果
    a,b,为使用曼哈顿数据进行测试,中路线越红表示计算量越大

ISAM2

-假设噪声为高斯噪声,该算法使用一系列的非线性因子用来估计变量(位置、路标)随时间变换的增量。
-在上文中已经解决了贝叶斯树如何更新,ISAM2解决之后的问题:如何对非线性因子进行线性化,为了保证高效性,只在改变的变量部分进行

  1. 平滑再线性化(Fluid Relinearization)
    跟踪每个able的线性化点的有效性,并且仅在需要时重新线性化。对于选择重新线性化的变量,必须从贝叶斯树中删除所有相关信息,并用重新线性化相应的原始非线性因子来代替。对于被重新消除的团,我们还必须考虑从其子树中传递的任何边缘因子。在消除过程中缓存这些边缘因子,允许从树的中间重新开始消除过程,而不必重新消除整个系统。
    步骤如下:
    -通过给定阈值β:估计值与线性点的偏差\beta:估计值与线性点的偏差β:估计值与线性点的偏差
    -需要考虑不同变量的单位,Manhattan dataset 中β=0.1\beta=0.1β=0.1
    (1):Θ\ThetaΘ
    (2):β:J={Δj∈Δ∣Δj>β}\beta:J=\{\Delta_j \in \Delta|\Delta_j>\beta\}β:J={Δj​∈Δ∣Δj​>β}
    (3):ΘJ=ΘJ⊕ΔJ\Theta_J=\Theta_J\oplus\Delta_JΘJ​=ΘJ​⊕ΔJ​:
原始版本:平滑再线性化
输入:线性化的点(1),估计值与线性点的偏差:∆
输出:更新后的(1),标记好的 团M
1.将所有高于阈值的变量标记为∆:β:(2)
2.更新所有被标记的变量:(3)
3.标记是团M,所有涉及到变量(1)的团和祖先团

更新所有受到影响的团的步骤,与之前更新贝叶斯树不同,也包括相性平滑区域,总体上

输入:贝叶斯树F,非线性因子f1,受影响的变量f2
输出:更新后的保额也似数F'
1.移除顶部的贝叶斯数:
(a):移除所有与f2相关的团,移除所有父团到根团的
(b):存储其余不相关的子团 F(orph)
2.重新线性化所有需要创建的顶部子团
3.将F(orph)内包含的线性因子添加缓存
4.带约束的CLOMAD重新排序
5.对因子消元,并创建贝叶斯树
6.将F(orph)插入新的贝叶斯树

下图β\betaβ选取,
-上边β\betaβ对精度的影响爱嗯,
-下边β\betaβ对计算成本的影响爱,大于峰值超出曲线步分都会重新线性化$

  1. 部分状态更新(Partial State Updates)
    -求得精确的解,不许要对所有相关变量求解,虽然更新贝叶斯时只影响顶部的团,但是实际变量的估计值发生变化仍会传播到子树。但是顶部的影响往往是有限的,当没有大的回环存在时,新的测量值只影响局部值,更远的部分保持不变(将整个贝叶斯树比喻为一个房子,在一个房间内进行的测量通常不会影响先前获得的其他房间的估计值),因此可以减少计算成本。
    -如何求解只更新实际变化的变量:从树的根节点开始,获取向量Δ(标记所有变化量,用来线性化点Θ)\Delta(标记所有变化量,用来线性化点\Theta)Δ(标记所有变化量,用来线性化点Θ),递归处理所有子团,直到子团中不包含任何∆与变化量超过阈值α\alphaα中的值,

(1)Θ\ThetaΘ

//部分状态变量更新,求解非线性贝叶斯树作为返回值,并更新当前线性化点(1)的差值∆
输入:贝叶斯数F
输出:更新后的∆
从根团开始Cr=Fr
1.if Ck=Fk:Sk计算前置变量Fk的∆k:使用条件概率P(Fk|Sk)
2.对于所有 ∆kj>α:递归处理每一个子团

下图:α对于误差和求解速度影响下图:\alpha对于误差和求解速度影响下图:α对于误差和求解速度影响

3. 算法与复杂度
-总结ISAM2的算法流程如下:
(1):Θ\ThetaΘ
(2):Θ′\Theta'Θ′
(3):F=ϕ空集合,Θ=ϕ,f=ΘF=\phi空集合,\Theta=\phi,f=\ThetaF=ϕ空集合,Θ=ϕ,f=Θ
(4):Θ′=Θ∪Θ′\Theta'=\Theta∪\Theta'Θ′=Θ∪Θ′
(5):Θ=Θ⊕Δ\Theta=\Theta\oplus\DeltaΘ=Θ⊕Δ

输入/输出:贝叶斯树F,非线性因子f,线性化点(),更新∆
输入:新的非线性因子f',新的变量线性点(2)
初始化:(3)
1.添加新的因子:f:=f∪f'
2.初始化新的变量(2)并且有(4)
3.进行平滑再线性化,获取所有标记的M
4.使用F,M,对所有受到影响的因子消元,重新构造贝叶斯树
5.求解对子数影响大的集合∆(向量)
6.估计当前值(5)

与其他算法相比(略)

gtsam 学习十(ISAM2 理论)相关推荐

  1. 图说2016深度学习十大指数级增长

    转自:https://www.52ml.net/21402.html http://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&mid=26519906 ...

  2. 张拳石:深度学习可解释理论的统一体系与去芜存菁 | 青源 Talk 第 14 期

    活动议程 日期:3月17日(周四) 时间 主题 14:30-14:35 开场简介 许志钦 上海交通大学自然科学研究院/数学科学学院长聘教轨副教授,青源会会员 14:35-15:20 深度学习可解释理论 ...

  3. 2017年深度学习十大趋势预测

    2017年深度学习十大趋势预测 本文作者曾经多次预测了技术发展的趋势,最近的一次预测是"2011年软件发展的趋势与预测".10项预言中,准确地命中了6项,比如JavaScript ...

  4. 强化学习(十九) AlphaGo Zero强化学习原理

    在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...

  5. 强化学习(十六) 深度确定性策略梯度(DDPG)

    在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...

  6. 强化学习(十五) A3C

    在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...

  7. NLP:LSTM之父眼中的深度学习十年简史《The 2010s: Our Decade of Deep Learning / Outlook on the 2020s》的参考文献

    NLP:LSTM之父眼中的深度学习十年简史<The 2010s: Our Decade of Deep Learning / Outlook on the 2020s>的参考文献 目录 T ...

  8. 深度学习语义分割理论与实战指南

    本文来自微信公众号[机器学习实验室] 深度学习语义分割理论与实战指南 1 语义分割概述 2 关键技术组件 2.1 编码器与分类网络 2.2 解码器与上采样 2.2.1 双线性插值(Bilinear I ...

  9. 深度学习语义分割理论与实战指南.pdf

    深度学习语义分割理论与实战指南 V1.0 版本已经完成,主要包括语义分割概述.关键技术组件.数据模块.经典分割网络与架构.PyTorch基本实战方法等五个部分. 获取方式: 扫描关注下方公众号回复 语 ...

最新文章

  1. List循环添加对象时遇到问题的解决
  2. MAC如何查看某个端口的占用情况
  3. 将html转换为pptx,javascript – 将html表导出到客户端的ppt?
  4. Python 2.6.2的字节码指令集一览
  5. iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用
  6. 06LaTeX学习系列之---TeXstudio的使用
  7. Linux现在已主导Azure
  8. 屏蔽广告方法(Adblock 插件)
  9. 【微信小程序】问卷调查/答题类小程序实现
  10. 第一章概述-------第一节--1.6 计算机网络的性能
  11. 嵌入式开发<网络调试工具>
  12. C语言练习题:统计 N 个整数中,大于零或小于零的整数个数(数组)
  13. 怎样去识别是否双线主机服务器的方法
  14. c语言 谭浩强第五版第五章习题第17题 乒乓球比赛
  15. BN、CBN、CmBN 的对比与总结
  16. Eclipse + MTJ + WTK
  17. 站立会议_充分利用日常站立会议的两种方法
  18. 基于STM32的Lora无线抄表系统
  19. 基于超螺旋滑模观测器的内置式永磁同步电机ipmsm无位置(速度)传感器控制模型
  20. Microsoft发布新一代主机:Xbox One

热门文章

  1. Python中squeeze函数用法
  2. 利用js加密保护核心功能代码
  3. 图像标签 链接标签
  4. 唯美伤感个性日志推荐:有一种美因距离而产生
  5. Note For Linux By Jes(19)-Linux 备份策略
  6. Linux基本命令---Linux进程管理指令
  7. MySQL 远程连接报“ SQL 执行错误 # 1130.
  8. 基于java的springboot多用户商城(类淘宝京东)系统毕业设计springboot开题报告
  9. 2022世界杯神预测有哪个最神!最后一个富而喜悦到底是谁?
  10. 视频和语音播放(进行中)