为什么随机梯度下降不会波动

why doesnt Stochastic gradient descent fluctuate

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

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

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

因此,使用中等大小的小批量和较小的学习率有助于 SGD 不会偏离正确的轨迹太多。

现在 SGD 中的 stochastic 一词也可以表示其他各种措施。例如,一些从业者还使用梯度裁剪,即如果梯度远远超过这个决定的最大阈值,他们将计算出的梯度钳制到最大值。您可以在 this post. Now, this is just one trick amongst dozens of other techniques and if you are interested can read source code of popular implementation of SGD in PyTorch 或 TensorFlow 中找到有关梯度裁剪的更多信息。