我通过在线资源(即在课程中学习机器学习)学习了梯度下降。然而,所提供的信息仅表示重复梯度下降直到收敛为止。
他们对收敛的定义是使用成本函数相对于迭代次数的图表,并观察图表何时展平。因此我假设我会做以下事情:
if (change_in_costfunction > precisionvalue) {
repeat gradient_descent
}
或者,我想知道确定收敛的另一种方法是观察系数方法是否真实值:
if (change_in_coefficient_j > precisionvalue) {
repeat gradient_descent_for_j
}
...repeat for all coefficients
基于成本函数或系数的收敛也是如此?我们如何确定精度值?它应该是系数或总成本函数的百分比吗?
答案 0 :(得分:8)
你可以想象Gradient Descent(GD)是如何工作的,认为你把大理石扔进碗里然后开始拍照。大理石会振动,直到摩擦将其停在底部。现在想象一下,你所处的环境摩擦很小,大理石需要很长时间才能完全停止,所以我们可以假设当振动足够大时,大理石已经到达底部(尽管它可以继续振荡)。在下图中,您可以看到GD的前八个步骤(大理石的照片)。
如果我们继续拍照,大理石会产生不明显的动作,你应该放大图像:
我们可以继续拍照,这些动作会更无关紧要。
因此,达到GD在目标函数中进行非常小的变化的点称为收敛,这并不意味着它已经达到了最佳结果(但它实际上非常接近,如果没有的话)。
可以选择精度值作为GD连续迭代几乎相同的阈值:
grad(i) = 0.0001
grad(i+1) = 0.000099989 <-- grad has changed less than 0.01% => STOP
答案 1 :(得分:0)
我想我理解你的问题。根据我的理解,GD功能基于成本函数。它迭代直到成本函数的收敛。
想象一下,绘制成本函数(y轴)与GD迭代次数(x轴)的关系图。 现在,如果GD正常工作,曲线会向上凹或向下(类似于1 / x)。由于曲线在减小,成本函数的减小变得越来越小,然后出现曲线几乎变平的点。在这一点上,我们说GD或多或少收敛(同样,成本函数减少的单位小于precision_value)。
所以,我想你的第一个方法是你需要的: