← 返回题目列表

Batch、Epoch、Iteration 是什么?Batch Size 大小有什么影响?

高频 简单 第 1 / 25 题 更新于 2026/09/25
深度学习batchepochbatchsize
学习 AI 实战项目

简化版

三个基本概念是:Epoch 表示数据加载流程覆盖一轮训练集,Batch 是一次前后向处理的一批样本,Iteration/step 通常指一次优化器更新。没有梯度累积时,一个 batch 对应一次 step;累积时多个 micro-batch 才对应一次更新,必须先约定口径。若每 batch 都更新,保留尾批时每 epoch 有 ceil(N/B) 个 step,drop_last=true 时为 floor(N/B)。Batch size 影响梯度噪声、显存、吞吐、BN 统计和更新次数;大或小都不天然保证更好泛化,需要一起重调学习率与训练预算。

详细版

三个概念:

概念含义
Epoch整个训练集被完整训练一遍
Batch训练集切分出的一小份数据
Iteration处理一个 batch = 一次参数更新

换算关系:

每个 epoch 的 iteration 数 = 按是否保留最后不足一批计算 `ceil(N/B)` 或 `floor(N/B)`
总迭代次数 = epoch 数 × 每 epoch 迭代数

例:10000 样本、batch size=100 → 每 epoch 100 次迭代;训练 10 个 epoch = 1000 次迭代。

Batch Size 的影响:

大 batch小 batch
梯度估计准、稳有噪声
训练吞吐饱和前通常更高可能未充分利用硬件
显存占用大小
泛化取决于学习率、步数与正则噪声可能正则化,也可能妨碍优化
收敛单步方差较小、更新次数较少单步方差较大、更新次数较多

完整版教学

一、三个概念——训练的基本节奏

训练神经网络不是一次把所有数据喂进去,而是分批、多轮地进行。三个概念描述了这个节奏:

  • Epoch(轮次):把整个训练集完整地过一遍叫一个 epoch。训练通常要很多个 epoch(如 50、100),让模型反复看数据、逐步学好。
  • Batch(批):一个 epoch 里,训练集被切成很多小批(batch),模型每次只用一批数据算梯度、更新一次参数。
  • Iteration(迭代):处理一个 batch、完成一次参数更新,就是一次 iteration。

二、换算关系

三者的关系是固定的:

每个 epoch 的迭代次数 = 按是否保留最后不足一批计算 `ceil(N/B)` 或 `floor(N/B)`

例子:训练集有 10000 个样本,batch size = 100:

  • 一个 epoch 需要 10000 / 100 = 100 次迭代(处理 100 个 batch,每个 batch 更新一次参数)。
  • 如果训练 10 个 epoch,总共 10 × 100 = 1000 次迭代(参数被更新 1000 次)。

注意区分:epoch 是「过几遍数据」,iteration 是「更新几次参数」——一个 epoch 里参数被更新很多次(等于 batch 数),别把它们搞混。

三、为什么要分 batch——三种梯度下降

「一次用多少数据算梯度」对应三种梯度下降:

  • 批量梯度下降(BGD):每次用全部训练数据算梯度。梯度最准,但每步都要过全量数据、慢且吃内存,大数据不可行。
  • 随机梯度下降(SGD,单样本):每次只用一个样本。快、更新频繁,但梯度噪声大、震荡。
  • 小批量梯度下降(Mini-batch):每次用一小批(如 32~256 个)。兼顾稳定和效率,还能充分利用 GPU 的并行计算——这是深度学习的标准做法(平时说的 SGD 其实多指 mini-batch)。

所以「分 batch」是在「梯度准确性」和「计算效率」之间取平衡。

四、Batch Size 太大:稳但可能泛化差、吃显存

大 batch size(如 512、1024 甚至更大):

  • 梯度估计更准、训练更稳(用更多样本平均,噪声小)。
  • 充分利用 GPU 并行,每步处理更多数据、单位时间吞吐高。
  • 缺点:
    • 占用显存大——batch size 常受显存上限制约。
    • 泛化可能略差:大 batch 改变梯度噪声和有效更新次数;若学习率、训练步数等不重调,泛化可能变化,“尖锐极小值”只是常见解释之一。需要配合更大学习率、warmup、线性缩放规则等技巧才能保持泛化。

五、Batch Size 太小:噪声更大且硬件利用可能不足

小 batch size(如 8、16、32):

  • 梯度有噪声(样本少、估计不准),更新方向抖动。
  • 这种噪声有时产生正则化效果,也可能让优化震荡;是否改善泛化取决于任务、学习率、归一化和训练时长。
  • 省显存。
  • 缺点:训练慢(GPU 并行没吃满、更新频繁但每步信息少)、收敛过程抖动、不稳定。

六、怎么选 Batch Size

  • 常用值:32、64、128、256——2 的幂(利于硬件对齐),是效率和泛化的常见折中。
  • 受显存限制:显存不够就减小 batch size,或用梯度累积(累积多个小 batch 的梯度再更新,模拟大 batch)。
  • 增大 batch 时通常要重新调学习率:常用「线性缩放规则」——在线性缩放适用的区间,可把 batch size 与学习率近似同比放大,并配 warmup;超出临界 batch 后不再保证有效,并配 warmup。
  • 权衡:追求训练速度/吞吐 → 大 batch;追求泛化、显存紧 → 小 batch。没有绝对最优,需实验。

七、非整除数据与梯度累积怎么计算

设训练集 N=103、batch size B=32。保留尾批时,一个 epoch 有 ceil(103/32)=4 次迭代,批大小依次是 32、32、32、7;若 drop_last=true,则只有 3 次迭代且每轮暂时不使用最后 7 个样本。数据加载器通常会在下一轮重新打乱,所以“暂时丢弃”不一定永远丢同一批。

配置优化器更新次数/epoch每次统计特点
B=32,保留尾批4最后一批统计噪声更大
B=32,丢尾批3批形状固定,但每轮少看7个样本
micro-batch=8,累积4步约4有效 batch 约32,BN 仍按8统计

梯度累积要先把损失按累积步数正确缩放,再累计若干 micro-batch 后调用一次 optimizer step。它能模拟较大的梯度平均并节省激活显存,但不能完全复制大 batch:BatchNorm 统计、随机增强和优化器更新频率仍可能不同。

易错点:一次 iteration 通常指一次优化器更新;用了梯度累积后,一个 micro-batch 的前后向不一定等于一次 iteration。

八、常见误区与追问

  • 误区:每个 epoch 的迭代数永远等于 N 除以 B。 不能整除时要看尾批是否保留,并明确使用 ceil 还是 floor。
  • 误区:梯度累积与物理大 batch 在所有方面完全等价。 BN 统计、随机层和通信时机可能不同。
  • 追问:为什么分布式训练要区分全局 batch? 全局 batch 等于每设备 batch×设备数×累积步数,学习率通常按全局值调。
  • 追问:大 batch 一定吞吐更高吗? 达到硬件饱和前通常提高,之后可能受显存、通信和内存带宽限制。
  • 追问:该按 epoch 还是 step 配学习率调度? 先确认调度器定义;数据规模或 batch 改变时,按 step 的计划更容易保持更新预算一致。

九、加强记忆

Epoch 表示数据管线覆盖一轮训练集,batch 是一次前后向的数据块,iteration/step 通常指一次优化器更新。没有梯度累积时,每批更新一次;有累积时多个 micro-batch 才形成一个 step。尾批保留与否决定每轮使用 ceil(N/B) 还是 floor(N/B) 个批次。Batch size 同时改变梯度方差、显存、硬件吞吐、BN 统计和固定 epoch 下的更新次数,因此比较大小 batch 时要重调学习率、warmup 与训练步数。大 batch 不必然泛化差,小 batch 的噪声也不必然有益,最终应按验证指标和端到端吞吐选择。