Answers:
快速简单的解释:
在梯度下降(GD)和随机梯度下降(SGD)中,都以迭代方式更新一组参数以最小化误差函数。
在GD中,您必须遍历训练集中的所有样本才能对特定迭代中的参数进行单个更新,而在SGD中,您只能使用训练集中的一个或一个样本集在特定迭代中更新参数。如果使用SUBSET,则称为Minibatch随机梯度下降。
因此,如果训练样本的数量很大(实际上非常大),则使用梯度下降可能会花费太长时间,因为在每次迭代中更新参数值时,您都在运行完整的训练集。另一方面,使用SGD会更快,因为您只使用一个训练样本,并且它会从第一个样本开始立即进行自我改进。
与GD相比,SGD的收敛速度通常要快得多,但误差函数没有像GD那样最小化。通常,在大多数情况下,您在SGD中获得的参数值非常近似就足够了,因为它们达到了最佳值并一直在该位置振荡。
如果您需要一个实际案例的示例,请在此处查看NG的注释,其中他清楚地向您显示了这两种案例中涉及的步骤。cs229-笔记
资料来源:Quora Thread
包含随机一词仅表示在梯度下降的框架内,在每次运行中从训练数据中选择随机样本以在优化期间更新参数。
这样做不仅可以计算错误并以更快的迭代速度更新权重(因为我们只处理一次样本中的一小部分),通常还有助于更快地朝最优方向发展。请查看此处的答案,以获取更多信息,了解为什么使用随机迷你批处理具有优势。
一个可能的缺点是,通往最佳路径(假设它始终是相同的最佳路径)的噪音可能更大。因此,您可能会看到以下内容,而不是显示梯度下降的每次迭代中误差如何减小的平滑平滑损耗曲线:
我们清楚地看到损耗随着时间的推移而减少,但是每个时期(训练批次到训练批次)之间存在很大的差异,因此曲线是嘈杂的。
这仅仅是因为我们在每次迭代中从整个数据集中随机/随机选择的子集计算平均误差。有些样本会产生高误差,有些会产生低误差。因此,平均值可能会有所不同,具体取决于我们随机将哪些样本用于梯度下降的一次迭代。
n=1
。
在“梯度下降”或“批量梯度下降”中,我们使用每个时期的全部训练数据,而在“随机梯度下降”中,我们仅使用每个时期的单个训练示例,而“小批量梯度下降”则位于这两个极端之间,我们可以在其中使用每个时期一个小批量的训练数据(小部分),用于选择小批量的大小的拇指规则是2的幂,例如32、64、128等。
有关更多详细信息:cs231n讲义