随机梯度下降算法从零实现,基于Numpy

随机梯度下降法SGD

Github

由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法(Stochastic Gradient Descent,简称SGD)正是为了解决批量梯度下降法这一弊端而提出的。

  • 对上述的能量函数求偏导:
  • 由于是最小化风险函数,所以按照每个参数θ的梯度负方向来更新每个θ:

具体的伪代码形式为:

随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

优点:训练速度快;

缺点:准确度下降,并不是全局最优;不易于并行实现。

从迭代的次数上来看,SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。其迭代的收敛曲线示意图可以表示如下:

image

文章引用于 https://www.cnblogs.com/maybe2030/p/5089753.html
编辑 Lornatang
校准 Lornatang

你可能感兴趣的:(随机梯度下降算法从零实现,基于Numpy)