7

我已经通过一些在线资源自学了机器学习,但我有一个关于梯度下降的问题,我无法弄清楚。

梯度下降的公式由以下逻辑回归给出:

Repeat {
    θj = θj−α/m∑(hθ(x)−y)xj
}

其中θj是变量 j 的系数;α是学习率;hθ(x)是假设;y是实际值,xj是变量 j 的值。m是训练集的数量。hθ(x),y是针对每个训练集的(即,这就是求和符号的用途)。

这就是我感到困惑的地方。

我不清楚求和是否代表我的整个训练集或到目前为止我已经完成了多少次迭代。

例如,假设我有 10 个训练示例。如果我在每个训练示例之后执行梯度下降,那么我的系数将非常不同,如果我在所有 10 个训练示例之后执行梯度下降。

请参阅下面的第一种方式与第二种方式有何不同:

第一种方式

  • 第 1 步:由于系数初始化为 0,因此 hθ(x)=0
  • 步骤 2:对第一个训练示例执行梯度下降。 求和项仅包含 1 个训练示例
  • 第 3 步:现在为训练示例 1 和 2 使用新系数... 求和项包括前 2 个训练示例
  • 第 4 步:再次执行梯度下降。
  • 第 5 步:现在使用新系数训练示例 1,2 和 3...求和项包括前 3 个训练示例
  • 继续直到收敛或使用所有训练示例。

第二种方式

  • 第 1 步:由于系数初始化为 0,因此所有 10 个训练示例的 hθ(x)=0
  • 第 2 步:使用所有 10 个训练示例执行 1 步梯度下降。系数将不同于第一种方式,因为求和项包括所有 10 个训练示例
  • 第 3 步:再次对所有 10 个训练示例使用新系数。总和项包括所有 10 个训练示例
  • 第 4 步:执行梯度下降并继续对所有示例使用系数,直到收敛

我希望这能解释我的困惑。有谁知道哪种方式是正确的?

编辑:添加成本函数和假设函数

cost function = −1/m∑[ylog(hθ(x))+(1−y)log(1−hθ(x))]
hθ(x) = 1/(1+ e^-z) 
and z= θo + θ1X1+θ2X2 +θ3X3...θnXn
4

2 回答 2

7

您描述的第二种方式是执行梯度下降的正确方式。真正的梯度取决于整个数据集,因此梯度下降的一次迭代需要使用所有数据集。(对于任何可以采用梯度的学习算法都是如此)

“第一种方式”接近于所谓的随机梯度下降。这里的想法是,使用整个数据集进行一次更新可能是多余的,特别是如果某些数据点是冗余的。在这种情况下,我们从数据集中选择一个随机点——本质上是设置 m=1。然后,我们根据数据集中单个点的连续选择进行更新。通过这种方式,我们可以进行 m 次更新,其成本与一次梯度下降更新的成本大致相同。但是每次更新都有点嘈杂,这会使收敛到最终解决方案变得困难。

这些方法之间的折衷称为“MiniBatch”。取整个数据集的梯度是一整轮“批处理”,因为我们需要手头的整个数据集。相反,我们将做一个小批量,只选择整个数据集的一小部分。在这种情况下,我们设置 k,1 < k < m,其中 k 是小批量中的点数。我们在每次迭代时选择 k 个随机数据点来创建梯度,然后执行更新。重复直到收敛。显然,增加/减少 k 是速度和准确性之间的权衡。

注意:对于随机和小批量梯度下降,随机选择下一个数据点非常重要。如果你对每个数据点使用相同的迭代顺序,你会得到非常奇怪/糟糕的结果——通常会偏离解决方案。

于 2013-06-24T21:04:20.720 回答
0

在批量梯度下降(取所有样本)的情况下,您的解决方案将收敛得更快。在随机梯度下降的情况下(一次取一个样本),收敛速度会更慢。

当训练集不大时,使用批量梯度下降。但也有训练集不固定的情况。例如。训练是即时进行的——你不断获得越来越多的样本并相应地更新你的向量。在这种情况下,您必须更新每个样本。

于 2013-06-24T21:20:56.227 回答