理解信赖域最好的途径是与线(一维)搜索对比,理解其区别.在ceres中,就提供了两种求解器,一种是基于信赖域的,一种是基于线搜索.
信赖域与线(一维)搜索之间的区别,可以用以下例子来理解;故事是这样的,永强头一天和王大拿约定第二天晚上一起喝酒,王大拿在山庄北边找一个店等永强,但是当时并没有说具体在哪家店.第二天永强从象牙山庄西边出发,去找王大拿.他有两种策略:一种是一维搜索,一种是信赖域.如果采用一维搜索的方案,永强已经确定了王大拿的方向(西北边),那他只要往那个方向走即可.一边走一边喊王大拿的名字,就可以确定走的距离,最终即可找到王大拿.如果采用信赖域的方案,永强首先划定一个10米的圆圈,在这个圈中找到里王大拿最近的地方(可以通过观察周边情况确定,如是否能看到周围有酒馆,是否是王大拿经常出没的地方等),然后不断画圈,最终把王大拿所在的酒馆找出来.
一,线搜索方法
在线搜索方法中, δ x = a k p k \delta x = a_kp_k δx=akpk 其中, a k a_k ak是一个数值,表示步长, p k p_k pk表示与状态量相同维度的向量.一般来说,首先要确定方向 p k = − ( B k ) − 1 ▽ f k p_k=-(B_k)^{-1}\triangledown f_k pk=−(Bk)−1▽fk. 根据 B k B_k Bk的不同, 线搜索分为如下三类
- B k = I B_k = I Bk=I 时,即为原始最陡梯度下降法
- B k = ▽ 2 f k B_k = \triangledown^2 f_k Bk=▽2fk, 即为牛顿法(若二阶导求不出来,用 ▽ f k T ▽ f k \triangledown f_k^T\triangledown f_k ▽fkT▽fk来近似,则为高斯牛顿法)
- B k B_k Bk为对称正定矩阵,为拟牛顿法.
在确定完方向之后,如即采用最陡梯度下降法,
p
k
=
−
▽
f
k
p_k = -\triangledown f_k
pk=−▽fk. 下一步就是确定求步长
a
k
a_k
ak. 当然我们希望目标函数:
M
i
n
f
(
x
+
δ
x
)
=
M
i
n
f
(
x
−
a
k
▽
f
k
)
Min f(x+\delta x) =Min f(x - a_k\triangledown f_k)
Minf(x+δx)=Minf(x−ak▽fk)
当目标函数f为二阶时,上式是一个一元二次方程,可以求得其精确解;如
f
(
x
)
=
1
/
2
x
2
f(x) = 1/2x^2
f(x)=1/2x2, 有:
p
k
=
−
x
,
a
k
=
1
p_k = - x, a_k = 1
pk=−x,ak=1.
当然,我们会遇到目标函数不是二阶的时候,那我们很有可能求不出步长的精确解,不过没关系,优秀的革命前辈总结了四个经验性条件:Armijo条件,Curvature条件,Wolfe条件,Goldstein条件.符合这四个条件的步长,会是一个区间.在该区间中进行逐步二分,最终收敛.
二,信赖域方法
信赖域方法与线搜索方法的出发点不同,信赖域方法的得名即反应了其初衷:在一个可信赖的步长范围内,用另外一个函数去代替原始目标函数,求得在该范围内的一个极小值.我们首先以摄影测量中应用及其广泛的列文伯格马夸尔特(LM)算法给出样例,然后再给出标准信赖域方法的步骤.
在LM中,目标函数是
f
(
x
)
f(x)
f(x), 在信赖域
∣
δ
x
∣
<
Δ
k
|\delta x|<\Delta _k
∣δx∣<Δk内,可以以其二阶泰勒展开作为其近似:
m
(
δ
x
)
=
f
(
x
)
+
f
′
δ
x
+
1
/
2
δ
x
T
f
′
′
δ
x
m(\delta x) = f(x) + f'\delta x + 1/2\delta x^Tf''\delta x
m(δx)=f(x)+f′δx+1/2δxTf′′δx. 那么问题变为:
M
i
n
m
(
δ
x
)
=
f
(
x
)
+
f
′
δ
x
+
1
/
2
δ
x
T
f
′
′
δ
x
=
f
(
x
)
+
g
T
δ
x
+
1
/
2
δ
x
T
B
δ
x
Min m(\delta x) = f(x) + f'\delta x + 1/2\delta x^Tf''\delta x = f(x) + g^T \delta x + 1/2\delta x^TB\delta x
Minm(δx)=f(x)+f′δx+1/2δxTf′′δx=f(x)+gTδx+1/2δxTBδx
s
.
t
.
∣
δ
x
∣
<
Δ
k
s.t. |\delta x|<\Delta _k
s.t.∣δx∣<Δk
可以看出,不管目标函数是几次,其二阶泰勒展开均为二次,根据KKT条件,
m
(
δ
x
)
m(\delta x)
m(δx)有最优解,存在一个
λ
\lambda
λ, 满足:
- B + λ I = − g B + \lambda I = -g B+λI=−g
- λ ( Δ − ∣ ∣ δ x ∣ ∣ ) = 0 \lambda (\Delta - ||\delta x||) = 0 λ(Δ−∣∣δx∣∣)=0
- B + λ I B + \lambda I B+λI正定.
B = J T J B = J^TJ B=JTJ, 则有: δ x = − ( J T J + λ I ) − 1 J T b \delta x = -(J^TJ + \lambda I)^{-1}J^Tb δx=−(JTJ+λI)−1JTb
参考:
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