梯度下降算法的变体详解

在机器学习领域,梯度下降算法是优化模型参数的一种常用方法。本文将深入探讨梯度下降算法的几种变体,包括批量梯度下降、随机梯度下降和小批量梯度下降,并对比它们的不同之处。

目录

  • 引言
  • 梯度下降算法方程回顾
  • 批量梯度下降
  • 随机梯度下降(SGD)
  • 小批量梯度下降
  • 批量GD、SGD和小批量GD的比较
  • 常见问题解答
  • 结束语

梯度下降算法是机器学习中用于寻找函数最小值的迭代优化算法。本文将详细介绍梯度下降算法的不同变体,并探讨它们在实际应用中的优缺点。

梯度下降算法方程回顾

梯度下降算法的核心方程如下所示:

θ = θ - α * (dJ/dθ)

其中,θ代表希望更新的参数,dJ/dθ代表成本函数相对于参数θ的偏导数,它告诉成本函数随参数θ变化的速率,α是学习率。

批量梯度下降

如果使用数据集中的所有'm'个观测值来计算成本函数J,那么这就是批量梯度下降。在批量梯度下降中,使用整个训练集,执行前向传播,计算成本函数,然后根据成本函数相对于参数的变化率来更新参数。

一个epoch指的是整个训练集通过模型一次,执行前向传播和反向传播,并更新参数。在批量梯度下降中,由于使用了整个训练集,参数每个epoch只更新一次。

随机梯度下降(SGD)

如果使用单个观测值来计算成本函数,那么这就是随机梯度下降,通常缩写为SGD。逐个传递单个观测值,计算成本并更新参数。

假设有5个观测值,每个观测值有3个特征,随机选取了一些值。如果使用SGD,将取第一个观测值,将其通过神经网络,计算误差,然后更新参数。然后将取第二个观测值,并执行类似的步骤。这个过程将重复,直到所有观测值都通过网络传递,参数都已更新。

每次参数更新,称之为一次迭代。在这里,由于有5个观测值,参数将更新5次,或者说将有5次迭代。如果这是批量梯度下降,将一次性传递所有观测值,参数只更新一次。在SGD的情况下,每个epoch将有'm'次迭代,其中'm'是数据集中观测值的数量。

小批量梯度下降

梯度下降的另一种变体是小批量梯度下降。它取整个数据集的一个子集来计算成本函数。如果有'm'个观测值,那么每个子集或小批量中的观测值数量将超过1且少于'm'。

再次以例子为例。假设批量大小为2。因此,将取前两个观测值,将它们通过神经网络,计算误差,然后更新参数。然后将取接下来的两个观测值,并执行类似的步骤,即通过网络传递,计算误差并更新参数。

现在,由于在最后一次迭代中只剩下一个观测值,将只有一个观测值,并使用这个观测值更新参数。

批量GD、SGD和小批量GD的比较

这是梯度下降不同变体的简要概述。现在让比较这些不同类型:

在批量梯度下降中,如前所述,取整个数据集 > 计算成本函数 > 更新参数。在随机梯度下降的情况下,在每个单个观测值之后更新参数,知道每次权重更新都被称为一次迭代。在小批量梯度下降的情况下,取数据的一个子集,并根据每个子集更新参数。

由于在批量梯度下降的情况下使用整个数据集更新参数,因此这种情况下的成本函数平滑减少。另一方面,SGD的更新并不那么平滑。由于基于单个观测值更新参数,有很多迭代。模型也可能开始学习噪声。

小批量梯度下降的成本函数更新比SGD更平滑。由于不是在每个单个观测值之后更新参数,而是在每个数据子集之后更新参数。

现在来看看这些梯度下降变体所花费的计算成本和时间。由于必须一次加载整个数据集,执行该数据集上的前向传播,计算误差,然后更新参数,批量梯度下降的计算成本非常高。

SGD的计算成本比批量梯度下降低,因为必须一次加载每个单个观测值,但计算时间增加了,因为有更多的更新,这将导致更多的迭代。在小批量梯度下降的情况下,取数据的一个子集,迭代或更新的数量较少,因此小批量梯度下降的计算时间少于SGD。

此外,由于不是一次加载整个数据集,而是加载数据的一个子集,计算成本也比批量梯度下降低。这就是为什么人们通常更喜欢使用小批量梯度下降的原因。实际上,每当提到随机梯度下降时,通常指的是小批量梯度下降。

随机梯度下降(SGD)是最快的梯度下降算法,因为它在处理每个训练示例后更新模型参数,从而实现更快的收敛。

批量梯度下降更好,因为它使用整个训练数据集计算梯度,从而实现更准确的更新和更平滑的收敛。然而,对于大型数据集,它可能比随机梯度下降慢。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485