批量梯度下降法(Batch Gradient Descent)
在每次更新参数时都会将全部数据集计算一遍。
优点:全局最优解,能保证每一次更新权值,都能降低损失函数;易于并行实现。
缺点:当样本数目很多时,训练过程会很慢,计算量开销大,不支持在线学习。
随机梯度下降法(Stochastic Gradient Descent)
每计算一个样本就更新一次参数。如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将参数迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次,这种方式计算复杂度太高。
优点:训练速度快。
缺点:收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
小批量梯度下降法(Mini-batch Gradient Descent)
在每次更新参数时都只计算一部分样本。为了克服以上两种方法的缺点,现在一般都采用这种折中手段。这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。
总结
这三种方法使用的情况:如果样本量比较小,采用批量梯度下降算法。如果样本太大,或者在线算法,使用随机梯度下降算法。在实际的一般情况下,采用小批量梯度下降算法。