先记住一句话

Scaling law 描述可预测的平均趋势;Chinchilla 讨论固定训练算力下参数与数据的最优分配;MoE 则把“总参数容量”和“每 token 计算量”部分解耦。

小规模实验拟合 loss 曲线给定 compute分配 N 与 D选择 dense / MoE核算训练与推理成本

0. 先把三个量放进同一张计算图

模型容量参数 $N$
×
数据曝光tokens $D$
训练预算$C\approx6ND$ FLOPs
观测结果validation loss
$6ND$ 是 dense decoder Transformer 训练量级的常用粗估,不是硬件实测公式;attention、embedding、稀疏结构和利用率都会改变常数。

1. Scaling law 在说什么?

早期大模型实验发现,在相当宽的区间里,测试 loss 随模型参数量、数据量或训练算力增加呈近似幂律下降。示意形式是:

$$L(x)\approx L_\infty + A x^{-\alpha}$$

$x$ 可以代表参数、数据或 compute;$alpha$ 决定收益下降速度。它的工程价值不是“越大越神奇”,而是:用较小实验拟合趋势,预测更大训练的 loss、判断哪个资源正成为瓶颈。

幂律意味着边际收益递减:每降低同样一段 loss,往往需要成倍增加资源。Scaling 是可靠但昂贵的改进轴。

例 1:手算一条幂律曲线

取玩具公式 $L(x)=1+4x^{-1/2}$:

$x$$\sqrt{x}$$4/\sqrt{x}$$L$
1145
4223
16412
6480.51.5

资源每扩大 4 倍,超过不可约下限 $L_\infty=1$ 的那部分只减半,这就是边际收益递减。

2. 参数、token 与 compute 不是同一个量

  • 参数量 $N$ 决定模型容量和每次前向/反向的大部分计算。
  • 训练 token 数 $D$ 决定模型见过多少数据。
  • 训练算力 $C$ 对 dense Transformer 可粗略理解为与 $N\times D$ 成正比,但常数受架构和实现影响。

固定 $C$ 时,把所有预算花在更大的 $N$,就只能训练更少 token;反之,模型太小而重复看极多数据也可能浪费容量。Compute-optimal training 要找的是两者平衡点。

例 2:固定 $6ND=6\times10^{18}$ FLOPs 的三种分配

参数 $N$tokens $D=C/(6N)$tokens / 参数
1B1T1000
10B100B10
100B10B0.1

三行 compute 相同,却分别可能受容量、数据或严重欠训练限制。Compute budget 本身不告诉你怎样分配最好。

3. Chinchilla 修正了什么直觉?

Chinchilla 工作重新估计了固定 compute 下的最优配比,结论是当时许多大模型相对“参数太多、训练数据太少”。论文用约 70B 参数、1.4T token 训练的 Chinchilla,与约 280B 参数、约 300B token 的 Gopher 对比:更小但训练更充分的模型在多项任务上更强,同时推理成本更低。

常被记成的粗略口诀是“每个参数约对应 20 个训练 token”,但不能把它当自然常数。Tokenizer、数据质量、架构、optimizer、重复 epoch、目标 domain 和是否考虑推理成本,都会改变最佳点。

正确读法:

Chinchilla 的核心不是 20 这个数字,而是比较模型时必须同时问它用了多少有效数据、训练了多久,而不能只看参数量

例 3:用“20 tokens / 参数”做量级检查

若只作粗略心算,7B 模型对应 $20\times7\text{B}=140\text{B}$ tokens;70B 对应 1.4T tokens。若 70B 只训练 300B tokens,则约 $300/70=4.3$ tokens/参数,明显低于这个历史估计。

这只能诊断数量级,不能替代针对当前架构、数据与推理预算的 scaling 实验。

4. 数据质量为什么能改变 scaling?

token 数只计算数量,不代表信息量。重复网页、模板文本、低质量自动内容和错误标签会降低每个 token 的训练价值。数据去重、质量过滤、领域配比和 curriculum 会改变 loss 曲线。

高质量数据有限时,重复训练也不是无限有效:模型可能记忆样本,新的梯度信息逐渐减少。现实中的最优方案因此是“规模 + 数据治理 + 训练稳定性”,而不是单一公式。

例 4:raw tokens 不等于有效 tokens

抓取 100B tokens,其中 30% 是近重复,过滤再丢掉 10% 低质量内容。若两步集合近似独立,剩余约为:

$$100\text{B}\times(1-0.30)\times(1-0.10)=63\text{B tokens}$$

报告“抓了 100B”与“训练用了 63B 去重后 token”是两件事;重复多个 epoch 也不会自动创造新信息。

5. MoE 怎样扩大容量而不同比增加计算?

Dense MLP 对每个 token 都激活同一组参数。Mixture of Experts 把某些层换成多个 expert,并用 router 为每个 token 选择 top-$k$:

$$y=\sum_{i\in\operatorname{TopK}(r(x))}p_i(x)E_i(x)$$

例如总共有 64 个 expert,但每个 token 只走 2 个。总参数容量可以很大,而 active parameters 和每-token FLOPs 增长较慢。这是“稀疏激活”,不是把整个模型剪枝成固定子网。

MoE 的真实代价

  • 负载均衡:router 若总选少数 expert,会造成拥塞和其他 expert 训练不足。
  • 通信:不同 GPU 上的 token 要按 expert 重排,all-to-all 通信可能成为瓶颈。
  • 显存:每 token 只激活少量参数,但所有 expert 权重仍需分布存储。
  • 容量限制:某个 expert 收到 token 过多时,必须丢弃、reroute 或增加 buffer。

所以 MoE 主要改善“模型容量 / 计算量”的比值,不等于训练部署自动更简单。

例 5:total parameters 与 active parameters

某层有 8 个 100M 参数 expert,另有 200M 共享参数,router 对每 token 选 top-2:

总参数:$8\times100\text{M}+200\text{M}=1.0\text{B}$。

每 token 激活:$2\times100\text{M}+200\text{M}=400\text{M}$。

若 1,000 个 token 完全均匀,top-2 共产生 2,000 次 expert 分派,平均每 expert 250 tokens。

若一个 expert 收到 700 次而容量只有 300,就会拥塞;这正是 load-balancing loss 与 capacity factor 要处理的问题。

6. Emergence 与 scaling law 冲突吗?

连续的平均 loss 可以平滑下降,而某个离散 benchmark 的准确率突然越过阈值。例如模型一直提高正确答案概率,但只有当正确项成为 top-1 时,accuracy 才从 0 跳到 1。提示格式、评分方式和任务阈值都可能制造“突然出现”的外观。

这不排除真正的组合能力变化,但看到 emergent claim 时,应先检查底层连续指标、基线、样本量和评测函数。

例 6:连续概率怎样产生突然的 accuracy

四个选项中,正确项概率从 0.28 增至 0.31;最强错误项从 0.30 降至 0.29。Loss 从 $-\ln0.28=1.273$ 平滑降到 $-\ln0.31=1.171$,但 top-1 accuracy 会在正确项越过 0.29 的那一刻从 0 变成 1。

自测:先算后展开

1. 固定 compute 时为什么不能只增大参数?

参数越大,每个 token 计算越贵,会压缩可训练 token 数;模型可能容量充足却没有被足够数据训练。

2. Chinchilla 最值得记住的结论是什么?

模型大小必须与训练数据量共同优化;参数少但训练充分的模型可能优于参数更大但数据不足的模型。

3. MoE 的 total parameters 和 active parameters 有何区别?

Total parameters 包含所有 expert;active parameters 只计算某个 token 实际经过的 top-k expert 和共享层。

4. 13B 参数按 20 tokens/参数粗估,需要多少 token?

$13\text{B}\times20=260\text{B}$ tokens。

5. 模型和数据都扩大 2 倍,$6ND$ 粗估怎样变化?

$6(2N)(2D)=4\times6ND$,约 4 倍 compute。