在演算法框架中我們提到,不同的方式確定搜尋方向或搜尋步長,就會得到不同的演算法,而梯度法就是用負梯度方向作為搜尋方向,即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 是光滑的。如何針對不同的目標函式,不同的應用場景求解乙個無約束優化問題是機器學習領域的關注點。經典的優化演算法可以分為直接法和迭代法兩大類。直接法,就是能夠直接給出優化問題的最優解的方法,這種方法能夠通過乙個解析式直接求出...