神经网络参数-----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)

相关推荐
007tg27 分钟前
从ChatGPT家长控制功能看AI合规与技术应对策略
人工智能·chatgpt·企业数据安全
Memene摸鱼日报30 分钟前
「Memene 摸鱼日报 2025.9.11」腾讯推出命令行编程工具 CodeBuddy Code, ChatGPT 开发者模式迎来 MCP 全面支持
人工智能·chatgpt·agi
linjoe991 小时前
【Deep Learning】Ubuntu配置深度学习环境
人工智能·深度学习·ubuntu
先做个垃圾出来………2 小时前
残差连接的概念与作用
人工智能·算法·机器学习·语言模型·自然语言处理
AI小书房2 小时前
【人工智能通识专栏】第十三讲:图像处理
人工智能
fanstuck3 小时前
基于大模型的个性化推荐系统实现探索与应用
大数据·人工智能·语言模型·数据挖掘
多看书少吃饭4 小时前
基于 OpenCV 的眼球识别算法以及青光眼算法识别
人工智能·opencv·计算机视觉
一条数据库4 小时前
南京方言数据集|300小时高质量自然对话音频|专业录音棚采集|方言语音识别模型训练|情感计算研究|方言保护文化遗产数字化|语音情感识别|方言对话系统开发
人工智能·音视频·语音识别
Yingjun Mo4 小时前
1. 统计推断-基于神经网络与Langevin扩散的自适应潜变量建模与优化
人工智能·神经网络·算法·机器学习·概率论