mini batch

因为梯度更新的时候有三种方式:

第一种是batch gradient descent(批梯度下降),这种方式模型遍历所有数据后计算损失函数然后更新梯度,这样计算过于复杂,所以引出第二种。
第二种是stochastic gradient descent(随机梯度下降),就是每读取一个数据就计算损失函数更新梯度,这样的结果就是单个数据差异大,导致训练波动大,收敛性不太好,这就引出了第三种。
第三种是mini-batch gradient descent(小批量梯度下降)。其目的就是中和前两种方法的特点和不足。随机选取数据中一定量的数据进行训练,然后计算损失函数更新梯度,这样既不会有更与复杂的计算量,又不会训练过于缓慢。
斋藤康毅的深度学习入门一书时,他将mini-batch的梯度下降称之为SGD随机梯度下降。他说随机指的是随机选择这个小批量的数据。

什么是mini batch

我们已知在梯度下降中需要对所有样本进行处理过后然后走一步,那么如果我们的样本规模的特别大的话效率就会比较低。假如有500万,甚至5000万个样本(在我们的业务场景中,一般有几千万行,有些大数据有10亿行)的话走一轮迭代就会非常的耗时。这个时候的梯度下降叫做full batch。 所以为了提高效率,我们可以把样本分成等量的子集。 例如我们把100万样本分成1000份, 每份1000个样本, 这些子集就称为mini batch。然后我们分别用一个for循环遍历这1000个子集。 针对每一个子集做一次梯度下降。 然后更新参数w和b的值。接着到下一个子集中继续进行梯度下降。 这样在遍历完所有的mini batch之后我们相当于在梯度下降中做了1000次迭代。 我们将遍历一次所有样本的行为叫做一个 epoch,也就是一个世代。 在mini batch下的梯度下降中做的事情其实跟full batch一样,只不过我们训练的数据不再是所有的样本,而是一个个的子集。 这样在mini batch我们在一个epoch中就能进行1000次的梯度下降,而在full batch中只有一次。 这样就大大的提高了我们算法的运行速度。

posted @ 2022-05-25 15:08  Uriel-w  阅读(99)  评论(0编辑  收藏  举报