第一次接触方向导数与梯度的概念,是在大学的高等数学课堂上,当时对于这部份内容是似懂非懂的。网络
巧合的是,后来在参加硕士复试的时候,有位老师提问我对方向导数与梯度的理解,当时我只记得一句话:梯度是方向导数变化最大的方向。虽而后来这位老师成了个人导师,可是如今想来依然以为惭愧,由于我对这两个名词彻底没有理解。函数
后来学习到BP神经网络,也手动推导过根据梯度降低法获得的权值更新公式,但方向导数的定义一直是个人心结。今天终于花了时间将这个简单的问题弄明白,特意记录下来,以警示本身在未来的科研道路上要脚踏实地,不可浮于表面!学习
一个函数沿指定方向的变化率。spa
所以,构建方向导数须要有两个元素:3d
1) 函数blog
2) 指定方向博客
固然,与普通函数的导数相似,方向导数也不是百分之百存在的,须要函数知足在某点处可微,才能计算出该函数在该点的方向导数。数学
至于其物理含义,这里采用最经常使用的下山图来表示。变量
简单将上图看做是一座山的模型,咱们处在山上的某一点处,须要走到山下。理论上来讲,这座山的表面是能够经过一个函数的描述的(虽然想要找到这个函数可能很难),而这个函数能够在不一样的方向上都肯定出一个方向导数,这就比如于若是咱们想下山,道路并非惟一的,而是能够沿任何方向移动。区别在于有些方向可让咱们下山速度更快,有些方向让咱们下山速度更慢,有些方向甚至引导咱们往山顶走(也能够理解为下山速度时负的)。在这里,速度的值就是方向导数的直观理解。原理
一个函数对于其自变量分别求偏导数,这些偏导数所组成的向量就是函数的梯度。
在不少资料中能够看到以下的梯度定义方法:
诚然,这种定义方法更加权威,可是却不够直观,这也是为何我在高等数学课堂上学习梯度概念时感受云里雾里。这种定义方法只针对二元函数,因此公式中的i,j可分别表示为函数在x和y方向上的单位向量,这样的描述可让咱们更好理解(由于人类大脑能够比较轻松的理解三维世界的模型图),可是一旦到了更高维度的世界,单纯靠这个公式就不容易理解了。
函数在某点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值。
以上描述很是好理解,那如何证实呢?
说实话,我以为以上证实过程很抽象,但这就是数学,而咱们要作的就是从这些抽象中来理解问题的实质。
依然采用下山的例子来解释。咱们想要走到山下,道路有千万条,但总有一条可让咱们以最快的速度下山。固然,这里的最快速度仅仅做用在当前的位置点上,也就是说在当前位置A咱们选择一个方向往山下走,走了一步以后到达了另一个位置B,而后咱们在B位置计算梯度方向,并沿该方向到达位置处c,重复这个过程一直到终点。可是,若是咱们把走的每一步链接起来构成下山的完整路线,这条路线可能并非下山的最快最优路线。
缘由是什么?能够用一句古诗来解释:“不识庐山真面目,只缘身在此山中。”由于咱们在山上的时候是不知道山的具体形状的,所以没法找到一条全局最优路线。那咱们只能关注脚下的路,将每一步走好,这就是梯度降低法的原理。