文中截图均来自Andrew Ng 视频,文字总结部分全为原创。
如何得知我们的梯度下降算法是在正常工作的
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知。一般情况下,可以画出迭代次数和代价函数的图来观测算法在何时收敛。如下图:

从图中可以看出迭代400次之后,minJ()的值基本保持不变了,因此大致在400次左右进行收敛。这样的图意味着梯度下降是正常工作的。
但是如果出现以下图,这表明梯度下降没有正常工作:

上图中表示的意思是迭代次数的增加,代价函数反而变大,导致这一现象的原因可能是学习率过大,出现了以下情况(下图是Θ与J(Θ)的关系图,横坐标是Θ)。下图所显示的就是学习率过大,导致发散。

上图出现的情况可以使用降低学习率来缓解这一问题。
判断收敛
1、大多情况下,可以从图中看出迭代多少次后J(Θ)趋于稳定,就表明此刻收敛。
2、此外,还有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阈值进行比较(例如0.001),但通常还是观察图比较好。因为很难确定那样一个阈值。
三、学习率大小的确定
通常,学习率过高可能导致发散,过小则会导致迭代次数太多。可以多次尝试一些学习率,如:0.01、0.03、0.1、0.3、1、3、10
我的博客 : https://NingSM.github.io
转载请注明原址,谢谢。
网友评论