直线搜索/一维搜索

    • 直线搜索
    • 搜索区间
    • 直线搜索方法
      • 黄金分割法
      • 抛物线插值法

在讲解最速下降法的博客中,讲到了使用直线搜索的方法来求解 xk+1 (也就是求解步长因子 tk ),但是并没有讲解什么叫做直线搜索,现在对直线搜索进行补充说明。

直线搜索

定义1:对于问题

minϕ(t)
其中 ϕ:R1R1 。求解该一元函数极小值问题的 迭代方法我们称为 直线搜索一维搜索
直线搜索是求解一元函数极小值问题的迭代方法,这种方法适用于任何函数,与之相对应的是微积分方法。对于能够求解出导数的函数 ϕ(t) ,我们只需要求解出他的导数,然后令 ϕ(t)=0 即可。对于这种可以求出导数的情况下相应的求解方法会简单一点,但是实际问题中可能更多的使用直线搜索方法。
直线搜索方法求一元函数极小值问题,一般可以分为两类,分别是区间收缩法和函数逼近法。

搜索区间

定义2:(单谷函数) ϕ:LR1R1 t ϕ(t) L 上的全局极小点。如果对于 L 上的任意两点 t1 t2 ,且 t1<t2 ,都有

t2tϕ(t1)>ϕ(t2)
t1t,ϕ(t1)<ϕ(t2)
那么乘 ϕ(t) 是区间 L 上的 单谷函数

定义3:(搜索区间) ϕ:LR1R1 t ϕ(t) L 上的全局极小点。若果能够找到 t1,t2L ,使得 t[t1,t2] ,那么闭区间 [t1,t2] 就称为 ϕ(t) 极小点的一个搜索区间,记为 {t1,t2}

定理1: {a,b} 是单谷函数 ϕ(t) 极小点的一个搜索区间,在 (a,b) 上任取两点 t1 t2 ,且 t1<t2 。若 ϕ(t1)ϕ(t2) ,则 {a,t2} ϕ(t) 极小点的一个搜索区间;若 ϕ(t1ϕ(t2)) ,则 {t1,b} ϕ(t) 极小点的一个搜索区间。

有以上定义和定理可知,一元二次函数为单谷函数,以上定理的理解记忆可以以一元二次函数为基础记忆。
有以上只是,我们可以确定单谷函数的搜索区间,算法描述如下。

已知:目标函数 ϕ(t)
(1)选定初始点 t0 和步长 h
(2)计算 ϕ0=ϕ(t0)t2=t0+hϕ2=ϕ(t2)
(3)若 ϕ2ϕ0 ,则置 t1=t2ϕ1=ϕ2h=h 转(5);否则转(4)
(4)置 t1=t0ϕ1=ϕ0t0=t2ϕ0=ϕ2h=2h
(5)计算 t2=t0+hϕ2=ϕ(t2) ,若 ϕ2>ϕ0 ,则转(6);否则转(4)
(6)置 a=min{t1,t2}b=max{t1,t2} [a,b] 即为搜索区间,计算结束。

以上找搜索区间流程图如下(在流程图中用函数 y 代替函数 ϕ )。

Created with Raphaël 2.1.0 开始 计算ϕ0=ϕ(t0),t2=t0+h,ϕ2=ϕ(t2) ϕ2≥ϕ0 置t1=t2,ϕ1=ϕ2,h=−h 计算t2=t0+h,ϕ2=ϕ(t2) ϕ2>ϕ0 置a=min{t1,t2},b=max{t1,t2} [a,b]即为搜索区间,计算结束。 结束 置t1=t0,ϕ1=ϕ0,t0=t2,ϕ0=ϕ2,h=2h yes no yes no

直线搜索方法

黄金分割法

黄金分割法属于区间收缩算法,适用于任何单谷函数(函数可以不连续)求极小点问题。
在搜索区间 [a,b] 内,适当的插入两点 t1 t2 ,通过定理1可以缩小区间长度,如此迭代,可以将搜索区间无限缩小。黄金分割法名称的由来是由 t1 t2 的位置所确定的,在黄金分割法中 t2=a+0.618×(ba)t1=a+bt2=b0.618×(ba) ,其中0.618是黄金比例,故此叫做黄金分割法或0.618法。
至于为什么是0.618是有严格的数学证明的,是因为此时区间缩小的更快,证明将不在补充,有兴趣的同学可以查看wikipedia。
黄金分割法算法描述如下。

已知: ϕ(t) ,终止限 ϵ ,黄金比例 β=0.618
(1)确定 ϕ(t) 的搜索区间 {a,b}
(2)计算 t2=a+β(ba) ϕ2=ϕ(t2)
(3)计算 t1=a+bt2 ϕ1=ϕ(t1)
(4)若 |t1t2|<ϵ ,则打印 t=t1+t22 ,停机,否则转(5)
(5)若 ϕ1ϕ2 ,则置 b=t2t2=t1ϕ2=ϕ1 ,然后转(3);否则,置 a=t1t1=t2,ϕ1=ϕ2 ,并计算 t2=a+β(ba)ϕ2=ϕ(t2) ,然后转(4)

流程图如下。

Created with Raphaël 2.1.0 开始 确定搜索区间{a,b} t2=a+β(b−a),ϕ2=ϕ(t2) t1=a+b−t2,ϕ1=ϕ(t1) abst(t1−t2)<ϵ? t∗=(t1+t2)/2 结束 ϕ1≤ϕ2? b=t2,t2=t1,ϕ2=ϕ1 a=t1,t1=t2,ϕ1=ϕ2,计算t2=a+β(b−a),ϕ2=ϕ(t2) yes no yes no

抛物线插值法

抛物线插值法属于函数逼近法,是用于求连续的单谷函数求极小点问题。
ϕ:R1R1 在搜索区间 {t1,t2,t3} 上连续。即 ϕ1=ϕ(t1)ϕ2=ϕ(t2)ϕ3=ϕ(t3) 。如果 t1<t2<t3 ϕ1ϕ2ϕ3 (两个等个不同时成立)同时成立,那么可以过 (t1,ϕ1)(t2,ϕ2)(t3,ϕ3) 三点作抛物线插值,设得到的抛物线为 Q(t)=pt2+qt+r 。其实抛物线方程为多少我们并不关心,我们更关心此抛物线的极小点,假设此极小点为 t4 ,我们可以根据 t4 的信息,将搜索区间缩小,然后在缩小后的区间上再做抛物线插值,如此迭代,便可以找到极小点 t
通过以上 (t1,ϕ1)(t2,ϕ2)(t3,ϕ3) 三个点我们可以求得

t4=(t22t23)ϕ1+(t23t21)ϕ2+(t21t22)ϕ32[(t2t3)ϕ1+(t3t1)ϕ2+(t1t2)ϕ3](1)
并且 t1<t4<t3
我们抛物线插值法做具体讲解,现在给出跑无法插值法的终止准则。
|ϕ4ϕ2||ϕ2|+1<ϵϵ103

抛物线插值法的算法流程图如下。
ϕ1=ϕ4

Created with Raphaël 2.1.0 开始 确定{t1,t2,t3} 计算公式(1)的分母M M=0? 结束 用公式(1)计算t4 满足终止准则? t*,ϕ(t*) t4>t2? ϕ4<ϕ2 置t1=t2,t2=t4,ϕ1=ϕ2,ϕ2=ϕ4 ϕ4>ϕ2 置t3=t4,ϕ3=ϕ4 置t1=t2,t3=t4,ϕ1=ϕ2,ϕ3=ϕ4,t2=(t1+t3)/2,ϕ2=ϕ(t2) ϕ4=ϕ2 置t1=t4,t3=t2,ϕ1=ϕ4,ϕ3=ϕ2,t2=(t1+t2)/2,ϕ2=ϕ(t2) ϕ4>ϕ2 置t1=t4,ϕ1=ϕ4 置t3=t2,t2=t4,ϕ3=ϕ2,ϕ2=ϕ4 yes no yes no yes no yes no yes no yes no yes no

黄金分割法、抛物线插值法等许多一维函数极小值问题的迭代方法都需要假设函数具有单谷性。这并不符合实际问题的需要,一种可用的解决方法为,在初始的搜索区间很大的时候,可以将搜索区间分割为许多小区间,在这些小区间上用这些方法寻求极小点,最后在所有区间的极小点中找最优解即可。

你可能感兴趣的:(机器学习,最优化)