我已经通过一些在线资源教自己机器学习,但我有一个关于梯度下降的问题,我无法弄清楚。
梯度下降的公式由以下物流回归给出:
Repeat {
θj = θj−α/m∑(hθ(x)−y)xj
}
其中θj
是变量j的系数; α
是学习率; hθ(x)
是假设; y
是实数值,xj
是变量j的值。 m
是训练集的数量。 hθ(x)
,y
用于每个训练集(即总和符号的用途)。
这是我感到困惑的地方。
我不清楚总和是代表我的整个训练集还是我已经完成了多少次迭代。
例如,假设我有10个训练样例。如果我在每个训练样例之后执行梯度下降,那么我的系数将会非常不同,如果我在所有10个训练样例之后执行梯度下降。
见下文第一种方式与第二种方式的不同之处:
第一种方式
第二种方式
我希望这能解释我的困惑。有谁知道哪种方法是正确的?
编辑:添加成本函数和假设函数
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
答案 0 :(得分:7)
您描述它的第二种方式是执行渐变下降的正确方法。真实梯度取决于整个数据集,因此梯度下降的一次迭代需要使用所有数据集。 (对于任何可以采用渐变的学习算法都是如此)
“第一条道路”接近于被称为随机梯度下降的东西。这里的想法是,使用整个数据集进行一次更新可能会过度,特别是如果某些数据点是多余的。在这种情况下,我们从数据集中选择一个随机点 - 主要是设置m = 1。然后,我们根据数据集中单个点的连续选择进行更新。通过这种方式,我们可以以与Gradient Descent的一次更新大致相同的成本进行更新。但是每次更新都有点嘈杂,这使得最终解决方案难以收敛。
这些方法之间的妥协被称为“MiniBatch”。采用整个数据集的梯度是一整轮的“批处理”处理,因为我们需要手头的整个数据集。相反,我们将做一个小批量,只选择整个数据集的一小部分。在这种情况下,我们设置k,1< k< m,其中k是迷你批次中的点数。我们选择k个随机数据点来从每次迭代创建梯度,然后执行更新。重复直到收敛。显然,增加/减少k是速度和准确度之间的权衡。
注意:随机和随机迷你批量梯度下降,重要的是随机播放/选择下一个数据点。如果对每个数据点使用相同的迭代顺序,则可能会得到非常奇怪/糟糕的结果 - 通常会偏离解决方案。
答案 1 :(得分:0)
在批量梯度下降的情况下(取所有样本),您的解决方案将更快收敛。在随机梯度下降的情况下(一次取一个样本),收敛将变慢。
当训练集不大时,使用批量梯度下降。但有些情况下训练集并未修复。例如。培训即时进行 - 您不断获取越来越多的样本并相应地更新矢量。在这种情况下,您必须更新每个样本。