DNN理解(三)

13 篇文章 1 订阅
7 篇文章 1 订阅

这次我们来说一说梯度下降问题。

1.什么是梯度下降?

2.梯度下降用来干什么的?

3.如何使用梯度下降?

我们将围绕着三个问题进行说明。

首先我先来说一下梯度下降是什么。举一个例子:y=x^2,这是一个一元二次函数。对于这个函数来说,2x就是它的梯度,也就是他的导数。这个很好理解,梯度可以看做一个使得函数变大变小的方向,角度,我们顺着这个梯度就可以使得这个函数变大或者变小,并且依次得到该函数极值点(不一定是最大或最小点)。对于多元函数,例如:y=xy+x^2y这个二元三次函数来说,我们相比较上一个函数,可以看出(y+2xy,x+x^2)是他的梯度,也就是该函数的偏导。到目前为止你可能会认为多次一举,这么简单的函数,我画出对应图像,不可以直接找到该函数的极值点么。但是这是有局限的,如果你的函数有几十个或者几百个变量时你也要画图么找点么?这是不现实的,这个时候梯度下降的方法就可以解决问题了。

可能从理论上来解释梯度下降有点抽象,你可以这么理解。有一个函数,它的图像像是一座座连绵起伏的山丘,山丘的高度是z,山丘有两个方向x,yy。我们在某个山丘图像上的随机一点处,想要最快到山脚处(生死不论),我们怎么走?肯定是选择最陡峭的方向下山,而这个最陡峭的方向就好比于我们所说的梯度处。然后循环此过程,直至山脚处,结束。但是我们要注意,此时此刻的山脚处并不是全图最低点,前面也说了,有很多的山丘,也许有的山丘最高点都比你此刻所处的点低。所以说,你的位置是极小点,而不是最小点。

然后是梯度下降用来干什么的?通过上述文字,它的作用也很明了,就是找极值点,一般来说在神经网路的代价函数上会使用梯度下降来调整参数,因为我们要通过调整参数权重减小代价函数,所以在这里梯度下降是用来找极小值点的。

如何使用梯度下降?首先明确要减小的函数,之后在确定要改变的参数,选择改变幅度,然后循环计算。举个例子:

代价函数:y=\left \|y-a \right \|^2 , y是正确答案,a是计算得出答案

结果a计算函数:a=wx^2 ,w是我要改变的权重,x是输入参数

此时已经确定要减小的函数y=\left \|y-a \right \|^2,以及要改变的权重w

利用链式导出:∂y/∂w = ∂y/∂a * ∂a/∂w = 2(y-a)*2x

若某一时刻y = 1,a = 0.5,x = 1,则w = w- \etay/∂w = w - \eta*2*(1-0.5)*2 = w - \eta*2    \eta为步长幅度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值