在这节中,咱们将集中讨论学习率α。算法
这是梯度降低算法的更新规则。在这节中,咱们将学习调试(Debugging)是什么以及一些小技巧来确保梯度降低法是在进行正常工做的。此外,咱们还将学习如何选择学习率α。函数
梯度降低算法所作的事情就是为你找到一个θ值,而且但愿它可以最小化代价函数J(θ)。所以,一般在梯度降低算法运行时,描出代价函数J(θ)的值。学习
在这里x轴再也不表示参数向量θ,这里的x轴表示的是梯度降低算法的迭代次数,随着梯度降低算法的运行,咱们可能会获得如上面右图所示的一条曲线。测试
当迭代次数为100时,这个函数的值对应的是通过100次迭代后获得的θ所算出的的J(θ)。因此这个函数表示的是:梯度降低的每步迭代后代价函数的值。若是梯度降低算法正常工做的话,每一步迭代以后J(θ)都应该降低。这条曲线的一个用处在于它能够告诉你何时开始J(θ)降低的速度开始变慢了,咱们经过观察曲线是否开始变得平坦来判断梯度降低算法是否差很少已经收敛了。顺便一提,对应每一个特定的问题,梯度降低算法所需的迭代次数可能会相差很大。因此,可能对于某一个问题只需30步就收敛,对于另外一个问题须要30000步。因此,咱们很难提早判断梯度降低算法须要多少步才能收敛。spa
另外,也能够进行一些自动的收敛测试。也就是让一些算法来告诉你梯度降低算法是否已经收敛。下面是一个自动收敛测试的一个很经典的例子。调试
若是代价函数J(θ)一步迭代的降低小于一个很小的值ε,那么这个测试就判断函数已经收敛(ε能够是10-3)。可是,一般要选择一个合适的ε是至关困难的。所以,为了检查梯度降低算法是否收敛,咱们仍是经过看曲线图要更好一点。blog
看曲线图还有一个好处就是:它能够提早告诉你算法没有正常工做。具体地说,若是你画出的图以下图数学
J(θ)在不断上升,这就代表梯度降低算法并无正常工做。而这样的曲线一般意味着你应该使用较小的学习率α。若是J(θ)在不断上升,一般代表你在尝试最小化一个以下图(左)的函数。可是因为学习率α太大,随着迭代次数的增长,咱们离最小值愈来愈远,以下图(右)所示。技巧
因此,这种状况的解决方法就是使用一个较小的α值。固然也要确保你的代码没bug。bug
一样,有的时候咱们会看到以下图像
这种状况的解决方法也是使用一个较小的α值。
一些数学家已经证实,当α的值足够小的时候,每一次迭代以后代价函数J(θ)都会降低。所以,若是代价函数没有降低,那么就颇有多是由于学习率α的值太大。这时,咱们就要选用一个较小的值。
可是,咱们并不但愿学习率α的值过小,由于这样可能会致使梯度降低算法收敛得很慢。那样,咱们就要迭代不少次才可以到达最低点。
总结: