梯度下降法(英語: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...