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



我用一些在线资源自学了机器学习,但我有一个关于梯度下降的问题,我想不通。

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

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

其中,θj是变量j上的系数;α是学习率;CCD_ 3是假设;y是实值,xj是变量j的值。m是训练集的数量。CCD_ 7、CCD_。

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

我不清楚总和是否代表了我的整个训练集,也不清楚到目前为止我已经做了多少次迭代。

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

请参阅以下第一种方式与第二种方式的区别:

第一路

  • 步骤1:由于系数初始化为0,因此hθ(x)=0
  • 第二步:对第一个训练示例进行梯度下降。总结术语仅包括1个培训示例
  • 步骤3:现在使用新的系数来训练示例1&2…总结项包括前两个训练示例
  • 第四步:再次进行梯度下降
  • 步骤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

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

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

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

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

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

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

相关内容

最新更新