半小时搞定方向导数,梯度是什么

前言

写这篇文章的原因一方面是因为毕业设计选题和神经网络相关,而神经网络的反向传播算法是基于负梯度下降的,所以必须搞懂什么是梯度。另一方面是因为自己其实很久之前搞数模就看过负梯度下降的理论,但是看完用完一次就忘记一次,所以这里记录一下。
我在这篇文章中并不会写特别多详细的理论,公式。只是把一些我看过觉得特别有用的资料、视频贴上来,以及作一点简单的总结

正文

Q1: 什么是梯度,为什么谈到梯度,总是会提到方向导数?

A:其实是因为梯度是由方向导数所推导出来的。所以要搞懂梯度,首先应该要学习什么是方向导数。

什么是方向导数,看这个视频就完全够了(10分钟足够):https://www.youtube.com/watch?v=-DumtBiW4HE (视频在youtube上,所以,you know...)

特别注意的是,方向导数是一个数,它只是说,函数在给定的一个方向上的导数是多少,而不是向量

方向导数的计算公式是(以二元函数为例):

$$ D_uf = <f_x,f_y> <u_x,u_y> $$

其实就是两个向量的内积,内积的计算公式有两个,一个是对应项相乘再相加,另一个为两个向量的模长 X cos<两个向量的夹角>。使用第二个公式所以有

$$ D_uf = |<f_x,f_y>|\times |<u_x,u_y>|\times cost\theta \\ D_uf = |<f_x,f_y>|\times cos\theta \quad\quad |u_x,u_y|=1,因为<u_x,u_y>为单位向量 $$

要想方向导数达到最大,$\theta=0$即可。而梯度就是指使得方向导数达到最大值的那个方向向量。注意,梯度是一个向量。而且我们可以知道,在梯度上,方向导数一定是大于等于0的,因为模长是不可能小于0的,换句话说函数在梯度方向一定是非减的

Q2:为什么说沿着梯度方向是函数在该点增长最快的方向?
A:首先,你一定知道在一元函数时,沿着曲线的切线方向增长速度最快(切线的斜率就是函数在该点的求导值)。那么上升到二元的时候,要求曲线(曲面)在一点的增长最快方向,我们是不是应该也要对函数在该点求导呢。只不过二元时的求导方向有无数个方向,所以我们引入了方向导数。那么一个函数在某点的最快增长方向就转化为在哪个方向下我们的方向导数会取得最大值,而在Q1中,我们已经解释了这个问题,那就是沿着梯度方向。
所以得到这样的结论:沿着梯度方向是函数在该点增长最快的方向,反之沿着负梯度方向就是下降最快的方向,这也是神经网络反向传播算法基于负梯度下降的依据

梯度的视频:https://www.youtube.com/watch?v=npkl19rcpdY

Q3:为什么我在网上看到的梯度总是垂直于某个曲线的投影在该点的切线?

准确来说,梯度的方向是垂直于该点所在的等高线的切线的。这样说肯定没说明白,所以推荐一个链接:https://zhuanlan.zhihu.com/p/27731819

上文图文并茂且有公式推导,相信你应该能看懂的。

最后,再推荐一个视频,讲解偏导数与方向梯度:http://www.365yg.com/a6503481904484844046/#mid=1573065380099085

不想在没有贴图的情况下还写这么多字,所以大家多看看视频吧。我觉得贴的几个视频已经很好理解。

OK,就酱。相信看完上述资料,你应该搞懂什么是方向导数和梯度了吧。

Last modification:May 3rd, 2019 at 11:36 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment