从梯度下降开始谈起:
梯度下降的每一轮迭代下,要计算所有数据的损失函数值,然后计算每个参数的偏导数,来求出目前的梯度方向。但是在计算损失函数的过程中,需要把每个数据点都计算出来,有的时候,数据可能有几百万甚至更多,这个时候可能迭代速度就会明显下降下来了。所有这个时候有了一种 mini-batch gradient descent 小批量梯度下降,把数据分成一个一个的batch,然后每计算一个batch,就更新一次梯度,也就是说现在梯度下降中,每次迭代不是计算全部数据的损失函数,而是一个batch的损失函数。这样可以加快训练的速度,还有模型收敛的速度。因为以前要把所有数据都过一遍模型才能得到更新,现在模型的更新更频繁了。
而且另外一个好处就是,也更容易实现并行计算,两台服务器拿不同的两个batch可以分别计算梯度,这个就是为什么要使用batch的原因。
Stochastic Gradient Desent(SGD)--随机梯度下降,这种就是小批量梯度下降的特例,就是batch size = 1时,每次只随机采样一个数据点,但是这样很不稳定。PyTorch里的SGDOptimizer 应该指的是mini-batch gradient descent,然后就是关于batch的一些其他信息,一般batch是64的倍数或者因子(就是32,18之类的)。这是因为使用GPU的时候,把batch size 设置长64的倍