本节主要根据也Ceres官方教程On Derivatives翻译而成
与所有基于梯度的优化算法一样,Ceres Solver也是基于评估域中任意点的目标函数及其导数。事实上,Ceres的核心就是确定目标函数机器雅可比行列式。雅可比行列式求解的正确性和效率是评判算法优劣的关键指标。用户可以灵活的从一下三种微分算法中选择:
- Analytic Derivatives 解析微分算法:用户自己手动或者借助Maple湖泊这Mathematica之类的工具求解导数。然后写到
CostFunction
里面。- Numeric Derivatives 数值微分算法:Ceres用有限差分数值计算导数。
- Automatic Dericatives 自动微分算法:Ceres用C++模板和操作符重载自动分析计算微分。
应该使用这三种方法中的哪一种(单独或组合)取决于用户愿意做出的情况和权衡。官方给出了一个简单粗暴的建议:
优先选用自动微分算法,某些情况可能需要用到解析微分算法,尽量避免数值微分算法。
Spivak标记
为了简化阅读和推理,引入Spivak标记。
对于单自变量函数 f f ,
表示它在 a a 处的函数值。
表示它的一阶导数,那么 Df(a) D f ( a ) 就是函数在 a a 处的一阶导数。即,
Dkf D k f 表示 f