当前位置: 代码网 > 科技>人工智能>机器学习 > 神经网络参数-----batch_size

神经网络参数-----batch_size

2024年07月28日 机器学习 我要评论
在神经网络的训练过程中,一个非常直观的需要调整的超参数就是batch size。我们需要决定在一次训练中,要选取多少样本喂给神经网络,这个要选择的样本个数,就是batch size。batch size的。

什么是batchsize

  • batch一般被翻译为批量,设置batch_size的目的让模型在训练过程中每次选择批量的数据来进行处理。batch size的直观理解就是一次训练所选取的样本数
  • batch size的大小影响模型的优化程度和速度。同时其直接影响到gpu内存的使用情况,假如你gpu内存不大,该数值最好设置小一点

在神经网络的训练过程中,一个非常直观的需要调整的超参数就是batch size。我们需要决定在一次训练中,要选取多少样本喂给神经网络,这个要选择的样本个数,就是batch size。
batch size的可取值范围为1到全体样本数

  • 传统的梯度下降法(gradient descent)就是采用了全部样本来进行训练和梯度更新,
  • 它的变体随机梯度下降法(stochastic gradient descent),则设定batch size为1,即每次只将一个样本喂给神经网络,
  • 在mini-batch梯度下降法中,则采用了一个折中的方法,每次选择一部分数据用于训练

batch size对网络的影响

  • 在没有使用batch size之前,这意味着网络在训练时,是一次把所有的数据(整个数据库)输入网络中,然后计算它们的梯度进行反向传播,由于在计算梯度时使用了整个数据库,所以计算得到的梯度方向更为准确。但在这情况下,计算得到不同梯度值差别巨大,难以使用一个全局的学习率,所以这时一般使用rprop这种基于梯度符号的训练算法,单独进行梯度更新。
  • 在小样本数的数据库中,不使用batch size是可行的,而且效果也很好。但是一旦是大型的数据库,一次性把所有数据输进网络,肯定会引起内存的爆炸。所以就提出batch size的概念。

如何设置batch_size 的值?

更大的batch size会得到更精确的梯度估计值,但其估计梯度的回报是低于线性的。如果训练集较小,可以直接使用梯度下降法,batch size等于样本集大小。

设置batchsize要注意一下几点:
  1. batch数太小,而类别又比较多的时候,真的可能会导致loss函数震荡而不收敛,尤其是在你的网络比较复杂的时候。
  2. 随着batchsize增大,处理相同的数据量的速度越快。
  3. 随着batchsize增大,达到相同精度所需要的epoch数量越来越多
  4. 由于上述两种因素的矛盾, batch_size 增大到某个时候,达到时间上的最优。
  5. 由于最终收敛精度会陷入不同的局部极值,因此 batch_size 增大到某些时候,达到最终收敛精度上的最优。
  6. 过大的batchsize的结果是网络很容易收敛到一些不好的局部最优点。同样太小的batch也存在一些问题,比如训练速度很慢,训练不容易收敛等。
  7. 具体的batch size的选取和训练集的样本数目相关。
  8. gpu对2的幂次的batch可以发挥更佳的性能,因此设置成16、32、64、128…时往往要比设置为整10、整100的倍数时表现更优,deep learning 书中提到,在某些硬件上使用特定大小的数组时,运行时间会更少。尤其是在使用gpu时,通常使用2的幂数作为batch size可以获得更少的运行时间。

在设置batchsize的时候,首先选择大点的batchsize把gpu占满,观察loss收敛的情况,如果不收敛,或者收敛效果不好则降低batchsize,一般常用16,32,64等。

batchsize过大优点:
  • (1)提高了内存利用率,大矩阵乘法并行计算效率提高。
  • (2)计算的梯度方向比较准,引起的训练的震荡比较小。
  • (3)跑完一次epoch所需要的迭代次数变小,相同数据量的数据处理速度加快。
batchsize过大缺点:
  • 容易内容溢出,想要达到相同精度,epoch会越来越大,容易陷入局部最优,泛化性能差。

batchsize设置:通常10到100,一般设置为2的n次方。原因:计算机的gpu和cpu的memory都是2进制方式存储的,设置2的n次方可以加快计算速度。

batchsize过小:每次计算的梯度不稳定,引起训练的震荡比较大,很难收敛。

在合理范围内,增大batch_size有何好处?
  • 内存利用率提高了,大矩阵乘法的并行化效率提高。
  • 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
  • 在一定范围内,一般来说 batch_size 越大,其确定的下降方向越准,引起训练震荡越小。
盲目增大 batch_size 有何坏处?
  • 内存利用率提高了,但是内存容量可能撑不住了。
  • 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
  • batch_size 增大到一定程度,其确定的下降方向已经基本不再变化。
调节 batch_size 对训练效果影响到底如何?
  • batch_size 太小,模型表现效果极其糟糕(error飙升)。
  • 随着 batch_size 增大,处理相同数据量的速度越快。
  • 随着 batch_size 增大,达到相同精度所需要的 epoch 数量越来越多。
  • 由于上述两种因素的矛盾, batch_size 增大到某个时候,达到时间上的最优。
  • 由于最终收敛精度会陷入不同的局部极值,因此 batch_size 增大到某些时候,达到最终收敛精度上的最优
如何选择合适的batch_size
  • 考虑硬件资源:batch_size的大小受到硬件资源的限制。如果gpu或cpu的内存不足,则需要减小batch_size。
  • 权衡训练速度和精度:较大的batch_size可以加快训练速度,但可能会导致模型精度下降;而较小的batch_size可以提高模型精度,但会减慢训练速度。因此,需要在训练速度和精度之间找到一个平衡点。
  • 尝试不同的值:在实际应用中,可以尝试不同的batch_size值,并观察模型在验证集上的性能表现。通常,可以使用一些常用的batch_size值(如32、64、128、256等)作为起点。

1.当数据量足够大的时候可以适当的减小batch_size,由于数据量太大,内存不够。但盲目减少会导致无法收敛,batch_size=1时为在线学习,也是标准的sgd,这样学习。如果数据量不大,noise数据存在时,模型容易被noise带偏,如果数据量足够大,noise的影响会被“冲淡”,对模型几乎不影响。

2.batch的选择,首先决定的是下降方向,如果数据集比较小,则完全可以采用全数据集的形式。这样做的好处有两点。

  1. 全数据集的方向能够更好的代表样本总体,确定其极值所在。
  2. 由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。

深度学习中经常看到epoch、 iteration和batchsize这三个的区别:

  1. batchsize:批大小。在深度学习中,一般采用sgd训练,即每次训练在训练集中取batchsize个样本训练;
  2. iteration:1个iteration等于使用batchsize个样本训练一次;
  3. epoch:1个epoch等于使用训练集中的全部样本训练一次;

举个例子,训练集有1000个样本,batchsize=10,那么训练完整个样本集需要:100次iteration,1次epoch。

参考:

【深度学习】一文向您详细介绍深度学习中的 batch_size_深度学习中batch-csdn博客

深度学习基础入门篇[六]:模型调优,学习率设置(warm up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。-腾讯云开发者社区-腾讯云 (tencent.com)

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com