梯度下降算法简明教程

最早接触梯度下降算法是在学习逻辑回归(Logistic Regression),对于权重w的迭代更新。当然运用梯度算法的地方远不止逻辑回归,该方法思路简单但适用范围很广,简单的线性回归(Linear Regression),以及最近在看的神经网络(Neural Network)都有涉及梯度算法,所以掌握该方法还是很有必要的,下面来看看吧。

梯度算法适用于求极值的问题,极值包括两种(极大值、极小值),所以一般求极大值我们使用梯度上升算法,求极小值我们使用梯度下降算法。两者思路方法一致,只是迭代更新时的更新方式相反,下面以梯度下降为例。

简述梯度下降思路:

首先这里引用吴老师的例子来简单说明:

如上图,想象一下你正站立在山顶的这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。当然初始位置点也会影响最终的结果,从上图就能知道。

以上便是梯度下降的思想,这里首先来了解以下什么是梯度?通俗一点来说,梯度就是某一函数在某点处的方向导数沿着该方向取得最大值,即函数在当前位置的导数。可以简述为该公式:\frac{\bigtriangleup y}{\bigtriangleup x} = \alpha,线上相近两点做差,当\bigtriangleup x趋近于0(即limit=0)时\alpha值存在,则函数在此点可导,\alpha为此处的导数。

梯度下降算法:

当我们的目标函数f(w)为凸函数时,便可以使用梯度下降算法来更新参数,梯度下降算法的公式应该比较熟悉了:

                                                           w:=w_{0}-\eta \triangledown _{w0}}f(w_{0})

其中w为自变量,也就是下降的坐标位置;\eta为学习因子,也就是我们下山的一个步长,该值不宜过大、过小;\triangledown _{w}f(w)就是该点在此处的梯度。

梯度下降算法的公式很简单。但是“沿着梯度的反方向(坡度最陡)”是人们的惯性思维,其本质原因是什么?为什么局部下降最快的方向就是梯度的负方向呢?下面用较为简洁通俗的讲解来阐述梯度下降算法的数学推导过程。

一阶泰勒展开式:

简单来说,泰勒展开式的核心思想就是利用函数的局部线性相似这个概念。以一阶泰勒展开式为例:

                                                          f(w)\approx f(w_{0}) +(w-w_{0})\triangledown f(w_{0})

用上面的公式与图形来进行阐述,首先凸函数f(w)的某一小段[w,w_{0}]由上图的粉色曲线表示,其中红色直线为粉色曲线的近似线性拟合。该直线的斜率等于f(w)函数在w_{0}处的导数。根据直线方程公式,很容易推导出f(w)的近似表达式为上面的公式:

                                                         f(w)\approx f(w_{0}) +(w-w_{0})\triangledown f(w_{0})

简述一下推导过程,定义线性公式y = kx+bk表示在w_{0}处的导数,也就是梯度表示为\triangledown f(w_{0}),接着可以带入点(w_{0},f(w_{0})),得到b值,从而得到了y =\bigtriangledown f(w_{0})x + f(w_{0}) - \bigtriangledown f(w_{0})w_{0},最后再带入点(w,f(w))便得到了上面的最终公式。

f(w)\approx f(w_{0}) +(w-w_{0})\triangledown f(w_{0}) 便是我们利用一阶泰勒展开式推导得出,而其中主要利用的数学思想就是曲线函数的局部线性拟合相似。

梯度下降数学原理:

在了解了一阶泰勒展开式后,又该如何去理解梯度下降算法呢?接下来的重点就是如何去推导出梯度下降算法。

从上面的推导首先我们知道了一阶泰勒公式如下:

                                                         

其中的(w-w_{0})是一个趋近于0的极小矢量,其值的大小也就是前面提到的步长\eta\eta是标量,(w-w_{0})的单位向量可以用v来表示,所以得出如下公式:(即当前位置到下一个距离梯度 = 步长*单位方向)

                                                          w - w_{0} = \eta v

这里值得注意的一点是(w-w_{0})不能太大,否则对应上面的局部线性近似就有很大偏差,而一阶泰勒也就不成立了。在实际的模型参数中该值也不能太小,否则收敛太慢,导致一个长时间的训练。所以这也是一个剑魔中需要不断调参后选择的一个参数。

接下来就是局部下降的重点了!!!局部下降中我们希望通过每一次的下降(即w值的更新)使得目标函数f(w)能够不断变小。所以上式中可以得到\eta v \triangledown f(w_{0}) < 0,即函数:

                                                          f(w) - f(w_{0}) \approx \eta v \triangledown f(w_{0}) < 0

上式中\eta为标量且一般为正值,所以可以忽略得到:

                                                           v \triangledown f(w_{0}) < 0

上面的公式就是我们求得梯度下降最快方向的关键点!!!由于v\triangledown f(w_{0})都是向量,且其中\triangledown f(w_{0})表示当前位置的梯度方向,v表示下一步长的单位向量,也是需要我们计算的值,通过求得v,便可以通过w - w_{0} = \eta v来求得w的值。

而此时的v如何得出?首先v\triangledown f(w_{0})皆为向量,而两个向量在内积的情况下会出现那些结果:

其中m(红)与n(蓝)都是向量,其中\theta表示两者的夹角。mn的乘积如下:

m \cdot n = \left \| m \right \|\cdot \left \| n \right \|\cdot cos(\theta )

从上式中可以得出\left \| m \right \|\left \| n \right \|都是可定值(即标量),一旦确定就只需要确定cos(\theta )的值然后得出结果,而cos(\theta )的取值为[-1,1],很显然取-1是最好的结果,此时m \cdot n取得最小值,保证最优化v \triangledown f(w_{0}) < 0(即此时为梯度下降最快)。下图观察cos的周期性变化:

通过上面的v \triangledown f(w_{0}) < 0公式引出的余弦知识,我们得出cos(\theta )取值-1最优,也就是两个向量相反,从而得出v值(变化范围-1到1):

v = -\frac{\bigtriangledown f(w_{0})}{\left \| \bigtriangledown f(w_{0}) \right \|}

此时我们已经求出了最优解的v,带入公式w - w_{0} = \eta v

w = w_{0} -\eta \frac{\bigtriangledown f(w_{0})}{\left \| \bigtriangledown f(w_{0}) \right \|}

由于上式的\left \| \bigtriangledown f(w_{0}) \right \|为可定值(标量),所以可以省略该值,简化为如下公式:

w = w_{0} -\eta \bigtriangledown f(w_{0})

迭代中进行转化也就得到了最上面我们提出的梯度下降算法公式:

w:=w_{0}-\eta \triangledown _{w0}}f(w_{0})

最终,通过详细的步骤说明经过一步一步的转化我们得到了上面权重系数w的更新表达式。

 

总结一下:

首先上面我们提到了一阶泰勒展开式,通过局部线性相似的思想得到了位置ww_{0}的关系,再通过向量相乘最小化原理得到了

单位向量v与此时位置梯度\triangledown f(w_{0})的关系,最后通过公式的变化求出梯度下降算法更新公式。通过本篇详细的公式推导相信你已经不仅了解了梯度下降算法的使用,也了解了其中的数学原理。

 

最后感谢一下yangyang同学为本篇文章提供的一张样例图片

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值