Batch Size(批量大小)

batch size 就是每次喂给模型多少条数据,然后才更新一次权重。

亦作、亦称:批量大小 · Mini-batch Size · 批大小 · 批次大小

Batch Size 决定了每次梯度更新所使用的样本数量,是深度学习训练效率与泛化能力之间最核心的权衡旋钮。合理选择 batch size 对模型收敛速度、显存使用和最终精度均有显著影响。

概述

Batch Size 是深度学习训练流程中控制每次参数更新所用样本数的超参数。

  • 批量梯度下降(BGD):batch size = 全量训练集,梯度精确但每步耗时长
  • 随机梯度下降(SGD):batch size = 1,更新频繁、噪声大
  • 小批量梯度下降(Mini-batch SGD):batch size 在 2~数千之间,兼顾效率与稳定性,是当前主流
  • 典型默认值为 32,也常见 64、128、256
  • 在 LLM 训练中常以 token 数 而非样本数衡量 batch size

工作原理

每个训练步骤(step)由以下流程组成。

  • 采样:从训练集中随机抽取 B 条样本组成一个 mini-batch
  • 前向传播:将 B 条样本并行送入模型,计算预测输出与损失
  • 反向传播:对 B 条样本的损失取均值,计算梯度 ∇L
  • 参数更新:优化器用梯度 ∇L 更新全部可训练参数
  • 梯度方差:batch size 越大,梯度估计方差越小(理论上方差 ∝ 1/B)

对训练的影响

Batch size 的选择深刻影响训练动态与最终模型质量。

  • 小 batch(2~32):梯度噪声大,有助于逃离尖锐极小值,通常泛化更好;但每步方差大,训练曲线震荡
  • 大 batch(1024+):梯度估计准确,训练曲线平滑,但倾向于收敛到尖锐极小值(sharp minima),测试集性能下降
  • Keskar et al. (2017) 实证表明:大 batch 训练存在显著泛化差距(generalization gap)
  • 学习率缩放规则(Linear Scaling Rule):batch size 翻倍时,学习率也应翻倍,以维持等效更新步长

工程实践要点

在实际落地时,batch size 的配置需结合硬件与任务综合考量。

  • 2 的幂次:选 32、64、128 等值可最大化 GPU 内存对齐与 CUDA 并行效率
  • 梯度累积(Gradient Accumulation):在显存受限时,将多个小 batch 的梯度累加后再更新,等价于大 batch
  • 动态 batch size:部分训练框架支持 warmup 阶段从小 batch 逐步增大,兼顾早期稳定与后期效率
  • LLM 训练:以 token 数而非样本数度量,典型值为 0.5M~4M tokens/step
  • BatchNorm 敏感性:极小的 batch size(<4)会导致 Batch Normalization 统计量不稳定,需改用 LayerNorm 或 GroupNorm

与相邻概念的区别

Batch size 常与其他训练超参数混淆,需注意区分。

  • Batch size vs. 学习率:两者需联动调整,batch size 增大时通常需同步提高学习率
  • Batch size vs. Epoch:epoch 是全量数据遍历次数,batch size 决定每个 epoch 内的更新步数(steps = N / B)
  • Mini-batch vs. 在线学习:在线学习(online learning)batch size 为 1,但侧重实时更新而非批量优化
  • Batch size vs. 序列长度:在 Transformer 中,序列长度和 batch size 共同决定显存消耗,两者需联合权衡

局限与常见误区

围绕 batch size 存在若干常见误解,需谨慎对待。

  • 误区:batch size 越大训练越好——大 batch 训练速度快,但泛化差距真实存在,不能无限扩大
  • 误区:batch size 固定设 32 就够——不同任务、网络结构和优化器对 batch size 的敏感度差异很大
  • 硬件瓶颈:batch size 超过显存上限会引发 OOM(Out of Memory),需使用梯度累积或混合精度解决
  • 学习率未联动:扩大 batch size 而不调整学习率,常导致训练发散或收敛过慢
  • BatchNorm 依赖:使用 BatchNorm 的网络在极小 batch size 下统计不准,影响训练稳定性

发展脉络

Batch size 的研究随深度学习的规模扩张而不断演进。

  • 1980s:反向传播算法确立,早期多用全量批次或单样本更新
  • 1990s~2000s:LeCun 等人推广 Mini-batch SGD,验证其在实践中的高效性
  • 2012:AlexNet 使用 128 的 batch size 在 GPU 上训练,标志大规模 mini-batch 训练范式成熟
  • 2017:Keskar et al. 发表 ICLR 论文,系统揭示大 batch 训练的泛化差距与尖锐极小值问题
  • 2017:Goyal et al.(Facebook)提出 Linear Scaling Rule,成功将 ResNet 的 batch size 扩展到 8192
  • 2020s:LLM 预训练采用超大 batch(百万 token 级),配合学习率调度与梯度裁剪实现稳定训练

常见误解

日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。

  • 「batch size 就是每次喂给模型多少条数据,然后才更新一次权重。」
  • 「batch size 越大,训练越快,但不一定效果越好,甚至可能泛化变差。」
  • 「设成 32 或 64 大多数时候就够用,太大了反而容易过拟合尖锐极值。」

相关术语

和本术语关联紧密的其他词条,便于串联理解。

延伸阅读

从知识库精选 3 篇文章,帮助深入理解该术语。

  1. 1

    正则化:BatchNorm, LayerNorm, Dropout

    从 Dropout 到 LayerNorm,掌握防止过拟合的核心技术

  2. 2

    LLM 预训练(一):数据准备与训练策略

    从零开始构建大语言模型预训练全流程。深入解析数据收集、清洗、去重、分词的完整数据工程管线,以及学习率调度、混合精度训练、分布式策略、梯度累积等核心训练技术,包含完整的 PyTorch 实战代码实现和训练监控方案。

  3. 3

    自监督视觉学习:MAE, DINO, MoCo

    无需标注数据的视觉预训练,掌握自监督学习的最新进展

外部参考

维基百科:查看「Batch Size」词条

本页内容为本站原创撰写;维基百科链接仅作延伸参考。