GD(梯度下降)和SGD(随机梯度下降)
2016-04-26 本文已影响10359人
JxKing
相同点
在GD和SGD中,都会在每次迭代中更新模型的参数,使得代价函数变小。
不同点
GD
在GD中,每次迭代都要用到全部训练数据。
假设线性模型

θ是参数
代价函数 :

那么每次GD的更新算法为:

由此算法可知,在对代价函数求偏导时,是需要用到全部的训练数据的。
SGD
在SGD中,每次迭代可以只用一个训练数据来更新参数。
回到GD的更新算法,假设此时我们此时训练数据就只有一条(x,y),

所以此时的更新参数的算法变为:

此时更新的算法,只用到了一个样本。
其实具象的理解下,就是来了一条训练数据,算下此时根据模型算出的值和实际值的差距,如果差距大,那么参数更新的幅度大,反之则小。
总结
当训练数据过大时,用GD可能造成内存不够用,那么就可以用SGD了,SGD其实可以算作是一种online-learning。另外SGD收敛会比GD快,但是对于代价函数求最小值还是GD做的比较好,不过SGD也够用了。