转 对梯度下降法的简单理解 梯度下降法
首先我们应该清楚,一个多元函数的梯度方向是该函数值增大最陡的方向。具体化到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,所以其梯度幅值=014 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.1536 x1=a;x2=b;37 fx=diff(f,'x1'); %求f对x1偏导数38 fy=diff(f,'x2'); %求f对x2偏导数39 fxx=diff(fx,'x1'); %求二阶偏导数 对x1再对x140 fxy=diff(fx,'x2'); %求二阶偏导数 对x1再对x241 fyx=diff(fy,'x1'); %求二阶偏导数 对x2再对x142 fyy=diff(fy,'x2'); %求二阶偏导数 对x2再对x243 fxx=subs(fxx); %将符号变量转化为数值44 fxy=subs(fxy);45 fyx=subs(fyx);46 fyy=subs(fyy);47 x=[fxx,fxy;fyx,fyy]; %求hesse矩阵
在matlab命令行窗口验证函数,结果如下:
最优化应用很广,有很多东西要学,且自己对matlab编程还不熟悉,以后慢慢积累吧!
作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处。
更多阅读
窗花的简单剪法 圆形双喜字的简单剪法
窗花的简单剪法——简介上幼儿园和小学的时候,老师最喜欢教我们做手工,而手工里最常见的必须就是剪窗花哇,那个时候剪了几个比较漂亮的,都会获准带回家,献宝似的交给大人,贴在门上或是窗户上。窗花的简单剪法——方法/步骤窗花的简单剪法
千纸鹤的简单折法之图文并茂 千纸鹤的折法图解
千纸鹤的简单折法之图文并茂——简介千纸鹤最早是来源于日本的,最初人们折千纸鹤是为了祈求亲人早日康复,给予自己最美好的祝愿,而如今这个美好的事物被赋予了更多更有意义的承载,爱情,相比许多男性朋友在七夕情人节的时候送女友什么礼物
怎样包书皮?书皮的简单包法详细步骤 三角包书皮的步骤图解
怎样包书皮?书皮的简单包法【详细步骤】——简介高尔基说过,书籍是人类进步的阶梯。经常阅读书籍是一个非常好的习惯,虽然现在人们喜欢“速食”——快速浏览新闻、快餐、什么都在变快,但是阅读书籍是人们最应该坚持的事情。我喜欢看书,
对初中物理中液体与气体压强产生原因的思考(转自王华刚的博客) 气体压强
(这篇文章提出了一些很有价值的问题,也解析了几个问题,但我觉得还是有不明白的,大家都来围观一下吧.)静流体压强的解释在我国初中物理课程中长期以来一直是一个未能妥善解决的问题。高中以及高中以上学校的物理教师,没有这方面的亲身
转载 净空邪师对诸佛菩萨的诽谤转自天鉴论坛 央视净空是邪师
原文地址:净空邪师对诸佛菩萨的诽谤(转自天鉴论坛)作者:菩提大乐洲净空邪师对诸佛菩萨的诽谤