我通过在线资源(特别是Coursera上的机器学习课程)学习了梯度下降。然而,提供的信息只提到要重复进行梯度下降直到它收敛。
他们对收敛的定义是使用成本函数相对于迭代次数的图表,并观察图表何时趋于平缓。因此,我假设我会这样做:
if (change_in_costfunction > precisionvalue) { repeat gradient_descent}
另外,我在想是否有另一种确定收敛的方法,即观察系数接近其真实值的情况:
if (change_in_coefficient_j > precisionvalue) { repeat gradient_descent_for_j} ...对所有系数重复此操作
那么,收敛是基于成本函数还是系数呢?我们如何确定精度值?它应该是系数或总成本函数的百分比吗?
回答:
你可以想象梯度下降(GD)是如何工作的,想象你把一个弹珠扔进碗里,然后开始拍照。弹珠会在摩擦力的作用下在碗底停止振荡。现在想象你在一个摩擦力非常小的环境中,弹珠需要很长时间才能完全停止,所以我们可以假设当振荡足够小时,弹珠已经到达了碗底(尽管它可能会继续振荡)。在下面的图片中,你可以看到GD的前八个步骤(弹珠的照片)。
如果我们继续拍照,弹珠的移动将变得不明显,你应该放大图片来看:
我们可以继续拍照,弹珠的移动将变得更加无关紧要。
因此,达到GD在目标函数上做出非常小的变化的点被称为收敛,这并不意味着它已经达到了最优结果(但它确实非常非常接近,如果不是正好在最优点上)。
精度值可以选择为GD连续迭代几乎相同的阈值:
grad(i) = 0.0001grad(i+1) = 0.000099989 <-- grad的变化小于0.01% => STOP