2026/10/21 4:06:46

Scaling Laws全解析:从幂律关系到训练预算与模型扩展实践

Scaling Laws全解析:从幂律关系到训练预算与模型扩展实践 1. Scaling Laws 到底在说什么先说结论Scaling Laws 研究的是“大模型变强到底是因为什么在变强”以及“变强的速度有没有规律可循”。我在第一次接触这个概念时最大的困惑是参数多、数据多、算力多这谁都知道但关键是“多到什么程度对应什么效果”。Scaling Laws 干的事情就是把这种模糊的直觉变成一条可预测的曲线。只要你在小规模模型上测出一组数据点就能推算出把模型扩大到十亿、百亿、千亿参数时损失大概会降到多少推理能力大概会好到什么水平。这对实际工作影响非常大。训练一个千亿参数模型成本动辄百万级不可能靠“赌”来决策。有了 Scaling Laws团队可以先跑几十个百万参数的小模型用一两天时间摸清规律再决定要不要上大模型预算怎么分配数据要凑多少甚至训练到一半发现效果不对劲到底是该加数据还是该加参数。这些都不是拍脑袋而是有数学规律在背后的。另外Scaling Laws 适合谁看凡是做模型训练、微调、推理优化的人都建议把这块吃透。哪怕是只做应用层开发的人理解了 Scaling Laws也能明白为什么某些模型质量突然跃升、为什么某些模型越用越“笨”、为什么数据集大小决定了能力的天花板。这些概念会直接影响你的选型判断和成本估算。2. 三条核心定律参数、数据、算力如何共同决定模型表现2.1 幂律关系不是线性增长是“收益递减”Scaling Laws 最核心的发现可以从一组经验公式说起。用 L 表示模型在某个任务上的损失N 表示模型参数量D 表示训练数据量C 表示训练总算力经典的拟合结果是L(N) E A / N^αL(D) E B / D^βA、B、E 都是需要拟合的常数α、β 是缩放指数通常在 0.05 ~ 0.2 之间E 表示“不可再降低的误差下限”也就是数据本身的不可约损失。我在第一次看到这个公式时直观感觉是参数翻倍损失减少的量是固定的吗不是。它是幂律的意思是“损失与参数量之间是对数线性关系”。这就带来了两个重要推论第一收益递减。参数从 1 亿加到 2 亿损失可能下降 0.1从 10 亿加到 20 亿可能只下降 0.05从 100 亿加到 200 亿可能只下降 0.02。每翻一倍参数损失下降的绝对量都在变小而不是线性变少。第二不存在终点。不管参数加到多大损失都不会降到 E 以下因为 E 是数据本身的信息熵决定的。也就是说模型的极限不是你堆了多少参数而是你的数据质量到底有多好。这个认知非常重要。2.2 算力的近似关系C ≈ 6ND训练一个 Transformer 模型时总算力消耗以浮点运算量计可以近似表达为C ≈ 6ND这个 6 倍系数的推导逻辑是前向传播大约需要 2ND 的浮点运算反向传播大约是 4ND合计就是 6ND。当然这是理论下限实际工程中因为激活重计算、通信开销、并行策略等因素真实吞吐往往达不到理论值通常效率在 30% ~ 50% 左右。我最早看到这个公式时第一反应是这也太粗糙了。但后来发现就是这种粗糙的估计反而特别适合做预算决策。因为当你需要快速判断“3 万亿 token 训练一个 140B 模型需要多少卡”时你不需要精确到小数点后两位你需要的是量级正确。比如一个实际场景假设某团队想训练一个 13B 参数模型数据量安排为 1 万亿 token那么理论算力大约为C 6 × 13 × 10^9 × 1 × 10^12 7.8 × 10^22 FLOPs如果团队使用的是 H 系列加速卡单卡峰值大概是 3e14 FLOPs每秒级别实际利用率按 40% 算单卡有效算力约 1.2e14 FLOPs每秒。那么需要的时间就是7.8e22 / 1.2e14 ≈ 6.5e8 秒也就是约 18 万卡时。如果你只有 128 张卡训练时长大约 5.8 个月。这个数字一算出来团队立刻就能判断这个计划是否可行、是否需要砍数据量或者缩小模型。这就是 Scaling Laws 在实际工程中最大的价值——把幻想变成可计算的预算表。2.3 三者的平衡Chinchilla 法则刚才我们知道了 L(N)、L(D)、C ≈ 6ND 这三条规律但还有一个更关键的问题在算力预算 C 固定的前提下应该把算力分配给更多参数还是更多数据答案是两者要成比例地增长。这就是著名的 Chinchilla 法则核心结论是模型参数量 N 和数据量 D 的比值存在最优解在计算预算 C 固定时最优的参数量和数据量满足N ∝ C^0.5D ∝ C^0.5也就是说算力翻 10 倍参数量和数据量都应该增加到原来的约 3.16 倍而不是只堆参数或只堆数据。我用一个实际例子说明。某开源模型早期版本用了 7B 参数配 150B token后来团队研究 Chinchilla 法则后意识到数据量严重不足把同样的参数量配到了 1.4T token效果立刻提升明显。这不是个别团队的偶然经验而是很多实验室都验证过的方向。我自己实际操作时也会先用这个比例粗算一下如果是 7B 模型合理数据量在 15B token 左右按 2:1 到 1:1 算如果只有 5B token那么大概率性能没有吃满如果是 70B 模型至少得准备 140B token 才够。3. 公式背后的“为什么”为什么一定是幂律3.1 为什么不是对数关系或线性关系不少人会问为什么拟合结果是幂律而不是更简单的对数关系我尝试从信息论角度给一个直观解释。如果损失代表“模型尚未学会的信息量”那么每增加一倍的参数模型能多学会的信息大约是当前未学会信息的某个固定比例而不是固定数量。这类似于“学得越多学得越慢”的规律。初始阶段模型从零开始吸收大量基础规律损失下降很快后期剩下的都是非常细微的、低频的、复杂的规则每学到一个都需要耗费更多参数来表征所以就呈现出幂律衰减。还有一个直觉类比背单词。如果你是一个英语初学者每天背 100 个新词几天内词汇量涨得飞快但当你已经掌握了核心语境想要理解某个领域的专业文献每增加一点理解力你需要补充的背景知识和语料就变得越来越多。模型过参数化阶段就是“快速背词阶段”后期则是“精读理解阶段”不可同日而语。3.2 损失下限 E 到底代表什么E 在公式里代表 irreducible loss也就是无论模型多大都无法消除的损失部分。它来源于语料本身的不可确定性语料中有些内容是错的、矛盾的、重复的模型再怎么加大参数也无法把这种噪声“学会”并消除。这也解释了为什么数据清洗是 Scaling 的重要前置条件。如果你往训练集里加了大量低质量、重复、互相打架的内容E 会变得很高这时哪怕把模型从 10B 翻到 100B也只是在无限逼近一个很高的下限效果依然上不去。这就是为什么很多团队在“预先清洗”上花的功夫一点都不比模型结构设计少。我见过一个案例某团队把参数增加 4 倍损失只下降了 0.05最初以为是 Scaling 失效后来排查下来发现训练数据里面有 15% 的重复样本。清洗之后同样的参数规模损失又降了一个档次。数据质量的重要性被低估的人远比你以为的多。3.3 为什么说“大模型一定比小模型好”是错的严格来说是“在同样的训练充分度下大模型的表现上限更高”不是“大模型随意训一下就好”。如果大模型参数量增加但训练数据量和步数不变那么每个参数平均分配到的训练信息变少模型很可能是欠拟合的。这种情况下大模型的表现甚至可能不如参数少但训练充分的小模型。这就是大家常说的“激活参数和训练充分度”的误解。Scaling Laws 告诉我们的是在最优预算分配前提下大模型更好但一旦偏离最优分配规模反而是负担。4. 用 Scaling Laws 做训练预算从“拍脑袋”到“可计算”4.1 第一步从小模型外推大模型性能在实际操作中Scaling Laws 最常用的场景就是预测大模型性能。做法是训练一组小模型比如参数量分别是 50M、100M、200M、400M数据量成比例增加记录每个模型收敛后的最终损失在 log-log 坐标上拟合 L(N) E A/N^α外推到目标规模估算目标损失值。我试过用 400M 模型预测 7B 模型的最终损失实测误差大概在 5% 以内这个精度对于预算决策完全够用。但有一个前提小模型和大模型必须属于同一种架构、同一种数据分布、同一种训练策略否则外推误差会迅速变大。这里有一个细节很多人容易忽略用于外推的小模型必须训练到收敛状态而且学习率调度方式要与目标模型保持一致。如果小模型只训练了 3000 步就停止损失还没压到平台期拟合出来的 α 就会偏低外推结果也会偏乐观。4.2 第二步算算到底需要多少算力有了目标损失下一步就是用 C ≈ 6ND 倒推算力预算。假设你的目标是训练一个 7B 模型数据量定在 20B token那么理论算力是C 6 × 7 × 10^9 × 20 × 10^9 8.4 × 10^20 FLOPs如果你有 64 张加速卡单卡有效算力约 1.2e14 FLOPs每秒那么训练时间大约是8.4e20 / (64 × 1.2e14) ≈ 1.1e5 秒 ≈ 30 小时再乘上负载不均衡损耗通常 1.2 倍左右实际大约 36 小时。这个数字对团队排期非常关键能不能在三天内跑完一个实验版本决定了你迭代的速度上限。我还习惯把“验证 Scaling Laws 外推准确性”本身当作一次实验。比如先按 400M 模型预测 7B 的效果实际训练到预期步数后若损失高于预测值 0.1 以上说明架构或数据存在偏离需要排查而不是直接认定模型没救了。4.3 第三步停顿点计算判断训练是否“还有效”训练过程中Scaling Laws 还能告诉你“现在该继续还是该停”。根据幂律关系损失下降速度是逐步放缓的。当训练到后期损失曲线看起来像平了但可能不是真平了而是还在以每千步 0.001 的速度下降。这时用直觉判断是“没效果了”但用对数坐标一看趋势很明显就应该继续跑。反过来如果训练到某个点后曲线在 log-log 坐标上出现明显拐点或上升说明可能出现饱和或过拟合这时再用算力去堆不如回头处理数据。我一般会实时记录训练损失和学习率对数坐标曲线并同时画一条“理论外推损失曲线”做对照。偏差过大时优先查学习率调度是否和参考实验一致、数据是否被重复采样导致 E 上升、模型初始化是否出现问题。这三个是常见偏差来源。5. 涌现能力与 Scaling 的边界什么时候规律会失效5.1 涌现能力非线性跃升Scaling Laws 描述的是平均趋势但实际任务表现并非全部平滑增长。有一个广为人知的现象就是“涌现能力”某些任务上模型参数跨过某个阈值后表现突然从接近随机跳到接近人类水平中间几乎没有过渡段。比如某些推理任务、数学竞赛题、工具调用能力在 1B 参数时几乎完全不能做到了 70B 参数突然能做。这个现象在直觉上有点违反幂律平滑外推的假设但两者并不矛盾幂律描述的是训练损失涌现能力描述的是某些下游任务能力对损失的敏感度。损失稍微降低一点点可能刚好跨过某个“能力临界点”。我自己的理解是这类似于阈值效应。模型的内部表征里有一些隐含的推理链路只有当参数量和训练数据达到某个水平这些链路才能被完整组装出来。一旦组装完成能力就是“从 0 到 1”的变化而不是“从 0.5 到 0.6”。5.2 Scaling 的四个失效场景Scaling Laws 不是万能的以下几种情况会出现明显偏差第一数据跨分布。小模型用的是通用文本目标模型想训的是代码那么外推结果完全不可信。幂律关系的常数 A、α、E 与数据分布强相关换数据等于换规律。第二架构变更。比如小模型是 dense 架构目标模型是 MoE 架构参数量定义方式完全不同Scaling Laws 的外推公式需要重新拟合。MoE 的行为更受激活参数影响而不是总参数。第三训练策略不匹配。小模型用 300B token 训练大模型只给 50B token那么无论怎么外推大模型都不可能收敛到目标损失这不是 Scaling Laws 错而是你违反了它在固定计算预算下的最优配比假设。第四数据污染导致的虚高。如果用来评估的任务文本恰好出现在训练集里模型表现会异常高这个不是真正能力的提升。评估时要注意去重和隔离。我自己遇到过最典型的一次团队信心满满外推一个 13B 模型预测可以超越某个开源基线结果实际效果差了一截。排查下来发现小模型实验时用的是经过严格去重的数据而大规模训练时因为时间紧张直接用了全量原始数据里面多了 5% 的重复样本E 直接提高就把外推结果打破了。这类坑说到底就是对“数据分布一致性”不够较真。6. 实操中的常见误区与排查技巧6.1 误区一把 6ND 当成真实 FLOPs前面提到C ≈ 6ND 是理论值实际由于重计算、通信、并行策略、低效算子实际消耗往往是理论值的 1.5~3 倍。在估算训练时间和成本时一定要预留这个系数。经验值是中等规模集群64~256 卡实际效率约为理论峰值的 35%~50%大规模集群上千卡效率往往会降到 30% 以下。如果你的集群用了 512 张卡但吞吐只有理论值的 25%那不是 Scaling Laws 不准是工程优化不到位。6.2 误区二小模型外推大模型时只改变参数不改变数据很多人做外推实验时只把参数从小到大数据量却保持不变。这样测出来的 Scaling 曲线是失真的。正确做法是当参数翻倍时数据量也要大概成比例增加或至少保证每个参数的样本数接近。否则小模型已经过拟合大模型还在欠拟合外推结果肯定不准。我习惯的做法是固定“参数-数据比”比如每个参数约 20 个 token。400M 模型配 8B token800M 配 16B token1.6B 配 32B token。这个配比确保每个规模都训练得比较充分拟合出的 Scaling 曲线也更可信。6.3 误区三只看验证集损失不看下游任务Scaling Laws 预测的是“损失”不是“实际能力”。尤其是在评估代码生成、数学推理、指令跟随这些复杂任务时损失变化 0.05 可能对应能力大变化也可能几乎无感。我以前做过一个对比实验两个模型损失只差 0.03但代码生成的 pass1 差了 12 个百分点。原因是有时候损失下降主要集中在高频词和语法模式上而对推理能力提升不大。所以如果你只盯着训练损失做 Scaling 判断很可能会误判模型质量。建议是在训练过程中除了记录 loss还要周期性地在固定的评测集上跑一遍真实任务。不要用 loss 一个指标替代全部。6.4 排查技巧如何判断 Scaling 是否“正常”我把训练中的排查过程整理成了一张思路表当我怀疑“模型是不是训崩了”时会按这个顺序检查异常现象优先排查方向可能的根因训练损失外推偏差 0.15数据分布、清洗流程重复样本、跨域语料污染损失下降比预测慢很多学习率调度、批次大小学习率过高导致震荡或低批次导致噪声大损失突然上升又回落数据批次混入异常样本全量数据未做丢弃处理验证集损失开始反弹训练数据重复率过高模型开始记忆训练序列下游任务能力与损失不匹配评测集与训练分布差异测试集过难或任务依赖特殊技能7. 一个实际案例从 400M 外推 7B 的完整流程7.1 设定实验矩阵某模拟项目X要做一款垂直领域的文本模型目标参数量 7B。按之前说的经验我先规划外推实验配置一400M 参数8B token配置二800M 参数16B token配置三1.6B 参数32B token三个模型使用完全相同的 tokenizer、数据源、优化器配置、学习率调度。每个模型训练 5 个 epoch记录最终 loss 作为拟合点。7.2 拟合与预测训练结束后我在 log-log 坐标上拟合 L(N) E A/N^α。假设得到 α ≈ 0.08E ≈ 1.5A ≈ 12.0。代入 N 7BL(7B) ≈ 1.5 12.0 / (7 × 10^9)^0.08计算过程先算 (7e9)^0.08。取对数0.08 × ln(7e9) ≈ 0.08 × 22.67 ≈ 1.81所以 (7e9)^0.08 ≈ e^1.81 ≈ 6.12。L(7B) ≈ 1.5 12.0 / 6.12 ≈ 1.5 1.96 ≈ 3.46这意味着在不做特别优化的情况下7B 模型在这个领域可以期望损失降到 3.46 附近。7.3 实测对比实际训练完成后7B 模型的最终损失为 3.52与预测值 3.46 相差 0.06在可接受范围内。这个误差主要来自小规模实验的优化器设置与大模型略有不同。如果误差大到 0.2 以上我会立刻检查数据管道和训练配置而不是盲目继续堆算力。8. 一些重要的“反直觉”细节8.1 学习率与收敛速度Scaling Laws 拟合时通常假定最优学习率随模型规模变化。经验上批次大小应该随模型规模线性增加学习率可以保持稳定或略微上升。但很多人为了省事小模型和大模型使用同一个学习率结果大模型训练不稳定loss 波动明显。我建议大模型训练中把批次大小设为目标 token 数的 0.5%~1% 作为参考再结合 loss 衰减曲线做微调。8.2 为什么说测试集污染是“最大的隐藏变量”如果你用公开评测集来验证外推效果评测集本身如果和训练语料有重叠结果会虚高。这种虚高不体现在训练 loss 上但体现在“能力跃升假象”上。我在项目里习惯的做法是标注一批“绝对不参与训练”的新评测样本所有外推验证都基于这一批固定样本。这样可以避免污染干扰也能让不同实验之间的对比更有说服力。8.3 小数量的“漏报”Scaling Laws 在小规模实验做外推时有个天然的问题规模太小可能看不出某些能力的存在。你在 100M 模型上做数学推理测试能力为零但外推曲线可能显示到 10B 时依然是零而实际上到了 10B推理能力突然涌现出来。这是幂律拟合无法捕捉的地方。所以在验证“能力是否出现”时不能只看外推曲线。哪怕预测接近零也值得在目标模型上实测一遍因为涌现可能打破外推。9. 我的实操习惯三张图判断训练是否健康最后分享一个我的个人习惯。每次大规模训练开始前我会提前准备好三张图的监控面板一旦训练启动就持续观察第一张训练损失和验证损失的对数坐标曲线。重点看曲线是否平滑下降有没有断崖或反弹。第二张实测 loss 与 Scaling Laws 外推 loss 的差值曲线。误差在 ±0.1 内视为正常超过就是预警。第三张下游任务评测分数随训练步数的变化曲线。这个曲线不需要每一步都评测每隔一定间隔跑一次就行主要用来捕捉能力涌现。三张图结合起来就能避免两个极端一是“损失降了但能力没涨”的自我欺骗二是“损失没降能力却涨了”的意外惊喜。无论哪种都比埋头训练到最后一刻才发现问题要稳得多。我个人还有一个体会Scaling Laws 不是用来迷信的而是用来校准直觉的。它没有告诉你“模型最终能做到什么”只告诉你“模型至少能做到什么”以及“要做到某个成本会是多少”。真正把 Scaling Laws 用好的团队不会把它当作金科玉律而是当作一个持续验证、持续修正的工具。每次实验都是对规律的一次重新采样次数多了你对“这个任务在什么规模下能有多好”的判断会越来越准。这种手感比任何理论公式都值钱。