**论文题目:** Unra veling the Mystery of Scaling Laws: Part I
**论文地址:** https://arxiv.org/abs/2403.06563
**论文作者:** Hui Su, Zhi Tian, Xiaoyu Shen, Xunliang Cai
**作者单位:** Meituan Inc.
---
概述
1.1 Take-away
先说说几个核心结论。 超参(比如 batch size、学习率、学习率调度器)确实会影响模型的收敛速度,但只要设置在一个合理范围内,并且给足数据、给足步数,它们对最终的收敛损失(loss)影响其实微乎其微。 调整 batch size 的本质,是在训练时间与计算资源消耗(也就是成本)之间找到那根最佳平衡线。我们可以基于 loss 值确定一个关键的批处理大小(Critical Batch Size),用它来训练时,相比无限大的 batch size(理论上训练步数最少),需要多花两倍的步数才能达到同样的 loss——不过,这往往是性价比最高的选择。 上下文长度、tokenization、数据分布和模型架构,对 Scaling Laws 公式里的系数影响很大。但它们不会改变公式的基本形态。这也就解释了为什么 ChinChilla 会得出不同结论——因为它的上下文长度和数据集都变了。 在固定的上下文长度、tokenization、数据分布、模型结构和学习率调度器之下,只要学习率设置得当,训练步数、batch size 和模型规模这三者与 loss 之间,存在一种非常精确且可预测的幂律关系。 有意思的是,通过训练不到 60M 参数的小模型,竟然就能准确推导出 Scaling Laws 公式里的所有系数。然后,在训练高达 33B 参数的大模型之前,就可以提前预测出以下几点: - 可能达到的最低 loss 值; - 达到特定 loss 所需的最少训练步数和数据量; - 任何 loss 值下的 critical batch size; - 给定任意 batch size 下,完整的 test loss 曲线。 这对于在实际训练大模型之前做“沙盘推演”来说,价值太大了。比如在固定的计算预算内,就能预先确定最优模型规模、训练步数和所需数据量,从而做到资源的高效利用。1.2 Methods
这项工作的核心目标,是深入探究 OpenAI 最初提出的几个 Scaling Laws 公式。虽说整个理论体系非常庞大,但本文选择集中攻关下面三个公式,因为它们对大模型训练的指导意义最为直接。靠着它们,我们可以在模型还没开始训练之前,就准确预判它的训练行为。 **1. L(N)**:预测参数量为 N 的模型,理想情况下最终能收敛到的 loss。换句话说,它告诉我们在无限数据上完全收敛时,模型能达到的 loss 极限。 **2. L(N, Smin)**:预测在特定的最小训练步数 Smin 下(假设 batch size 无限大),参数量为 N 的模型每一步的 loss。这里的 Smin 本质上就是极限情况下的最短路径。 **3. L(N, S, B)**:在给定训练步数 S 和任意 batch size B 下,参数量为 N 的模型对应的测试 loss。有了这个公式,我们就能画出 loss 随训练步数变化的完整曲线。1.2.1 如何确定 L(N):给定参数量为 N 的模型,预测最终收敛 loss
公式形式为幂律关系:L(N) = L∞ + (N_c / N)^α_N 其中 L∞、N_c 和 α_N 是需要拟合的常数,N 是参数量。 **前提条件**:假设模型能接触到无限量的训练数据。在这个前提下,模型不会过拟合,训练 loss 和测试 loss 趋势会高度一致。实际上,对小模型来说,一旦数据量达到数亿 tokens,就基本可以视为无限数据了。 **求解方法**: - **如何估计常数 L∞、N_c 和 α_N?** 先训练一系列不同参数量的模型(比如从 1M 到 60M),在“无限”数据下训练至完全收敛,记录每个模型的最终测试 loss。然后用这些数据点,通过线性回归拟合出常数。 - **超参的容忍度**:实验表明,只要超参(batch size、学习率和调度器)设置合理,它们只会影响收敛速度,对最终收敛 loss 的影响可以忽略。这也就意味着,估计 L(N) 时,我们几乎不需要去调超参,用一组固定的设置就能搞定。
1.2.2 如何确定 L(N, Smin):参数量 N,无限大 batch size 下,训练中每一步的 loss
**前提条件**:假设在无限大的 batch size 下训练。此时,SGD 就变成了 GD(梯度下降),每一步的更新基于全数据集的梯度。Smin 就是达到特定 loss 所需的最少步数。 **公式**: L(N, Smin) = L∞ + (N_c / N)^α_N + (S_c / Smin)^α_S 其中 L∞、N_c、α_N 已经确定,S_c 和 α_S 需要估计。 **如何模拟无限 batch size?** 实际操作中,我们不可能真的用无限大 batch size 去训练。但我们可以通过试验找到一个足够大的 batch size,让再增加它也不会减少达到特定 loss 所需的训练步数——此时 loss 曲线不再变化,这个 batch size 就可以视为无限大。 **如何估计常数 S_c 和 α_S?** 训练一个很小的模型(比如 10M 参数),在“无限”batch size 下用最优学习率跑。收集多个数据点,然后对公式两边取对数,用线性回归来估计 S_c 和 α_S。1.2.3 如何确定 L(N, S, B):参数量 N,batch size B 下,步数 S 时的 loss
**前提条件**:要达到某个特定的 loss,batch size 越小,需要的步数 S 就越多。batch size 无限大时,最少步数是 Smin。那 Smin 与 B 和 S 之间的关系怎么建立? **定义 Critical Batch Size Bcrit(L)**:在给定 loss 值 L 下,Bcrit 是平衡训练步数 S 与计算资源 E 的 batch size。数学上,Bcrit(L) = Emin / Smin。除了在成本和时间上做权衡,Bcrit(L) 还有一个美妙性质:它的值与对应 loss 存在幂律关系,Bcrit(L) = B* · (L - L∞)^α_B。 **估计 Bcrit(L) 的关键常数 B* 和 α_B**:对固定大小的模型,用不同 batch size 训练,获得对应的 Emin 和 Smin 估计值。相除得到 Bcrit(L) 后,再用线性回归求解 B* 和 α_B。 **Smin 与 S 的转换**:原论文推导发现,Smin 和 S 可以通过 B 和 Bcrit(L) 转换:Smin = S · (B / Bcrit(L))。将 Smin 替换后,就能得到有限 batch size B 下的 loss 公式 L(N, S, B)。 **数值估计 L(N, S, B)**:公式里的 loss 值无法直接求解,但因为一定存在唯一解,所以用二分法就能算出来。 ---实验详情
2.1 In-domain Data 预测结果
实验结果很直观。左半部分展示了 2B 参数的模型在 C4 测试数据上的 loss 曲线。图中的实际测试 loss(Actual Test Loss)和预测测试 loss(Predicted Test Loss)对比,结果显示在 warm-up 阶段之后,两者几乎重合,预测准确度非常高。 右半部分是 33B 参数的模型在代码测试数据上的结果。同样,除了训练初期的 warm-up 阶段,实际 loss 和预测 loss 在整个训练过程中保持了极好的一致性。2.2 Power 项分析
Table 1 给出了在 C4 训练数据上,通过实验估计出的 Scaling Laws 公式常数(α_N、α_S、α_B、N_c、S_c、B*)。表中列出了两组数据: 1. **C4 Value**:在 C4 数据集上估计的值。训练最大参数量为 60M 的小模型后提取得出。 2. **[KMH+20]**:OpenAI 原始论文在 WebText 数据集上的估计值。 可以重点关注 α_N、α_S、α_B 这些 power 项。尽管这里和 OpenAI 使用了不同数据集,但 C4 和 WebText 都是网页清洗数据,分布非常相似。因此,计算出的 power 项也非常接近。 这反映出数据本身对 power 项的影响很大。同时,两个实验的上下文窗口长度都是 1024。如果换成 ChinChilla 使用的 2048 窗口长度,power 项就会完全不同。2.3 Out-of-Domain Data 预测结果
前面用的是同分布测试数据,而这里用了私有中文数据——这类数据在训练数据中很少见,可以视为 Out-of-Domain(OOD)数据。 实验涵盖了 500M、2B 和 33B 三个规模。对于领域外数据,预测的 loss 曲线在训练初期与实际曲线有些波动,但整体趋势和最终的收敛 loss 值与预测值仍然相差不远。这说明 Scaling Laws 在 OOD 数据上也能提供很好的预测,体现了它在不同数据集和模型规模下的普适性——即使面对不同分布的数据,也依然有效。
---
