为什么模型训练要采用梯度下降?为什么梯度方向是函数变化率最快的方向
关于梯度下降,相信很多小伙伴都知道,模型训练中梯度方向是函数变化率最快的方向,用于快速的降低损失,这是用于优化模型的一个重要原因。但是梯度方向为什么是函数变化率最快的方向?相信很多人不太清楚,这里是我参照B站上深度之眼的一篇文章给出自己的一些原理上的理解,也希望自己在深度学习这条路上走的更远。
1、什么是梯度
从微积分层面上来说梯度就是函数求导,对于一元函数来说梯度就是导数:
那么多元函数便是偏导数了:
1、变化率最快的方向
对于一元函数来说(这里X0处左右极限存在且相等)
对于一元函数来讲,由于变量为单变量,单变量函数只有一个变量x在变动,所以只有一个方向的变化率,其梯度方向只有一个。
对于多元函数来说
多元函数存在多个偏导数(方向导数)表示多个方向上的变化率。下面以二元函数f(x,y)为例
fx(x,y):y方向固定不变时,函数沿x轴的变化率
fy(x,y):x方向固定不变时,函数沿y轴的变化率
这是函数以两个坐标轴方向的变化率,但却不能够表示二维平面的所有方向的变化率,因此需要求出该平面沿着各个方向的变化率,然后找到下降最快的变化率方向。
证明之前先提出几个假设:
1、将山峰表面看作是一个二维曲面 z=f(x,y)
2、M0为所处位置(x,y)
3、假设M0点处下山变化最快的方向为L(注意这里是假设)
4、M1为L方向上离M0点很近的点
5、α为L向量与x轴的夹角
6、ρ为M0点和M1点之间的距离
接下来就该正式的推理了
首先我们需要了解的是极限与导数的关系,当函数中的某一个点的极限存在且左右极限相等时,该点的极限等于其导数。接下来就可以进行公式推导了。
可以求出f(x,y)沿L方向的极限定义(如上图所示M0点的极限存在且左右极限相等):
上面是极限的定义公式。
二维平面z=f(x,y)在M0点是可微分的,根据函数的增量有下式:
可能有的小伙伴不清楚上面这个公式是哪来的,其实就是一个全微分公式
其下是全微分公式的定义:
若∆z = f( x0 + ∆x , y0 + ∆y ) - f( x0 , y0 ) = A∆x + B∆y + o(t),
则称函数z = f(x,y)在点( x0,y0 )可微,A∆x + B∆y称为函数z = f(x , y)在点(x0,y0)的全微分。
记为:dz = A∆x + B∆y
其中:A为f(x , y)在点(x0 , y0)对x的偏导数,B为f(x , y)在点(x0 , y0)对y的偏导数
继续推导公式
两边同时除以p
因此有:
这里便推出了一个重要的表达式,二维山峰平面上任意导数变化率方向可表示成:
这里令
有任意梯度方向:
由上图可以看出要使∂f/∂l最大,β角度为0,此时A与L同方向,L是之前提到的变化最快的方向,此时我们看一下A:
能够看出A就是二元函数的梯度方向,由此可以证明梯度方向是函数变化率最快的方向。