声明: 本文有一部分本人自己的观点和理解, 不一定完全正确, 仅供参考. 如果发现错误或者有疑问的地方, 请指出, 谢谢!
方向导数
导数和偏导数的概念比较简单而且很多人接触过,这里不进行赘诉。
我们直接看方向导数。
对于多变量函数, 我们想知道它在点沿方向 的变化率,用 表示。这就是函数F在P点沿方向 的方向导数。
如果你熟悉偏导数的话, 你可以看出来方向导数和偏导数很像。偏导数是函数在特定方向上(如x轴, y轴)的变化率。 方向导数是函数在任意方向上的变化率。方向导数可以理解为在任意方向上的偏导数。毕竟我们对于函数的研究不能仅仅局限在某几个方向。
方向导数公式
其中, , 分别为 与x, y, z 的方向余弦。
梯度
知道了方向导数,我们考虑一个问题:一个点有无数个方向,也就有无数个方向导数(前提是方向导数存在),那么我们最关心的是哪个?(总不能都关心吧,那也太花心了)答案是我们关心最大的方向导数。
最大的方向导数意为着沿着这个方向函数变化最快(函数的变化率最大)。
哪个方向的方向导数最大?
把方向导数的公式变换一下
其中
由向量的知识,我们知道当与G同向时,即时值最大。
梯度至此诞生
梯度的意义就是用来表示最大的方向导数。
说明
- 梯度是一个向量
- 梯度的方向是最大方向导数的方向。
- 梯度的大小是这个最大方向导数的值。
梯度下降法
梯度下降法就是利用梯度的性质求解函数最小值的方法.
[思考]:对于一元函数我们求解函数最小值的方法有很多, 很多人比较喜欢的就是求导. 如果是多元函数求解最小值或者最大值, 我们还能如此简单的解决吗?该怎么求导? 求偏导吗?求哪个偏导?
显然这个问题不是简单的求导就可以解决的, 我们可以通过梯度下降法解决.
想一想, 梯度代表着什么? 表示最大方向导数的向量. 最大方向导数的代表着函数沿着这个方向增长最快, 如果我们反其道而行之, 是不是方向就是函数减小最快的方向. 如果我们每次都能沿着减小最快的方向逼近最小值, 我们是不是就可以最快的找到最小值(或者近似的最小值).
像这样:
可以这样理解梯度下降法, 我们在当前点找到该点的梯度, 然后沿着梯度的负方向前进一段距离到达一个新的点, 然后再计算梯度, 前进一段距离. 一直这样重复下去, 直到找到最小值或者接近最小值.
公式:
其中 为当前点, 可以是一个向量, 表示函数的多个自变量.为下一个点, 是当前点的梯度.表示步长或者学习率(在深度学习中被称为学习率).
说明:
- 式中的不能太大也不能太小.
- 太小, 计算速度慢, 需要迭代很多次.
- 太大, 可能会跳过最小值.
2.由于我们每次更新点都会有一定的步长, 在这段距离中梯度是变化的, 我们在一个点找到的梯度不一定就是这一段的梯度, 所以我们不是一直沿着梯度的负方向前进的. 这一点有点像贪心算法, 基于这一点, 我们也不能让太大.
梯度下降法的缺点
如果函数比较复杂, 存在很多局部最小值, 可能最后梯度下降找到的是局部最小值, 而不是全局最小值.
END
谢谢!