方向导数、梯度与梯度下降

1.导数

一元函数的情况下,导数就是函数的变化率:
方向导数、梯度与梯度下降
f(x0)=limΔx0ΔyΔx=limΔx0f(x0+Δx)f(x0)Δxf^{\prime}\left(x_{0}\right)=\lim _{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x}=\lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)}{\Delta x}

是函数f(x)在x轴上某一点处沿着x轴正方向的变化率/变化趋势。直观地看,也就是在x轴上某一点处,如果f’(x)>0,说明f(x)的函数值在x点沿x轴正方向是趋于增加的;如果f’(x)<0,说明f(x)的函数值在x点沿x轴正方向是趋于减少的。

2.偏导数

xjf(x0,x1,,xn)=limΔx0ΔyΔx=limΔx0f(x0,,xj+Δx,,xn)f(x0,,xj,,xn)Δx \frac{\partial}{\partial x_{j}} f\left(x_{0}, x_{1}, \ldots, x_{n}\right)=\lim _{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x}\\=\lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}, \ldots, x_{j}+\Delta x, \ldots, x_{n}\right)-f\left(x_{0}, \ldots, x_{j}, \ldots, x_{n}\right)}{\Delta x}

区别:

导数与偏导数本质是一致 的,都是当自变量的变化量趋于0时,函数值的变化量与自变量变化量比值的极限。直观地说,偏导数也就是函数在某一点上沿坐标轴正方向的的变化率。
导数,指的是一元函数中,函数y=f(x)y=f\left(x\right)在某一点处沿x轴正方向的变化率
偏导数,指的是多元函数中,函数y=f(x0,x1,,xn)y=f\left(x_{0}, x_{1}, \ldots, x_{n}\right)某一点处沿某一坐标轴(x0,x1,,xn)\left(x_{0}, x_{1}, \ldots, x_{n}\right)正方向的变化率

3. 方向导数

lf(x0,x1,,xn)=limρ0ΔyΔx\frac{\partial}{\partial l} f\left(x_{0}, x_{1}, \ldots, x_{n}\right)=\lim _{\rho \rightarrow 0} \frac{\Delta y}{\Delta x}
=limρ0f(x0+Δx0,,xj+Δxj,,xn+Δxn)f(x0,,xj,,xn)ρ =\lim _{\rho \rightarrow 0} \frac{f\left(x_{0}+\Delta x_{0}, \ldots, x_{j}+\Delta x_{j}, \ldots, x_{n}+\Delta x_{n}\right)-f\left(x_{0}, \ldots, x_{j}, \ldots, x_{n}\right)}{\rho}

ρ=(Δx0)2++(Δxj)2++(Δxn)2\begin{aligned} \rho &amp;=\sqrt{\left(\Delta x_{0}\right)^{2}+\cdots+\left(\Delta x_{j}\right)^{2}+\cdots+\left(\Delta x_{n}\right)^{2}} \end{aligned}

在前面导数和偏导数的定义中,均是沿坐标轴正方向讨论函数的变化率。那么当我们讨论函数沿任意方向的变化率时,也就引出了方向导数的定义,即:某一点在某一趋近方向上的导数值。
通俗的解释是:
我们不仅要知道函数在坐标轴正方向上的变化率(即偏导数),而且还要设法求得函数在其他特定方向上的变化率。而方向导数就是函数在其他特定方向上的变化率,说白了偏导数其实是方向导数的一种特殊情况

4. 梯度

gradf(x0,x1,,xn)=(fx0,,fxj,,fxn) \operatorname{grad} f\left(x_{0}, x_{1}, \ldots, x_{n}\right)=\left(\frac{\partial f}{\partial x_{0}}, \ldots, \frac{\partial f}{\partial x_{j}}, \ldots, \frac{\partial f}{\partial x_{n}}\right)
突然看到公式是很懵逼的,大家看到,下图中的这个点有很多的方向,并且,每个方向都是有方向导数的:
方向导数、梯度与梯度下降
梯度:是一个矢量,其方向上的方向导数最大,其大小正好是此最大方向导数( 函数沿梯度方向有最大的变化率 )

Q:为什么所有方向导数中会存在并且只存在一个最大值?而不是有多个最大值、或者说没有最大值?

答:梯度的数学定义 :设函数f(x,y)f(x, y)在平面区域DD内具有一阶连续偏导数,则对每一点P(x0,y0)D P\left(x_{0}, y_{0}\right) \in D 都可以定义出一个向量fx(x0,y0)i+fy(x0,y0)j \boldsymbol{f}_{x}\left(\boldsymbol{x}_{0}, y_{0}\right) i+f_{y}\left(x_{0}, y_{0}\right) j 称为f(x,y)f(x, y)PP点处的梯度,记做f(x0,y0)\nabla f\left(x_{0}, y_{0}\right)
具有一阶连续偏导数,意味着可微。可微意味着函数 f(x,y)f(x,y)在各个方向的切线都在同一个平面上,也就是切平面
方向导数、梯度与梯度下降

5.梯度下降算法

既然在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化目标函数的时候,自然是沿着负梯度方向去减小函数值,以此达到我们的优化目标。
如何沿着负梯度方向减小函数值呢?既然梯度是偏导数的集合,如下:
gradf(x0,x1,,xn)=(fx0,,fxj,,fxn) \operatorname{grad} f\left(x_{0}, x_{1}, \ldots, x_{n}\right)=\left(\frac{\partial f}{\partial x_{0}}, \ldots, \frac{\partial f}{\partial x_{j}}, \ldots, \frac{\partial f}{\partial x_{n}}\right)
同时梯度和偏导数都是向量,那么参考向量运算法则,我们在每个变量轴上减小对应变量值即可,梯度下降法可以描述如下:

 Repeat{\ Repeat \{
x0:=x0αfx0xj:=xjαfxjxn:=xnαfxn \begin{array}{l}{x_{0} :=x_{0}-\alpha \frac{\partial f}{\partial x_{0}}} \\ {\ldots \ldots \ldots} \\ {x_{j} :=x_{j}-\alpha \frac{\partial f}{\partial x_{j}}} \\ {\ldots \ldots \ldots} \\ {x_{n} :=x_{n}-\alpha \frac{\partial f}{\partial x_{n}}}\end{array}
}\}

5.1 梯度下降算法的分类

现在有很多类型的梯度下降算法,现在主要有两种分类方式:

On the basis of data ingestion

  1. Full Batch Gradient Descent Algorithm
  2. Stochastic Gradient Descent Algorithm

On the basis of differentiation techniques

  1. First order Differentiation
  2. Second order Differentiation

5.2 梯度下降算法所面对挑战

5.2.1 数据

  1. 如果数据的排列方式使其产生非凸优化问题,使用梯度下降会变得非常困难。因为梯度下降仅适用于具有明确定义的凸优化问题。
  2. 即使面对的是凸优化的问题,也可能存在很多最小点,最低点称为全局最小值,其余点称为局部最小值,我们的目标是在避开局部最小值的同时达到全局最小值。
  3. 鞍点(Saddle point)问题。鞍点是数据中的一个点,虽然梯度为0,但是并不是最佳点,我们没有特定的方法去避免这个问题,所以这个问题现在还是一个热门的讨论话题。

5.2.2 梯度

如果没有合适地进行梯度下降,可能会导致诸如梯度消失(vanishing gradient)、梯度爆炸( exploding gradient )等问题,当梯度太小或者太大时,会出现这些问题,并且因为这些问题的发生,算法不会收敛。

5.2.3 实现

  1. 一些神经网络从业者不太关注实现,但是通过网络查看资源利用率非常重要。比如:我们在实现梯度下降算法的时候,主义需要多少资源是很重要的,如果内存对于你的程序来说太小了,那么这个网络将会失败。
  2. 跟踪浮点因素、硬件/软件先决条件等也很重要。

未完待续…

参考:

1. 马同学高等数学:什么是全导数、偏导数、方向导数?
2. Introduction to Gradient Descent Algorithm (along with variants) in Machine Learning
3. 3Blue1Brown: 深度学习之梯度下降法 Part 2 ver 0.9 beta
4. ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)