导航:首页 > 数据处理 > 数据集越大batch如何设置

数据集越大batch如何设置

发布时间:2022-12-15 08:06:08

‘壹’ Batch详解

相关衍生概念

Batch_size = n 时,模型状态如下:

Batch的选择,首先决定的是 梯度下降的方向 ,如果 数据集比较小 ,完全可以采用 全数据集(Full Batch Learning) 的形式,这样做有 2 个好处

在一定范围内, 增加batch_size有助于收敛的稳定性 ,但是随着batch_size的增加,模型的性能会下降

ICLR 2017

1 表明大的batchsize会收敛到sharp minimum,而小的batchsize会收敛到flat minimum,后者具有更好的泛化能力。 两者的区别就在于变化的趋势,一个快一个慢,如下图,造成这个现象的主要原因是小的batchsize带来的噪声有助于逃离sharp minimum。

‘贰’ 3060显卡batchsize设置多少

1。
当数据量足够大的时候可以适当的减小batch_size,由于数据量太大,内存不够。但盲目减少会导致无法收敛,batch_size=1时为在线学习,也是标准的SGD,这样学习,如果数据量不大,noise数据存在时,模型容易被noise带偏,如果数据量足够大,noise的影响会被“冲淡”,对模型几乎不影响。batch的选择,首先决定的是下降方向,如果数据集比较小,则完全可以采用全数据集的形式。

‘叁’ tensorflow怎么调整batch size

原文如下:
在刚开始学习使用TF的过程中,我不是很理解什么是“batch”。也经常有人问,到底minibatch是干什么的?
然而这是一个在TF中,或者说很多DL的框架中很常见的词。

这个解释我觉得比较贴切也比较容易理解。引用如下:

深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。
第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。
另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

Michael Nielsen在这一章节也有解释,mini-batch是什么,为什么有这个东西。
Deep Learning的这一章节的5.9小节也有解释,还给出了batch的典型值。
结合上面给出的中文解释,再看这两个小节,应该会对batch有所理解。

‘肆’ 为什么batchsize和iters设的很大,但很快就退出了

batchsize越大,训练速度则越快,内存占用更大,但收敛变慢。
Batch的选择,首先决定的是下降的方向。那么越准确的数据量,决定的梯度下降的方向就越准确,对于小的数据集来说,batchsize可以选择全部数据集大小。
batch的size设置的不能太大也不能太小,因此实际工程中最常用的就是mini-batch,一般size设置为几十或者几百。

‘伍’ 设置BatchSize

BatchSize是非常重要的超参数,它不仅影响训练速度,也影响模型精度。本篇来讨论如何选择BatchSize。

BatchSize是否越大越好?

BatchSize一般指同时代入训练模型的实例个数,最直接的经验是如果GPU显存不大,又设置较大的BatchSize时直接报错“cuda runtime error(2): out of memory”。

是不是只要机器性能允许,就要设置尽可能大的Batch size呢?同时训练多个实例比逐个代入单个实例训练速度又能提高多少?

下图为使用不同的batchSize,在LeNet上训练mnist数据的效果,使用的框架为Theano。

可以看到,使用较大的batchSize的确可以提速,但是batchSize大到一定程度后,效果并不十分明显。

从图中可以看到如果将所有数据全部代入一次迭代(左图),则在训练集上的代价函数下降比较平滑,如果切分成多个Batch,代价函数不一定是下降的。这是由于每一个Batch中数据的难度不同,造成了代价函数忽大忽小。

如何选择batch大小?

两种极端的情况是BatchSize大小为1,每次只训练一个实例,或者BatchSize大小等于所有训练集数据大小,即每次训练所有数据。但更多的时候BatchSize设置在二者之间。

batchSize较小时,抖动大,训练过程有很大运气的成份,可能某个实例将模型带偏了,防止被模型被带偏的方法是使用较小的学习率,这样即非并行处理,又使用较小的学习率,使得收敛变慢。

batchSize较大时,任务并行执行,训练速度快, 且大Batch正负样本更均衡可以有效更新BN层参数精度更高。代价函数也能相对比较稳定,平滑地下降。但是如果代入了所有数据后再调参,可能会使很多梯度相互抵消,调参也比较粗糙。如果不进行特殊处理,过大的BatchSize一将会损失模型精度。另外,较大的batchSize会使模型的泛化能力下降(generalization gap)。

如果遇到较大的数据集,一般需要切分成batch分批训练,对于较少的数据,也可以使用全部数据训练。当有足够算力时,选取BatchSize为32,64,128或更小一些的batch_size。算力不够时,在效率和泛化性之间做权衡,选择更小的batchSize。

在训练过程中,可以将batch_size作为超参数做多次尝试。另一方面,也可以在前期使用较大的学习率和较越BatchSize粗调,后期(比如论文实验/比赛最后)将BatchSize变小精调,并使用SGD优化方法,慢慢把Error磨低。

BatchSize是否只与速度有关?

BatchSize不仅与速度相关,如果模型中使用了Batch Normalization(BN)归一化方法,那么太小的BatchSize会影响模型效果,如果受算法或性能限制只能使用小的BatchSize,则建议在fine-tune时锁住BN归一化层,或者使用其它归一化方法(如Group Normalization)。

另外,BN归一化时的统计值针对每一Batch计算,而非对整个训练集计算,从而引入了噪声,当噪声在合理范围以内时,它能实现类似Dropout的效果,使模型更加健壮;BatchSize太小噪声太大,则使模型效果变差;如果BatchSize太大,统计值能有效地表示整体训练数据的统计数据,则无法产生类似Dropout的正则化效果。

BatchSize与Learning rate的关系

Krizhevsky提出,如果BatchSize加大,可以加大学习率,当BatchSize加大k倍,则学习也加大k的开根号位数,后来发现使用线性变换调节二者关系效果更好。用这种方法将AlexNet的BatchSize从128加大到1024精度只损失1%。但是太大的学习率又会在一开始使模型训练不稳定,解决该问题的方法是学习率warm-up。

阅读全文

与数据集越大batch如何设置相关的资料

热点内容
内存是如何存数据的 浏览:55
信道状态指示包括以下哪些信息 浏览:305
什么是现代市场体系 浏览:891
加盟代理商如何注册 浏览:249
g工程和数字媒体技术哪个前景好 浏览:372
信息化系统如何运维 浏览:415
济南特色早餐技术培训哪里好 浏览:292
什么是货币交易所的充值与提币 浏览:951
信息提取题考查什么 浏览:388
老外技术到底怎么样 浏览:745
微商老代理回归朋友圈怎么发 浏览:342
奶牛猫在市场上是什么价格 浏览:938
心电图中的数据表示什么 浏览:76
程序员那么可爱在哪里可以看全部 浏览:5
信息组织都有哪些 浏览:375
医保报销数据怎么写 浏览:370
东盟海交易所怎么赚钱 浏览:239
新鲜市场的股票有哪些 浏览:87
儋州哪个市场买鲤鱼 浏览:182
四川信息流平台哪些内容点击高 浏览:473