線性搜尋簡介

來源:互聯網
上載者:User

標籤:des   使用   strong   問題   cti   演算法   

Numerical Optimization Line Search

線性搜尋簡介

數值最佳化是迭代式的最佳化方法,從一個初始點x0開始,然後產生一個迭代方向?d0,在這個方向上選擇一個步長α0,下一個點就是x0+α0??d0。按照這樣的方法不停的迭代下去,直到找到最優點。在這個過程中有兩步是非常重要的。第一步就是計算出迭代方向?dk,第二步是在這個方向上選擇合適的步長 αk,獲得下一個點xk+1。第一步產生迭代方向 ?dk 是各種最佳化方法產生差別的地方,不同的方法有不同的方法產生迭代方向。但是對於不同的迭代方法都有一個最基本的要求,那就是這個方向必須是一個下降方向:?f(xk)T??dk<0。其中?f(xk) 是 xk 的梯度方向。

第二步稱為線性搜尋。在這個步驟上不同的方法基本都是相同的。線上性搜尋方法中有兩個比較重要的部分,首先是停止條件,第二個是步長選擇演算法。之所以要求滿足停止條件而不是僅僅要求函數值有下降,是為了確保最佳化演算法能夠正常的收斂。線性搜尋問題可以如下形式化:

argminxf(xk+1)=f(xk+α??x)s.t.α≥0終止條件

首先假設當前點 xk 的梯度是 ?f(xk),當前的迭代方向是 ?dk,並且滿足 ?f(xk)T??dk<0,並且當前的選擇的步長為 α0。

Sufficient Descreasement Condition

這個條件也稱為Armijo Condition,描述如下:

f(xk+α0?dk)≤f(xk)+α0?ρg(xk)T?dk0<ρ<1/2其中 ρ 是使用者指定的參數,一般來說這個參數的數量級大概為1e?3 或者更低。但是僅僅使用這個條件並不能確保最佳化過程收斂。但是當這個條件配合backtracking搜尋方法的時候可以確保最佳化過程收斂。

Curvature Condition

?f(xk+α0?dk)T?dk≥δ?f(xk)T?dks.tρ<δ<1對於delta的取值一般比較大,比如0.8,0.9等等。這個值越大,對應的搜尋越不精確。

Wolfe Condition

Wolfe Condition就是把Sufficient Decreasement Condition和curvature condition合并在一起,表述如下:

f(xk+α0??dk)≤f(xk)+ρα0f(xk)T?dk?f(xk+α0?dk)T?dk≥δ?f(xk)T?dks.t0<ρ<δ<1一般來說Wolfe Condition是用於擬牛頓方法。

Strong Wolfe Condition

f(xk+α0??dk)≤f(xk)+ρα0f(xk)T?dk∣∣?f(xk+1)T?dk∣∣≤δ∣∣?f(xk)T?dk∣∣s.t0<ρ<δ<1Goldstein Condition

f(xk+α0?dk)≤f(xk)+α0?ρg(xk)T?dkf(xk+α0?dk)≥f(xk)+α0?(1?ρ)g(xk)T?dks.t.0<ρ<1/2步長選擇

這個一般可以使用多種不同的方法來選擇,對於我來說還是喜歡用backtracking方法,主要的原因是這個方法比較簡單且容易實現。而且可以配合多種不同的終止條件。

backtracking

backtracking基本來說是從某個步長開始,然後不停的縮小步長。知道找到滿足終止條件的步長。

function [retval] = backtrack(x0, d0, f, c1, c2)%line search algorithm based on backtracking to find point satisfy strong wolfe condition% x0 : current point% d0 : search direction% f : function will return value and gradient, [f, g] = f(x);% 0 < c1 < c2 < 1

[f0, grad] = f(x0);slope = grad‘ * d0;

if slope >= 0 error(‘must be a descent direction‘)end

alpha0 = 0;alphaMax = 1e2;

alpha = 1;dec = 0.5;inc = 2.1;

while 1

  [current_val, current_grad] = f( x0 + alpha * d0);  factor = 1; if current_val > ( f0 + alpha * c1 * slope)    factor = dec; else  current_slope = current_grad‘ * d0;  if current_slope < c2 * slope    factor = inc;  else      if current_slope > -c2*slope     factor = dec;      else      break;      end  end  end  if alpha < 1e-15    warning(‘too small step size‘)  end  if alpha > alphaMax warning(‘too large step size‘)  end  alpha = alpha * factor;

endretval = alpha;end總結

線性搜尋的效能對最佳化問題至關重要,簡單且可靠的線性搜尋方法可以解決很多的問題。一般來說,Goldstein條件適用於牛頓飯,Wolfe和strong Wolfe條件適用於擬牛頓法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.