一维线搜索确定最优步长

来源:互联网 发布:淘宝电工工具袋 编辑:程序博客网 时间:2024/04/30 22:05

目录

  1. 一维搜索问题
  2. 进退法确定搜索区间
  3. 分割技术(0.618)减小搜索区间
  4. wolfe条件确定步长
    4.1 梯度与函数下降的关系?
    4.2 wolfe条件

1.一维搜索问题

一维线搜索,就是指单变量函数的最优化,它是专门针对单峰函数设计的:

如上一篇文章所述,多变量函数中,迭代格式为:

xk+1=xk+αkdk
其中的关键就在于找到合适的步长αk,dk.可以设:
ϕ(α)=f(xk+αdk)
从初始点xk出发,以步长αk沿着搜索方向搜索,使得:
ϕ(αk)<ϕ(0)
的问题,就是所谓的关于α的一维搜索问题。
如果能找到αk使得:
f(xk+αkdk)=minα>0f(xk+αdk)
其中αk就是最优的步长因子。

关键还是怎么得到这样的αk,在一维搜索中,其主要的想法就是先确定一个搜索区间,然后采用插值法或者分割技术逐渐减小这个区间,直到找到最优的αk.

2.进退法确定搜索区间

搜索区间,相当于满足α>0使得:

ϕ(α)=minα>0ϕ(α)
α所在的区间[a,b](α[a,b]),且该区间必定会大于0,称该区间称为搜索区间。

其中确定搜索区间的方法之一就是进退法:

  • 从一点出发,试图确定函数值的高-低-高三点,沿着搜索方向搜索,如果一个方向不成功,就退回来,沿着相反方向搜索。这样只需比较一个点的函数值大小,就可以确定了。

算法步骤如下:

  1. α0[0,+),h0>0,k:=0,ϕ(α0)
  2. 比较目标函数值,令αk+1=αk+hk,计算ϕ(αk+1),ϕ(αk+1)<ϕ(αk),转到第三步
  3. 加大搜索步长hk1:=thk(t2),α:=αk,αk:=αk+1,ϕ(αk):=ϕ(αk+1)转至第二步
  4. 反向搜索;若k=0,令hk:=hk,αk:=αk+1,得到
    a=min(α,αk+1),b=max(α,αk+1)
    输出,a,b
    过程如图所示:

3.分割技术(0.618)减小搜索区间

前面介绍了怎么用进退法确定我们的搜索区间,但区间那么大,也不好求出最优化,因此可以通过切割区间,来减小区间,0.618和Fibonacci就是这样的分割方法。

  • 它们的基本思想都是通过取试探点,进行函数值比较,使包含极小点的搜索区间逐渐减小,当区间长度缩小到一定程度时,可以认为区间内的点均为极小点的近似。

0.618法是针对以上的单峰函数的,可以设

ϕ(α)=f(xk+αdk)
是搜索区间[a0,b0]上的单峰函数
这里写图片描述
第一步迭代:
1. 要求λk,μk到搜索区间的两个端点等距;
2. 每次迭代,要求搜索区间的缩短率相同;

用数学表达式表达出来如下:
这里写图片描述

第二次迭代:
这里写图片描述
由此得到
这里写图片描述
迭代到一定条件之后,可以求出我们最初要求的参数:

αk=(λk+μk)2

这里写图片描述

此外,还有一些分割方法,比如Fibonacci,它和0.618法的主要区别是它的缩短率不是采用黄金分割数,而是采用了Fibonacci数,Fibonacci数列满足:

F0=F1=1,Fk+1=Fk+Fk1
,详细的推导请参考袁亚湘老师的最优化理论与方法p73.

4.wolfe条件确定步长

在一些实际问题中,目标函数如果不可微,就可以采用0.618法来确定步长,但也有很多情况下目标函数是可微的,一旦可微,我们就可以计算他们的梯度了。

4.1 梯度与函数下降的关系?

很多人有这样的疑问,梯度有什么用?
如图所示为梯度方向,如果梯度小于0,则必然是相反方向,也就是函数下降的方向,这是一个直观的看法,下面用公式证明这个结论。

定义:设fRndRn若存在某个正数α>0使

f(x+αd)<f(x),α(0,α)
则称d是f在x处的一个下降方向,相关系数α称为一个步长。(这个是下降方向的数学表达式,满足这个条件的就是下降方向)

再给出一个定理:f:RnR在x处可微,若存在dRn使得

f(x)Td<0,
则d必为f(x)在x处的一个下降方向。

为了看一下这个的准确性,现在给出证明。

证明:由Taylor定理,对于任意的α>0,我们有

f(x+αd)=f(x)+αf(x)Td+o(||αd||)
既然f(x)Td<0,α>0,使得当α(0,α)时,
f(x)Td+o(||αd||)α<0
于是
f(x+αd)=f(x)+αf(x)Td+o(||αd||)<f(x)
得证。

由此我们发现,只要f(x)0,那么下降方向d一定存在,因为即使f(x)>0,我们可以取它的负方向作为下降方向。

4.2 wolfe条件

大于0的正数α作为步长,在函数下降方向总有:

Armijof(x+αd)=f(x)+cαf(x)Td,   0<c<1

但直接用该条件确定步长有可能使得步长太小,故使用后退技巧:选取0<t<1,找到一个最小的非负整数j,使得

f(x+tjd)f(x)+ctjf(x)Td,
令步长为α=tj.

如果该条件加上曲率条件,就构成了Wolfe条件:

Armijof(x+αd)=f(x)+c1αf(x)Td,
f(x+αd)Tdc2f(x)Td,
其中0<c1<c2<1.

参考

最优化理论与方法 –袁亚湘
最优化选讲