無約束優化問題(二)

2021-08-14 14:31:04 字數 1404 閱讀 6219

在演算法框架中我們提到,不同的方式確定搜尋方向或搜尋步長,就會得到不同的演算法,而梯度法就是用負梯度方向作為搜尋方向,即dk

=−∇f

(xk)

。那麼,為什麼要用負梯度方向作為搜尋方向? 因為負梯度方向是當前點的最速下降方向(就是說在xk

的某個鄰域內,在這個方向上往前走,函式值一定是下降最快的),下面我們給出數學上的證明:設f(

x)在x

k 附近連續可微,gk

=∇f(

xk) ,由泰勒展式得,f(

xk+α

dk)=

f(xk

)+αg

tkdk

+o(α

)α>0

那麼目標函式f(

x) 在x

k 處沿下降方向dk

的變化率為:

limα→0

f(xk

+αdk

)−f(

xk)α

=limα→

0αgt

kdk+

o(α)

α=gt

kdk=

∥gk∥

∥dk∥

cosθ

k θk

為gk 與

dk的夾角。顯然當dk

取 -gk

時,上式有最小值,且為負值。

function

[t,k,xk,val]=grad

(x0,n)

%非精確線搜尋(armijo準則)的梯度法

%eps為精度,k為迭代次數,最大設為10000次

%fun為優化目標函式,gfun為其梯度

%t為迭代所用時間

tic;

xk=x0;

eps=1e-4;

k=0;

maxk=10000;

gk=gfun(xk,n); %初始點代入求得梯度

while norm(gk)>eps && k%停算條件:梯度接近0或迭代次數達到最大

dk=-gk;

%非精確線搜尋armijo準則

beta = 0.55; sigma = 0.4;

m = 0; mk = 0;

while (m<20) %防止搜尋距離過小

if(fun(xk+beta^m*dk,n)>fun(xk,n)+sigma*beta^m*gfun(xk,n)'*dk) %'

mk = m;break;

endm=m+1;

endxk=xk+alphak*dk;

gk=gfun(xk,n);

k=k+1;

endval=fun(xk,n); %此時的函式值(極小值)

t=toc;

無約束優化問題

線性搜尋下降演算法 常用的終止準則 left nabla f left x right right leq epsilon 選擇步長 基於區間的直接搜尋法 非精確搜尋準則 下降方向 不同的下降方向選取方式就有了不同的演算法 收斂性 收斂速度 基本思想 給定初始點 x 0 依次沿著座標軸 e 1,do...

無約束最優化二

2.1 a k合理性討論 如下將要討論關於a k需要滿足的兩個條件,當a k滿足這兩個條件後,就可以認為從x k點移動到x k 1點的步長已經確定下來了。第乙個條件為sufficient decrease condition,從直觀角度來看,該條件主要要用保證x k 1點的函式值要小於x k點的函式...

優化演算法 無約束優化

無約束優化問題可以表示為 min l theta 其中目標函式 l cdot 是光滑的。如何針對不同的目標函式,不同的應用場景求解乙個無約束優化問題是機器學習領域的關注點。經典的優化演算法可以分為直接法和迭代法兩大類。直接法,就是能夠直接給出優化問題的最優解的方法,這種方法能夠通過乙個解析式直接求出...