優(yōu)化方法基礎(chǔ)系列-非精確的一維搜索技術(shù)

選擇最優(yōu)步長的精確搜索方法往往計(jì)算量大池充,特別是當(dāng)?shù)c(diǎn)遠(yuǎn)離最優(yōu)解時(shí)夹纫,效率很低,而且很多最優(yōu)化算法的收斂速度并不依賴于精確的一維搜索過程。這促使一些研究者放寬了一維搜索的精確要求任岸,而去保證目標(biāo)函數(shù)在每次迭代有滿意的下降量剑按,這類方法稱為非精確的一維搜索方法或可接受的一維搜索方法,它可以大大節(jié)省計(jì)算量猜敢。

不精確的一維搜索方法核心問題是選取可接受的步長\lambda_k使得f(\boldsymbol x_k)-f(\boldsymbol x_k+\lambda_k\boldsymbol d_k)得到一個(gè)滿意的水平,即足夠的下降且大范圍收斂。因此净赴,研究者提出了一些準(zhǔn)則珍特,以滿足不精確搜索能也能收斂的條件。Armijo-Goldstein和Wolf-Powell準(zhǔn)則為非精確一維搜索的兩大準(zhǔn)則魔吐。

Armijo-Goldstein準(zhǔn)則

Armijo-Goldstein準(zhǔn)則核心思想就兩點(diǎn):

1扎筒、目標(biāo)函數(shù)值應(yīng)該有足夠的下降
2、一維搜索的步長\lambda不應(yīng)該太小

這兩點(diǎn)意圖是非常明顯酬姆,由于最優(yōu)化問題就是尋找極小值嗜桌,所以使得目標(biāo)函數(shù)值下降,是我們努力的方向辞色,此外如果搜索步長太小骨宠,可能原地打轉(zhuǎn),影響收斂速度相满。具體方法如下:

假設(shè)\boldsymbol d_k是一個(gè)下降方向层亿,記\boldsymbol{g}_k=\nabla f(\boldsymbol{x}_k),有:

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

\boldsymbol{g}_k^T\boldsymbol2uiimzf_k<0,f(\boldsymbol{x}_k)-f(\boldsymbol{x}_k+\lambda\boldsymbolspzozua_k)的一個(gè)合理的下界(保證下降):

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

再給其一個(gè)上界限制(\lambda不能太辛⒚馈):

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

那么Armijo-Goldstein準(zhǔn)則可描述為:

可接受的\lambda應(yīng)該滿足:

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

注:如果\rho不在這個(gè)范圍內(nèi)匿又,將影響其超線性收斂性。

圖1 Armijo-Goldstein準(zhǔn)則示例

\varphi (\lambda) = f(\boldsymbol{x}_k+\lambda\boldsymbolwoshsuw_k)建蹄,即固定\boldsymbol{x}_k和方向\boldsymbolmt8ld33_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]區(qū)間都是在滿足條件的步長劲腿。然而旭绒,Armijo-Goldstein準(zhǔn)則可能會把極值點(diǎn)判斷在可接受的范圍之外,所以為了解決這一問題焦人,Wolf-Powell準(zhǔn)則應(yīng)用而生挥吵。

圖 2 Armijo-Goldstein 準(zhǔn)則流程圖

Algorithm 9 Armijo-Goldstein準(zhǔn)則

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準(zhǔn)則,足夠的下降
        if flamda>=f0+(1-ro)*lamda*g0 %滿足Goldstein,步長不會太小
            break;
        else %不滿足Goldstein垃瞧,步長太小蔫劣,左端的a設(shè)置為lamda
            a = lamda;
            if isinf(b)%右端的b為空的時(shí)候坪郭,說明Armijo準(zhǔn)則一直是滿足的个从,步長太小了,擴(kuò)大步長
                lamda = apha*lamda;
            else
                lamda = (a+b)/2; %步長設(shè)定為區(qū)間的中值
            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 準(zhǔn)則

Wolf-Powell準(zhǔn)則下界和Armijo-Goldstein準(zhǔn)則是一樣的嗦锐,即:

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

為了保證足夠的步長以及可接受的區(qū)間包含極小值點(diǎn)嫌松,上界被定義:

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

也就是:

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

其說明在點(diǎn)\lambda處的斜率應(yīng)該大于起始點(diǎn)斜率的\sigma倍。\varphi^\prime(0)是負(fù)值奕污,所以上界的含義就是可接受的范圍中斜率應(yīng)該是接近零的負(fù)值或者正值萎羔。

此外,還有一種更為嚴(yán)苛的準(zhǔn)則碳默,稱為強(qiáng)Wolf調(diào)節(jié)贾陷,即:

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

強(qiáng)Wolf條件使得可接受的范圍的斜率的正值不至于過大,可以將遠(yuǎn)離極小值點(diǎn)的步長排除在外嘱根。一般\sigma越小髓废,線性搜索越精確,不過\sigma越小该抒,工作量越大慌洪,一般取\rho = 0.1, \sigma\in [0.6,0.8]

圖 3 強(qiáng)Wolf條件示意圖

Algorithm 10 Wolf-Powell 準(zhǔn)則

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準(zhǔn)則,足夠的下降
        if gfunc(lamda)>=sigma*g0 %滿足wolf-powell,步長不會太小
            break;
        else %不滿足wolf-powell凑保,步長太小冈爹,左端的a設(shè)置為lamda
            a = lamda;
            if isinf(b)%右端的b為空的時(shí)候,說明Armijo準(zhǔn)則一直是滿足的欧引,步長太小了频伤,擴(kuò)大步長
                lamda = apha*lamda;
            else
                lamda = (a+b)/2; %步長設(shè)定為區(qū)間的中值
            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條件示意圖

后退法(簡單準(zhǔn)則)

后退法僅采用了Armijo-Goldstein準(zhǔn)則的下界限制芝此,即保證函數(shù)的下降剂买,此外要求\lambda不要太小即可。其基本思想是:

給定\rho \in (0,0.5),0<l<u<1
Step1 令\lambda=1
Step2 如果f(\boldsymbol{x}_k+\lambda\boldsymbol2odwlct_k)\leq f(\boldsymbol{x}_k)+\rho\lambda\boldsymbol{g}_k^T\boldsymbolgoswri8_k癌蓖,則令\lambda_k=\lambda停止迭代瞬哼,輸出\lambda_k ;否則轉(zhuǎn)Step3
Step3 \lambda:=\omega \lambda,\omega\in[l,u],轉(zhuǎn)Step2

關(guān)于這些準(zhǔn)則的有效性,比如步長的存在性租副,大范圍收斂性質(zhì)可參閱劉紅英版本的數(shù)值規(guī)劃基礎(chǔ)或者Numerical Optimization坐慰。后來學(xué)者們又發(fā)展了Curry-Altman步長律、Danilin-Pshenichuyi步長律用僧、De Leone-Grippo步長律等结胀,這些步長律或者準(zhǔn)則會在后文的具體優(yōu)化算法中有所涉及,使用的過程中可能會大大加速優(yōu)化方法的收斂责循。

參考文獻(xiàn):

[1] Numerical Optimization. Jorge Nocedal

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糟港,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子院仿,更是在濱河造成了極大的恐慌秸抚,老刑警劉巖速和,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剥汤,居然都是意外死亡颠放,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門吭敢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碰凶,“玉大人,你說我怎么就攤上這事鹿驼∮停” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵畜晰,是天一觀的道長伸头。 經(jīng)常有香客問我,道長舷蟀,這世上最難降的妖魔是什么恤磷? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮野宜,結(jié)果婚禮上扫步,老公的妹妹穿的比我還像新娘。我一直安慰自己匈子,他們只是感情好河胎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虎敦,像睡著了一般游岳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上其徙,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天胚迫,我揣著相機(jī)與錄音,去河邊找鬼唾那。 笑死访锻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闹获。 我是一名探鬼主播期犬,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼避诽!你這毒婦竟也來了龟虎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤沙庐,失蹤者是張志新(化名)和其女友劉穎鲤妥,沒想到半個(gè)月后佳吞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旭斥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年容达,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了古涧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垂券。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖羡滑,靈堂內(nèi)的尸體忽然破棺而出菇爪,到底是詐尸還是另有隱情,我是刑警寧澤柒昏,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布凳宙,位于F島的核電站,受9級特大地震影響职祷,放射性物質(zhì)發(fā)生泄漏氏涩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一有梆、第九天 我趴在偏房一處隱蔽的房頂上張望是尖。 院中可真熱鬧,春花似錦泥耀、人聲如沸饺汹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兜辞。三九已至,卻和暖如春夸溶,著一層夾襖步出監(jiān)牢的瞬間逸吵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工缝裁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胁塞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓压语,卻偏偏與公主長得像啸罢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子胎食,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348