梯度下降法理解

原创 2015年11月17日 16:23:19

      梯度下降法又叫最速下降法,英文名为steepest descend method.用来求解表达式最大或者最小值的,属于无约束优化问题。梯度下降法的一种简单形式是:x(k+1)=x(k)-a*g(k),其中a为学习效率,可以是较小的常数,g(k)是x(k)的梯度,直观的说,就是在一个有中心的等值线中,从初始值开始,每次沿着垂直等直线方向移动一个小的距离,最终收敛在中心。

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

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

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

      

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

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

     在matlab中实现梯度下降法例子:

   

梯度下降法函数function [k ender]=steepest(f,x,e),需要三个参数f、x和e,其中f为目标函数,x为初始点,e为终止误差。输出也为两个参数,k表示迭代的次数,ender表示找到的最低点。

steepest.m:

function [k ender]=steepest(f,x,e)
%梯度下降法,f为目标函数(两变量x1和x2),x为初始点,如[3;4]
syms x1 x2 m; %m为学习率
d=-[diff(f,x1);diff(f,x2)];  %分别求x1和x2的偏导数,即下降的方向
flag=1;  %循环标志
k=0; %迭代次数
while(flag)
  d_temp=subs(d,x1,x(1));	  %将起始点代入,求得当次下降x1梯度值
  d_temp=subs(d_temp,x2,x(2)); %将起始点代入,求得当次下降x2梯度值
  nor=norm(d_temp); %范  if(nor>=e)
    x_temp=x+m*d_temp;			%改变初始点x的值
    f_temp=subs(f,x1,x_temp(1));  %将改变后的x1和x2代入目标函数,subs函数:subs(S,OLD,NEW) 表示将符号表达式S中的符号变量OLD替换为新的值NEW
    f_temp=subs(f_temp,x2,x_temp(2));
    h=diff(f_temp,m);  %对m求导,找出最佳学习率
    m_temp=solve(h);   %求方程,得到当次m,solve函数:求解线性方程组解析解或精确解
    x=x+m_temp*d_temp; %更新起始点x
    k=k+1;
  else
    flag=0;
  end
end
ender=double(x);  %终点
end

调用示例1:

syms x1 x2;
f=(x1-2)^2+2*(x2-1)^2;
x=[1;3];
e=10^(-20);
[k ender]=steepest(f,x,e)

结果:

k =

  27


ender =

   2
   1
版权声明:本文为博主原创文章,未经博主允许不得转载。

【深度学习技术】手把手教你理解梯度下降法

什么是梯度下降法?高等数学告诉我们,梯度方向表示函数增长速度最快的方向,那么他的相反方向就是函数减少速度最快的方向。对于机器学习模型优化的问题,当我们需要求解最小值的时候,朝着梯度下降的方向走,就能找...
  • hduxiejun
  • hduxiejun
  • 2016年12月23日 14:14
  • 1025

梯度下降法的简单理解(含示例)

梯度下降法的原理和公式这里不讲,就是一个直观的、易于理解的简单例子。 1.最简单的情况,样本只有一个变量,即简单的(x,y)。多变量的则可为使用体重或身高判断男女(这是假设,并不严谨),则变量有两个,...
  • s9434
  • s9434
  • 2017年08月18日 13:57
  • 438

Machine Learning机器学习课堂笔记6(梯度下降直观解释)

Gradient Descent Intuition梯度下降直观解释 参数α术语称为学习速率,它控制以多大的幅度更新参数θj,第二部分是导数项。 例子:我们想最小化的那个函数偶一个参数的情形,...
  • zhangmiao_147
  • zhangmiao_147
  • 2014年11月11日 08:37
  • 609

梯度下降法的简单理解

梯度下降法  梯度下降法(gradient descent)或最速下降法(steepest descent)是求解无约束最优化问题的一种最常用的方法。 负梯度方向是使函数值下降最快的方向,在迭代的每...
  • wgdzz
  • wgdzz
  • 2015年09月29日 11:21
  • 2860

通俗理解梯度下降法

机器学习贴士:梯度下降法 机器学习包含的内容很多,数据分析,模型选择和模型求解则是其中非常重要的三个步骤。 其中模型求解算法主要分为两种,一种是基于数值最优化的,一种是基于统计...
  • isuccess88
  • isuccess88
  • 2017年04月19日 23:36
  • 421

浅谈对梯度下降法的理解

浅谈梯度下降法   如果读者对方向导数和梯度的定义不太了解,请先阅读上篇文章《方向导数与梯度》。   前些时间接触了机器学习,发现梯度下降法是机器学习里比较基础又比较重要的一个求最小值的算法。梯度下降...
  • zhulf0804
  • zhulf0804
  • 2016年08月19日 14:04
  • 6636

理解梯度下降法

梯度下降法是求解无约束最优问题中常用到的一种学习方法,形式简单,属于一阶收敛,在空间进行线性搜索。在前面讲到的逻辑斯蒂回归模型中,就常用到梯度下降法来学习参数。 首先给出问题定义(统计学习方法附录A...
  • shijing_0214
  • shijing_0214
  • 2016年04月11日 19:27
  • 1980

梯度下降法综述

Gradient Descent Variants(1)Batch gradient descent: 计算整个数据集上, Cost function 对于parameters的偏导,而后更新梯度;对...
  • meanme
  • meanme
  • 2016年03月23日 22:53
  • 3031

对拉格朗日乘数法的直观认识

高数里面我们学过,带等式约束的最优化问题可以用拉格朗日乘数法解决。最近看到一些文章,还是觉得把这个记下来,防止忘记。 【例子】 问题描述:求双曲线xy=3上离远点最近的点。 这个问题是一个带等...
  • vincent2610
  • vincent2610
  • 2017年04月19日 12:30
  • 373

线性回归及梯度下降算法详解

一、线性回归问题   回归最简单的定义是,给出一个点集D,用一个函数去拟合这个点集,并且使得点集与拟合函数间的误差最小,如果这个函数曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称...
  • Chenyukuai6625
  • Chenyukuai6625
  • 2017年07月05日 12:04
  • 351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:梯度下降法理解
举报原因:
原因补充:

(最多只允许输入30个字)