这次我们来说一说梯度下降问题。
1.什么是梯度下降?
2.梯度下降用来干什么的?
3.如何使用梯度下降?
我们将围绕着三个问题进行说明。
首先我先来说一下梯度下降是什么。举一个例子:,这是一个一元二次函数。对于这个函数来说,就是它的梯度,也就是他的导数。这个很好理解,梯度可以看做一个使得函数变大变小的方向,角度,我们顺着这个梯度就可以使得这个函数变大或者变小,并且依次得到该函数极值点(不一定是最大或最小点)。对于多元函数,例如:这个二元三次函数来说,我们相比较上一个函数,可以看出是他的梯度,也就是该函数的偏导。到目前为止你可能会认为多次一举,这么简单的函数,我画出对应图像,不可以直接找到该函数的极值点么。但是这是有局限的,如果你的函数有几十个或者几百个变量时你也要画图么找点么?这是不现实的,这个时候梯度下降的方法就可以解决问题了。
可能从理论上来解释梯度下降有点抽象,你可以这么理解。有一个函数,它的图像像是一座座连绵起伏的山丘,山丘的高度是,山丘有两个方向和。我们在某个山丘图像上的随机一点处,想要最快到山脚处(生死不论),我们怎么走?肯定是选择最陡峭的方向下山,而这个最陡峭的方向就好比于我们所说的梯度处。然后循环此过程,直至山脚处,结束。但是我们要注意,此时此刻的山脚处并不是全图最低点,前面也说了,有很多的山丘,也许有的山丘最高点都比你此刻所处的点低。所以说,你的位置是极小点,而不是最小点。
然后是梯度下降用来干什么的?通过上述文字,它的作用也很明了,就是找极值点,一般来说在神经网路的代价函数上会使用梯度下降来调整参数,因为我们要通过调整参数权重减小代价函数,所以在这里梯度下降是用来找极小值点的。
如何使用梯度下降?首先明确要减小的函数,之后在确定要改变的参数,选择改变幅度,然后循环计算。举个例子:
代价函数: , y是正确答案,a是计算得出答案
结果计算函数: ,w是我要改变的权重,是输入参数
此时已经确定要减小的函数,以及要改变的权重w
利用链式导出:∂/∂w = ∂/∂ * ∂/∂w = 2*2
若某一时刻 = 1, = 0.5, = 1,则w = w- ∂/∂w = w - *2*(1-0.5)*2 = w - *2 为步长幅度