7.Ceres官方教程-On Derivatives
Ceres求解器,像所有基于梯度的优化算法一样,依赖于能够评估目标函数及其在其域内任意点的导数。实际上,定义目标函数及其雅可比矩阵是用户在使用Ceres求解器求解优化问题时需要执行的主要任务。正确、高效的雅可比矩阵计算是获得良好性能的关键。
用户可以灵活的从一下三种微分算法中选择:
1.Analytic Derivatives 解析微分算法:用户通过手动或使用Maple或Mathematica等工具,自己计算出导数,并在CostFunction中实现它们。
2.Numeric derivatives 数值微分算法:Ceres用有限差分数值计算导数
3.Automatic Derivatives 自动微分算法:Ceres使用c++模板和操作符重载自动计算解析导数。
应该使用这三种方法中的哪一种(单独或结合使用)取决于情况和用户愿意做出的权衡。不幸的是,数值优化教科书很少详细讨论这些问题,用户只能自己使用设备。
本文的目的是填补这一空白,并在Ceres Solver的上下文中详细描述这三种方法中的每一种,以便用户做出明智的选择。
对于那些没有耐心的人,这里有一些高水平的建议:
1.使用Automatic Derivatives自动微分算法
2.在某些情况下,可能值得使用Analytic Derivatives解析微分算法
3.避免Numeric derivatives数值微分算法。使用它作为最后的手段,主要用于与外部库进行接口。
至于其他的,请继续阅读。
1.Spivak Notation
2.Analytic Derivatives
3.Numeric derivatives
4.Automatic Derivatives
5.Interfacing with Automatic Differentiation