我用一些在线资源自学了机器学习,但我有一个关于梯度下降的问题,我想不通。
梯度下降的公式由以下物流回归给出:
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是速度和精度之间的折衷。
注:对于随机和;小批量梯度下降,随机洗牌/选择下一个数据点很重要。如果你对每个数据点使用相同的迭代顺序,你可能会得到非常奇怪/糟糕的结果——通常会偏离解决方案。
在批量梯度下降的情况下(获取所有样本),您的解决方案将更快地收敛。在随机梯度下降的情况下(每次取一个样本),收敛速度会较慢。
当训练集不是很大时,使用批量梯度下降。但在某些情况下,训练设置是不固定的。例如,训练是动态进行的——你不断获得越来越多的样本,并相应地更新你的向量。在这种情况下,您必须对每个样本进行更新。