之前的博客讲了一下批量梯度下降优化算法,这一篇我们来看看与之对应的随机梯度下降法。
批量梯度下降法每次更新参数时,用的都是所有的样本。而随机梯度下降法每次只用一个样本来跟新参数。下面是以最小平方误差损失函数为例的随机梯度下降法伪代码:
Randomly shuffle dataset;
从上面的伪代码我们可以看到,随机梯度下降每次更新都只是为了更好的拟合当前的这一个样本。所以自变量的迭代轨迹相对于梯度下降中的来说更为曲折。批量梯度下降法每次更新都需要全部的样本m个,也就是要计算m个梯度。当样本量很大很大时,更新一次需要的时间就会很久。如果再多迭代几次,模型收敛的速度就会很慢。因为随机梯度下降法每次只用一个样本,所以更新的速度会更快,模型收敛的速度也会更快。但是,更新的次数更加频繁。
SGD在前期的迭代效果卓越,但是到了后期就会在最小值附近徘徊。所以对于凸优化问题,最终的结果在全局最优的附近。有可能通过decreasing stepsize,也就是逐步减小learning rate可以缓解震荡。