美文网首页
梯度与梯度下降法

梯度与梯度下降法

作者: 梅雪殇 | 来源:发表于2019-02-25 19:49 被阅读0次

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

    方向导数

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

    我们直接看方向导数。
    对于多变量函数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太大.

    梯度下降法的缺点

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

    END

    谢谢!

    相关文章

      网友评论

          本文标题:梯度与梯度下降法

          本文链接:https://www.haomeiwen.com/subject/koqiyqtx.html