我查看了一些着名的开源框架,其中包含SGD实现 - scikit-learn,vowpal-wabbit和tensor-flow。
所有这些都留下了决定用户迭代次数的任务! scikit要求用户明确指定它,vowpal默认假定为1个时期(通过所有示例)但允许更改为任意数量的时期,并且张量仅为单个示例实现单个步骤,将整个迭代循环留给用户
为什么?决定终止的任务根本不是微不足道的 - 如果在损失没有变得更好的情况下决定它吗?最后N次迭代的平均损失?用户是否应使用验证/保留示例来测量损失?或者也许根本不是损失,我们应该检查优化的重量是否变化不大?我们应该在每个例子之后检查终止,还是偶尔检查一次?
如果有人对这个设计决定有所了解,我会很高兴,我是否遗漏了某些内容并且无法在内部完成?这个领域的理论很重,我希望得到框架的一些支持。