梯度下降

转载自:http://www.cnblogs.com/tornadomeet

梯度下降法又叫最速下降法,英文名为steepest descend method.估计搞研究的人应该经常听见这个算法吧,用来求解表达式最大或者最小值的,属于无约束优化问题。

首先我们应该清楚,一个多元函数的梯度方向是该函数值增大最陡的方向。具体化到1元函数中时,梯度方向首先是沿着曲线的切线的,然后取切线向上增长的方向为梯度方向,2元或者多元函数中,梯度向量为函数值f对每个变量的导数,该向量的方向就是梯度的方向,当然向量的大小也就是梯度的大小。

现在假设我们要求函数的最值,采用梯度下降法,如图所示:

梯度下降法的基本思想还是挺简单的,现假设我们要求函数f的最小值,首先得选取一个初始点后,然后下一个点的产生时是沿着梯度直线方向,这里是沿着梯度的反方向(因为求的是最小值,如果是求最大值的话则沿梯度的方向即可)。梯度下降法的迭代公式为:

其中表示的是梯度的负方向, 表示的是在梯度方向上的搜索步长。梯度方向我们可以通过对函数求导得到,步长的确定比较麻烦,太大了的话可能会发散,太小收敛速度又太慢。一般确定步长的方法是由线性搜索算法来确定,即把下一个点的坐标ak+1看做是的函数,然后求满足f(ak+1)的最小值的 即可。

因为一般情况下,梯度向量为0的话说明是到了一个极值点,此时梯度的幅值也为0.而采用梯度下降算法进行最优化求解时,算法迭代的终止条件是梯度向量的幅值接近0即可,可以设置个非常小的常数阈值。

下面是网上下的一个求2元函数最小值的matlab函数实现代码,在上面添加了少许注释。代码中关于步长的计算公式还是没有弄很清楚,用到了hessian矩阵,有点像牛顿法,先不管了,以后有时候慢慢研究。

 1 function y=fs2steep(f,e,a,b) %返回的是点坐标的2个分量
 2 % fs2steep函数 最速下降法
 3 % x=fs2steep(f,e,a,b)为输入函数 f为函数 e为允许误差 (a,b)为初始点;
 4 % fsx TJPU 2008.6.15
 5 x1=a;x2=b;
 6 Q=fs2hesse(f,x1,x2);
 7 x0=[x1 x2]‘;
 8 fx1=diff(f,‘x1‘); %对x1求偏导数
 9 fx2=diff(f,‘x2‘); %对x2求偏导数
10 g=[fx1 fx2]‘; %梯度
11 g1=subs(g); %把符号变量转为数值
12 d=-g1;%d为搜索方向
13 while (abs(norm(g1))>=e)  %norm(g1)为g1的2范数,即sqrt(x1^2+x2^2),因为梯度其各分量=0,所以其梯度幅值=0
14     t=(-d)‘*d/((-d)‘*Q*d);%求搜索步长,方法是?
15     x0=x0-t*g1; %搜索到的点
16     v=x0;
17     a=[1 0]*x0;
18     b=[0 1]*x0;
19     x1=a;
20     x2=b;
21     Q=fs2hesse(f,x1,x2);
22     x0=[x1 x2]‘;
23     fx1=diff(f,‘x1‘); %对x1求偏导数
24     fx2=diff(f,‘x2‘); %对x2求偏导数
25     g=[fx1 fx2]‘; %梯度
26     g1=subs(g);
27     d=-g1;
28 end;
29 y=v;
30
31 function x=fs2hesse(f,a,b)
32 % fs2hesse函数 求函数的hesse矩阵;
33 % 本程序仅是简单的求二次函数的hesse矩阵!;
34 % x=fs2hesse(f)为输入函数 f为二次函数 x1,x2为自变量;
35 % fsx TJPU 2008.6.15
36 x1=a;x2=b;
37 fx=diff(f,‘x1‘);     %求f对x1偏导数
38 fy=diff(f,‘x2‘);     %求f对x2偏导数
39 fxx=diff(fx,‘x1‘);   %求二阶偏导数 对x1再对x1
40 fxy=diff(fx,‘x2‘);   %求二阶偏导数 对x1再对x2
41 fyx=diff(fy,‘x1‘);   %求二阶偏导数 对x2再对x1
42 fyy=diff(fy,‘x2‘);   %求二阶偏导数 对x2再对x2
43 fxx=subs(fxx);       %将符号变量转化为数值
44 fxy=subs(fxy);
45 fyx=subs(fyx);
46 fyy=subs(fyy);
47 x=[fxx,fxy;fyx,fyy]; %求hesse矩阵

在matlab命令行窗口验证函数,结果如下:

最优化应用很广,有很多东西要学,且自己对matlab编程还不熟悉,以后慢慢积累吧!

时间: 2024-10-19 09:48:10

梯度下降的相关文章

2.监督学习应用.梯度下降

// 搜索算法 --- 挨个尝试 1. 梯度下降 批梯度下降, 随机梯度下降 2. 矩阵求导方法

【转】梯度下降

回归与梯度下降: 回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归,回归还有很多的变种,如locally weighted回归,logistic回归,等等,这个将在后面去讲. 用一个很简单的例子来说明回归,这个例子来自很多的地方,也在很多的open source的软件中看到,比如说weka.大概就是,做一个房屋价值的评估系统,一个房屋的价值来自很多地方,比如说面积.房间的数量(几室几厅).地段.朝向等等,

深度解读最流行的优化算法:梯度下降

深度解读最流行的优化算法:梯度下降 By 机器之心2016年11月21日 15:08 梯度下降法,是当今最流行的优化(optimization)算法,亦是至今最常用的优化神经网络的方法.本文旨在让你对不同的优化梯度下降法的算法有一个直观认识,以帮助你使用这些算法.我们首先会考察梯度下降法的各种变体,然后会简要地总结在训练(神经网络或是机器学习算法)的过程中可能遇到的挑战.(本文的中文版 PDF 下载地址) 目录: 梯度下降的各种变体 批量梯度下降(Batch gradient descent)

七月算法--12月机器学习在线班-第六次课笔记—梯度下降和拟牛顿

七月算法--12月机器学习在线班-第六次课笔记—梯度下降和拟牛顿 七月算法(julyedu.com)12月机器学习在线班学习笔记 http://www.julyedu.com

Matlab梯度下降解决评分矩阵分解

for iter = 1:num_iters %梯度下降 用户向量 for i = 1:m %返回有0有1 是逻辑值 ratedIndex1 = R_training(i,:)~=0 ; %U(i,:) * V' 第i个用户分别对每个电影的评分 %sumVec1 第i个用户分别对每个电影的评分 减去真实值 sumVec1 = ratedIndex1 .* (U(i,:) * V' - R_training(i,:)); product1 = sumVec1 * V; derivative1 =

斯坦福大学机器学习公开课学习—2.监督学习应用·梯度下降

这节课的学习,相信一般上过统计或者运筹相关课程的同学应该都会有所了解.课上涉及的知识虽然很基础,但是也是很重要的. 在搜集了一些房价相关数据的基础上,利用线性回归算法来预测房价. 为了方便算法的训练推导,进行了很多符号的标准规定,从这当中也学到了一些知识,以后自己在进行一些算法的推导时也可学习课上的这些标准符号和推导方式. 下面给出这堂课上的一些干货. 1.机器学习算法的基本框架 2.最小二乘法——线性回归常用的代价函数,即误差平方和最小 3.参数学习算法——梯度下降算法,包含批量梯度下降和随机

深度学习中梯度下降知识准备

考虑一个代价函数C , 它根据参数向量 计算出当前迭代模型的代价,记作C(). 机器学习中,我们的任务就是得到代价的最小值,在机器学习中代价函数通常是损失函数的均值,或者是它的数学期望.见下图: 这个叫做泛化损失,在监督学过程中,我们知道z=(x,y)  ,并且 f(x) 是对y的预测. 什么是这里的梯度呢? 当 是标量的时候,代价函数的梯度可表示如下: 当 很小的时候,它就是的另外一种表达,而我们就是让小于零,且越小越好. 当时一个向量的时候,代价函数的 梯度也是一个向量,每个都是一个i,这里

机器学习入门:线性回归及梯度下降

机器学习入门:线性回归及梯度下降 本文会讲到: (1)线性回归的定义 (2)单变量线性回归 (3)cost function:评价线性回归是否拟合训练集的方法 (4)梯度下降:解决线性回归的方法之一 (5)feature scaling:加快梯度下降执行速度的方法 (6)多变量线性回归   Linear Regression 注意一句话:多变量线性回归之前必须要Feature Scaling! 方法:线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个

机器学习中梯度下降法和牛顿法的比较

在机器学习的优化问题中,梯度下降法和牛顿法是常用的两种凸函数求极值的方法,他们都是为了求得目标函数的近似解.在逻辑斯蒂回归模型的参数求解中,一般用改良的梯度下降法,也可以用牛顿法.由于两种方法有些相似,我特地拿来简单地对比一下.下面的内容需要读者之前熟悉两种算法. 梯度下降法 梯度下降法用来求解目标函数的极值.这个极值是给定模型给定数据之后在参数空间中搜索找到的.迭代过程为: 可以看出,梯度下降法更新参数的方式为目标函数在当前参数取值下的梯度值,前面再加上一个步长控制参数alpha.梯度下降法通

梯度下降(Gradient Descent)小结

在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法.这里就对梯度下降法做一个完整的总结. 1. 梯度 在微积分里面,对多元函数的参数求?偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度.比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(?f/?x, ?f/?y)T,简称grad f(x,y)或者▽f(x,y).对于在点(x0,y0)的具体梯度向量就是(?f/?x0, ?f/?