三种梯度下降法简介

  • 随机梯度下降(Stachastic gradient descent)
  • 小批量梯度下降(Mini-batch gradient descent)
  • 批量梯度下降(Batch gradient descent)

三者的区别在于使用多少个训练样本来对梯度做一次更新。

假设训练样本总量为n,用来更新一次梯度的样本数为m。

  • 当m = 1时,就叫做随机梯度下降(SGD);
  • 当1 < m < n 时,就叫做小批量梯度下降;
  • 当m = n时,就叫做批量梯度下降;

梯度下降的目的是为了学习样本中的信息,从而对模型的权值进行更新,从而使模型一步步靠近最优解(局部最优)。简单来说,就是用训练样本来指导模型演变的方向。

然而,由于单独的个体样本存在一定的偶然性和多变性,不能指导模型走向一个精确的,泛化的结果,因此我们才会需要大量的样本来对模型给出一个精确的指导。

由此可见,可以得到以下结论。

  • 使用SGD时,由于每一个样本的特异性,模型并不是在每一次更新都向着正确的方向进行的,梯度更新具有一定的随机性(也是这个名字的由来)。
  • 使用批量梯度下降时,则意味着每一次的更新都学习了全部的样本,那么更新的方向一定是朝着正确的方向进行,而不存在偶然的偏差。
  • 小批量梯度下降则居于他们两个中间。每次更新学习了m个样本,因此有一定的“把握”向着正确的方向更新,相比SGD减小了更新时的随机性,但是和批梯度下降相比,依然没有学习所有的样本,因此依然不会保证每次更新都会向着正确的方向进行。

如图: 图中紫色线为随机梯度下降,绿色线为小批量梯度下降,蓝色为批量梯度下降。

描述
Grad

由图可见,从随机梯度下降,到小批量梯度下降,再到批量梯下降,其梯度更新时的随机性和不确定性在减小。

为什么选择Mini batch

使用SGD,一次更新只用一个样本:

优点:

  • 只计算1个样本就能做一次梯度更新,可以很快的更新迭代
  • 不用对全部样本进行求和,计算量少
  • 只用1个样本更新,占据的内存空间少

缺点:

  • 一次只计算一个样本,并没有利用计算机矢量加速的计算特性,计算效率低
  • 由于每一次更新的随机性,很难收敛到最优解(局部最优)

使用批量梯度下降,一次更新用全部样本:

优点:

  • 充分利用计算机矢量加速的计算特性
  • 每一次更新都是向着最优解(局部最优)方向进行

缺点:

  • 计算中存在对所有样本求和的操作,极大的计算量。
  • 需要保存所有的样本,需要的极大的内存空间

使用小批量梯度下降,一次更新用m个样本:

使用minibatch集合了之前二者的全部优点,权衡了计算量,计算效率,收敛性和内存占用。

于是问题来了!m 的大小该怎么选?有什么影响么?

请看下一篇 “minbatch大小对模型训练速度和精度的影响”