【问题标题】:why doesnt Stochastic gradient descent fluctuate为什么随机梯度下降没有波动
【发布时间】:2020-09-17 16:31:16
【问题描述】:

在批量梯度下降中,参数根据所有点的总损失/平均损失进行更新 在随机梯度下降或 SGD 我们在每一点而不是一个时期之后更新参数。 所以让我们说如果最后一点是一个异常值,会导致整个拟合线剧烈波动。 怎么靠谱。 或收敛于这样的轮廓SGD contour

【问题讨论】:

  • 这个论坛更多的是编程问题。您刚刚提出的问题实际上是我们使用批量梯度下降的原因之一。此外,您还有一些参数(例如学习率)会限制您对每一步的影响,因此即使有一个强异常值,梯度步长也会受到学习率的限制。

标签: machine-learning deep-learning pytorch gradient-descent


【解决方案1】:
  • 虽然 SGD 以最原始的形式仅在 1 个样本点上运行,但实际上这并不是主流做法。在实践中,我们使用 256、128 或 64 个样本的小批量,而不是对包含数据库中所有样本的完整批量大小进行操作,这可能远远超过 100 万个样本。所以很明显,在 256 个小批量上运行比在 100 万个点上运行要快得多,同时有助于抑制由于仅使用 1 个样本点而导致的可变性。

  • 第二点是没有final point。一个人只是不断地迭代数据集。 SGD 的学习率通常很小,比如 1e-3。所以即使一个样本点恰好是一个异常值,错误的梯度也会被缩放 1e-3,因此 SGD 不会偏离正确的轨迹太多。当它遍历即将到来的不是异常值的样本点时,它将再次朝着正确的方向前进。

因此,完全使用中等规模的 mini-batch 并使用较小的学习率有助于 SGD 不会偏离正确的轨迹太多。

现在 SGD 中的 stochastic 一词也可以暗示各种其他措施。例如,一些从业者也使用梯度裁剪,即如果梯度远远超过这个确定的最大阈值,他们会将计算出的梯度钳制为最大值。您可以在this 帖子中找到更多关于渐变剪裁的信息。现在,这只是许多其他技术中的一种技巧,如果您有兴趣,可以阅读PyTorch 或 TensorFlow 中流行的 SGD 实现的源代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2016-09-25
    • 2018-12-10
    • 2021-02-20
    • 2021-12-18
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多