batch 能无限加大吗?
岔路课 · 挂在第 5 课旁边。第 5 课讲学习率随步数怎么变;这一课问同一类问题的另一半:batch 要不要也随训练变?
本课一问:batch 越大,平均梯度越准。那 batch 能不能无限加大?
这一课先不碰:大 batch 怎么分到多张卡上(C10);最优 batch 与学习率怎么随模型规模变化(C6)。
从已有出发
第 1 课说过:每一步用一小批数据的平均梯度代替全量梯度。「小明把苹果给了小王」只是一条样本,一批里有成千上万条这样的序列。批越大,平均出来的梯度越接近全量梯度。
B 条样本的平均梯度,方差是单条样本梯度方差的 1/B 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条独立同分布样本均值的方差 = 单个方差 ÷ B;不放回抽样时略小 出处待补 。所以 batch 翻倍,噪声的方差减半——但「方向」本身并不会因此变得更好,它只是更接近那个本来就在的全量梯度。
先自己设计:batch 越大越好,开局就用最大的
最直接的想法:显存允许多大就用多大,从第 1 步用到最后。要判断值不值,得先量一个数:这一刻,多大的 batch 才算「够准」?McCandlish et al. 2018 给了一个容易测的量——梯度噪声尺度 Bsimple = tr(Σ) ÷ |G|²:分子是单条样本梯度的方差(噪声),分母是全量梯度的长度平方(信号)。batch 远小于它时,加大 batch 几乎是白赚;远大于它时,再加就是在重复同一个方向 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条原文:一个简单、容易测的统计量预测了多个领域里「最大的有用 batch」;这是经验模型,不是定理 出处McCandlish et al. 2018 摘要 ↗需联网 。
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
数字来源:浏览器实时训练(纯 JS,Float64)。模型、语料、种子写在上方;同一组对照里所有 run 共用初始化和取批顺序,只改被比较的那一项。换种子重跑可以看到噪声有多大——差异小于种子间波动时不下结论。
既然「够用的 batch」随训练变大,那就让 batch 也随训练变大:开局用小 batch 多走几步,后期再加大。这正是 McCandlish 摘要里的另一句话:噪声尺度随 loss 下降而增大,并据此给出了自适应 batch 的粗略收益模型。下面是几家的真实做法——它们并不一致。
试三件事:① 读表格第一行:第 0 步 |G|² 约 1.3,tr(Σ) 约 33,Bsimple ≈ 26——比本实验的 batch(32)还小。② 看第 50、100 步:|G|² 掉了一个多数量级(模型学会了「大方向」,剩下的梯度彼此不太一致),Bsimple 升到上千。③ 把种子切到 2 再跑:开局约 24,第 100 步约 1,800;后期几个点上下跳得厉害——那时 |G|² 已经小到和 tr(Σ) ÷ N 同一量级,估计本身有噪声,只看量级。
真实做法:渐增,还是一开始就大
| 模型 | batch 的做法 | 出处 |
|---|---|---|
| GPT-3 | 训练中测梯度噪声尺度来指导 batch 选择;前 4–12B token 内从 32K token 线性增大到满值;而且模型越大 batch 越大、学习率越小(125M:0.5M token、6.0×10−4;175B:3.2M token、0.6×10−4) | 论文 §2.3、附录 B、表 2.1 |
| DeepSeek-V3 | 前 469B token 内从 3,072 条增加到 15,360 条(每条 4K,即 12,582,912 → 62,914,560 token) | 报告 §4.2 |
| DeepSeek-V4-Flash | 从较小的值增加到 75.5M token,之后保持 | 报告 §4.2.2 |
| Llama 3 405B | 4M → 8M → 16M token 分段增大 | 论文(R4 摘录) |
| Qwen3.8-Flash-Next | 取消 batch warmup:从 6.3M 逐步升到 25.2M,不如一开始就用 25.2M,还多花 18.8% 的优化步数 | 技术报告(R2 摘录,官方自报) |
| DeepSeek-V4.1-Flash | 全程固定 100.6M,不做 batch warmup | 技术报告(R3 摘录) |
证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条GPT-3 是少数明确写出「用噪声尺度选 batch」的报告;其余各家只写做法,不写选择依据 出处GPT-3 §2.3 与附录 B ↗ 前四家渐增,后两家(2026 年的新配方)不渐增。两者都是各自规模与配方下的实验结论,不能互相否定;Qwen 的报告同时重新拟合了「最优 batch 与学习率」的超参 scaling law,取消渐增是在新的更大 batch 下观察到的。
临界 batch 也随 loss 变:Kaplan 的一个经验式
Kaplan et al. 2020 把「临界 batch」拟合成 loss 的函数:Bcrit(L) ≈ B∗ ÷ L1/αB,B∗ ≈ 2×108 token,αB ≈ 0.21 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条拟合用的是他们的数据与分词,loss 的绝对值不能跨模型比较,只作相对比较 出处Kaplan et al. 2020(R4 从原文摘录) ↗需联网 。代入:L = 3 时约 1,069,114 token,L = 2 时约 7,371,465 token——loss 从 3 降到 2,临界 batch 变成约 6.9 倍。方向和上面小模型的测量一致:loss 越低,值得用的 batch 越大。
⚠ 常见误解
「batch 翻倍、学习率跟着翻倍,效果就一样,只是步数减半。」这条线性缩放规则(Goyal 2017)只在 batch 远小于临界 batch 时近似成立。batch 超过噪声尺度之后,再翻倍几乎不减少所需步数,却要多用一倍数据。
「Qwen 取消了 batch warmup,说明渐增是错的。」它说明的是:在 Qwen3.8-Flash-Next 的模型、数据和重新拟合的超参下,一开始就用 25.2M 更好。GPT-3、DeepSeek-V3 在各自设置下选了渐增。引用任何一个结论,都要连同条件一起引。
在演进地图上的位置
- 全量梯度下降
- 小批量随机梯度下降 SGD
- 动量(重球法)
- Adam:每个参数一把尺子
- AdamW:解耦权重衰减
- 学习率 warmup
- 学习率衰减:cosine → WSD
- batch 大小:渐增,还是一开始就大
- 全局梯度范数裁剪
- Muon:按矩阵的奇异方向更新
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | batch 太小,梯度噪声大;太大,多出来的样本只是在重复同一个方向,浪费数据和算力 |
| ② 数学上为什么可能有效? | 均值梯度的方差 ∝ 1/B 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条独立同分布样本 出处待补 ;「噪声尺度决定有用的 batch 上限」是 McCandlish 的经验模型加简化理论 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条在二次近似等假设下推出 B_simple 与步数—样本数的权衡 出处McCandlish et al. 2018 ↗需联网 |
| ③ 实验上为什么最后选了它? | GPT-3、DeepSeek-V3、Llama 3 渐增;Qwen3.8-Flash-Next、DeepSeek-V4.1-Flash 不渐增 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条有分歧,且都是官方自报 出处DeepSeek-V3 §4.2;GPT-3;Qwen3.8-Flash-Next 技术报告 ↗ |
一句话
batch 加大只减少噪声;噪声已经不是瓶颈时,再加 batch 就是浪费 token。
回到主线
岔路到此。回到第 5 课之后的问题:一个超大的梯度会把模型甩飞吗? → 第 6 课:梯度裁剪
你可能会问
这一课还没有收到真实提问;你的提问会记到 05-问答记录/C5-B1.md。
🔍 噪声尺度是怎么从一堆单样本梯度里算出来的?
组件每个时刻取 3,000 条训练样本,各算一个单样本梯度 gi。它们的平均 ḡ 是 G 的估计;tr(Σ) 用单样本梯度的样本方差(除以 N − 1)估计;而 |ḡ|² 的期望是 |G|² + tr(Σ)/N,所以 |G|² 的估计要扣掉 tr(Σ)/N。三个数都在表里。|G|² 越小,扣掉的那一项占比越大,估计越不稳——这就是后期几个点上下跳的原因。