×

batch size c bat

batch size(机器学习中的batch_size越大越好吗)

admin admin 发表于2023-08-05 17:52:30 浏览66 评论0

抢沙发发表评论

本文目录

机器学习中的batch_size越大越好吗

从实际中来看,这个问题并没有统一的正确答案,需要具体问题具体分析。但是这里可以分享一些实际训练训练中的经验。

Batch size,批大小也就是模型在每次训练时,喂给他多少的数据量。通常我们优化模型所使用的损失函数公式如下,优化的目标往往是非凸函数,因此存在诸多的局部最优点。

其中M就是全部的训练数据大小,f(x)是单个数据的损失函数。而在我们每次更新模型参数时,所用的计算公式如下:

这里的Bk就是批大小,Bk是小于等于M的。而按照选取的Bk大小,我们可以将其分成三类:

1. Bk=1,即随机梯度下降,即每次针对单个数据进行参数更新。这种方法的优势在于占用的内存很小,能够实现在线学习。弊端也很明显,就是很容易由于梯度方向的随机而导致模型无法收敛,而且无法充分并行计算,训练时间过长。

2. Bk=M,即每次都使用全部数据来进行模型参数的更新,这种方式在每次更新时,得到的更新梯度方向更加准确,使得模型收敛的更加稳定。但是缺点在于,当数据量非常大的时候,由于内存的限制,往往无法实现,同时所需要训练的epoch数也会大大增加;

3. 1《Bk《M,即小批量的梯度下降,这种方法权衡了随机梯度下降和全批量梯度下降的优缺点,往往在实际使用中能取得更好的效果。

另外根据2017年的一篇论文,过大的batch往往会降低模型的性能和泛化能力,那是因为多大的batch会使得在模型陷入到尖锐的局部最优处(Sharp Minimum)时,无法跳出来。而小一点的batch则可以由于梯度方向的变化大,而容易收敛一个平坦的最优处(Flat Minimum)。而往往在平坦的最优处能够在测试集上获得更好的泛化效果。

参考内容:On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima

深度学习中的batch的大小对学习效果有何影响

摘抄以下一段我觉得比较好的解释。总du的来说个人觉zhi得对于效果的影响主要还是收敛性的好坏。而对于训练过程来说的话应该还是跟训练的代价,也就是速度相关。

深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。

第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。

另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

深度学习中多GPU训练是否等价于增大batch size

不等价。增加batch size等同于提高带宽,允许更多地数据被并行地训练,从并行的角度来说,多GPU分布式训练也是同样的目的。但是不同点在于batch size只是在算法层面做的trick,底层的硬件没有改变,硬件限制算力,单纯增加batch size不会没有上线,而且增加以后效果并不一定很好。但是分布式训练增加了GPU数量,提高了算力,精细了计算粒度,训练效果并不会打折扣。

卷积神经网络中的batch到底是什么

通常情况下,神经网络需要训练大量的样本,使得结果收敛从而拟合实际情况。

但是,当训练样本的数量十分巨大的时候,我们不可能将所有数据一起读入内存,然后训练,这就需要将这些数据分成多组进行训练。

神经网络训练一组数据称为batch,batch的size指的是这组训练数据的数量。

假设训练数据满足正态分布,那么,batch的size越大,这一组数据与训练数据越容易拟合即特征损失越小,那么就会有越好的收敛效果和效率。

但是size太大,内存又会不足,batch的size的选择应该根据需要达到时间,空间,效果的平衡。

除此之外,BatchNormalization也可以大大提高训练的效果和收敛速率。