可微性
要训练一个神经网络,你需要梯度从损失一直流回到参数。但经典SLAM中充满了会阻断梯度的操作:RANSAC进行离散的假设选择(argmax),特征点检测使用非极大值抑制和top-选择,而像光束法平差这样的优化求解器是迭代过程,而非闭式函数。可微性研究要问的是:我们如何让这些经典几何算法变得可微,从而使网络能够通过它们进行训练——优化的目标是最终的位姿或地图质量,而不是某个代理标签?
为何经典SLAM会阻断梯度
考虑标准的重定位流程:一个网络预测2D-3D对应关系,RANSAC采样最小集合,PnP求解每个假设,内点计数为它们打分,argmax选出获胜的假设。其中三个步骤是不可微的:
- 硬选择——假设集合上的argmax几乎处处梯度为零(在决策边界处也没有梯度)。
- 硬计数——内点判定 是一个阶跃函数;在其有定义的地方导数为零。
- 迭代求解器——高斯-牛顿法或列文伯格-马夸特法不是一个单一函数,而是一个迭代次数会变化的循环;朴素地看,它没有闭式雅可比矩阵。
如果链条中的任何一环阻断了梯度,那么该环之前的所有部分都必须用代理损失(模仿真值深度、模仿手工标注的匹配)来训练,而这些代理损失可能与系统本应完成的目标并不一致。
主要技术
每种技术都对应一个标志性系统,便于你具体地研究它们:
- 用软选择代替argmax(DSAC):用概率化选择代替RANSAC的硬性假设选择。若假设 以概率 被选中,则期望任务损失 对网络参数是可微的,即便采样单个假设这一操作本身不可微。硬性内点计数同样被替换为一个平滑替代(例如残差的sigmoid函数),使得假设分数本身也携带梯度。
- 展开求解器(BA-Net、DROID-SLAM):一次高斯-牛顿步 仅仅是矩阵乘积、一次线性求解和一次残差计算——全部可微。因此可以将固定次数的迭代展开进计算图并进行反向传播。BA-Net在学习到的特征图上展开光束法平差;DROID-SLAM在一个循环更新回路内应用同样的思想,在每次迭代中重新线性化一个稠密BA层。
- 隐式微分(Theseus):与在每次求解器迭代上进行反向传播不同(这种做法很耗内存,因为必须存储所有中间状态),该方法对收敛解 处的最优性条件求导。由 ,隐函数定理给出 因此梯度只依赖于解本身,而不依赖于到达该解所走的路径。像Theseus这样的库以这种方式(与展开法及截断变体一起)提供可微的非线性最小二乘求解。
- 面向流形的自动微分(LieTorch):位姿存在于 上,而非 ;朴素地对矩阵元素做自动微分会产生偏离流形的梯度。LieTorch直接在李群上实现自动微分,使梯度步在局部切空间中进行,——这与经典状态估计所用的基于收缩映射(retraction)的参数化方式相同。
- 强化学习式变通方案(DISK):当某一步骤真的无法被松弛时(例如离散的特征点选择),将其视为一个随机策略,并用得分函数(策略梯度)估计器优化期望回报,这正是DISK在特征检测与匹配中所做的。
收益:任务级训练
所有这些机制的意义在于任务级训练:不是教网络去模仿真值深度或手工标注的匹配,而是训练它使得在RANSAC/PnP/BA完成其工作之后,最终的相机位姿是准确的。训练目标和系统目标变成了同一件事。这种一致性正是为什么可微几何系统(从DSAC到ACE的重定位路线、DROID-SLAM)比像PoseNet那样朴素的端到端位姿回归泛化得更好——几何仍由一个精确的求解器强制保证;网络只学习那些真正能从学习中获益的部分。
第二个收益是自监督:有了可微的投影和求解器,通过已知相机位姿的重投影损失就可以完全取代3D真值——这正是DSAC++引入的技巧,也是ACE家族用于分钟级建图所依赖的方法。
常见陷阱
- 内存与计算量:展开的求解器需要为反向传播存储每一个中间迭代结果;较深的展开会耗尽GPU内存。隐式微分或截断反向传播是标准的规避方式。
- 训练/测试不匹配:训练时使用的软松弛(软argmax、软内点计数)与推理时使用的硬操作不同;如果差距过大,训练出的网络就是为了错误的流程而优化的。向硬操作退火(温度退火)可以缓解这一问题。
- 梯度病态:通过长迭代过程的梯度可能消失或爆炸,而且在训练早期,来自严重错误假设的梯度可能占据主导——DSAC式训练对初始化非常敏感,这也是后续方法加入预训练和课程学习的原因。
- 局部极小值仍然是局部极小值:让求解器可微并不会使其损失面变凸;网络可以学会利用求解器的收敛域,但测试时糟糕的初始化仍会像经典几何方法一样失败。
这一领域中的很多工程工作正是围绕着解决这些问题。
对SLAM的意义
可微性是Level 5两个半区之间的桥梁:它使得学习式前端能够与几何后端一起在闭环中训练,从而产生既保留经典优化的严谨性、又能学习其周围一切的混合系统。理解软选择、求解器展开和李群自动微分,能让你把从DSAC到DROID-SLAM的论文都读成同一个思想的变体。