从规模到能力:Scaling Law 与涌现 · 0xWay1 Blog
蓝天花田中捧着花束的少女

从规模到能力:Scaling Law 与涌现

“大语言模型不断扩大参数、数据和训练算力,整体性能也随之提高。但“规模更大所以更强”只描述了结果,没有说明这种提升是否存在稳定规律,也没有回答算力应该分给模型还是数据。 Scaling Law(规模定律)描述规模变化与 Loss 之间的关系;Emergent Abilities(涌现能力)关注的则是另一层现象:平均 Loss 可以平滑下降,具体任务的能力却可能在某个规模区间迅速上升。两者放在一起,刚好对应“大模型怎样持续变强”和“为什么有些能力看起来突然出现”这两个问题。”

— 次阅读

1.Scaling Law
目录

1.Scaling Law

大语言模型的预训练通常建立在 Next Token Prediction(下一词元预测) 上。给定前面的 token,模型需要预测下一个 token 的概率分布。

假设真实 token 被模型赋予的概率为 p,它对应的损失可以简单写成:

L=−log⁡pL=-\log p

真实 token 的概率越高,Loss 越低。训练过程不断调整模型参数,本质上就是让真实 token 获得更高的预测概率。

于是可以把模型训练效果压缩成一个比较统一的指标:Cross Entropy Loss(交叉熵损失)。

有了这个指标以后,模型规模就不再只能靠“跑几个任务看看效果”来比较。可以直接观察参数量、数据量和训练计算量增加时,Loss 会怎样变化。

2020 年 OpenAI 的论文 Scaling Laws for Neural Language Models 系统研究了这个问题。论文主要关注三个量:模型参数量 N、训练数据量 D,以及训练计算量 C。这里的 D 通常按训练 token 数计算。

实验中,一个很重要的现象是:Loss 与这些规模变量之间通常近似服从 Power Law(幂律关系)。

幂律

只增加训练数据时,可以近似写成:

L(D)≈(DcD)αDL(D)\approx\left(\frac{D_c}{D}\right)^{\alpha_D}

Kaplan 的实验中:

αD≈0.095\alpha_D\approx0.095

数据增加,Loss 会下降,但这个指数并不大。数据扩大 10 倍,并不会让 Loss 也下降 10 倍。

参数量同样有类似规律:

L(N)≈(NcN)αNL(N)\approx\left(\frac{N_c}{N}\right)^{\alpha_N}

其中:

αN≈0.076\alpha_N\approx0.076

训练计算量也可以得到近似的幂律关系:

L(Cmin⁡)≈(CcCmin⁡)αCL(C_{\min})\approx\left(\frac{C_c}{C_{\min}}\right)^{\alpha_C}

实验中:

αC≈0.050\alpha_C\approx0.050

三条曲线都表现出 边际收益递减:继续扩大规模通常仍能降低 Loss,但获得同样幅度的改善,需要投入越来越多的资源。

Scaling Law 的价值不在于给出某个固定的“最佳参数量”,而在于把模型性能和资源投入之间的关系变成一条可以拟合、可以外推的经验规律。


2. 训练算力

讨论 Scaling Law 时,经常会看到 Compute,但 Compute 并不只是 GPU 数量。

对于经典 Dense Transformer 的训练,可以粗略写成:

C≈6NBSC\approx6NBS

其中 B 表示 Batch Size,S 表示训练步数。训练 token 数 D 大致满足:

D≈BSD\approx BS

因此常见的近似形式是:

C≈6NDC\approx6ND

训练成本同时取决于模型参数量和处理过的 token 数。模型扩大一倍,如果训练数据量不变,Compute 会随之增加;模型不变但训练更多 token,同样需要额外计算。

因此固定 Compute 时,参数规模和训练数据会直接竞争同一份预算。

Batch 与步数

Batch Size 表示一次参数更新中参与梯度计算的数据量。

Batch 太小时,梯度估计中的噪声更大,参数更新方向容易波动。增大 Batch 可以让梯度更稳定,同时更适合并行计算,但这种收益不会一直持续。

当 Batch 超过 Critical Batch Size(临界批大小) 后,继续放大 Batch 的收益会明显下降。计算资源仍然在增加,但优化效率不再按原来的速度改善。

Training Steps 也有类似的边际收益。训练更久一般会继续降低 Loss:

S↑⇒L↓S\uparrow\Rightarrow L\downarrow

但训练越靠后,Loss 下降往往越慢。单纯给同一个模型无限增加训练步数,并不是高效使用算力的方式。

算力本身只是一种预算,训练效率取决于这份预算被怎样分配。


3. 模型与数据

如果训练数据固定,只不断扩大模型参数,前期通常能看到明显收益。模型继续变大后,提升会逐渐减弱。

原因并不复杂。模型容量增加了,但训练数据能够提供的信息没有同步增加,最终会形成 Data Bottleneck(数据瓶颈)。参数很多,却没有足够的数据把这些容量训练出来。

反过来也一样。模型很小,即使给它大量数据,模型本身的容量也可能不足以吸收这些信息。这属于 Model Bottleneck(模型瓶颈)。

因此参数量和数据量不能完全分开考虑。更大的模型容量需要更多训练数据与之匹配,真正困难的是两者应该按什么比例增长。


4. Kaplan 的分配

Kaplan 的工作除了描述 Scaling Law,还研究了 Compute-Optimal(计算最优) 问题:给定一笔固定的训练计算预算,怎样选择参数量和数据量,才能把 Loss 压得更低。

论文得到的近似关系是:

Nopt∝C0.74N_{\mathrm{opt}}\propto C^{0.74} Dopt∝C0.27D_{\mathrm{opt}}\propto C^{0.27}

这里两个指数差异很大。随着 Compute 增加,最优参数规模增长得更快,而数据量增长相对慢。

这种结果自然会把训练策略推向“大模型”:有更多算力以后,优先把更多资源放到参数规模上。

后来很多大型语言模型都沿着类似方向快速扩大参数量。但两年以后,Chinchilla 对这个结论做了一次很重要的修正。


5. Chinchilla 的修正

2022 年 DeepMind 的 Training Compute-Optimal Large Language Models 重新研究了固定 Compute 下的模型与数据分配。

它指出,当时不少大型模型其实处于 Undertrained(训练不足) 状态:参数已经很大,但用于训练的 token 不够多,很多模型容量没有被充分利用。

Chinchilla 得到的近似关系更接近:

Nopt∝C0.5N_{\mathrm{opt}}\propto C^{0.5} Dopt∝C0.5D_{\mathrm{opt}}\propto C^{0.5}

参数量和数据量应该以接近的速度增长。

如果 Compute 增加 100 倍,可以粗略理解为:

N×10,D×10N\times10,\qquad D\times10

而不是把大部分新增算力都拿去继续堆参数。

我最开始容易把 Chinchilla 理解成对 Kaplan 的否定,真正区分以后才发现,两者争论的并不是 Scaling 是否成立。它们都承认扩大规模可以持续降低 Loss,差别在于 固定训练预算下,Compute 应该分给参数还是数据。

对比项KaplanChinchilla
时间20202022
关注点模型扩大时 Loss 的缩放规律固定 Compute 下参数与数据怎样搭配
参数规模随 Compute 约按 0.74 次幂增长随 Compute 约按 0.5 次幂增长
数据规模随 Compute 约按 0.27 次幂增长随 Compute 约按 0.5 次幂增长
训练倾向更多算力优先扩大模型参数和数据同步扩大

这种修正把“大模型训练”从单纯追求参数规模,进一步拉向了 Compute-Optimal Training(计算最优训练)。

验证方法

Chinchilla 并不是只训练一个模型再拟合一条曲线,而是从不同角度重复寻找固定算力下的最优组合。

Training Curve Envelope(训练曲线包络) 的思路是训练大量不同大小的模型,记录它们的 Loss 与 Compute。在 10¹⁸、10¹⁹、10²⁰ FLOPs 等不同预算位置,分别找 Loss 最低的模型。

这些最优点连起来形成 Efficient Frontier / Envelope(效率前沿 / 包络线),再观察最优模型规模和最优数据量分别怎样随计算预算变化。

IsoFLOP 则把 Compute 直接固定下来。

因为:

C≈6NDC\approx6ND

当计算预算固定时,模型参数量和训练 token 数会互相挤占预算。模型越大,能训练的 token 就越少;模型越小,则可以在更多数据上训练。

实际结果通常会形成一条 U 型曲线:一侧是模型太小导致容量不足,另一侧是模型太大但训练数据不足,中间存在一个 Loss 更低的组合。

第三种方式是直接把 Loss 写成参数量和数据量的函数:

L(N,D)=E+ANα+BDβL(N,D)=E+\frac{A}{N^\alpha}+\frac{B}{D^\beta}

这个式子把 Loss 拆成三部分:E 是难以继续消除的误差;第二项随模型参数 N 增大而减小,表示模型容量不足带来的损失;第三项随数据量 D 增大而减小,表示训练数据不足带来的损失。

再加上计算预算约束 C ≈ 6ND 后,问题就变成了:在固定计算预算里,怎样选择 N 和 D,才能让 Loss 最低。

三种方法得到的具体指数并不完全相同,但都支持一个相近的结果:参数规模和数据规模需要更均衡地增长。


6. Scaling 的边界

Scaling Law 经常被概括成参数、数据和算力三个变量,但真实训练过程当然比三个字母复杂。

学习率

Learning Rate(学习率) 决定每次参数更新的步长。学习率太大容易导致训练不稳定,太小又会让收敛速度变慢。

Batch Size 增大以后,梯度估计通常更稳定,因此往往可以配合更大的学习率。Batch 和 Learning Rate 并不是彼此独立的超参数。

架构

Kaplan 等经典实验主要建立在 Dense Transformer 上。在固定参数量时,网络深度、宽度和 Attention Head 数量的变化,对整体 Scaling 趋势的影响相对有限。

这个结论不能直接套到现代所有模型上。MoE(Mixture of Experts,混合专家)、GQA(Grouped Query Attention)和 MQA(Multi-Query Attention)都会改变计算效率和参数使用方式,因此也会改变“同样参数量”或“同样 Compute”真正代表的东西。

上下文

预测一个 token 时,可用的前文越多,模型通常越容易判断它应该是什么。经典实验里,上下文增加时 Loss 往往会下降。

序列开头的 token 几乎没有上下文,而靠后的 token 可以利用前面更多信息。更大的模型通常也更善于利用这些上下文信息。


7. 分布偏移

训练数据和测试数据并不总来自同一个分布。例如模型在 WebText2 上训练,却在 Books、Wikipedia 或 Common Crawl 上测试。这类情况属于 Out-of-Distribution(OOD,域外分布) 测试。

换到 OOD 数据后,Loss 通常会上升,因为模型面对的数据分布已经发生变化。但实验里仍能观察到一个值得注意的现象:随着参数规模增加,Loss 下降的 Scaling 趋势大体还在。

这说明 Scaling Law 在一定程度上具有跨分布稳定性,但不能把它理解成“大模型自动解决分布偏移”。如果训练数据本身缺失某类知识,或者测试分布变化非常严重,仅仅增加参数量并不能保证问题消失。


8. 涌现能力

Scaling Law 主要观察的是 Cross Entropy Loss。它随模型规模扩大时,通常是一条相对平滑的曲线。

但后来一些工作把关注点从平均 Loss 转向具体任务,发现了另一类现象:小模型在某些任务上几乎和随机猜测差不多,规模达到某个区域后,任务性能突然明显上升。

这种现象被称为 Emergent Abilities(涌现能力)。

曾经出现过类似表现的任务包括:

  • Modular Arithmetic(模运算)
  • IPA Transliteration(音标转写)
  • Word Unscramble(单词重排)
  • Persian QA(波斯语问答)

这里的“涌现”描述的是任务曲线的形状,并不意味着已经证明模型内部发生了某种瞬间的结构性变化。

Few-shot 与 ICL

涌现研究里经常涉及 Few-shot Prompting,因为一些能力并不需要重新训练模型,而是在上下文中给出少量示例后表现出来。

例如:

Review: This movie sucks.
Sentiment: negative.

Review: I love this movie.
Sentiment:

模型如果输出 positive,说明它根据 Prompt 中已有的示例理解了当前任务。

这类方式通常称为 Few-shot Prompting(少样本提示)。更广义地说,模型利用当前上下文中的示例、指令或模式完成任务,可以放在 In-context Learning(上下文学习,ICL) 的框架下理解。Few-shot Prompting 可以看作 ICL 的一种典型形式;它和 Fine-tuning 最直接的区别,是推理时不会修改模型参数。

推理与指令

一些增强推理或指令能力的方法也曾表现出类似的规模效应。

Chain-of-Thought(思维链提示,CoT) 通过中间推理步骤帮助模型处理复杂问题。较小模型使用 CoT 时可能收益很有限,而更大的模型能够明显从中受益,因此 CoT 的有效性也曾被描述为具有涌现特征。

Instruction Tuning(指令微调) 让模型在总结、翻译、问答、推理、代码生成等自然语言指令上进行训练。一些实验中,小模型获得的收益有限,规模更大后提升更加明显。

Scratchpad(草稿推理) 的思路相近:先保留中间计算过程,再得到最终结果。在复杂算术和多步推理任务里,大模型往往更能利用这些中间步骤。

这些现象共同指向一个问题:底层能力如果是连续提高的,为什么任务准确率看起来会突然跳起来?


9. 涌现能力为什么看起来突然

一种常见解释来自多步任务。

假设一个任务需要连续完成 L 个步骤,每一步的正确率都是 p。如果必须所有步骤都正确,最终成功概率可以粗略写成:

pLp^L

对于一个需要 10 步的任务:

0.810≈10.7%0.8^{10}\approx10.7\% 0.910≈34.9%0.9^{10}\approx34.9\% 0.9710≈73.7%0.97^{10}\approx73.7\%

单步正确率从 80% 提高到 97% 是连续变化,但最终任务成功率从约 10.7% 上升到了 73.7%。底层能力没有发生明显断点,上层任务指标却可以表现得非常陡。

这并不能解释所有涌现现象,但说明了一种可能性:底层能力保持连续增长,多步组合本身就足以让最终任务曲线变得很陡,不需要额外假设模型在某个规模点突然发生了质变。


10. 评测争议

Emergent Abilities 后来存在不少争议,其中一个重要原因是 Evaluation Metric(评测指标)。

Exact Match 是最典型的例子。答案完全正确记为 1,只要有一点错误就记为 0。

假设模型能力实际上在持续改善,答案质量可以粗略表示为:

20 → 40 → 60 → 80 → 100

Exact Match 却可能只记录成:

0 → 0 → 0 → 0 → 1

最终画出的曲线看起来像是模型在最后一个规模点“突然获得了能力”,但这种突变有一部分可能来自离散的评测方式,而不是模型内部真正发生了不连续变化。

因此对 Emergence 更稳妥的理解是:某些任务确实会随着规模扩大出现非常陡峭的性能提升,但这种现象是否代表严格意义上的“不连续能力涌现”,需要结合具体任务和评测方法判断。


11. Scaling 与涌现

Scaling Law 和 Emergence 观察的是不同层次。前者主要研究平均 Cross Entropy Loss,后者关心具体任务是否能够完成。

模型规模扩大后,Loss 可以平滑地从 3.0 → 2.9 → 2.8 → 2.7 → 2.6。复杂任务却往往同时依赖语言理解、知识记忆、上下文处理、逻辑推理和数学能力,只要其中一个环节仍然不足,最终任务就可能失败。

随着这些底层能力分别改善,多个环节可能在相近的规模区间里同时达到“足以完成任务”的水平。于是平均 Loss 仍沿着 Scaling Law 平滑下降,具体任务的准确率却可以迅速上升。两种曲线并不矛盾,只是描述了模型能力的不同侧面。


12. 知识总结

  • Scaling Law 描述模型规模与 Loss 之间的经验规律。参数量、训练数据和计算量扩大时,Loss 通常按幂律下降,但收益会逐渐递减。
  • 训练计算量可以粗略理解为 C ≈ 6ND。N 是模型参数量,D 是训练 token 数,因此参数规模和数据规模会共同消耗计算预算。
  • Compute-Optimal 关注的不是“模型越大越好”,而是在固定 Compute 下怎样分配参数量和训练数据,才能得到更低的 Loss。
  • Kaplan 的结果更倾向于把新增算力分给模型参数;Chinchilla 则发现许多早期大模型训练不足,更强调参数量和训练 token 同步增长。
  • Scaling Law 不是只由 N、D、C 决定。Batch Size、Learning Rate、模型架构、上下文长度和数据分布都会影响实际训练表现。
  • Emergent Abilities 描述的是某些具体任务随规模扩大出现陡峭性能提升的现象。它不等于已经证明模型内部在某个规模点发生了突然的“质变”。
  • 平滑的底层能力经过多步组合,再叠加 Exact Match 这类离散评测指标,就可能表现出类似“突然涌现”的曲线。因此 Scaling Law 与 Emergence 并不矛盾:前者主要观察平均 Loss,后者观察具体任务表现。

13. 参考

← 返回博客English →
Discussion

评论

欢迎交流想法,也欢迎留下问题。

正在加载评论…

无需登录,昵称和邮箱为必填项。邮箱不会公开,仅用于身份区分与回复通知;服务端会保留必要的请求时间、IP 和设备信息,用于反垃圾、限流、封禁与安全审计。