机器学习数学基础-1 方向导数与梯度 2018-04-22
不要问我为什么需要学习这个,哈哈哈。学习机器学习之前知道了这些,搞起来信手拈来,窗明几净。有人总是问这个细节~
方向导数之前首先学一下偏导数。
(1)偏导数 (Link1 )
二元偏导数定义如下(二元就是两个未知数,偏导数指的就是某一个方向上的导数,下面讲解)
二元偏导数定义什么是偏导数呢?对于二元偏导数,就有X方向的偏导数和 Y方向的偏导数。X方向偏导数,也就是说这个函数Y不变,X变化对应的变化率。 那么Y不变,也就是说Y=一个常数a(假设为a)这个垂直于Y轴的曲面与f(x,y)的曲面的交线,如下图中的z=f(x,y0)或者z=f(x,a),你看到了那个红色的曲线,就是关于X一元函数f(x,a)了,那么对这个一元函数f(x,a)求导,得到的导数就是X偏导数了。
物理意义是什么呢?比如一坨水流经过一个很奇怪形状的水管子(爱怎么奇怪怎么奇怪吧)然后你想知道你在这个水管子建立的坐标系(随便你怎么建立吧,坐标轴想怎么放就怎么放吧),但是你就想知道水的总流速你知道,但是你就是想知道X轴那个方向的水流速,你只需知道这个方向的水流量函数的X方向偏导数(这里是流量函数的导数,而不是流速函数的导数)。有的时候呢,我们就是闲着没事情干,就是想知道其他方向的怎么办呢?
(2)方向导数
如下图我们X的偏导数,就是X轴方向(1,0)的,Y的偏导数就是 y轴方向(0,1)的。如上所说,有的人就是无聊,想知道L方向的偏导数。其实这就是方向导数了。因此偏导数仅仅是方向导数的两个特例罢了。其实方向导数十分有意义的,比如在水流L方向的水管上有一个小破损,你需要计算一下冲击力有多大,看看你的管子能不能憋得住那个力量(根据高中物理知识,冲量定理,你需要知道这个方向的流速,才能计算冲击力)我们需要算一下这个方向流速,也就是这个方向的方向导数。
现在我们知道水流量函数X方向的偏导数和Y方向的偏导数,分别代表X方向和Y方向的流速。那么L方向的流速呢,那么我们就把X方向和Y方向分解过来不就是了嘛?!
其实方向导数的物理意义就是某一方向的流速,如上图,这么我们就可以知道,方向导数为什么是这个。
而且根据这个物理意义,你也知道公式中那个角度和正余弦分别是什么意思了。方向导数的公式如上。
还有人觉得这个解释好理解,不正规,那就来点正规的。证明一下方向导数的公式。(不想看的忽略。。。。。。。。。。之间的)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
证明如下:很好理解(另外o(||P0P||)那是高阶无穷小)
另外,方便理解,我也给出了一个low版的证明。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
(3)梯度
个人认为梯度并不是用来定义着玩的,是刚好这个矢量方向上的方向导数最大,也就是变化最快,为了说着方便,才定义它的。
废话少说,言归正传。
有一个很重要的定理,梯度方向上的方向导数最大,也就是水在梯度这个方向上,变化最快。这一点可以用到机器学习里,下降最快的就是梯度方向。
关于这个定理的证明,从上图的等高线的分析可以理解。另外,我也写了一个又low又啰嗦的证明,如下。
备注:另外你的高等数学不好的话,强烈推荐你看这个复旦大学的课件(link here),如果学术的,学习AI就得静下心来,别一上来就报个10天搞定python,5天入门AI的这种课程。自己好好研究一下数学的原理,然后再考虑其他。我是小白,还是要潜心学习基本理论~
另外,有问题请关注微信公众号 “Scientists”私信,或给小白我分享经验~