我通过一些在线资源自学了机器学习,但关于梯度下降有一个问题我无法解答。
梯度下降的公式如下所示的逻辑回归给出:
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,hθ(x)=0对所有10个训练样本
- 步骤2:使用所有10个训练样本执行一次梯度下降步骤。系数将与第一种方式不同,因为求和项包括所有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次更新。但每次更新都有点噪音,这可能使收敛到最终解决方案变得困难。
这两种方法之间的折衷被称为“小批量”。对整个数据集取梯度是一次完整的“批处理”轮次,因为我们需要手头有整个数据集。相反,我们将进行一个小批量,仅选择整个数据集的一个小子集。在这种情况下,我们设置k,1 < k < m,其中k是小批量中的点数。我们在每次迭代中选择k个随机数据点来创建梯度,然后执行更新。重复直到收敛。显然,增加/减少k是在速度和准确性之间的权衡。
注意:对于随机和小批量梯度下降,随机打乱/选择下一个数据点是很重要的。如果你对每个数据点使用相同的迭代顺序,你可能会得到非常奇怪/糟糕的结果——通常会偏离解决方案。