首页 > 代码库 > 浅析梯度下降法

浅析梯度下降法

  上段时间学习caffe,caffe的solver优化方法中涉及到梯度下降法。当时对梯度下降法的概念和原理都很模糊,就专门去学习了下,现在把自己的理解记录下来,一方面加深印象,一方面也方便随时查阅。如果有理解错误的地方,希望看到的予以指正,谢谢。

  一、什么是梯度?梯度和方向导数的关系是什么?(简述,需要详细了解的可以自行搜索)  

  方向导数:对于一个函数f,在其定义域内存在一点k,我们把函数f在点k上任一方向的导数,叫做方向导数。

  梯度:经过数学推理可以证明,函数fk点的梯度方向,等于函数f在k点方向导数取最大值的方向,梯度的模为方向导数最大值。这里我们可以理解为:方向导数代表着函数在k点的变换率,当变换率最大时,梯度最长,此时函数在该点的梯度方向是向上的。

  二、损失函数--loss function

  损失函数描述的是预测函数“不好”的程度。    

  假设对于一组数据集(x1,y1),(x2,y2),...,(xn,yn),假设其预测函数为hΘ(x),Θ为参数权重,是一个向量,x为参数,其loss函数可以定义为:

技术分享

其中hΘ(xi)对应xi的预测值,而yi为其对应的真实值。

  我们的目的:寻找到一个技术分享,使得损失函数最小。

  三、如何使得损失函数最小--梯度下降法

  1、梯度下降法的流程

   (1) 首先对技术分享随机赋值;

   (2) 对技术分享进行求导,并且使得技术分享按照梯度下降的方向进行减少。

   (3) 当梯度下降到预设值时,停止下降。此时认为损失函数技术分享技术分享处收敛,变化率最小。

   2、梯度下降法公式:

技术分享

含义:对于每一个技术分享,函数都沿着其下降最多的方向进行变化,直到达到一个极小值。

理解:因为梯度的方向是方向导数取最大值时的方向,此时函数在技术分享点的变化率最大且为正值,即当前梯度的方向为上升最多的方向。如果想要获得向下下降最多的方向,即取当前梯度方向的反方向即可。

  3、举例说明(注:本例子图片来自http://blog.csdn.net/zengdong_1991/article/details/45563107)

  看下图:

技术分享

分析:

技术分享

Ps:个人理解--因为梯度的方向是方向导数取最大值的方向,方向导数取最大值,一定大于0,所以此时梯度的方向就是函数变化率最大的方向且方向向上。而梯度下降发用负号使得变化的方向变为梯度下降最多的方向。

  四、梯度下降与梯度上升

  1、梯度上升公式:

  技术分享

  2、梯度下降与梯度上升区别与联系

  其实梯度下降与梯度上升,描述的是在迭代过程中参数值更新的方向。梯度下降即参数值更新的方向与梯度本身的方向相反,即向下的方向更新;而梯度上升即参数值更新的方向与梯度的方向相同,即向上的方向更新。但是注意:无论梯度的方向是向上还是向下,在迭代过程中,梯度的模是一直下降的,因为随着梯度方向的改变,函数的变化率都是逐渐降低的,变化率降低,方向导数的最大值下降,即梯度的模值降低。

  搞不清楚的,可以参考上图理解。

PS:写完发现自己其实理解的还是很浅显,在博文中很多表达其实都不够准确,先写成这样,等以后理解加深了,再进行修正。刚开始写博文,搞的很丑,还需改进。

参考博文:

1.http://blog.csdn.net/wolenski/article/details/8030654

2.http://blog.csdn.net/zengdong_1991/article/details/45563107

3.http://blog.csdn.net/xiazdong/article/details/7950084

4.http://www.cnblogs.com/hitwhhw09/p/4715030.html

   

 

 

 

  

 

浅析梯度下降法