本博客只用于自身学习,如有错误,虚心求教!!!
写这篇博客的原因
为什么局部下降最快的方向就是梯度的负方向呢?
之前跟着吴恩达的机器学习视频学习的时候,只是跟着学,完全没有想到这些,之后再反过来看的时候,就会有这种问题。
梯度下降法的公式:
可能大家都会有一个误导,这个公式是怎么通过数学公式推导出来的,其实,这个公式不是推导出来的,而是创造出来的,只能证明这个公式的有效性
其实理解了 梯度下降法中的 “梯度”,这个公式也就很好理解了
现在分析在梯度下降法中最常听到的一句话:“梯度下降法就是朝着梯度的反方向迭代地调整参数直到收敛。” 这里的梯度就是 ,而梯度的反方向就是
的符号方向---梯度实际上是个向量。所以这个角度来说,即使我们只有一个参数需要调整,也可以认为它是个一维的向量。 整个过程你可以想象自己站在一个山坡上,准备走到山脚下(最小值的地方),于是很自然地你会考虑朝着哪个方向走,方向由
的方向给出,而至于一次走多远,由
来控制。 这种方式相信你应该能理解其只能找到局部最小值,而不是全局的(当函数为凸函数时,局部最优也就是全局最优)。
梯度的定义如下:
函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值。
这里注意三点:
- 梯度是一个向量,即有方向有大小;
- 梯度的方向是最大方向导数的方向;
- 梯度的值是最大方向导数的值。
梯度的提出可以解释一个问题: 函数在变量空间的某一点处,沿着哪一个方向有最大的变化率?
那么什么是方向导数?与导数、偏导数有什么关系呢?
导数,指的是一元函数中,函数y=f(x)在某一点处沿x轴正方向的变化率;
偏导数,指的是多元函数中,函数y=f(x1,x2,…,xn)在某一点处沿某一坐标轴(x1,x2,…,xn)正方向的变化率。
方向导数,指的是是函数在其他特定方向上的变化率。
在我理解,三个概念都是差不多的,都指的是函数在某点处沿某个方向的变化率
可以这样理解:梯度即函数在某一点最大的方向导数,函数沿梯度方向函数有最大的变化率。
既然在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化目标函数的时候,自然是沿着负梯度方向去减小函数值,以此达到我们的优化目标。
梯度下降公式的证明,可以参考:https://imlogm.github.io/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/gradientDescent/
(不能保证正确,所以这里就不写了)
下面贴出《统计学习方法》中的解释:
参考:《统计学习方法》
https://blog.youkuaiyun.com/walilk/article/details/50978864
https://imlogm.github.io/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/gradientDescent/