MATLAB梯度下降法

2021-10-03 17:07:35 字數 1686 閱讀 2639

梯度下降法(英語:gradient descent)是乙個一階最優化演算法。 要使用梯度下降法找到乙個函式的區域性極小值,必須向函式上當前點對應梯度(或者是近似梯度)的反方向的規定步長距離點進行迭代搜尋。如果相反地向梯度正方向迭代進行搜尋,則會接近函式的區域性極大值點;這個過程則被稱為梯度上公升法。

梯度的向量,表示某一函式在該點處的方向導數沿著該方向取得最大值,即函式在該點處沿著該方向變化最快,變化率最大(為該梯度的模)。

同樣,該梯度方向與取得最大方向導數的方向一致,而它的模為方向導數的最大值。

梯度下降法是最早最簡單,也是最為常用的最優化方法。梯度下降法實現簡單,當目標函式是凸函式時,梯度下降法的解是全域性解。一般情況下,其解不保證是全域性最優解。梯度下降法的優化思想是用當前位置負梯度方向作為搜尋方向,因為該方向為當前位置的最快下降方向,所以也被稱為是」最速下降法「。最速下降法越接近目標值,步長越小,前進越慢。

在機器學習中,基於基本的梯度下降法發展了兩種梯度下降方法,分別為隨機梯度下降法和批量梯度下降法。

這裡取乙個簡單的例子

%% 梯度下降法

%牛頓迭代法

function [x,y,n,point] = tidu(fun,dfunx,dfuny,x,y,eps,p)

a = feval(fun,x,y);

b = a+1;

n=1point(n,:) = [x y a];

while (abs(a-b) >= eps)

a = feval(fun,x,y);

x = x - p*(feval(dfunx,x,y));

y = y - p*(feval(dfuny,x,y));

b = feval(fun,x,y);

n = n+1;

point(n,:) = [x y b];

end

呼叫函式:

% 目標函式為 z=f(x,y)=(x^2+y^2)/2

clear all

clcfun = inline('(x^2+y^2)/2','x','y');

dfunx = inline('x','x','y');

dfuny = inline('y','x','y');

x0 = 2;

y0 = 2;

eps = 0.00001;

p = 0.5;

[x,y,n,point] = tidu(fun,dfunx,dfuny,x0,y0,eps,p)

figure

x = -0.1:0.1:2;

y = x;

[x,y] = meshgrid(x,y);

z = (x.^2+y.^2)/2;

surf(x,y,z) %繪製三維表面圖形

% hold on

% plot3(point(:,1),point(:,2),point(:,3),'linewidth',1,'color','black')

hold on

scatter3(point(:,1),point(:,2),point(:,3),'r','*');

迭代圖:(從(2,2,4)收斂到(0,0,0))

matlab實現梯度下降法

大三上學期學了 運籌學 課程,裡面包含了許多演算法和模型。模型就是線性規劃及線性規劃的對偶理論,單純形法以及它的實際應用 整數規劃及其解法 分支定界法 割平面法匈牙利演算法 目標規劃 非線性規劃動態規劃 決策分析等等。實際上,這些模型在參加暑假數學建模培訓的時候,多多少少接觸過,所以還算比較熟悉的。...

梯度下降法 matlab實現

function k ender steepest f,x,e f x1 x2 2 x1 2 2 x1 x2 x2 2 假設f等於 x 0 0 e 10 20 syms x1 x2 m m為學習率 d diff f,x1 diff f,x2 分別求x1和x2的偏導數,即下降的方向 4 x1 2 x2...

梯度下降法和隨機梯度下降法

批量梯度下降法 batch gradient descent 在更新引數時使用所有的樣本來進行更新 隨機梯度下降法 stochastic gradient descent 求梯度時沒有用所有的m個樣本的資料,而是僅僅選取乙個樣本j來求梯度。小批量梯度下降法 mini batch gradient d...