继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

从导数到方向导数和梯度,一步步理解深度学习中的梯度下降算法

种子_fe
关注TA
已关注
手记 28
粉丝 83
获赞 479

本文首发于慕课网,为了更好展现数学公式以方便阅读理解,重新编辑后发表于CSDN,点击访问
吴恩达的深度学习课程五门里已经学了四门,课后的编程练习也都跟着做了,在学习的过程中,时常忍不住去探究背后的数学原理,毕竟大学里也学过高等数学,概率论和线性代数这几门机器学习的必备数学课程,又考过研。虽然不是数学天才,但自认为对数学还是蛮感兴趣的,而吴恩达的这门课恰好相对弱化了数学理论,我就自己去翻书+Google学习了。最近偶然翻自己以前的笔记,看到写的关于梯度的概念的部分,感觉还是有些不清晰和遗忘的地方,梯度是梯度下降算法的基础,而梯度下降算法又是神经网络最基本的算法,于是我又花了一天的时间复习了一下。为了防止自己以后再遗忘,也希望对其他在初学的小伙伴们有帮助,我决定总结一下相关数学知识,这篇手记会从导数的概念开始,一步步引出梯度下降算法。

导数的定义

函数y=f(x)在点x0处的导数f’(x0)是(f(x0+Δx)-f(x0))/Δx在Δx趋于0时的极限。

自变量x在x0处取得增量Δx时,相应的因变量取得增量Δy=f(x0+Δx)-f(x0),函数在x0处的导数就是Δy与Δx之比在Δx0时的极限,导数其实就是因变量y在点x0处的变化率,它反映了因变量随自变量的变化而变化的快慢程度。另一方面,从几何意义上来说,函数在一点的导数值就是过这一点的切线的斜率

根据导数的定义可以知道,当f’(x)>0时,f(x)单调递增,减小x可以减小f(x),当f’(x)<0时,f(x)单调递减,增大x可以减小f(x)。由此可知f(x-αf’(x)) < f(x),因此我们可以将x往导数的反方向移动一小步来减小f(x),即x:=x-αf’(x)。这就是梯度下降法

方向导数与神经网络中的梯度下降

在训练神经网络时,我们都是通过定义一个代价函数cost function),然后通过反向传播更新参数来最小化代价函数,深度神经网络可能有大量参数,因此代价函数是一个多元函数,多元函数与一元函数的一个不同点在于,过多元函数的一点,可能有无数个方向都会使函数减小。这样说可能不太直观,我们以日常生活中登山运动为例,当你下山的时候,可以走从山顶到山脚的一条直道,也可以走环山的路或者S型的路,显然环山的路和S型的路要绕着山走,花费的时间更长,路更平缓,而直道则更陡峭,下山的速度更快,花费的时间更短。引申到数学上,我们可以把山这样的曲面看作一个二元函数z=f(x,y),二元函数是多元函数里最简单的情形,也是易于可视化直观理解的。前面提到一元函数导数的几何意义是切线的斜率,对于二元函数,曲面上的某一点(x0,y0,z0)会有一个切平面,切平面上的无数条直线都是过这一点的切线,这些切线的斜率实际上就是过这一点的无数个方向导数的值,和一元函数一样,方向导数的值实际反映了多元函数在这一点沿某个方向的变化率。正如下山必然有一条最陡峭、最快的路径,方向导数也有一个最小值,在最小值对应的方向上,函数下降最快,而这个方向其实就是梯度的反方向。对于神经网络,在方向导数最小的方向更新参数可以使代价函数减小最快,因此梯度下降法也叫最速下降法。

偏导数的定义

上面对方向导数和梯度下降的解释偏感性,下面为了从数学上明确方向导数和梯度的概念,加深理解,我们先来看看偏导数的定义。

在一元函数中,导数表示了函数的变化率。对于多元函数,自变量不止一个,因变量与自变量的关系比一元函数复杂,我们先考虑多元函数关于其中一个自变量的变化率,这就引出了偏导数的概念。

还是以二元函数z=f(x,y)为例,当y固定为y0,x在x0处有增量Δx时,相应的函数有增量f(x0+Δx,y0)-f(x0,y0),(f(x0+Δx,y0)-f(x0,y0))/Δx在Δx趋于0时的极限即z=f(x,y)在点(x0,y0)处对x的偏导数,记为fx(x0,y0),对y的偏导数定义与之类似,记为fy(x0,y0)。

方向导数与梯度

偏导数实际上反映了多元函数沿坐标轴方向的变化率,那么函数沿某一非坐标轴方向的指定方向的变化率如何衡量呢?

设l是xOy平面上以P0(x0,y0)为起始点的一条射线,el(cosα,sinα)是与l同方向的单位向量,则射线l的参数方程为:

> x=x0+tcosα,
y=y0+tsinα (t≥0).

P(x0+tcosα,y0+tsinα)为l上另一点,(f(x0+tcosα,y0+tsinα)-f(x0,y0))/t当t趋于0时的极限极为f(x,y)在点P0沿方向l的方向导数,不难发现,函数f(x,y)在x和y坐标轴方向的方向导数分别就是其关于x和y的偏导数,可以证明,函数f(x,y)的方向导数就等于:

> fx(x0,y0)cosα+fy(x0,y0)sinα

这个式子其实可以看成是两个向量(fx(x0,y0),fy(x0,y0))和(cosα,sinα)的点积,根据点积的计算公式,假设上述两个向量的夹角为θ,上式可化为:

> ||(fx(x0,y0),fy(x0,y0))||cosθ

向量(fx(x0,y0),fy(x0,y0))就是函数f(x,y)在点P0(x0,y0)的梯度,由此引出梯度的概念,梯度就是一个向量,这个向量的每个元素分别是多元函数关于每个自变量的偏导数。从上式可以看出,当θ=0时,方向导数的值最大,多元函数增加最快,也就是说梯度的方向就是函数增加最快的方向,当θ=π时,方向导数的值最小,多元函数减小最快,也就是在梯度相反的方向上,方向导数最小。

总结

  1. 导数、偏导数和方向导数衡量的都是函数的变化率;
  2. 梯度是以多元函数的所有偏导数为元素的向量,代表了函数增加最快的方向;
  3. 在梯度反方向上,多元函数的方向导数最小,函数减小最快,在神经网络中,在梯度反方向更新参数能最快使代价函数最小化,所以梯度下降法也叫最速下降法。

参考资料

  1. 高等数学 第六版 上下册 —— 同济大学数学系编 高等教育出版社
  2. 深度学习(花书)—— Ian GoodFellow
  3. 如何直观形象的理解方向导数与梯度以及它们之间的关系? —— 知乎

本作品采用知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。要查看该许可协议,可访问 http://creativecommons.org/licenses/by-nc-sa/4.0/ 或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA。

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP