梯度与梯度下降法


声明: 本文有一部分本人自己的观点和理解, 不一定完全正确, 仅供参考. 如果发现错误或者有疑问的地方, 请指出, 谢谢!

方向导数

导数和偏导数的概念比较简单而且很多人接触过,这里不进行赘诉。

我们直接看方向导数。
对于多变量函数$F(x, y, z)$, 我们想知道它在点$P_0$沿方向$\vec l$ 的变化率,用$\left. \frac {\partial F} {\partial {\vec l}} \right| _{P_0} $ 表示。这就是函数F在P点沿方向$\vec l$ 的方向导数。

如果你熟悉偏导数的话, 你可以看出来方向导数和偏导数很像。偏导数是函数在特定方向上(如x轴, y轴)的变化率。 方向导数是函数在任意方向上的变化率。方向导数可以理解为在任意方向上的偏导数。毕竟我们对于函数的研究不能仅仅局限在某几个方向。

方向导数公式
$$
\begin{align}
\left. \frac {\partial F} {\partial {\vec l}} \right| _{P_0} &= lim \frac {F(P) - F(P_0)} {|PP_0|} \\\
&= \left. \frac {\partial F} {\partial x} \right| _{P_0} cos \alpha + \left. \frac {\partial F} {\partial y} \right| _{P_0} cos \beta + \left. \frac {\partial F} {\partial z} \right| _{P_0} cos \gamma
\end{align}
$$

其中$cos \alpha$, $cos \beta$, $cos \gamma$ 分别为$\vec l$ 与x, y, z 的方向余弦。

梯度

知道了方向导数,我们考虑一个问题:一个点有无数个方向,也就有无数个方向导数(前提是方向导数存在),那么我们最关心的是哪个?(总不能都关心吧,那也太花心了)答案是我们关心最大的方向导数。

最大的方向导数意为着沿着这个方向函数变化最快(函数的变化率最大)。

哪个方向的方向导数最大?

把方向导数的公式变换一下

$$
\begin{align}
\left. \frac {\partial F} {\partial {\vec l}} \right| _{P_0}
&= \left. \frac {\partial F} {\partial x} \right| _{P_0} cos \alpha + \left. \frac {\partial F} {\partial y} \right| _{P_0} cos \beta + \left. \frac {\partial F} {\partial z} \right| _{P_0} cos \gamma
\\\
&= G *(cos \alpha, cos \beta, cos \gamma)
\\\
&= |G| cos<G, \vec l>
\end{align}
$$

其中$G=(\left. \frac {\partial F} {\partial x} \right| _{P_0}, \left. \frac {\partial F} {\partial y} \right| _{P_0}, \left. \frac {\partial F} {\partial z} \right| _{P_0})$
由向量的知识,我们知道当$\vec l$与G同向时,即$cos(G, \vec{l})=1$时值最大。

梯度至此诞生

梯度的意义就是用来表示最大的方向导数。

$$
grad F = ( \frac {\partial F} {\partial x}, \frac {\partial F} {\partial y}, \frac {\partial F} {\partial z})
$$

说明

  • 梯度是一个向量
  • 梯度的方向是最大方向导数的方向。
  • 梯度的大小是这个最大方向导数的值。

梯度下降法

梯度下降法就是利用梯度的性质求解函数最小值的方法.

[思考]: 对于一元函数我们求解函数最小值的方法有很多, 很多人比较喜欢的就是求导. 如果是多元函数求解最小值或者最大值, 我们还能如此简单的解决吗?该怎么求导? 求偏导吗?求哪个偏导?

显然这个问题不是简单的求导就可以解决的, 我们可以通过梯度下降法解决.

想一想, 梯度代表着什么? 表示最大方向导数的向量. 最大方向导数的代表着函数沿着这个方向增长最快, 如果我们反其道而行之, 是不是方向就是函数减小最快的方向. 如果我们每次都能沿着减小最快的方向逼近最小值, 我们是不是就可以最快的找到最小值(或者近似的最小值).

像这样:

可以这样理解梯度下降法, 我们在当前点找到该点的梯度, 然后沿着梯度的负方向前进一段距离到达一个新的点, 然后再计算梯度, 前进一段距离. 一直这样重复下去, 直到找到最小值或者接近最小值.

公式:

$$
\theta_{i+1} = \theta_{i} - \alpha * grad F(\theta_{i})
$$

其中$\theta_{i}$ 为当前点, 可以是一个向量, 表示函数的多个自变量.$\theta_{i+1}$为下一个点, $grad F(\theta_{i}) $是当前点的梯度.$\alpha$表示步长或者学习率(在深度学习中被称为学习率).

说明:

  1. 式中的$\alpha$不能太大也不能太小.
  • 太小, 计算速度慢, 需要迭代很多次.
  • 太大, 可能会跳过最小值.

2.由于我们每次更新点都会有一定的步长, 在这段距离中梯度是变化的, 我们在一个点找到的梯度不一定就是这一段的梯度, 所以我们不是一直沿着梯度的负方向前进的. 这一点有点像贪心算法, 基于这一点, 我们也不能让$\alpha$太大.

梯度下降法的缺点

如果函数比较复杂, 存在很多局部最小值, 可能最后梯度下降找到的是局部最小值, 而不是全局最小值.


文章作者: Xu Yuan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Xu Yuan !
评论
 上一篇
IIC为什么需要用开漏输出和上拉电阻 IIC为什么需要用开漏输出和上拉电阻
最近在调ICM20602模块(一个六轴陀螺仪和加速度计), 使用IIC通信协议, 这个过程中遇到一个困扰我很长时间的问题.IIC协议正确, 但是一直读取失败.最后发现因为没配置GPIO为开漏输出. 推挽输出和开漏输出 推挽输
2019-03-09
下一篇 
博客中使用外链音乐 博客中使用外链音乐
在博客中加入音乐, 可以使读者在阅读时纵享丝滑(德芙是不是应该给我广告费<^_^>)。 一般在博客中嵌入的音乐有两种方式: 使用本地音乐 :就是将自己本地的音乐上传到服务器上, 加载到不可中. 使用其他音乐平台的音乐:
2019-02-18
  目录