[斯坦福大学2014机器学习教程笔记]第四章-多元梯度下降法演练Ⅱ:学习率

    在这节中,我们将集中讨论学习率α。

    这是梯度下降算法的更新规则。在这节中,我们将学习调试(Debugging)是什么以及一些小技巧来确保梯度下降法是在进行正常工作的。此外,我们还将学习如何选择学习率α。

    梯度下降算法所做的事情就是为你找到一个θ值,并且希望它能够最小化代价函数J(θ)。因此,通常在梯度下降算法运行时,描出代价函数J(θ)的值。

                                        

    在这里x轴不再表示参数向量θ,这里的x轴表示的是梯度下降算法的迭代次数,随着梯度下降算法的运行,我们可能会得到如上面右图所示的一条曲线。

    当迭代次数为100时,这个函数的值对应的是经过100次迭代后得到的θ所算出的的J(θ)。所以这个函数表示的是:梯度下降的每步迭代后代价函数的值。如果梯度下降算法正常工作的话,每一步迭代之后J(θ)都应该下降。这条曲线的一个用处在于它可以告诉你什么时候开始J(θ)下降的速度开始变慢了,我们通过观察曲线是否开始变得平坦来判断梯度下降算法是否差不多已经收敛了。顺便一提,对应每个特定的问题,梯度下降算法所需的迭代次数可能会相差很大。所以,可能对于某一个问题只需30步就收敛,对于另一个问题需要30000步。所以,我们很难提前判断梯度下降算法需要多少步才能收敛。

    另外,也可以进行一些自动的收敛测试。也就是让一些算法来告诉你梯度下降算法是否已经收敛。下面是一个自动收敛测试的一个很经典的例子。

    如果代价函数J(θ)一步迭代的下降小于一个很小的值ε,那么这个测试就判断函数已经收敛(ε可以是10-3)。但是,通常要选择一个合适的ε是相当困难的。因此,为了检查梯度下降算法是否收敛,我们还是通过看曲线图要更好一点。

    看曲线图还有一个好处就是:它可以提前告诉你算法没有正常工作。具体地说,如果你画出的图如下图

扫描二维码关注公众号,回复: 10347998 查看本文章

    J(θ)在不断上升,这就表明梯度下降算法并没有正常工作。而这样的曲线通常意味着你应该使用较小的学习率α。如果J(θ)在不断上升,通常表明你在尝试最小化一个如下图(左)的函数。但是由于学习率α太大,随着迭代次数的增加,我们离最小值越来越远,如下图(右)所示。

                                      

    所以,这种情况的解决方法就是使用一个较小的α值。当然也要确保你的代码没bug。

    同样,有的时候我们会看到如下图像

    这种情况的解决方法也是使用一个较小的α值。

    一些数学家已经证明,当α的值足够小的时候,每一次迭代之后代价函数J(θ)都会下降。因此,如果代价函数没有下降,那么就很有可能是因为学习率α的值太大。这时,我们就要选用一个较小的值。

    但是,我们并不希望学习率α的值太小,因为这样可能会导致梯度下降算法收敛得很慢。那样,我们就要迭代很多次才能够到达最低点。


总结:

  • 如果学习率α的值太小,可能会导致梯度下降算法收敛得很慢。
  • 如果学习率α的值太大,代价函数J(θ)可能不会在每次迭代都下降,甚至可能不收敛。
  • 我们通过绘制曲线图来观察梯度下降算法的运行情况。
  • 在运行梯度下降算法时,我们通常会尝试一系列的α值,如:0.001,(0.003),0.01,(0.03),0.1,(0.3),1等。然后根据这些值绘制代价函数J(θ)随迭代步数变化的曲线。然后选择使代价函数J(θ)快速下降的一个α值。

猜你喜欢

转载自www.cnblogs.com/shirleyya/p/12607033.html