“牛顿降低法和梯度降低法在机器学习和自适应滤波中都很重要,本质上是为了寻找极值点的位置。可是收敛的速度不一样。适当的学习速度,有利于机器学习模型的快速收敛。而过大或者太小的学习速度,都不合适。 下图比较了较小与过大学习速度示意图比较。git
较小的学习速度示意图。 github
过大的学习速度示意图。 算法
梯度降低算法中,最合适即每次跟着参数θ变化的时候,J(θ)的值都应该降低 到目前为止,咱们尚未介绍如何选择学历速率α,梯度降低算法每次迭代,都会受到学习速率α的影响数据结构
观察下图,能够发现这2种状况下代价函数 J(θ)的迭代都不是正确的机器学习
根据经验,能够从如下几个数值开始试验α的值,0.001 ,0.003, 0.01, 0.03, 0.1, 0.3, 1, …函数
α初始值位0.001, 不符合预期乘以3倍用0.003代替,不符合预期再用0.01替代,如此循环直至找到最合适的α学习
而后对于这些不一样的 α 值,绘制 J(θ)随迭代步数变化的曲线,而后选择看上去使得 J(θ)快速降低的一个 α 值。atom
因此,在为梯度降低算法选择合适的学习速率 α 时,能够大体按3的倍数再按10的倍数来选取一系列α值,直到咱们找到一个值它不能再小了,同时找到另外一个值,它不能再大了。其中最大的那个 α 值,或者一个比最大值略小一些的α 值 就是咱们指望的最终α 值。spa
本文中就牛顿降低法和梯度降低法,哪一种收敛方法速度快进行探究“.net
牛顿降低法的递推公式:
梯度降低算法的递推公式:
下图是两种方法的图示表示,红色为牛顿降低法,绿色为梯度降低法,从图中直观的感受是,红色线短,降低速度快。由于牛顿降低法是用二次曲面去拟合当前的局部曲面,而梯度降低法是用平面去拟合当前的局部曲面,通常用二次曲面拟合的更好,因此通常牛顿算法收敛快。
关于以上的说法中,梯度降低法是用平面去拟合当前的局部曲面。梯度 f’(x)的方向是函数变大的方向。这里须要解释一下,对于一维状况而言,梯度方向只有正方向和负方向。至于为何梯度降低算法就是用平面去拟合了,大多数状况下,没有讲的详细。接下来就聊一下为何。
首先考虑一下这个公式,这是一阶泰勒展式,其实就是用平面去拟合函数的局部曲面。
咱们的目的是使得左边的值变小,那是否是应该使得下面的式子变为负值。
这样不就会使得左边的式子变小吗。
可是如何使得上式必定为负值,简单的方法就是:
这样上式就变为
如今知足使得下式变小了
可是不要忘了以上全部的一切只有在局部成立,也就是说在小范围才成立,那么下式就有很能太大
因此加个小的修正的因子,上式就变为:
最终获得公式:
这就是为何说梯度降低算法是用平面拟合函数的局部曲面。
至于说牛顿降低法是用二次曲面去拟合当前的局部曲面,首先考虑一下下式:
一样咱们但愿左式最小,那么将左式当作是△x的函数,当取合适的△x值时,左边的式子达到极小值,此时导数为0。所以对上式进行求导数,获得一下公式:
此时可获得公式:
因此说牛顿降低法是用二次曲面来拟合函数的局部曲面。
综上而言,牛顿降低法利用了函数的更多的信息,可以更好的拟合局部曲面,因此收敛的速度也会加快。
关于梯度降低算法,其中最重要的就是要肯定步长μ,它的值严重的影响了梯度降低算法的表现。
接下来考虑以下公式:
和
结合两个式子,获得:
令左边的式子为0,获得:
因而可知牛顿降低法是梯度降低法的最优状况,所以牛顿降低法的收敛的速度必然更快。
本文转自如下博客内容,在此表示感谢
http://blog.csdn.net/njucp/article/details/50488869