梯度为什么是函数增加最快的方向

参考 https://zhuanlan.zhihu.com/p/38525412

神经网络梯度下降算法中,我们潜意识就会默认梯度的反方向是Loss下降最快的方向,那么如何证明呢?

首先回顾一点基础知识(为方便理解,多元函数我们就用二元函数举例。注意这里的二元指的是自变量的个数,即X、Y都是自变量。f(X,Y)是因变量,你也可以把它理解成Z。整个二元函数是发生在三维空间中的,是一个曲面。我们探讨函数f(X,Y)在(X0,Y0)点处变化时,指的是自变量X、Y在XOY这个投影平面内的变化。先说这么多,方便后边理解:
一元函数的导数:就是曲线f(X)在x0点的变化率,只有X轴这一个变化方向。
多元函数的导数:又被称为方向导数,因为多元函数除了沿着X轴、Y轴变化,沿着X、Y任意组合出的方向也都可以变化。所以求导数之前要先说明求得的导数的方向,所以叫方向导数。方向导数中沿着坐标轴方向的又被称作偏导数。
梯度:就是一个方向,是函数f(X,Y)在(X0,Y0)点处函数值变化最大的方向。梯度的数学形式就是把函数的所有偏导数组合起来,也即(fx(X,Y), fy(X,Y)),梯度是一个矢量,用来表示方向。

看过梯度的定义:
我们会有一个理解:曲面上一个点可以向周围360度变化,也即可以沿着XOY平面上无穷多个方向求方向导数,梯度就指向了其中让函数值f(X,Y)变化最大的方向。
我们也有一个疑问:方向导数的方向是任意的,跟X轴、Y轴方向没有什么联系,那么为什么用X轴、Y轴方向上的偏导一组合就变成了梯度方向,而且还指明了函数值变化最大的方向。
这里我们可以考虑反证:既然定义告诉我们梯度是方向导数中变化最大的方向,并且数学形式就是偏导数的组合。那么我们只用找到方向导数中变化最大的方向,然后看看这个方向是不是偏导数的组合即可。

步骤一:因为要找方向导数中的最大值,我们先写出方向导数的表达式:
任一方向的方向向量可以表示为(cosα,sinα), α 为此向量与x轴正向夹角,显然根据 α 的不同,此向量可以表示任意方向的单位向量。当点(x0,y0)沿着该方向向前走长度 t 到达点 (x0+tcosα,y0+tsinα) 时(终点的坐标可以根据向量运算法则求出),函数f(X,Y)的变化量等于 f(x0+tcosα,y0+tsinα) - f(x0,y0) 。根据极限的定义,此时函数沿此方向的变化率,也即方向导数为:
梯度为什么是函数增加最快的方向
步骤二:因为由梯度定义已知,梯度的数学表达式最后被表示成了所有偏导数的组合,我们这里考虑先将方向导数写成跟偏导数有关的形式。
梯度为什么是函数增加最快的方向
按数学教材上,这样就可以了,方向导数被表示成偏导的组合的形式。但是这个最后一步的方向导数表达式很难从几何上理解,试想函数f(X,Y)沿着x轴方向走了dx距离之后,函数值增大了20;f(X,Y)沿着y轴方向走了dy距离之后,函数值增大了30;那么沿着(dx,dy)方向走sqrt(dx2+ dy2)距离之后就f(X,Y)就一定增大50吗?不一定吧,试想函数是一个马鞍面,两边下垂中间鼓起,那么很有可能f(X,Y)在X轴上走dx增加20,在Y轴上走dy增加30,但是沿着中间方向走sqrt(dx2+ dy2)却可以增加200,这是我之前一直想不通的地方,因为曲面边缘和中间的变化是不能线性来算的。

参考 https://zhuanlan.zhihu.com/p/38967869

我们应该按照微分的核心思想来理解,也即在变化极小的区间内可以以直代曲,可参考上边链接。一元函数是用直线近似曲线,二元函数是用平面近似曲面。而在平面上,f(X,Y)沿中间方向的变化值是可以用坐标轴方向变化值累加的,方向导数用偏导数表达的式子就可以理解了。从下图可以看出,f(X,Y)从A点到B点的变化值,明显等于从A到C的变化,加上从C到B的变化之和。也即f(x0,y0)从D点出发,沿着X轴方向走dx先到β那个角所在的点,这时f(X,Y)增大了一部分,再从β角沿着y轴走dy到F点。因为是平面,f(X,Y)的两步增量跟直接沿着梯度方向AB走sqrt(dx2+ dy2),直接从D点到达F点是一样的。原来曲面这么理解就不行了,曲面的话,F点可能鼓到上边去了。
梯度为什么是函数增加最快的方向
根据这种以直代曲的理解,步骤一中式子上半部分,也即f(X,Y)的增量dZ = f(x0+tcosα,y0+tsinα) - f(x0,y0) 可以直接表示成 dZ=fx(X,Y)dx + fy(X,Y)dy + o(sqrt(dx2+dy2)), 其中dx其实就是tcosα,dy就是tsinα,sqrt(dx2+dy2)就是t。将dZ带回步骤一式子上半部分,求极限直接可得方向导数用偏导表示的形式:
梯度为什么是函数增加最快的方向

步骤三:证明方向导数最大方向就是梯度方向
梯度为什么是函数增加最快的方向