梯度下降:我们是否在GD中的每一步迭代所有训练集?或者我们是否为每个训练集更改GD?

时间:2013-06-24 19:52:35

标签: machine-learning gradient-descent

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

梯度下降的公式由以下物流回归给出:

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

答案 1 :(得分:0)

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

当训练集不大时,使用批量梯度下降。但有些情况下训练集并未修复。例如。培训即时进行 - 您不断获取越来越多的样本并相应地更新矢量。在这种情况下,您必须更新每个样本。