我的数据集具有 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) 。 最佳答案 当您拥有非常庞大的训练集并且遍历所有数据点非常昂贵时,尤其如此。然后,您将在 K 次随机更新之后(即在处理 K 个训练示例之后)检查收敛标准。虽然这是可能的,但用一个小的训练集来做到这一点没有多大意义。人们做的另一件事是随机化处理训练示例的顺序,以避免在原始数据中有太多相关示例,这可能会导致“假”收敛。 有几个选项。我建议尝试尽可能多的方法并根据经验结果做出决定。 训练数据的目标函数差异小于阈值。 保留数据(又名开发数据、验证数据)的目标函数中的 差异小于阈值。保留的示例不应包括用于训练的任何示例(即用于随机更新),也不应包括用于评估的测试集中的任何示例。 参数 w 的总绝对差小于阈值。 在上面的 1、2 和 3 中,您可以指定百分比而不是指定阈值。例如,一个合理的停止标准是在 |squared_error(w) - squared_error(previous_w)| 时停止训练。 有时,我们不在乎是否有最佳参数。我们只是想改进我们最初拥有的参数。在这种情况下,无论目标函数是否真正收敛,在训练数据上预设多次迭代并在此之后停止是合理的。 它应该是 2 * (w.x_i - y_i) * x_t 但考虑到你要乘以学习率 alpha 这没什么大不了的。关于machine-learning - 梯度下降随机更新 - 停止准则和更新规则 - 机器学习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14464612/