梯度下降随机更新 - 停止标准和更新规则 - 机器学习

时间:2013-01-22 17:33:26

标签: machine-learning linear-regression stochastic gradient-descent

我的数据集包含m个功能和n个数据点。设w为向量(待估计)。我正在尝试用随机更新方法实现梯度下降。我的最小化函数是least mean square

更新算法如下所示:

for i = 1 ... n data:
    for t = 1 ... m features:
         w_t = w_t - alpha * (<w>.<x_i> - <y_i>) * x_t

其中<x>m个要素的原始向量,<y>是真实标签的列向量,alpha是常量。

我的问题:

  • 现在根据wiki,我不需要遍历所有数据点,我可以在错误足够小时停止。这是真的吗?

  • 我不明白这里的停止标准应该是什么。如果有人可以帮助解决这个问题,那就太棒了。

  • 使用此公式 - 我在for loop中使用 - 是否正确?我相信(<w>.<x_i> - <y_i>) * x_t∆Q(w)

1 个答案:

答案 0 :(得分:4)

  

现在根据wiki,我不需要遍历所有数据点,当错误足够小时我可以停止。这是真的吗?

当您拥有非常庞大的训练集并且所有数据点都非常昂贵时,尤其如此。然后,您将在K随机更新之后(即在处理K训练示例之后)检查收敛标准。虽然这是可能的,但通过一个小的训练集来做这件事并没有多大意义。人们做的另一件事是随机化处理训练样本的顺序,以避免在原始中有太多相关的例子,这可能导致“虚假”的收敛。

  

我不明白这里的停止标准应该是什么。如果有人能帮助解决这个问题,那就太好了。

有几个选择。我建议尝试尽可能多的人,并根据实证结果做出决定。

  1. 训练数据的目标函数的差异小于阈值。
  2. 保持数据(又称开发数据,验证数据)的目标函数的差异小于阈值。所提出的示例不应包括用于培训的任何示例(即用于随机更新),也不应包括用于评估的测试集中的任何示例。
  3. 参数w的总绝对差值小于阈值。
  4. 在上面的1,2和3中,您可以指定百分比,而不是指定阈值。例如,合理的停止标准是在| squared_error(w) - squared_error(previous_w)|时停止训练。 &LT; 0.01 * squared_error(previous_w)$$。
  5. 有时,我们不关心我们是否有最佳参数。我们只想改进原来的参数。在这种情况下,在训练数据上预设多次迭代是合理的,并且在此之后停止,无论目标函数是否实际收敛。
  6.   

    使用这个公式 - 我用于循环 - 这是正确的吗?我相信(w.x_i - y_i)* x_t 是我的ΔQ(w)。

    它应该是 2 *(w.x_i - y_i)* x_t 但是这并不是什么大不了的,因为你无论如何都要乘以学习率 alpha