优化方法基础系列-非精确的一维搜索技术

选择最优步长的精确搜索方法往往计算量大,特别是当迭代点远离最优解时,效率很低,而且很多最优化算法的收敛速度并不依赖于精确的一维搜索过程。这促使一些研究者放宽了一维搜索的精确要求,而去保证目标函数在每次迭代有满意的下降量,这类方法称为非精确的一维搜索方法或可接受的一维搜索方法,它可以大大节省计算量。

不精确的一维搜索方法核心问题是选取可接受的步长\lambda_k使得f(\boldsymbol x_k)-f(\boldsymbol x_k+\lambda_k\boldsymbol d_k)得到一个满意的水平,即足够的下降且大范围收敛。因此,研究者提出了一些准则,以满足不精确搜索能也能收敛的条件。Armijo-Goldstein和Wolf-Powell准则为非精确一维搜索的两大准则。

Armijo-Goldstein准则

Armijo-Goldstein准则核心思想就两点:

1、目标函数值应该有足够的下降
2、一维搜索的步长\lambda不应该太小

这两点意图是非常明显,由于最优化问题就是寻找极小值,所以使得目标函数值下降,是我们努力的方向,此外如果搜索步长太小,可能原地打转,影响收敛速度。具体方法如下:

假设\boldsymbol d_k是一个下降方向,记\boldsymbol{g}_k=\nabla f(\boldsymbol{x}_k),有:

f(\boldsymbol{x}_k+\lambda\boldsymbol{d}_k)=f(\boldsymbol{x}_k)+\lambda\nabla f(\boldsymbol{x}_k)^T\boldsymbol{d}_k+O(||\lambda\boldsymbol{d}_k||)

\boldsymbol{g}_k^T\boldsymbol{d}_k<0,f(\boldsymbol{x}_k)-f(\boldsymbol{x}_k+\lambda\boldsymbol{d}_k)的一个合理的下界(保证下降):

f(\boldsymbol{x}_k)-f(\boldsymbol{x}_k+\lambda\boldsymbol{d}_k)\geq -\rho \lambda\boldsymbol{g}_k^T\boldsymbol{d}_k,\rho \in (0,0.5)

再给其一个上界限制(\lambda不能太小):

f(\boldsymbol{x}_k)-f(\boldsymbol{x}_k+\lambda\boldsymbol{d}_k)\leq -(1-\rho) \lambda\boldsymbol{g}_k^T\boldsymbol{d}_k,\rho \in (0,0.5)

那么Armijo-Goldstein准则可描述为:

可接受的\lambda应该满足:

f(\boldsymbol{x}_k)+(1-\rho) \lambda\boldsymbol{g}_k^T\boldsymbol{d}_k\leq f(\boldsymbol{x}_k+\lambda\boldsymbol{d}_k)\leq f(\boldsymbol{x}_k)+\rho\lambda\boldsymbol{g}_k^T\boldsymbol{d}_k,\rho \in (0,0.5)

注:如果\rho不在这个范围内,将影响其超线性收敛性。

图1 Armijo-Goldstein准则示例

\varphi (\lambda) = f(\boldsymbol{x}_k+\lambda\boldsymbol{d}_k),即固定\boldsymbol{x}_k和方向\boldsymbol{d}_k,求解满足条件的步长,则Armijo-Goldstein可写为:

\varphi (0)+(1-\rho)\lambda\varphi ^\prime(0)\leq \varphi(\lambda)\leq \varphi(0)+\rho\lambda\varphi^\prime(0)

从上图和公式中,可以看出\varphi(0)+\rho\lambda\varphi^\prime(0)\varphi(0)的下方,\varphi(0)+(1-\rho)\lambda\varphi^\prime(0)\varphi(0)+\rho\lambda\varphi^\prime(0)的下方,所以[b,c]区间都是在满足条件的步长。然而,Armijo-Goldstein准则可能会把极值点判断在可接受的范围之外,所以为了解决这一问题,Wolf-Powell准则应用而生。

图 2 Armijo-Goldstein 准则流程图

Algorithm 9 Armijo-Goldstein准则

function lamda = ArmijoGoldstein(func,gfunc,lamda0,ro,apha,iterNum,plotFlag)
if nargin<7
    plotFlag = 1;
end
if nargin<6
    iterNum = 100;
end
if nargin<5
    apha = 2;
end
if nargin<4
    ro = 0.1;
end
if nargin<3
    lamda0 = 1;
end

a = 0;
b = inf;
lamda =lamda0;
f0 = func(0);
g0 = gfunc(0);
if plotFlag == 1
    figH = figure();
end

while iterNum
    flamda = func(lamda);
    if plotFlag == 1       
        pause(1)
        plot(0:0.01:4,func(0:0.01:4),'-b');
        hold on;
        plot([0,4],[f0,f0],'-y');
        plot([0,4],[f0,f0+ro*4*g0],'-or');
        plot([0,4],[f0,f0+(1-ro)*4*g0],'-og');
        plot([0,lamda],[f0,flamda],'-*k');
        plot(a,func(a),'-*g');
        if ~isinf(b)
            plot(b,func(b),'-*r');
        end
        hold off;
    end
    if flamda<=f0+ro*lamda*g0 %满足Armijo准则,足够的下降
        if flamda>=f0+(1-ro)*lamda*g0 %满足Goldstein,步长不会太小
            break;
        else %不满足Goldstein,步长太小,左端的a设置为lamda
            a = lamda;
            if isinf(b)%右端的b为空的时候,说明Armijo准则一直是满足的,步长太小了,扩大步长
                lamda = apha*lamda;
            else
                lamda = (a+b)/2; %步长设定为区间的中值
            end
        end
    else%下降不足,缩小b和步长
        b = lamda;
        lamda = (a+b)/2;
    end
    iterNum = iterNum - 1;
end

%示例
%lamda = ArmijoGoldstein(@(x)(sin(-4+x)-1),@(x)(cos(-4+x)),1,0.4,2,100,1)

Wolf-Powell 准则

Wolf-Powell准则下界和Armijo-Goldstein准则是一样的,即:

f(\boldsymbol{x}_k+\lambda\boldsymbol{d}_k)\leq f(\boldsymbol{x}_k)+\rho\lambda\boldsymbol{g}_k^T\boldsymbol{d}_k,\rho \in (0,0.5)

为了保证足够的步长以及可接受的区间包含极小值点,上界被定义:

\boldsymbol{g}_{k+1}^T\boldsymbol{d}_k\geq\sigma \boldsymbol{g}_k^T\boldsymbol{d}_k,\sigma \in (\rho,1)

也就是:

\varphi ^\prime(\lambda)\geq \sigma \varphi^\prime(0)

其说明在点\lambda处的斜率应该大于起始点斜率的\sigma倍。\varphi^\prime(0)是负值,所以上界的含义就是可接受的范围中斜率应该是接近零的负值或者正值。

此外,还有一种更为严苛的准则,称为强Wolf调节,即:

\vert \varphi^\prime(\lambda) \vert \leq -\sigma \varphi^\prime(0)

强Wolf条件使得可接受的范围的斜率的正值不至于过大,可以将远离极小值点的步长排除在外。一般\sigma越小,线性搜索越精确,不过\sigma越小,工作量越大,一般取\rho = 0.1, \sigma\in [0.6,0.8]

图 3 强Wolf条件示意图

Algorithm 10 Wolf-Powell 准则

function lamda = WolfPowell(func,gfunc,lamda0,ro,sigma,apha,iterNum,plotFlag)
if nargin<8
    plotFlag = 1;
end
if nargin<7
    iterNum = 100;
end
if nargin<6
    apha = 2;
end
if nargin<5
    ro = 0.1;
end
if nargin<4
    sigma = 0.7;
end
if nargin<3
    lamda0 = 1;
end

a = 0;
b = inf;
lamda =lamda0;
f0 = func(0);
g0 = gfunc(0);
if plotFlag == 1
    figH = figure();
    for i=0:0.01:4
        if gfunc(i)>=sigma*g0;
            gs_i = i;
            break;
        end
    end
end

while iterNum
    flamda = func(lamda);
    if plotFlag == 1       
        pause(1)
        plot(0:0.01:4,func(0:0.01:4),'-b');
        hold on;
        plot([0,4],[f0,f0],'-y');
        plot([0,4],[f0,f0+ro*4*g0],'-or');
        plot([gs_i-0.5,gs_i+0.5],[func(gs_i)+(-0.5)*sigma*g0,func(gs_i)+(0.5)*sigma*g0],'-og');
        plot([0,lamda],[f0,flamda],'-*k');
        plot(a,func(a),'-*g');
        if ~isinf(b)
            plot(b,func(b),'-*r');
        end
        hold off;
    end
    if flamda<=f0+ro*lamda*g0 %满足Armijo准则,足够的下降
        if gfunc(lamda)>=sigma*g0 %满足wolf-powell,步长不会太小
            break;
        else %不满足wolf-powell,步长太小,左端的a设置为lamda
            a = lamda;
            if isinf(b)%右端的b为空的时候,说明Armijo准则一直是满足的,步长太小了,扩大步长
                lamda = apha*lamda;
            else
                lamda = (a+b)/2; %步长设定为区间的中值
            end
        end
    else%下降不足,缩小b和步长
        b = lamda;
        lamda = (a+b)/2;
    end
    iterNum = iterNum - 1;
end

%example
%lamda = WolfPowell(@(x)(sin(-4+x)-1),@(x)(cos(-4+x)),1,0.4,0.45,2,100,1)
图4 Wolf-Powell条件示意图

后退法(简单准则)

后退法仅采用了Armijo-Goldstein准则的下界限制,即保证函数的下降,此外要求\lambda不要太小即可。其基本思想是:

给定\rho \in (0,0.5),0<l<u<1
Step1 令\lambda=1
Step2 如果f(\boldsymbol{x}_k+\lambda\boldsymbol{d}_k)\leq f(\boldsymbol{x}_k)+\rho\lambda\boldsymbol{g}_k^T\boldsymbol{d}_k,则令\lambda_k=\lambda停止迭代,输出\lambda_k ;否则转Step3
Step3 \lambda:=\omega \lambda,\omega\in[l,u],转Step2

关于这些准则的有效性,比如步长的存在性,大范围收敛性质可参阅刘红英版本的数值规划基础或者Numerical Optimization。后来学者们又发展了Curry-Altman步长律、Danilin-Pshenichuyi步长律、De Leone-Grippo步长律等,这些步长律或者准则会在后文的具体优化算法中有所涉及,使用的过程中可能会大大加速优化方法的收敛。

参考文献:

[1] Numerical Optimization. Jorge Nocedal

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339