回顾
先来回顾一下梯度下降法参数更新方法:
对代价函数求偏导,乘以学习率,来更新
那么如何确定梯度下降法正常的工作呢?如何选取一个学习率呢?
梯度下降法是否正常工作?
梯度下降所做的工作就是寻找一个合适的,让代价函数
最小,所以在梯度运行过程中我们会画出代价函数和迭代次数的图:
显示了随着迭代次数的增加,代价函数的大小的变化趋势,如果梯度下降正常工作的话,每迭代一步都应该下降,大概在300-400次迭代后曲线趋于平稳,说明在300-400次迭代的时候已经趋于收敛,因为他不再下降了。这条曲线可以帮助我们判断算法什么时候收敛。
当然还有一个自动收敛测试方法:当的值小于一个很小的值
(可以是10^-3)时,判断为已经收敛,但是一般来说,选取一个合适的阈值
是非常困难的,所以要找到一个合适的阈值更好的方法还是看曲线图,而不是用自动收敛测试的方法。
这个曲线可以告诉你你的算法有没有正常工作,如果你得到的图片是这样的:
上升,说明你的算法没有正常的工作,常见的原因就是你的学习率太大了,应该用较小的学习率(除了代码错误外)
这个图见过,学习率太大导致错过最小值,导致越来越大,甚至发散。
当然你还会看到这样的曲线:
这样也可以用较小的学习率解决。事实上,在代价函数J的基本假设之下,该假设适用于线性回归,数学家证明,只要学习率足够小,每次迭代之后的代价函数的值都会下降,如果变大,说明学习率太大,应该调小,当然太小会导致收敛速度很慢。
总结:
如果学习率太小:收敛会很慢
如果学习率太大:可能不会在每次迭代都下降,设置不会收敛
通常在运行梯度下降法的时候会尝试一系列学习率的取值:...0.001, 0.003,0.01, 0.03,0.1, 0.3,1, ...
之间的关系成三倍增长,通常会得到一个不错的学习率。