梯度下降法理解

原创 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
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

梯度下降法的简单理解

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

梯度下降法的理解

在机器学习算法中,使用梯度下降法对参数进行优化过程如下: W_new = W_old - step_size * dL 这里dL 是损失函数在参数W取值为W_old时,对参数W的偏导数值。取减号进行...
  • WepLeo
  • WepLeo
  • 2017年08月04日 09:44
  • 103

【机器学习】逻辑回归算法与梯度下降法的理解和实现

逻辑回归、梯度下降法的学习

对梯度下降法的简单理解

 对梯度下降法的简单理解 2012-05-29  |  pengshilin  |   转藏(50)   梯度下降法又叫最速下降法,英文名为steepest descend m...

通过迭代方法理解最优化问题-梯度下降法

目前机器学习领域的总会听到随机梯度下降法(SDG),理解随机梯度下降则需要知道什么是下降法。本文将会从最简单的多元方程说起,将一种迭代的概念带给初学者,最后在将迭代的概念延伸出去,用于解决最优化的问题...

理解梯度下降法

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

梯度下降法

  • 2014年08月02日 12:38
  • 644KB
  • 下载

随机梯度下降法步长的选择

1、随机梯度下降法步长的选择 以前网上有看到过,说是最好按3倍来调整,也就是0.00001、0.00003、0.0001、0.0003、0.001、0.003、0.01、0.03、0.1、0...

优化算法-梯度下降法

  • 2015年04月06日 21:36
  • 169KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:梯度下降法理解
举报原因:
原因补充:

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