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

在批量梯度下降法中,参数是根据所有点的总损失或平均损失来更新的。在随机梯度下降法(SGD)中,我们在处理完每个点后就更新参数,而不是等到一个周期结束。假设最后一个点是一个异常值,这不会导致整个拟合线大幅波动吗?这种方法如何保证可靠性,或者如何在这样的轮廓上收敛 SGD轮廓


回答:

  • 虽然在其最原始的形式中,SGD确实只操作一个样本点,但在实际操作中,这并不是主流做法。实际上,我们使用的是256、128或64个样本的小批量,而不是操作包含数据库中所有样本的完整批量,这些样本可能会超过100万个。因此,显然操作256个样本的小批量比操作100万个点要快得多,同时也有助于减少仅使用一个样本点所带来的变异性。

  • 第二点是没有所谓的最后一个点。我们只是不断地遍历数据集。SGD的学习率通常非常小,比如1e-3。因此,即使一个样本点碰巧是异常值,错误的梯度也会被1e-3缩放,因此SGD不会偏离正确的轨迹太多。当它遍历到接下来的非异常值样本点时,它将再次朝正确的方向前进。

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

现在,SGD 中的随机一词也可能暗示其他各种措施。例如,一些实践者还使用梯度裁剪,即如果计算出的梯度超过了设定的最大阈值,他们会将其限制在最大值。你可以在这篇文章中找到更多关于梯度裁剪的信息。现在,这只是众多技巧中的一种,如果你有兴趣,可以阅读 PyTorch 或 TensorFlow 中 SGD 流行实现的源代码,PyTorch 或 TensorFlow。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注