【问题标题】:Gradient descent stochastic update - Stopping criterion and update rule - Machine Learning梯度下降随机更新 - 停止标准和更新规则 - 机器学习
【发布时间】:2013-01-06 00:58:49
【问题描述】:

我的数据集有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

其中&lt;x&gt;m 特征的原始向量,&lt;y&gt; 是真实标签的列向量,alpha 是一个常数。

我的问题:

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

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

  • 使用这个公式 - 我在 for loop 中使用过 - 是否正确?我相信(&lt;w&gt;.&lt;x_i&gt; - &lt;y_i&gt;) * x_t 是我的∆Q(w)

【问题讨论】:

  • 不了解停止标准意味着您不知道为什么要拥有它或其他什么?
  • 我的意思是停止标准应该是什么?

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


【解决方案1】:

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

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

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

有几个选项。我建议尽可能多地尝试并根据经验结果做出决定。

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

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

它应该是 2 * (w.x_i - y_i) * x_t,但考虑到你要乘以学习率 alpha,这并不是什么大问题。

【讨论】:

  • 您在此处提到的目标函数 (1,2) 是什么?并没有得到绝对的区别?因为 W 是 m 个特征的向量...你是什么意思?
  • “我正在使用的更新规则”有一些问题......它给我的一些 w[t] 非常大而对于其他 w[t] 非常非常小(向量 w's第t个组件值)
  • 目标函数是您试图最小化(或最大化)的函数。在您的情况下,它是平方误差的总和。
  • 嘿,谢谢@Ammar,问题是学习因素 - alpha .. 我把它改成非常低并且代码工作......现在我不明白我的训练集表现(平方错误)是高于测试集 err!预期的训练集错误应该很低吧?
  • 是的,您会期望训练集中的“平均”平方误差小于测试集中的误差。您确定除以样本数吗?
猜你喜欢
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 2013-11-22
  • 2018-03-26
  • 2023-02-25
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多