理解信赖域最好的途径是与线(一维)搜索对比,理解其区别.在ceres中,就提供了两种求解器,一种是基于信赖域的,一种是基于线搜索.
信赖域与线(一维)搜索之间的区别,可以用以下例子来理解;故事是这样的,永强头一天和王大拿约定第二天晚上一起喝酒,王大拿在山庄北边找一个店等永强,但是当时并没有说具体在哪家店.第二天永强从象牙山庄西边出发,去找王大拿.他有两种策略:一种是一维搜索,一种是信赖域.如果采用一维搜索的方案,永强已经确定了王大拿的方向(西北边),那他只要往那个方向走即可.一边走一边喊王大拿的名字,就可以确定走的距离,最终即可找到王大拿.如果采用信赖域的方案,永强首先划定一个10米的圆圈,在这个圈中找到里王大拿最近的地方(可以通过观察周边情况确定,如是否能看到周围有酒馆,是否是王大拿经常出没的地方等),然后不断画圈,最终把王大拿所在的酒馆找出来.
一,线搜索方法
在线搜索方法中, 其中, 是一个数值,表示步长, 表示与状态量相同维度的向量.一般来说,首先要确定方向 . 根据 的不同, 线搜索分为如下三类
- 时,即为原始最陡梯度下降法
- , 即为牛顿法(若二阶导求不出来,用 来近似,则为高斯牛顿法)
- 为对称正定矩阵,为拟牛顿法.
在确定完方向之后,如即采用最陡梯度下降法,
. 下一步就是确定求步长
. 当然我们希望目标函数:
当目标函数f为二阶时,上式是一个一元二次方程,可以求得其精确解;如
, 有:
.
当然,我们会遇到目标函数不是二阶的时候,那我们很有可能求不出步长的精确解,不过没关系,优秀的革命前辈总结了四个经验性条件:Armijo条件,Curvature条件,Wolfe条件,Goldstein条件.符合这四个条件的步长,会是一个区间.在该区间中进行逐步二分,最终收敛.
二,信赖域方法
信赖域方法与线搜索方法的出发点不同,信赖域方法的得名即反应了其初衷:在一个可信赖的步长范围内,用另外一个函数去代替原始目标函数,求得在该范围内的一个极小值.我们首先以摄影测量中应用及其广泛的列文伯格马夸尔特(LM)算法给出样例,然后再给出标准信赖域方法的步骤.
在LM中,目标函数是
, 在信赖域
内,可以以其二阶泰勒展开作为其近似:
. 那么问题变为:
可以看出,不管目标函数是几次,其二阶泰勒展开均为二次,根据KKT条件,
有最优解,存在一个
, 满足:
- 正定.
, 则有:
参考:
1:https://www.codelast.com/原创信赖域trust-region算法是怎么一回事/
2:https://blog.csdn.net/fangqingan_java/article/details/46405669
3:https://www.processon.com/view/link/5cffa80ce4b0f1ac03704d14 线搜索方法
4:https://blog.csdn.net/fangqingan_java/article/details/46405669
5: https://blog.csdn.net/frozenspring/article/details/78898308