← 返回题目列表

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

高频 简单 第 1 / 25 题 更新于 2026/08/02
深度学习batchepochbatchsize

简化版

三个训练中的基本概念:Epoch(轮)= 把整个训练集完整过一遍Batch(批)= 把训练集切成的小份,每次用一批数据算梯度、更新一次参数Iteration(迭代)= 一次参数更新 = 处理一个 batch。关系:每个 epoch 的 iteration 数通常为 ceil(N/B),若 drop_last=true 则为 floor(N/B)Batch Size(批大小) 是每批的样本数,影响很大:大 batch——梯度估计准、训练稳、能充分利用 GPU 并行(快),但占显存多、泛化可能略差(容易收敛到「尖锐极小值」);小 batch——梯度噪声更大,可能带来正则效应,但泛化并非必然更优,省显存,但训练慢、不稳定。常用折中是 mini-batch(如 32、64、128、256)。

详细版

三个概念:

概念含义
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
梯度估计准、稳有噪声
训练速度快(GPU 并行充分)
显存占用
泛化可能略差(尖锐极小值)常更好(噪声起正则作用)
收敛稳但可能陷次优抖动但可能找到更平坦解

完整版教学

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

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

  • 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 = 处理一个 batch = 一次参数更新。换算:每 epoch 迭代数 = 样本总数 / batch size(10000 样本、batch 100 → 每 epoch 100 次迭代)。分 batch 是在梯度准确性和效率间平衡,mini-batch(32~256)是标准做法Batch Size 影响大 batch——梯度准、稳、快(GPU 并行充分),但吃显存、泛化可能略差(尖锐极小值),需配大学习率+warmup;小 batch——梯度有噪声、慢、不稳,但噪声起正则作用、泛化常更好、省显存。选择:常用 2 的幂、受显存限制(不够用梯度累积)、大 batch 配大学习率。