
1. 为什么 Scaling Laws 是 LLM 时代的“游戏规则说明书”这两年满屏都是大模型大家张口闭口就是“参数、数据、算力”但很多人对这三者之间的关系其实是一笔糊涂账。我见过不少团队拿着几十张显卡兴致勃勃地准备训一个“比肩开源顶级模型”的底座结果跑了两周发现 loss 降不动算力烧完了模型却卡在某个尴尬的水平上。问题出在哪出在最基本的一个判断上他们根本没搞明白模型规模、数据量、计算量这三者之间到底是个什么关系。这个关系就是 Scaling Laws 要回答的问题。Scaling Laws直译过来叫“缩放定律”核心思想其实非常朴素当你把模型做得更大、喂进去更多数据、花更多算力去训练时模型的性能会按照某种可预测的规律提升。这个“规律”不是拍脑袋拍出来的而是通过大量实验拟合出来的经验公式。它就像一份游戏规则说明书告诉你你有多少资源能做到什么程度你想达到什么效果需要准备多少资源。我第一次认真读这个方向的论文时最大的感受是原来这几十年来大家闷头卷模型大小背后居然是有数学规律的。而且这条规律不仅仅是“越大越好”这种正确的废话它能精确地告诉你当模型规模翻 4 倍时最终 loss 大概能降多少当数据量翻 8 倍时效果又能提升多少。这些数字在项目立项阶段直接决定了你要租多少卡、囤多少数据、排多少工期。这篇文章我想从实操者的视角把 Scaling Laws 这套东西彻底讲透。我不会停留在“抄结论”的层面而是尽量把公式背后的推导直觉、实验设计逻辑、以及我们在实际训练中怎么用它来做决策全部摊开来讲。无论你是刚接触大模型的算法工程师还是负责资源预算的项目负责人这份内容应该都能帮你在“拍脑袋”和“科学规划”之间找到那条清晰的分界线。2. 从三次方根到指数Scaling Laws 的数学直觉2.1 你不需要深究推导但要理解形状如果翻开原始论文你会看到一堆公式最经典的形态是这样L(N, D) C / N^α C / D^β L₀其中 L 是 lossN 是模型参数量D 是训练数据量α、β 是两个幂指数L₀ 是数据本身的不可约误差。这个公式看起来有点吓人但如果我们把注意力放在“形状”上它其实讲了一个很简单的事loss 由三部分组成——模型容量不够带来的损失、数据不够带来的损失、以及数据本身“噪声”带来的极限损失。数学上有条非常直观的线索当模型规模 N 变大时第一项 C / N^α 会变小当数据量 D 变大时第二项 C / D^β 会变小而无论你怎么堆资源第三项 L₀ 永远去不掉。这就像你在嘈杂的房间里听人说话——你把耳朵凑得再近设备的灵敏度再高房间里的背景噪声还在你永远不可能做到 100% 听清每一个字。这里有个经常被误解的地方很多人以为公式里的 α、β 是固定的常数只要是 Transformer 就一样。实际上不同模型结构、不同分词器、不同数据分布下拟合出来的 α、β 都会有差异。真正重要的是“幂律关系”这个形状——它意味着性能提升遵循的是“边际递减”逻辑而不是线性逻辑。2.2 幂律与边际递减为什么堆资源总有“撞墙”的一天我们先看一个具体的例子。假设你训练一个小模型1 亿参数某种任务上的 loss 是 3.2。如果 Scaling Laws 成立当你把参数从 1 亿增加到 4 亿翻 4 倍时loss 不会变成原来的四分之一而是会按照 N^(-α) 的规律下降。假设 α ≈ 0.1那么 4^(-0.1) ≈ 0.87也就是说 loss 只降了 13% 左右到 2.78。如果继续从 4 亿翻到 16 亿同样是翻 4 倍loss 会从 2.78 降到 2.78 × 0.87 ≈ 2.42。注意看同样是“参数翻 4 倍”带来的 loss 降幅从 0.42 缩小到了 0.36。这就是幂律曲线最核心的特征你每往前迈一步需要的资源越来越大但得到的收益却越来越小。这就是为什么“大力出奇迹”只是表面的叙事真正干过训练的人都知道模型大到一定程度以后每 0.01 的 loss 下降都意味着真金白银的算力燃烧。但反过来理解这条曲线也给了我们一个确定性的预期哪怕你只加了 20% 的参数你也大概知道 loss 会往哪个方向走、大概走多远这对工程排期是极其有价值的。提示如果你在自己的训练实验里发现 loss 并不按这个规律走不要急着骂公式。先检查是不是训练数据重复污染了、学习率是不是没调对、是不是模型结构本身有 bug。Scaling Laws 描述的是“训练设置基本合理”前提下的规律不是万能橡皮图章。2.3 三种资源之间的关系模型、数据、算力的三角博弈在 Scaling Laws 的框架里模型参数量 N、训练数据量 D、训练计算量 C 并不是三个独立变量它们被一个核心公式绑在一起C ≈ 6ND这个公式的意思是在标准的自回归 Transformer 训练中训练一个参数量为 N 的模型、在 D 个 token 上训练所需的浮点计算量大约是 6ND。这个 6 来自前向传播和反向传播的因子粗略记忆就是前向约 2ND反向约 4ND合计 6ND。正是这个公式把“你有多少卡”和“你能训多大模型、多少数据”直接关联起来了。假设你有一个千亿 token 的数据集想训一个 10B百亿参数的模型那么 C ≈ 6 × 10B × 100B 6 × 10^21 FLOPs。如果一张 H 系列显卡的有效算力大约是 4 × 10^15 FLOPs/s一台机器 8 张卡那么单机算力约 3.2 × 10^16 FLOPs/s。全速跑的话需要约 1.875 × 10^5 秒也就是大概 52 小时单机。但这只是理想情况实际要考虑并行开销、通信损耗、数据加载瓶颈通常要乘上 1.5 到 2 的安全系数。这样一算很多团队在立项时就能立刻排掉不切实际的方案算力不够就别硬上“超大模型 超大数据”的组合数据量太少也别指望单靠堆参数能补齐——因为缺数据那块模型会在 L₀ 那个不可约项面前干瞪眼。3. 训练过程中的三类 Scaling Laws你不能只记一条很多人以为 Scaling Laws 就是“参数量越大 loss 越低”这一条其实在真实实验设计中还有另外两个维度的规律非常常用一个关于数据量一个关于计算预算。三条规律各自管一块做训练决策时往往要组合起来用。3.1 模型规模定律参数翻倍收益几何模型规模定律描述的是在数据量充足、训练步数充足的条件下模型参数量 N 与最终 loss 之间的关系。它的典型形式是L(N) a / N^α L₀这里的关键是“数据量充足”这个前提。实际操作中很多团队根本没有那么多高质量数据如果你硬套这个公式会得到过于乐观的估计——因为模型很快记住了所有有效样本后面的训练只是在反复巩固记忆loss 几乎不动。这个定律的最大用处是在“模型选型”阶段。你计划做一个小尺寸模型做端侧部署想知道 1B 和 3B 之间到底差多少可以先用小规模实验拟合出曲线然后外推 3B 的预期表现。这里的风险在于“外推距离越远误差越大”所以最稳的做法是从小到大训 3 到 4 个模型点做完拟合后再外推一个相邻区间而不是直接从 100M 外推到 100B。3.2 数据规模定律数据翻倍收益同样递减数据规模定律的形式跟模型规模定律几乎一样L(D) b / D^β L₀它描述的是固定模型规模、不断增大训练数据量时loss 会怎么变化。β 通常比 α 小意味着数据量带来的收益衰减比模型规模更快。这也是为什么很多研究说“数据比参数更容易撞墙”——你花大价钱囤了 10 倍的数据loss 可能只降了一点点。不过这里有个非常实际的经验数据规模的收益高度依赖数据质量。如果你把低质量、重复、噪声大的数据混进去公式里的 D 要打个大折扣。换句话说公式里的 D 是“有效 token 数”不是磁盘上的原始字节数。我自己的经验是做数据清洗比盲目囤数据更划算。同样的预算把现有数据里的重复片段、机器翻译痕迹、超长无关文本清掉相当于白送你 20% 到 30% 的有效数据量这在 Scaling Laws 曲线上能实实在在往前走一截。3.3 计算预算定律如何在固定算力下分配参数与数据计算预算定律是这三条里最有工程指导意义的一条。它回答的问题是假设你只有固定的总算力 C那么 N 和 D 应该怎么分配才能让最终 loss 最低经典的结论是在算力有限的情况下模型参数量 N 和数据量 D 应该按某种比例同步增长而不是只堆其中一个。有一篇很有名的论文给出了一个近似结论当计算量 C 增加时最优模型规模增长得比最优数据量增长得更慢一些这意味着你在预算增加时更多要往“数据”里投钱而不是一味把模型做大。这里有个具体的计算逻辑。你可以用前面的 C ≈ 6ND 做一个约束然后在某个目标 loss 下反推最优 N 和 D。假设你希望 loss 达到某个值拟合曲线显示需要 N 10B、D 200B那么算力需求就是 6 × 10B × 200B 1.2 × 10^22 FLOPs。如果你实际只有一半的算力那你有两个选择模型砍一半、数据不变或者模型不变、数据砍一半。两者其实对应不同的 loss 变化路径你可以用两条幂律曲线分别估算哪个方向损失更小就走哪个。注意计算预算定律给出的是“最优分配”不代表“唯一分配”。现实训练中你经常因为数据版权、采集难度、卡时成本等原因不得不在次优分配下训练。这时候不要慌只要你知道自己偏移了多少后续还是可以通过继续预训练或微调去补救一部分。4. 数据量的瓶颈效应与 L₀Scaling 的天花板前面我们反复提到 L₀这个符号在论文里经常被一笔带过但实际训练中它才是让人最头疼的部分。理解 L₀ 的来源和影响能帮你判断一个模型是不是“真的到头了”。4.1 L₀ 的本质数据噪声、任务不可约误差L₀ 是 loss 的极限值即使你拥有无限大的模型、无限多的数据也不可能低于这个数值。它来自训练数据本身的不可预测性文本中天然存在随机性、不一致性、错误标注以及某些任务本身就无法从上下文唯一确定答案的情况。打个比方如果一份数据里 5% 的样本被错误标注了模型无论多强在这 5% 上都会产生持续性的 loss——它不是学不会而是学的目标本身就是错的。同理在网文、社交媒体等噪声较高的语料里L₀ 会明显偏高。理解 L₀ 对实战的一个重要启发是不要用模型在原始语料上的 loss 作为唯一的质量指标。两个模型在验证集上 loss 相同可能一个已经逼近 L₀另一个还差得远。你需要通过多次重复训练、观察 loss 下降曲线的尾段斜率来判断模型离极限还有多远。4.2 曲线尾段如何判断“模型吃饱了”观察 loss 曲线尾段是训练过程中的一个常用技巧。当训练进入到后 10% 阶段你可以每几百步记录一次 loss计算它在一个固定间隔内的下降量。如果这个下降量已经小于某个阈值比如 0.001且持续数千步没有突破那基本可以判断模型在这个数据规模和模型规模组合下已经“吃饱了”。这个时候继续烧卡基本是浪费。你应该做的是扩大数据规模、增加模型容量、或者调整数据配比。很多人犯的错误是看到 loss 还在缓慢下降就舍不得停结果多烧了几十万的算力换来的只是小数点后第三位的变化。我自己习惯的做法是设置一个“尾段下降比”指标取训练末尾 5% 的 loss 下降量除以总下降量。如果这个比例低于 0.5%就可以考虑早点收工。这个阈值在模型变大时会略微放松因为大模型受梯度噪声影响更大尾段抖动本来就明显。4.3 名词澄清同一条曲线多个叫法在阅读各种资料时你会发现 Scaling Laws 相关术语经常混用有的叫“神经标度律”有的叫“规模法则”还有“emergent abilities涌现能力”这个邻近概念。其实它们讨论的不是同一件事。Scaling Laws 描述的是“平滑且可预测的性能提升”而涌现能力描述的是“某个阈值附近突然出现的新能力”。这两者的区别在实操上很重要如果你想靠 Scaling 一点点提升模型逻辑推理能力那是平滑路径可以预期但如果你想靠规模激发涌现能力那就要做好在某个规模前效果几乎不动的心理准备。这三个名词都在说“能力随规模变化”但有的是连续曲线有的是阶跃现象。分清楚它们你在跟别人讨论模型能力规划时才不会被一锅粥带偏。5. 从公式到实战用 Scaling Laws 指导一次真实的训练预算到了这一节我们不再停留在概念层面而是把前面的公式串起来完成一次完整的“预算推演”。假设我们手上有一个团队想训练一个 7B 参数左右的模型数据集规模大约 800B token看看会发生什么。5.1 计算量估算全流程先用核心公式 C ≈ 6ND 走一遍N 7 × 10^9D 8 × 10^11C 6 × 7 × 10^9 × 8 × 10^11 3.36 × 10^22 FLOPs假设我们使用 8 卡节点单卡有效算力 4 × 10^15 FLOPs/s这已经是比较乐观的有效算力估计实际要考虑各种开销单节点总算力为 3.2 × 10^16 FLOPs/s。理想时间3.36 × 10^22 / 3.2 × 10^16 ≈ 1.05 × 10^6 秒 ≈ 292 小时约 12.2 天。实际算上通信开销、日志保存、检查点写入、偶尔的故障恢复通常要乘 1.3 到 1.5 的系数大概 16 到 18 天。这个数字在立项阶段直接决定了你要不要接这个项目、租多少卡、谈多少预算。5.2 算力不足时的取舍策略现在假设我们的预算只够跑 10 天也就是 240 小时那么实际可用算力约束是 C_real 3.2 × 10^16 × 86400 × 10 ≈ 2.76 × 10^22 FLOPs跟理想的 3.36 × 10^22 差了约 18%。这时候你有两个方向方案 A模型缩到 6BD 不变。C 6 × 6 × 10^9 × 8 × 10^11 ≈ 2.88 × 10^22 FLOPs匹配度更高。损失是模型容量略降根据模型规模定律预期 loss 会稍微抬高一点。方案 B模型保持 7BD 降到 680B。C 6 × 7 × 10^9 × 6.8 × 10^11 ≈ 2.86 × 10^22 FLOPs。数据少了 15%根据数据规模定律loss 也会往上走。到底是砍模型还是砍数据取决于你的下游任务更依赖知识广度还是更依赖推理深度。如果你做的是开放域问答数据量更关键砍数据伤害更大如果你做的是代码生成语义容量和上下文建模能力更关键砍模型可能更不划算。我见过太多团队在预算不足时本能地选择“把模型做小一点数据保持全量”理由是“数据都花钱买了不用浪费”。但这个在 Scaling Laws 的逻辑下不一定对。你最好拿两条幂律曲线的系数分别算一算哪个方向预测的 loss 更接近目标再拍板。5.3 单位与口径别让 FLOPs 计算变成糊涂账这里必须提一个容易踩坑的地方FLOPs 的计算口径。不同代码库对 FLOPs 的统计方式不同有的只算矩阵乘法有的算了 activation 的算子有的把通信也折进去了。所以当你从论文里读到某个模型“训练总共用了多少 FLOPs”时先搞清楚它的统计口径否则很容易产生“为什么我复现出来的数字跟论文差了一倍”的困惑。在自研训练框架里比较可靠的基准是统计所有参数更新相关的张量运算用 profiler 去抓实际算子的 FLOPs不要靠理论公式硬算。理论公式主要用来做立项预估实际执行后用 profiler 校准一次然后以校准后的数值为准做后续决策。5.4 小规模实验外推的拿捏怎么用三个点预测大模型表现很多团队没有资源直接训一个超大模型来验证 Scaling Laws常规做法是训几个小模型比如 0.1B、0.3B、0.6B拟合曲线后外推到 7B 甚至 70B。外推的时候有几个关键点训练步数要足够最好是每个小模型都训练到接近收敛否则拟合出来的 loss 点会偏高。数据分布要与目标模型的数据分布一致不要用小众语料拟合、然后外推到通用领域。最小模型不能太小至少要超过 0.05B否则很多结构特性还没形成曲线会失真。拟合时让三个点尽量覆盖一个数量级的跨度比如 0.1B、0.3B、1B比 0.1B、0.15B、0.2B 这种挤在一起可靠得多。外推结果不要求精确到小数点后两位那没有意义。它的价值在于给你一个“区间感”如果外推显示 7B 模型的预期 loss 在某个范围内你就可以判断项目目标是否现实进而决定要不要换架构、加数据、或调整训练策略。6. Scaling Laws 的适用边界什么时候它也不好使Scaling Laws 并不是万能的至少有三个典型场景它可能会失效或明显偏移。认清这些边界能让你少走很多弯路。6.1 模型结构改变时规律需要重新拟合Scaling Laws 通常是在某种固定结构比如标准 Transformer下拟合出来的。如果你换了激活函数、改了 attention 变体、或者加入了新的结构模块原来的指数可能不再适用。不是说新的结构没有 Scaling 规律而是说你需要重新用小模型拟合一组新参数。我自己在实验一种改造过的 attention 变体时初期直接套用了原始论文的 α 和 β结果预测的 loss 比实际高了差不多 0.15。后来重新训了三个小模型拟合才发现这个结构的 α 比原始 Transformer 更小意味着它从参数增长中获得的收益相对更弱但它在小模型阶段表现不错。这里给个经验每次改结构都要把 Scaling 曲线当作模型能力的一部分来重新测量否则后续所有基于曲线做的决策都会带偏。6.2 数据分布剧烈变化时旧曲线直接作废如果你的第一阶段训练用的是通用英文语料第二阶段切成了大量代码和数学数据那么这两批数据的有效 L₀ 和噪声特性完全不同。用一个在通用语料上拟合出来的曲线去预测代码混合训练后的 loss误差会很大。正确的做法是在新的数据混合设定下重新跑一组小规模实验作为校准点。不必从头拟合完整曲线但至少要有 2 到 3 个新数据分布下的参考点用来判断原来公式里的参数是否需要修正。跨数据域外推是 Scaling Laws 使用中最危险的操作之一建议永远保持警惕。6.3 训练超参数不当时你会观察不到规律学习率过高、batch size 太小、梯度裁剪过于激进这些都会让模型在训练过程中偏离“接近最优”的轨迹。在这个状态下Scaling Laws 的预测会失真——不是规律不存在而是你的训练配置没有达到规律生效的前提条件。遇到这种情况先别急着怀疑 Scaling Laws更不要据此调整模型大小。先修训练设置学习率调回合理区间、确认 warmup 步数、检查梯度稳定性。等 loss 曲线恢复正常下降趋势后再回来看曲线是否跟预测对上。这里分享一个我在实践中常用的检查方法在中型模型比如 1B 到 3B上做一组可重复的标准训练如果两次实验的训练动态差异显著那大概率是环境和配置有问题而不是 Scaling 规律失效。提示Scaling Laws 是“按最合理设置训练时”的规律它不是替你做超参数调优的工具。它告诉你目标在哪儿但这条路怎么走还是得靠你对优化过程本身的判断。7. 训练策略如何反哺Scaling 曲线帮我们优化任务配比训练一个底座模型很少只用单一语料。要处理混合数据配比的问题Scaling Laws 提供了一个很实用的视角不同数据域的曲线不一样合并训练时存在“共享容量”的复杂效应。7.1 多领域数据的加权方式以“loss 可降低幅度”为基准假设你有代码、百科、对话三类数据单独训小模型后可以拟合出各自的 loss 曲线。在混合训练时你不应该简单按数据量比例来采样而应该考虑各领域“尚未达到的潜力”。潜力大的领域可以适当提高采样权重潜力小的领域则不要给它太多训练步数否则就是在浪费全局容量。这个逻辑本质上就是在三条曲线的指导下做资源分配。实际操作上我会做一组“域权重扫描”每个领域尝试两到三种采样权重组合分别训练小模型选择在验证集上整体熵最小、且重要下游任务 loss 达标的一组方案。听起来有点繁琐但相比动不动就浪费几百 GPU 天这点实验成本可以忽略。7.2 动态调整采样比例训练中期的“实时校准”静态配比只是第一步。训练进入中后期模型在不同数据域上的 loss 下降速度会分化。通过观察各域的 loss 曲线你可以手动或通过启发式规则调整采样比例——某个域明显掉得快说明还有提升余地可以略微增加采样权重某个域已经很长时间不动接近 L₀就可以降低权重。不过要注意动态调整不能太激进。频繁变采样比例会让模型训练动态变得不稳定后期模型可能产生领域偏好偏移。我见过有人在训练最后一两天大幅提高代码数据占比结果模型在通用问答上明显退化。调整的频率要低、幅度要小每次改动后至少观察几百步再判断效果。7.3 一个被低估的参数epoch 使用率在 Scaling Laws 语境下还有一个经常被忽略的指标每个数据样本被重复使用的次数epoch。如果有效数据量 D 固定训练总步数增加时模型会在同一个样本上反复迭代这会产生一个收益递减甚至有害的效应。很多公开模型在介绍时只说“多少数据”“多少 token”但不说重复度。实际上重复度过高会显著抬高尾部过拟合风险。经验上限一般在 2 到 4 个 epoch取决于数据质量和模型容量超过这个范围后模型会逐渐开始记住噪声和重复模式验证集 loss 反而可能回升。这也是为什么高质量超大清洗后的数据集那么值钱——它让你可以在保持低重复度的前提下训练到更深的收敛点。8. 写在最后Scaling Laws 不是“越大的信仰”而是“预算的度量衡”我接触 Scaling Laws 这几年最大的体会是它不是那种让你看完立刻觉得“哇好厉害”的炫技知识而是一个润物细无声的决策工具。它不会替你做模型结构设计不会替你做数据清洗也不会替你调学习率。但它会在项目立项时告诉你“这条路走不走得通”会在训练中途告诉你“现在该加数据还是加参数”会在你快要放弃时告诉你“再坚持多少步大概能到哪个水平”。如果非要提炼一句最实用的建议那就是每次开启一个新的训练任务前先花几天时间在小模型上拟合一条属于自己的 Scaling 曲线。数据分布、分词器、模型结构哪怕只动了一点都可能让学术论文里的参数失准。自己顺手测一条曲线成本不高但后续所有决策都有了锚点。上次我指导一个团队做中规模底座预训练时他们一开始计划训练 13B 模型加 1T 数据预算明显不够。我让他们花了两天时间先训了 0.1B、0.3B、1B 三个小模型拟合后发现 13B 在这个数据分布下要想达到目标 loss数据量得再翻一倍才行。团队最终调整了目标把模型缩到 7B 左右数据保持 800B训练周期压缩到可接受范围内最后效果比硬撑 13B 还稳。这就是 Scaling Laws 在真实项目里的价值——它不一定让你“冲得更高”但能让你“走得准、不翻车”。如果想继续往这个方向深入下一步可以看看“Chinchilla 定律”关于计算最优分配以及“涌现能力”相关的讨论。前者帮你回答“给定算力模型和数据各该占多少”后者帮你理解“为什么有些能力突然出现”。这些内容各有各的坑下次找个机会再单独展开。