批量和随机梯度下降之间的算法复杂度差异是什么

时间:2013-11-07 03:01:26

标签: algorithm machine-learning

每个θj:=θj+α∑(yi-h(xi))xji批量渐变下降为:j

随机梯度下降是:

loop
{  
   for i=1 to m,
   {
       θj:=θj+α(yi-h(xi))xji   for every j.
   }
}

我很好奇两种算法之间的复杂性差异。我认为复杂性是一样的!两者都是O(m * n),但批量梯度是m * n,随机是n * m,只是一个不同的顺序,我是对的吗?

2 个答案:

答案 0 :(得分:2)

A)你不会怎么做SGD。您可以随机选择“i”,也可以随机抽取每一轮的数据。

B)如果您决定只通过数据执行固定数量的纪元,那么您才是正确的。

实际上,您需要继续运行算法,直到您收敛到解决方案。 SGD and GD have different rates of convergences,并不像“运行时大O(f(x))”那么简单。每种方法都需要不同的时间来达到不同的目标。这些进一步改变取决于您的损失函数和其他因素。

GD在实践中并未使用,因为如果您每个纪元只执行一次更新,则有更好的选择。

C)“m * n,随机是n * m,只是一个不同的顺序,我是对的吗?”如果您的大O声明是正确的,这将是正确的。

D)你忘了在大O中包含问题的维度。

答案 1 :(得分:0)

这两种方法的渐近复杂性在某种意义上是相同的。如果对外循环的多次迭代都进行了两次迭代,则渐近地执行相同数量的工作。不同之处在于方法的实际行为。

通常,随机梯度下降用作处理非常大的训练集的方法。假设您的训练集中有十亿个项目。每次更新模型参数(theta)时,批量梯度下降需要经过所有十亿个项目。随机梯度下降在处理每个训练集项目的模型参数(尽管以较小的增量)拟合方面不断取得进展。

如果您的训练数据集非常大并且您的排序没有任何偏差,您可以(如您所示)按顺序重复循环遍历数据集。连续运行数据集的事实不使用不同的顺序,这在实践中不应该成为问题。