机器学习入门之从导数到方向导数和梯度,一步步理解深度学习中的梯度下降算法
小标 2018-12-12 来源 : 阅读 868 评论 0

摘要:本文主要向大家介绍了机器学习入门之从导数到方向导数和梯度,一步步理解深度学习中的梯度下降算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。

本文主要向大家介绍了机器学习入门之从导数到方向导数和梯度,一步步理解深度学习中的梯度下降算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。

吴恩达的深度学习课程五门里已经学了四门,课后的编程练习也都跟着做了,在学习的过程中,时常忍不住去探究背后的数学原理,毕竟大学里也学过高等数学,概率论和线性代数这几门机器学习的必备数学课程,又考过研。虽然不是数学天才,但自认为对数学还是蛮感兴趣的,而吴恩达的这门课恰好相对弱化了数学理论,我就自己去翻书+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时,方向导数的值最大,多元函数增加最快,也就是说梯度的方向就是函数增加最快的方向,当θ=π时,方向导数的值最小,多元函数减小最快,也就是在梯度相反的方向上,方向导数最小。


总结



导数、偏导数和方向导数衡量的都是函数的变化率;


梯度是以多元函数的所有偏导数为元素的向量,代表了函数增加最快的方向;


在梯度反方向上,多元函数的方向导数最小,函数减小最快,在神经网络中,在梯度反方向更新参数能最快使代价函数最小化,所以梯度下降法也叫最速下降法。


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能机器学习频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程