@lilianweng: 一篇超级迟到的(3年以上?)关于扩展定律的帖子。计算很昂贵。扩展定律是一种帮助我们推理…
摘要
Lilian Weng的博客文章全面概述了深度学习中的扩展定律,涵盖了它们的推导、计算最优分配以及Kaplan等人与Chinchilla之间的争论。
查看缓存全文
缓存时间: 2026/06/25 21:26
一篇姗姗来迟(3 年以上?)的关于 scaling laws 的文章。
计算成本很高。Scaling laws 是一种帮助我们在大规模运行之前,推理数据和模型大小之间最优计算分配的方法。
本文涵盖了 scaling laws 预测的内容、计算最优分配的工作原理、Kaplan 等人与 Chinchilla 之间的分歧点,以及数据限制和拟合细节如何使外推变得棘手。
Scaling Laws,细致探讨
来源:https://lilianweng.github.io/posts/2026-06-24-scaling-laws/ Scaling laws 是深度学习中最重要的经验发现之一。其观察形式很简单:训练损失 L 随着我们扩展模型规模 N、数据集大小 D 和计算量 C 而可预测地下降,遵循一条幂律曲线,在对数-对数图上呈现为一条直线。我们可以将 scaling laws 视为一个描述计算量、损失、模型大小和数据之间关系的框架;其核心在于如何在 N 和 D 之间最优地分配宝贵的计算资源。
这种可预测性使得 scaling laws 在实践中极具价值。常见的流程是:在少数小规模运行上拟合 scaling laws,然后外推以估算更大模型所需的 token 数量和计算量。
| 符号 | 说明 |
|---|---|
| N | 模型规模,以参数量衡量。 |
| D | 训练数据集大小,通常以 token 数量衡量。 |
| C | 以 FLOPs 衡量的训练计算量。一个有用的近似是 C \approx 6ND (Kaplan et al. 2020 (https://arxiv.org/abs/2001.08361)),其中 2ND 用于前向传播,4ND 用于反向传播。 |
| E | 不可约损失 |
| L, \hat{L}(.) | 测试损失 / 测试损失预测函数;也可指训练损失,因为两者高度相关。 |
| \epsilon | 泛化误差。 |
早期:机器学习损失的可预测性
在 scaling laws 成为主流概念之前,就已经有人研究泛化误差随规模变化的可预测性。
Amari 等人 (1992) (https://ieeexplore.ieee.org/document/6796972) 使用贝叶斯方法和退火近似推导了四种类型的学习曲线。
- 确定性学习算法,无噪声数据,唯一解:\epsilon \sim c \cdot D^{-1},其中 c 为常数。
- 确定性学习算法,无噪声数据,多个等价解:\epsilon \sim c \cdot D^{-2};学习速度随着每个新数据点加快,因为模型只学习参数的最优流形,而不是寻找单一解点。
- 确定性学习算法,有噪声数据:\epsilon \sim c \cdot D^{-1/2};数据中的噪声使学习更困难。
- 随机学习算法,有噪声数据:\epsilon \sim c \cdot D^{-1} + E;这里的不可约损失 E 是随机学习器无法进一步降低的残差误差,例如模型在大数据上耗尽容量时。所有四种类型的学习曲线都遵循幂律:
\epsilon \sim c \cdot D^{\alpha} + E
其中 E 可以为 0,\alpha = -2, -1, -1/2。尽管他们的理论设置基于一个简化的二分类任务,但为构建经验性的机器学习损失预测模型指明了有用的方向。
最早的经验研究之一由 Hestness 等人 (2017) (https://arxiv.org/abs/1712.00409) 完成,他们解释了泛化误差、模型大小和数据之间的关系。对于给定的训练数据大小,他们通过网格搜索找到最佳拟合的模型大小,然后绘制损失与训练数据集大小的关系图。在深度学习的四个不同领域(神经机器翻译、图像分类、语言建模和语音识别)中,观察到了一个重复出现的模式,其中:
- 泛化误差在多个因素(如数据大小)上呈幂律缩放。
- 模型改进会移动误差曲线,但似乎不影响幂律指数。
- 有趣的是,架构会改变幂律拟合的偏移量 (E),但不会改变指数 (\alpha)。幂律的斜率似乎是问题领域的属性,而非模型架构的属性。
- 拟合大小为 D 的数据集所需的模型参数数量 N 也呈幂律缩放。
(左) Deep-Speech-2 (DS2) 和注意力语音模型的学习曲线,以及 (右) 不同大小的 DS2 模型的学习曲线。当训练数据变大时,小模型的损失会达到平台期。(图片来源:Hestness et al. 2017)
概念性图示将学习曲线分为三个阶段。在小数据区域,当学习信号不足时,模型的表现仅略好于随机猜测。在中间阶段(“幂律区域”),我们观察到损失、数据和模型大小之间的幂律关系。最终的不可约误差区域可归因于数据中的噪声等因素。
幂律学习曲线阶段的图示。(图片来源:Hestness et al. 2017)
Rosenfeld 等人 (2020) (https://arxiv.org/abs/1909.12673) 更进一步,尝试将误差建模为模型大小 N 和数据大小 D 的联合函数,跨越多种架构(ResNet、WRN、LSTM、Transformer)和优化器(Adam、SGD 变体)。经验上他们观察到,固定一个轴时,误差随另一个轴按幂律衰减:
\hat{L}(D,N) \approx \frac{A}{N^{\alpha}} + E_N,\quad \hat{L}(D,N) \approx \frac{B}{D^{\beta}} + E_D
可以结合成一个联合形式:
\hat{L}(D, N) \approx \frac{A}{N^{\alpha}} + \frac{B}{D^{\beta}} + E
其中 A > 0, B > 0, \alpha \geq 0, \beta \geq 0 是标量常数,E 不依赖于 N 或 D。
数据大小、模型大小和泛化误差的对数-对数-对数三维等高线图。蓝点来自经验实验,曲面是蓝点之间的线性插值。(图片来源:Rosenfeld et al. 2020)
因此,他们可以构建一个形式为 \boldsymbol{\theta} = \langle A, B, E, \alpha, \beta \rangle 的简单参数函数作为预测模型,通过仅在一组较小的训练配置 (D, N) < 某些阈值上训练,来预测 (D, N) > 某些阈值时的预期损失。
在小规模配置上拟合参数误差模型并外推到更大的模型/数据范围:(a) 实验设置示意图;(b) ImageNet、(c) WikiText-103 和 (d) CIFAR100 上的实验结果,使用三种架构(WRN、VGG、DenseNet)和两种优化器(SGD、Adam)进行误差估计。(图片来源:Rosenfeld et al. 2020)
附注:这些早期工作依赖于经典学习理论直觉,如 VC 维 (https://en.wikipedia.org/wiki/Vapnik%E2%80%93Chervonenkis_dimension)(模型能打散的最大的点集基数)作为容量的代理,但在现代深度学习工作中,VC 维往往过于粗糙,无法解释行为,而经验幂律比理论提供的最坏情况界限更清晰、更实用。
数据无限区域中的 Scaling Laws
Kaplan 等人的 Scaling Laws
Kaplan 等人 (2020) (https://arxiv.org/abs/2001.08361) 将 scaling laws 的概念普及到语言建模社区。他们发现,交叉熵测试损失 L 与模型大小 N(不包括嵌入层)、数据集大小 D 以及训练计算量 C 各自在多个数量级上呈幂律缩放。这些发现与上一节早期工作一致,但 Kaplan 等人通过关注 Transformer 语言模型并在更大规模上进行经验实验,将这一概念形式化,模型大小范围从 768M 到 1.5B 非嵌入参数,数据集大小从 22M 到 23B tokens。论文中的所有训练运行都使用了学习率调度,包含 3000 步的线性预热,然后余弦衰减到零。
主要发现列表:
- 损失 L 分别与 N、D 和 C 呈幂律缩放;为了达到最优性能,三者必须协同缩放。
- 训练曲线遵循可预测的幂律,其参数大致独立于模型大小。
- 更大的模型具有更高的样本效率,即它们比小模型用更少的优化步数和更少的数据点达到给定的损失。
- 架构细节(宽度、纵横比等)不如纯粹规模重要。
- 训练损失和测试损失正相关。(听起来很平凡,但这是预训练工作的基础。另一方面,预训练损失的改进是否能转移到后训练评估中,需要单独研究。)
- 在固定的计算预算下,训练一个非常大的模型并在收敛之前停止,比训练一个较小的模型直到完全收敛更高效。这一发现与 Chinchilla scaling laws(下一节)存在分歧:Kaplan 等人高估了最优模型大小,因为他们拟合的指数更大。
他们用单一方程总结了 N 和 D 的联合依赖性:
\hat{L}(N,D) = \left[ \left(\frac{a}{N}\right)^{\frac{\alpha}{\beta}} + \frac{b}{D} \right]^{\beta}
这种形式的一个很好的结果是,过拟合的程度(即模型复杂或数据小)主要取决于比率 N^{\alpha / \beta} / D,这表明数据需要以特定的比例随模型大小增长,才能避免训练受数据限制。
测试损失与计算量、数据集大小和参数量的幂律关系,跨越多个数量级。(图片来源:Kaplan et al. 2020)
最具影响力、事后看来也是最有争议的结论是计算最优分配。Kaplan 等人发现 N_{\text{opt}} \propto C^{0.73},并得出结论:模型大小应该比数据集大小增长更快。具体来说,对于 10 倍计算量的增加,他们建议将模型大小扩大约 5.5 倍,但训练 tokens 只增加约 1.8 倍。Chinchilla 论文后来推翻了这一建议,认为它使大型模型严重欠训练。
Kaplan 等人的另一个有用分析是基于 D 和 N 近似训练 FLOPs 数量。每个乘加运算计为约 2 FLOPs。
不同 Transformer 架构组件的参数和计算量估算,给定层数 n_{\text{layer}}、模型宽度 d_{\text{model}}(= d_{\text{embed}};原始表中符号不一致)、前馈层维度 d_{\text{ff}}(通常等于 4 d_{\text{model}})、注意力维度 d_{\text{attn}}(通常等于 d_{\text{model}})、上下文长度 n_{\text{ctx}} 和词汇表大小 n_{\text{vocab}}。(图片来源:Kaplan et al. 2020)
给定一个标准配置,其中 d_{\text{attn}} = d_{\text{model}} = d_{\text{ff}}/4,并从 N 中排除嵌入层,以及每个 token 的前向计算量:
\begin{align} N &= n_{\text{layer}} d_{\text{model}} 3 d_{\text{attn}} + n_{\text{layer}} d_{\text{attn}} d_{\text{model}} + n_{\text{layer}} 2 d_{\text{model}} d_{\text{ff}} & \small{\text{; no embedding layer}} \\ &= 2\; n_{\text{layer}} d_{\text{model}}(2 d_{\text{attn}} + d_{\text{ff}}) & \\ &= 12\; n_{\text{layer}} d_{\text{model}}^2 & \\ \\ C_{\text{fwd}} &= 2 n_{\text{layer}} (d_{\text{model}} 3 d_{\text{attn}} + n_{\text{ctx}} d_{\text{attn}} + d_{\text{attn}} d_{\text{embed}} + 2 d_{\text{model}} d_{\text{ff}}) & \\ &= 2 n_{\text{layer}} (12 d_{\text{model}}^2 + n_{\text{ctx}} d_{\text{attn}}) & \\ &= 2N + 2 n_{\text{layer}} n_{\text{ctx}} d_{\text{attn}} & \\ & \approx 2N \quad \small{\text{; assuming } n_{\text{ctx}} < 12 d_{\text{model}} \text{ and the } n_{\text{ctx}} \text{ term is relatively small.}} \\ \end{align}
然后我们将反向传播的 FLOPs 计为前向传播 FLOPs 的两倍,因为反向传播执行两个矩阵乘法,分别用于输入激活和权重的梯度。因此,每个 token 的训练 FLOPs 大约为 6N,在 D 个 tokens 上的总训练 FLOPs 为 C \approx 6ND。
Chinchilla Scaling Laws
Chinchilla 论文 (Hoffmann et al. 2022 (https://arxiv.org/abs/2203.15556)) 研究了在固定计算预算 C 下,最优模型大小 N(总参数,包括嵌入)与 token 数量 D 之间的关系,采用了更仔细的实验设计,得出了与 Kaplan 等人略有不同的答案。
你应该知道 Chinchilla 长什么样 😊(图片来源:ChatGPT 生成)
核心问题是在约束 \text{FLOPs}(N, D) = C \approx 6ND 下,如何最佳分配资源。换句话说,当我们只有有限的 FLOPs(给定数量的 GPU 运行一段时间)时,我们应该在更多数据 tokens 和更多模型参数之间如何选择?
N_{\text{opt}}(C), D_{\text{opt}}(C) = \operatorname*{arg\,min}_{\text{s.t. } \text{FLOPs}(N,D) = C} \hat{L}(N, D)
Chinchilla 论文提出了三种精心设计的 scaling laws 拟合方法。
经验实验扫描了 400 多个模型,大小从 70M 到超过 16B 参数,训练 tokens 从 5B 到 500B。实验假设每个训练 token 都是独特的(无限数据体制)。所有运行都使用余弦学习率调度,在训练过程中衰减 10 倍。遍历不同模型大小可绘制出计算最优前沿。
方法 1:固定模型大小,改变 token 预算
对于每个参数数量 N,使用不同的 token 预算训练几次运行,并记录每个 FLOP 预算 C 下达到的最小损失。
Chinchilla 方法 1:不同模型大小扫描的训练损失曲线与 FLOP 预算的关系。(图片来源:Hoffmann et al. 2022)
方法 2:IsoFLOP 曲线
固定一个计算预算 C,绘制最终损失与参数数量 N 的关系图。每个 iso-FLOP 曲线在对数空间中大致呈抛物线,其最小值标志该计算预算下的最优模型大小。然后在不同预算上重复,在图中形成一条幂律线。
Chinchilla 方法 2:IsoFLOP 抛物线;每条曲线的最小值是该预算下的计算最优模型大小。(图片来源:Hoffmann et al. 2022)
方法 3:参数拟合
直接拟合与 Rosenfeld 等人 (2020) (https://arxiv.org/abs/1909.12673) 相同的参数函数:
\hat{L}(N, D) = \frac{A}{N^{\alpha}} + \frac{B}{D^{\beta}} + E
实际上,我们可以通过最小化 \hat{L}(N, D) 并满足约束 \text{FLOPs}(N,D) = C \approx 6ND 来获得最优 N_{\text{opt}}(C), D_{\text{opt}}(C) 的闭式近似。
首先将表达式简化为仅包含 N:
\begin{align} \hat{L}(N) &= A N^{-\alpha} + B \Big(\frac{C}{6}\Big)^{-\beta} N^{\beta} + E \\ \hat{L}'(N) &= -\alpha A N^{-\alpha-1} + \beta B \Big(\frac{C}{6}\Big)^{-\beta} N^{\beta -1} = 0 & \small{\text{; derivative wrt } N \text{ should be zero.}} \\ \text{Thus}\quad & \alpha A N^{-\alpha-1} = \beta B \Big(\frac{C}{6}\Big)^{-\beta} N^{\beta -1} \\ & \alpha A = \beta B \Big(\frac{C}{6}\Big)^{-\beta} N^{\alpha + \beta} \\ & N_{\text{opt}} = \Big(\frac{\alpha A}{\beta B}\Big)^{\frac{1}{\alpha + \beta}} \Big(\frac{C}{6}\Big)^{\frac{\beta}{\alpha + \beta}} \\ & D_{\text{opt}} = \frac{C}{6 N_{\text{opt}}} \end{align}
相似文章
扩展定律,谨慎解读(25分钟阅读)
全面概述深度学习中的扩展定律,追溯其理论基础和实证发现,并解释损失如何随模型大小、数据和计算量可预测地降低。
@NielsRogge:刚刚在 Papers with Code 的 Scaling Laws 方法中添加了 Lilian Weng 的博客作为推荐读物
Niels Rogge 在 Papers with Code 上添加了 Lilian Weng 关于扩展定律的博客作为推荐读物,并附上了原始论文及引用链接。
统一神经缩放定律
提出了一种统一神经缩放定律,能够精确建模深度神经网络在多个维度(包括参数量、数据集大小、训练步数和计算量)上的缩放行为,并在多种架构和任务上得到验证。
数据受限训练的规定性缩放定律
一种考虑数据重复效应的修正缩放定律,为数据受限场景提供了计算最优的训练策略,表明超出某一界限后,进一步重复会适得其反,计算资源应更明智地用于模型容量。
神经语言模型的缩放规律
基础性实证研究,展示了语言模型性能与模型规模、数据集大小和计算预算之间的幂律缩放关系,对最优训练资源分配和样本效率有重要启示。