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

cod*_*her 4 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
Run Code Online (Sandbox Code Playgroud)

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

我的问题:

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

  • 我不明白这里应该是什么停止标准。如果有人可以帮助您,那就太好了。

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

Amm*_*mar 6

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

当您拥有非常庞大的训练集并且遍历所有数据点非常昂贵时,尤其如此。然后,您将在K个随机更新之后(即在处理了K个训练示例之后)检查收敛准则。尽管有可能,但通过少量培训就可以做到这一点。人们要做的另一件事是使训练示例的处理顺序随机化,以避免原始文档中包含过多的相关示例,而这可能导致“伪”收敛。

我不明白这里应该是什么停止标准。如果有人可以帮助您,那就太好了。

有一些选择。我建议尝试尽可能多的方法,并根据经验结果做出决定。

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

有了这个公式-我在for循环中使用过-是否正确?我相信(w.x_i-y_i)* x_t是我的?Q(w)。

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

  • 嘿,谢谢@Ammar,问题出在学习因子-alpha上。我将其更改为非常低的值,并且代码可以正常工作...现在,我不了解我的训练集性能(square err)高于测试集err!预期的培训设置错误应该低吗? (2认同)