Scikit learn 为什么框架中没有随机梯度下降的自动终止?

Scikit learn 为什么框架中没有随机梯度下降的自动终止?,scikit-learn,tensorflow,gradient-descent,vowpalwabbit,Scikit Learn,Tensorflow,Gradient Descent,Vowpalwabbit,我查看了一些著名的带有SGD实现的开源框架,以及 所有这些都将决定迭代次数的任务留给了用户!scikit要求用户明确指定,默认情况下,vowpal假定为1个历元(通过所有示例),但允许更改为任意数量的历元,而tensor仅为单个示例执行一个步骤,将整个迭代循环留给用户 为什么呢?决定终止合同的任务一点也不琐碎——是否应该在损失没有好转的时候决定?最近N次迭代的平均损失是多少?用户是否应使用验证/保留示例来测量损耗?或者,这根本不是损失,我们应该检查优化权重是否变化不大?我们应该在每次终止后检查,

我查看了一些著名的带有SGD实现的开源框架,以及

所有这些都将决定迭代次数的任务留给了用户!scikit要求用户明确指定,默认情况下,vowpal假定为1个历元(通过所有示例),但允许更改为任意数量的历元,而tensor仅为单个示例执行一个步骤,将整个迭代循环留给用户

为什么呢?决定终止合同的任务一点也不琐碎——是否应该在损失没有好转的时候决定?最近N次迭代的平均损失是多少?用户是否应使用验证/保留示例来测量损耗?或者,这根本不是损失,我们应该检查优化权重是否变化不大?我们应该在每次终止后检查,还是偶尔检查一次


如果有人透露了这个设计决策,我会很高兴吗?我是否遗漏了一些东西,而这些东西无法在内部完成?这方面的理论很重,我希望得到框架的一些支持。

在Vowpal Wabbit中,默认情况下,连续三次传球后,如果坚持失败没有改善,训练会自动结束。可以使用
--early\u terminate
将该数字设置为不同的值。对于具有适当正则化的大型数据集,最好不要终止。所以这真的是一个判断的召唤——你看看进步的图表,看看你是否有足够的耐心等待longer@YaroslavBulatov,有时培训是更大的学习渠道的一部分,而且不能由保姆照看。。这就是为什么我在寻找一个指导原则,如果我想收敛到一个距离最优解x%远的解,我应该有多耐心……是的,没有这样的事情(保证在最优解的x%以内)。此外,全自动管道的一个问题是,各种超参数(如学习速率)取决于输入数据,因此,如果输入数据发生变化,则无论训练多长时间,最终可能会偏离并获得随机精度。一种常见的实用方法是,将迭代次数视为一个超参数,您可以根据学习速率手动调整,而只需编写硬代码即可