参考博客https://blog.csdn.net/baishuo8/article/details/81408369和知乎https://www.zhihu.com/question/36301367
一、导数(derivative)
导数,是我们最早接触的一元函数中定义的,可以在 xy 平面直角坐标系中方便的观察。当 Δx→0时,P0处的导数就是因变量y在x0处的变化率,反映因变量随自变量变化的快慢;从几何意义来讲,函数在一点的导数值就是过这一点切线的斜率。
二、偏导数(partial derivative)
偏导数对应多元函数的情况,对于一个 n元函数 y=f(x1,x2,…,xn),在 ℝn 空间内的直角坐标系中,函数沿着某一条坐标轴方向的导数,就是偏导数。在某一点处,求 xi轴方向的导数,就是将其他维的数值看做常数,去截取一条曲线出来,这条曲线的导数可以用上面的导数定义求。求出来就是此点在这条轴方向上的偏导数。
三、方向导数 (directional derivative)
很多时候,仅仅有了坐标轴方向上的偏导数是不够的,我们还想知道任意方向上的导数。函数在任意方向上的导数就是方向导数。而空间中任意方向,是一定可以用坐标轴线性组合来表示的,这就架起了偏导数和方向导数的桥梁:
令 ,
其中,α是由偏导数定义的向量A 与 我们自己找的单位方向向量 I之间的夹角。
在训练神经网络时,我们都是通过定义一个代价函数(cost function),然后通过反向传播更新参数来最小化代价函数,深度神经网络可能有大量参数,因此代价函数是一个多元函数,多元函数与一元函数的一个不同点在于,过多元函数的一点,可能有无数个方向都会使函数减小。引申到数学上,我们可以把山这样的曲面看作一个二元函数z=f(x,y),二元函数是多元函数里最简单的情形,也是易于可视化直观理解的。前面提到一元函数导数的几何意义是切线的斜率,对于二元函数,曲面上的某一点(x0,y0,z0)会有一个切平面,切平面上的无数条直线都是过这一点的切线,这些切线的斜率实际上就是过这一点的无数个方向导数的值,和一元函数一样,方向导数的值实际反映了多元函数在这一点沿某个方向的变化率。
四、梯度 (gradient)与神经网络中的梯度下降
在上面的方向导数中,
- A是固定的
- |I|=1是固定的
- 唯一变化的就是 α
当 I与 A 同向的时候,方向导数取得最大,此时我们定义一个向量 ,其方向就是 A的方向,大小就是 A的模长,我们称这个向量就是此点的梯度。沿着梯度方向,就是函数增长最快的方向,那么逆着梯度方向,自然就是函数下降最快的方向。由此,我们可以构建基于梯度的优化算法。正如下山必然有一条最陡峭、最快的路径,方向导数也有一个最小值,在最小值对应的方向上,函数下降最快,而这个方向其实就是梯度的反方向。对于神经网络,在方向导数最小的方向更新参数可以使代价函数减小最快,因此梯度下降法也叫最速下降法。
向量(fx(x0,y0),fy(x0,y0))就是函数f(x,y)在点P0(x0,y0)的梯度,由此引出梯度的概念,梯度就是一个向量,这个向量的每个元素分别是多元函数关于每个自变量的偏导数。方向导数的值最大,多元函数增加最快,也就是说梯度的方向就是函数增加最快的方向,方向导数的值最小,多元函数减小最快,也就是在梯度相反的方向上,方向导数最小。
1、解释方向导数只有一个最小值:
具有一阶连续偏导数,意味着可微。可微意味着函数 在各个方向的切线都在同一个平面上,也就是切平面。所有的切线都在一个平面上,就好像光滑的笔直的玻璃上,某一点一定有且只有一个最陡峭的地方,因为方向导数是切线的斜率,方向导数最大也就意味着最陡峭。
2、解释最大值在哪个方向?
最大值的方向是梯度的方向。演示参照https://www.matongxue.com/madocs/222.html
五、小结
- 导数、偏导数和方向导数衡量的都是函数的变化率;
- 梯度是以多元函数的所有偏导数为元素的向量,代表了函数增加最快的方向;
- 在梯度反方向上,多元函数的方向导数最小,函数减小最快;在神经网络中,在梯度反方向更新参数能最快使代价函数最小化,所以梯度下降法也叫最速下降法。