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

1.导数

一元函数的情况下,导数就是函数的变化率:
在这里插入图片描述
f ′ ( x 0 ) = lim ⁡ Δ x → 0 Δ y Δ x = lim ⁡ Δ x → 0 f ( x 0 + Δ x ) − f ( x 0 ) Δ x f^{\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(x0)=limΔx0ΔxΔy=limΔx0Δxf(x0+Δx)f(x0)

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

2.偏导数

∂ ∂ x j f ( x 0 , x 1 , … , x n ) = lim ⁡ Δ x → 0 Δ y Δ x = lim ⁡ Δ x → 0 f ( x 0 , … , x j + Δ x , … , x n ) − f ( x 0 , … , x j , … , x n ) Δ 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} xjf(x0,x1,,xn)=Δx0limΔxΔy=Δx0limΔxf(x0,,xj+Δx,,xn)f(x0,,xj,,xn)

区别:

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

3. 方向导数

∂ ∂ l f ( x 0 , x 1 , … , x n ) = 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} lf(x0,x1,,xn)=limρ0ΔxΔy
= lim ⁡ ρ → 0 f ( x 0 + Δ x 0 , … , x j + Δ x j , … , x n + Δ x n ) − f ( x 0 , … , x j , … , x n ) ρ =\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} =ρ0limρf(x0+Δx0,,xj+Δxj,,xn+Δxn)f(x0,,xj,,xn)

ρ = ( Δ x 0 ) 2 + ⋯ + ( Δ x j ) 2 + ⋯ + ( Δ x n ) 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} ρ=(Δx0)2++(Δxj)2++(Δxn)2

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

4. 梯度

grad ⁡ f ( x 0 , x 1 , … , x n ) = ( ∂ f ∂ x 0 , … , ∂ f ∂ x j , … , ∂ f ∂ x n ) \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) gradf(x0,x1,,xn)=(x0f,,xjf,,xnf)
突然看到公式是很懵逼的,大家看到,下图中的这个点有很多的方向,并且,每个方向都是有方向导数的:
在这里插入图片描述
梯度:是一个矢量,其方向上的方向导数最大,其大小正好是此最大方向导数( 函数沿梯度方向有最大的变化率 )

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

答:梯度的数学定义 :设函数 f ( x , y ) f(x, y) f(x,y)在平面区域 D D D内具有一阶连续偏导数,则对每一点 P ( x 0 , y 0 ) ∈ D P\left(x_{0}, y_{0}\right) \in D P(x0,y0)D都可以定义出一个向量 f x ( x 0 , y 0 ) i + f y ( x 0 , y 0 ) j \boldsymbol{f}_{x}\left(\boldsymbol{x}_{0}, y_{0}\right) i+f_{y}\left(x_{0}, y_{0}\right) j fx(x0,y0)i+fy(x0,y0)j称为 f ( x , y ) f(x, y) f(x,y) P P P点处的梯度,记做 ∇ f ( x 0 , y 0 ) \nabla f\left(x_{0}, y_{0}\right) f(x0,y0)
具有一阶连续偏导数,意味着可微。可微意味着函数 f ( x , y ) f(x,y) f(x,y)在各个方向的切线都在同一个平面上,也就是切平面
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190520204903136.png
所有的切线都在一个平面上,就好像光滑的笔直玻璃上,某一点一定有且只有一个(梯度为0的情况除外,可以自己想想为什么?)最陡峭的地方(因为方向导数是切线的斜率,方向导数最大也就意味着最陡峭)。

这就解决了我对于“为什么所有方向导数中会存在并且只存在一个最大值”的疑问。

5.梯度下降算法

既然在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化目标函数的时候,自然是沿着负梯度方向去减小函数值,以此达到我们的优化目标。
如何沿着负梯度方向减小函数值呢?既然梯度是偏导数的集合,如下:
grad ⁡ f ( x 0 , x 1 , … , x n ) = ( ∂ f ∂ x 0 , … , ∂ f ∂ x j , … , ∂ f ∂ x n ) \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) gradf(x0,x1,,xn)=(x0f,,xjf,,xnf)
同时梯度和偏导数都是向量,那么参考向量运算法则,我们在每个变量轴上减小对应变量值即可,梯度下降法可以描述如下:

  R e p e a t { \ Repeat \{  Repeat{
x 0 : = x 0 − α ∂ f ∂ x 0 … … … x j : = x j − α ∂ f ∂ x j … … … x n : = x n − α ∂ f ∂ x n \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} x0:=x0αx0fxj:=xjαxjfxn:=xnαxnf
} \} }

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)

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值