搜索算法概述
求解无约束优化问题min f(x), x∈Rn
f: D是Rn的 子集,D->R
一般求解方法:
求无约束的某可微函数的最优解,根据一阶必要条件,可以令函数的梯度等于0,由此求得驻点;然后通过充分条件进行判别,求出所要的解。
问题:
- 对某些较简单的函数,这样做有时是可行的;但对一般n元函数 f(x) 来说,由条件∇f(x)=0得到的是一个非线性方程组,解它相当困难。
- 对于不可微函数,当然谈不上使用这样的方法。
为此,常直接使用迭代法
迭代法一般思路:
为了求函数f(x)的最优解,首先给定一个初始估计x0,然后按某种规划(即算法)找出比x0更好的解x1,f(x1)<f(x0),再按此种规则找出比x1更好的解x2,如此迭代。
如此即可得到一个解的序列{xk},若这个解序列有极限x*,lim||xk -x*|| = 0,则称他收敛与x*;
若算法是有效的,则它产生的解序列收敛于该问题的最优解。
终止条件:
理想的终止条件为:|f(x)-f(x*)|<ε 或者 ||x-x*||<ε。但是x*是未知的。
实用的终止条件是根据相继两次迭代的结果
- 根据相继两次迭代的绝对误差 |f(xk+1)-f(xk)|<ε 或者 ||xk+1-xk||<ε
- 根据相继两次迭代的相对误差 |f(xk+1)-f(xk)|/|f(xk)| <ε 或者 ||xk+1-xk||/||xk||< ε
- 根据目标函数梯度的模足够小 ||∇f(xk)|| < ε
收敛速度:
迭代法分类:
根据是否计算目标函数和约束函数的导数
- 直接法:不需要导数信息;仅利用函数值,简单易用
- 非直接法:需要导数信息;利用导数信息,收敛性结果更强
根据迭代点是否沿某个方向产生
- 线搜索方法:迭代点沿某方向产生;每次迭代沿某个方向搜索下个迭代点,最常见研究最多的方法
- 信赖域方法:迭代点在某区域内搜索产生;每次迭代在某区域内搜索下个迭代点,近30年来发展起来的一类方法
线搜索迭代法基本思想:
若从xk 出发至少存在一个方向dk可使目标函数值有所下降,可选定这个方向dk,沿这个方向迈进适当的一步,得到下一个迭代点xk+1,使f(xk+1)<f(xk)。
相当于在射线x=xk+λdk上选定新的点xk+1=xk+λkdk;
其中dk成搜索方向;λk称为步长或学习率(在ML中)
线搜索迭代法的一般步骤:
- 选取初始点x0,k=0
- 确定搜索方向dk
- 从xk出发沿方向dk求步长λk,以产生下一个迭代点xk+1
- 检查得到的新店xk+1是否为极小点或近似极小点;即,判断是否满足终止条件
之后各种算法的区分,主要在于搜索方向dk的不同。
迭代步长常见方法:
- 令它等于某一常数(例如令λk =1),这样做不能保证目标函数值下降。
- 第二种称为可接受点算法,只要能使目标函数值下降,可任意选取步长。
- 第三种方法的思路是:沿搜索方向使目标函数值下降最多;求目标函数 f(x) 的极小:λk=arg min f(xk+λdk)
方法三又称精确一维搜索或精确线搜索或一维最优化,确定的步长为最佳步长。
注意:在搜索方向上所得最优点处的梯度和该搜索方向正交
精确的一维搜索方法:
- 试探法:按某种方式找试探点,通过比较一系列试探点的函数值的大小确定极小点。 “成功-失败”法
- 区间收缩法:用某种分割技术缩小最优解所在的区间(称为搜索区间)。 二分法、0.618法
- 函数逼近法:用比较简单函数的极小值点近似代替原函数的极小值点。从几何上看是用比较简单的曲线近似代替原来的曲线,用简单曲线的极小值点代替原曲线的极小点。 Newton法、二次插值法、三次插值法
非精确一维搜索:
通过计算少量的函数值,得到一步长λk,使得后续迭代点xk+1=xk+λkdk满足f(xk+1)<f(xk),即使目标函数要“充分”下降
- Armiji-Goldstein准则
- Wolfe-Powell准则
“成功-失败”法
常用的一维直接法有消去法和近似法两类。它们都是从某个初始搜索区间出发,利用单峰函数的消去性质,逐步缩小搜索区间,直到满足精度要求为止。
单峰函数:
进退算法(成功-失败法)
由单峰函数的性质可知,函数值在极小点左边严格下降,在右边严格上升。 (直接法)
基本思想:从某个初始点出发,沿函数值下降的方向前进,直至发现函数值上升为止。由两边高,中间低的三点,可确定极小点所在的初始区间。
步骤:
- 选定初始点a和步长h
- 计算并比较f(a)和f(a+h);有前进和后退两种情况
算法说明:
缺点:效率低;
优点:可以求搜索区间;
注意:h选择要适当,初始步长不能选的太小,也不能太大
例题
0.618法(黄金分割法)
0.618算是成功-失败法的进阶 (直接法)
成功-失败法的初始点是随机选取的;
黄金分割法考虑两个条件:
- 对称原则: x1 – a = b- x2 式(1)
使“坏”情况去掉 - 保持缩减比原则 t=(保留的区间长度/原区间长度) 不变 t=0.618
联立式子1,2可求得t=0.618
最后初始的x1和x2选择为: t = 0.618
x1 = a + (1- t)(b - a )
x2 =a +t (b -a )
算法说明:
优点:不要求函数可微,且每次迭代只需计算一个函数值,计算量小,程序简单
缺点:收敛速度慢
比成功失败法效率稍微好一点
二分法
基本思想 (非直接法)
计算步骤
算法说明
优点:计算量较少,总能收敛到一个局部极小点
缺点:收敛速度较慢
牛顿法
牛顿法是一种函数逼近法,基本思想是:在极小点附近用函数的二阶泰勒多项式近似代替目标函数,从而求得目标函数的极小点的近似值。
计算步骤
算法说明
优点:收敛速度快,局部二阶收敛
缺点:须计算二阶导数,工作量大;对初始点要求高,要求初始点离极小点不太远,否则有可能使极小化发散或收敛到非极小点;局部收敛。
插值法
二次插值法
(直接法)
基本原理:通过三个点模拟一个曲线,求此曲线的极小值点,每次迭代就模拟一次并求出极小点。
通过等式1,2,3不断化简,最后极小点求得为:
基本步骤:
每次选完x后x左右两边的点就为下一次迭代的x1,x3;终止条件由中间的点x2和x* 的差的绝对值判定。
三次插值法
基本思想:用四个已知值(如两个点函数值及其导数值)构造一个三次多项式P3(x),用P3(x)的极小点近似目标函数的极小点x*; (非直接法)
三次插值法的收敛速度比二次插值法要快,达到2阶收敛速度。
利用函数在两点的函数值和导数值:
p(x) = A(x-x1)3+B(x-x1)2+C(x-x1)+D
推理过程:
根据极值的条件:
- 一阶必要条件:一阶导为0;
- 二阶充分条件:二阶导>0
最后迭代公式为:
满足(u-v+2w>0)
基本流程:
算法说明:
优点:收敛速度快
缺点:计算复杂,计算量大,
一维方法总结:
- 如目标函数能求二阶导数:用Newton法 收敛快
- 如目标函数能求一阶导数 :首先考虑用三次插值法,收敛较快;二分法、收敛速度慢,但可靠;二次插值法也可选择。
- 只需计算函数值的方法 :首先考虑用二次插值法, 收敛快黄金分割法收敛速度较慢,但可靠
非精确一维搜索
考虑非精确一维搜索方法的原因:
保证目标函数在每次迭代有满意下降量的方法,就是非精确一维搜索方法或称为可接受一维搜索方法。
Armijo-Goldstein准则
原理:
其中 0<ρ<1/2 目的是为保证目标函数有一个满意的下降量,必须避免步长太靠近区间的端点。
Armijo-Goldstein准则下可接受区间[b,c],其中的点称为可接受步长
基本步骤:
A-G 方法会出现的问题是:把最佳步长排除在可接受区间外面。
Wolfe-Powell准则
原理:
计算步骤:
(感觉非精确一维计算不会考 就算会考会算就行)