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

目录

  1. 方向导数
  2. 梯度
    1. 哪个方向的方向导数最大?
  3. 梯度下降法
    1. 公式:
    2. 说明:
    3. 梯度下降法的缺点

方向导数

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

我们直接看方向导数。
对于多变量函数, 我们想知道它在点沿方向 的变化率,用 表示。这就是函数F在P点沿方向 的方向导数。

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

方向导数公式

其中, , 分别为 与x, y, z 的方向余弦。

梯度

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

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

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

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

其中
由向量的知识,我们知道当与G同向时,即时值最大。

梯度至此诞生

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

说明

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

梯度下降法

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

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

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

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

像这样:

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

公式:

其中 为当前点, 可以是一个向量, 表示函数的多个自变量.为下一个点, 是当前点的梯度.表示步长或者学习率(在深度学习中被称为学习率).

说明:

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

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

梯度下降法的缺点

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