想象你开了一家小面馆,收了个学徒叫小灶。小灶的厨艺(模型的 Loss)一开始很糟糕,煮面都能糊。你决定让他多看菜谱——每买回一本新菜谱,他的厨艺就进步一点。头几本菜谱效果惊人,他从「煮面糊锅」进步到「红烧肉能入口」。可看到第 200 本时,进步越来越小;看到第 2000 本,翻一本新菜谱你几乎感觉不到变化。 这不是小灶不努力,而是「看菜谱」这件事本身有规律:厨艺的提升幅度,随菜谱数量增加而递减。大模型训练也有同样的规律——数据量缩放规律(Scaling Law)。模型的表现(Loss)与训练数据量 N 之间呈幂律关系 L ≈ a·N⁻ᵇ:数据越多,Loss 越低,但每翻一倍数据,收益都在缩小。 更麻烦的是:把同一本菜谱反复看 30 遍,学徒不但不进步,还会把菜做「油」;路边摊买来的模糊菜谱看多了,反而教坏他。而最反直觉的发现是——学徒的天赋(模型参数)与阅读量(数据量)必须匹配:天赋很高读得太少是浪费,读了很多天赋平平也是浪费。DeepMind 的 Chinchilla 实验就证明了这一点。 这篇文章,就用这套「菜谱账本」带你读懂:训练一个大模型,到底该准备多少数据。
掌握数据量缩放规律,你就能科学规划训练数据规模、预估算力投入与最终效果,避免凭感觉堆数据或盲目缩小模型——这是大模型训练工程师与 AI 研究员最核心的「账本」能力。
可视化演示
展示数据量与Loss的幂律拟合、重复训练收益递减、数据质量与数量权衡及Chinchilla最优配比,侧边指标实时切换深入理解数据缩放核心规律。
本节配有交互动效(进入视口后自动加载,约 3KB)。
幂律拟合:数据量与Loss呈幂律关系 训练数据量每翻倍,Loss按幂律下降,但边际收益递减 双对数坐标下呈线性下降,斜率决定缩放效率 L(D) = aD^(-α) + b 幂律规律指导数据规模规划。
幂律拟合规律
小灶第一天进后厨,连锅都端不稳。店长塞给他一本《家常菜 100 例》,他看完后终于能把蛋炒饭做熟——从 0 到 1,进步惊人。可等到第 300 本《分子料理入门》看完,他的厨艺只是从 92 分涨到 92.5 分。同一个学徒、同一份努力,越往后越难看到明显提升。
这个现象在机器学习里有一个精确的名字:幂律缩放。OpenAI 在 2020 年对 Transformer 语言模型做了一组系统的实验,把训练数据量从几万 token 一路加到几十亿 token,发现模型的 Loss 与数据量 N 之间稳定地服从一条幂律曲线:
b 的大小直接决定「加数据还划不划算」:b=0.1 意味着数据量翻一倍,Loss 只降到原来的 2⁻⁰·¹ ≈ 93.3%,换算成改善只有约 6.7%。这个「指数级投入、亚线性回报」的组合,是数据缩放规律最反直觉、也最需要牢记的一点。
所以店长不必因为第 300 本菜谱提升微小而怀疑学徒偷懒——幂律就是如此。真正的问题是:在收益越来越小的时候,钱和精力应该投到哪里去?这正是后面几节要回答的。
- 数据量 N训练时喂给模型的总 token 数,相当于学徒读过的菜谱总数。
- Loss 函数 L(N)模型预测出错的平均程度,越小表示模型「厨艺」越好,可以用困惑度等指标度量。
- 缩放常数 a数据量为 1 时的基础 Loss,由模型结构、数据分布和任务难度共同决定,相当于「学徒的起点水平」。
- 幂律指数 bLoss 随数据量下降的快慢,通常落在 0.05~0.1 之间。b 越大,每一份数据越「值钱」。
收益递减现象
假设小灶现在厨艺 60 分。店长让他学 100 本新菜谱,涨到 70 分;再学 100 本,涨到 75 分;再学 100 本,只涨到 77 分。投入的「菜谱量」完全一样,收获却从 10 分、5 分、缩水到 2 分。
收益递减不是模糊的直觉,而是幂律的直接推论。把数据量从 N 翻倍到 2N,Loss 的下降比例可以精确写出来:
这就是「对数线性」的直觉:想要 Loss 取得线性下降,数据量必须以指数速度增长。以 b=0.095 为例,数据翻倍只带来约 6.4% 的 Loss 下降;要把 Loss 从 1.0 压到 0.5,数据量需要扩大大约 1500 倍。这条曲线的「陡峭段」在前 100B token,「平缓段」在 1T token 之后。
这就像学做菜:从 60 分冲到 90 分,靠的是热情和大量练习;从 90 分冲到 95 分,靠的是名师点拨;想从 99 分冲到 99.9 分,花费可能是前者的几十倍。认清自己在曲线的哪一段,比盲目努力更重要。
- 当前数据量 N 的 Loss代入幂律公式得到的基础值,作为「翻倍前」的参照。
- 翻倍后的 Loss把 2N 代入公式,指数运算让系数 2 被提取出来。
- 下降比例两式相除,a 与 N 全部抵消,只剩下与 b 有关的常数。
数据重复效应
店里只有 100 本菜谱,店长让小灶翻来覆去看了 30 遍。第 1 遍他如获至宝;第 5 遍,细节已经烂熟;第 30 遍,小灶开始闭着眼睛切菜——油温不看就下锅,因为样本太少,他把偶然当成了规律。这不能怪他,换谁看 30 遍同一本菜谱都会「想当然」。
训练中把完整数据集反复喂给模型,叫「多轮 epoch」。如果唯一数据量 D 有限,模型看到的总样本是 E·D,但真正的信息量还是只有 D。模型会越来越「熟练」,但这种熟练是背答案,不是学会规律——这就是过拟合。
OpenAI 的联合缩放公式把模型与数据的贡献拆开,能清楚看到数据瓶颈:
这解释了为什么顶级训练团队把「去重」当作数据预处理的第一优先级:同一份文本重复出现 100 次,等价信息量只有 1 份。Chinchilla 论文更是直言,在最优预算下重复训练超过 1~2 个 epoch 基本是浪费算力。
与其让小灶把 100 本菜谱翻得卷了边,不如出门再收集 100 本新菜谱。旧菜谱是存量,新菜谱才是增量。数据去重,就是确保你买到的每本「新菜谱」真的是新的。
- 模型项随参数量 N 增大而趋近于 0,表示「模型足够大后,容量不再是瓶颈」。
- 数据项分母是唯一数据量 D,分子是常数,D 固定时这一项是无法消除的常数。
- 地板(瓶颈)整个括号取 α_D 次幂后,即使模型项为 0,Loss 仍然停在数据项决定的水平。
质量数量权衡
采购员张三为了凑数,买回来 100 本印刷模糊、配料残缺的「百家菜谱」。小灶照着做了三天,学会了把盐当糖、把醋当酱油。店长气得把 100 本全部扔掉,还得多花一周纠正坏习惯。便宜的菜谱,往往最贵。
数据质量对缩放规律的影响是全方位的。一个常用的工程化方法,是给数据打「质量折扣」:设质量系数 q(0~1 之间),原始数据量 D 折算成有效数据量 D_eff:
把 D_eff 代入幂律公式可以估算质量提升的收益:假设原始 10T 数据 q=0.3,有效量是 3T;清洗后只剩 4T,但 q 提到 0.9,有效量变成 3.6T——看似「丢掉了六成数据」,有效量反而涨了 20%。这也是为什么 2023 年之后「数据工程」岗位比「模型调参」更抢手。
店长的采购原则变成一句话:少而精,胜过多而杂。扔掉 100 本破菜谱,把预算拿去请名厨手写 10 本好菜谱,小灶的厨艺涨得更快。数据清洗不是「减数据」,而是「把 q 做大」。
- 质量系数 q由去重率、语言纯洁度、困惑度过滤等指标综合得出,代表这批数据「值多少分」。
- 原始数据量 D爬虫从互联网抓下来的原始 token 总量,看起来很大但良莠不齐。
- 有效数据量 D_eff折算后真正参与幂律计算的规模,D_eff 越大,Loss 越低。
最优数据配比
小灶的脑容量有限,同时只能记住 20 道菜的做法。店长却给他买了 2000 本菜谱,他翻一本忘一本,最后学了个四不像。与此同时,隔壁店的天才学徒阿杰只读了 5 本菜谱,一身天赋无处施展。尺有所短、寸有所长——天赋和阅读量必须匹配。
2022 年,DeepMind 的 Chinchilla 团队在固定算力预算下做了上千次扫描实验,得到一个颠覆性结论:此前社区的模型普遍偏大、数据偏少。最优策略不是把模型或数据单方面推到极限,而是让参数量 N 与数据量 D 同比例放大。
训练一个 Transformer 的总计算量(FLOPs)近似为:
Chinchilla 进一步给出经验法则:每个参数大约配 20 个 token(D ≈ 20N)。于是 C=6ND 变成 C ≈ 120N²。Chinchilla-70B 用 70B 参数 + 1.4T token(正好 20 倍),在 200 多项任务上全面击败 280B 参数的 Gopher——不是因为它更大,而是因为配比更科学。
给学徒虚报天赋(无限加参数)却不给足菜谱,只会事倍功半;反过来,给足菜谱却请不来匹配天赋的学徒,也是浪费书。请老师和买书,要按「1:20」的节奏同步投入。
- 前向传播每个参数每个 token 约 2 次浮点运算。
- 反向传播梯度计算约是前向的 2 倍。
- 总计算量前向加反向,得到常数 6。
计算预算考量
店长手里这张卡里只有 10 万元,这是开店的全部预算。花 9 万请特级大厨、剩 1 万买菜谱,显然不划算;花 1 万请帮厨、9 万屯菜谱,也会把新菜谱浪费在不会做的人手里。预算怎么切,是店长最先要做的算术题。
训练大模型的第一约束往往不是「想要多大」,而是「预算有多少」——卡的数量、机时、电费都是定死的 C。在 C 固定的前提下,Chinchilla 定律给出唯一的反推公式:
举个例子:预算 C=1e23 FLOPs,N_opt ≈ √(1e23/120) ≈ 29B 参数,D_opt ≈ 580B token。如果团队只有 7B 模型的工程能力,那数据量目标应该是 D ≈ 140B token,而不是盲目把 1T 数据全灌进去——多出来的 860B 数据,收益会被配比失衡吞掉大半。反过来,如果手上已有 1T 高质量数据,最优模型规模大约在 50B 参数,用 13B 就是「书多师少」的浪费。
预算分配不是拍脑袋的学问。Chinchilla 公式就像店长的财务顾问:先看总预算,再定厨师级别和菜谱数量,每一分钱都花在匹配的位置上。
- 联立方程把 C=6ND 与 D=20N 两个约束写在一起,消去 D。
- 反推参数量两边开平方,得到 N 只由 C 决定。
- 反推数据量再把 N 代回 20 倍配比。
数据规划实践
新店开业前,店长坐在空荡荡的后厨里,面前是一张白纸、一支笔和一份预算表。请多大的厨师、进多少菜谱、菜谱从哪几种渠道进货、质量怎么把关——这些问题,前面学的所有规律此刻汇成了一张「开店算盘」。
把幂律、收益递减、重复训练、质量折扣和 Chinchilla 配比串起来,就得到一套可落地的大模型数据规划流程:先定预算、再反推规模、再预估效果、再设质量门槛。
其中最核心的估算公式是幂律在「质量折算后数据量」上的外推:
完整的规划流程可以总结为五步:第一,定算力预算 C;第二,用 Chinchilla 反推 N_opt 与 D_opt;第三,盘点现有数据,做质量清洗得到 D_eff;第四,若 D_eff 不足则优先扩数据源或做合成数据,若数据富余则可考虑加大 N;第五,用幂律外推预估 Loss,并预留 5%~10% 的余量。这套流程如今是各大模型团队「训前评审」的标准动作。
开店先算账,训模型先规划。店长把菜谱采购量、质量门槛、请厨规格写在同一张预算表上,开业之后才不会手忙脚乱。数据量缩放规律,就是大模型时代每一位 AI「店长」的计算尺。
---
- 有效数据量先做质量折算,把采购量 D 变成真实贡献 q·D。
- 幂律外推沿用第一节学到的 L=a·N⁻ᵇ,把 N 换成 D_eff。
- 达标判断把估算出的 L_est 与业务指标门槛对照,决定是否追加预算。
AI 应用场景
训练工程师规划千卡训练数据规模
阶段:数据准备与训练规划
解决的问题:训练团队常被问「数据要准备多少?」传统做法是拍脑袋或参考别人,要么数据不够导致欠拟合,要么数据太多重复训练浪费算力。用幂律 + Chinchilla 先定算力预算反推 D_opt,再按幂律预估最终 Loss,可以精确回答「需要多少数据、效果能到多少」。
具体案例:某团队计划用 1e23 FLOPs 训练开源大模型,先用 Chinchilla 算出 N≈29B、D≈580B token。已有的 1.2T 原始语料清洗去重后只剩 520B,接近目标。于是决定不再额外采购语料,省下数百万元数据采购预算,并把省下的算力用于多训一个 epoch 作消融验证。
数据团队制定质量清洗门槛
阶段:数据清洗与质量管理
解决的问题:网上爬来的数据 80% 是重复、低质、带毒的。传统思路是「越多越好」,但缩放规律告诉我们有效数据量 D_eff=q·D,低质量数据把 q 拉低,还污染模型。数据团队用质量评分管道量化 q,设置最低保留分,只保留高质量子集。
具体案例:某团队对 10T 原始网页做质量打分(去重、语言检测、困惑度过滤),设定保留前 40% 高质量样本,得到 4T 高质量数据。按幂律折算后有效数据量反而比「全量 10T 但 q=0.3」更高,训练出的 13B 模型在 MMLU 上提升 2.1 分。
技术管理者评估「再买一批数据」是否划算
阶段:资源配置与预算决策
解决的问题:老板问「再花 500 万买 2T 数据,效果能提升多少?」靠感觉回答很危险。用幂律外推:当前 1.2T 数据 Loss=2.31,加 2T 到 3.2T,算出 Loss≈2.25(约降 2.6%),再用「Loss 与任务指标的对数线性关系」折算成上线指标提升,判断 ROI 是否值得。
具体案例:某公司评估后认为 500 万买数据只能换 2.6% 的 Loss 下降,而这笔钱投入到数据质量清洗(提 q)可获得同等收益且更便宜,最终取消了采购计划,改为内部数据合成方案。
Python 演示
import math def power_law_loss(N, a=1.2, b=0.095): """幂律公式: Loss = a * N^(-b)""" return a * (N ** (-b)) def doubling_ratio(b=0.095): """数据量翻倍时 Loss 的保留比例 = 2^(-b)""" return 2.0 ** (-b) def fit_power_law(Ns, losses): """在 log-log 空间做线性回归, 拟合出 a 和 b""" x = [math.log(n) for n in Ns] y = [math.log(l) for l in losses] mx = sum(x) / len(x) my = sum(y) / len(y) sxy = sum((xi - mx) * (yi - my) for xi, yi in zip(x, y)) sxx = sum((xi - mx) ** 2 for xi in x) b = -sxy / sxx a = math.exp(my + b * mx) return a, b def chinchilla_optimal(C): """给定算力 C(FLOPs), 反推最优参数量与数据量""" n_opt = math.sqrt(C / 120.0) # C = 6ND 且 D = 20N, 故 N = sqrt(C/120) d_opt = 20.0 * n_opt # 每参数约 20 个 token return n_opt, d_opt def effective_data(D, q=0.6): """质量折算后的有效数据量""" return q * D def main(): print('=== 1. 幂律外推: 不同数据量下的 Loss ===') n = 100 while n <= 100000: print('N=%7d Loss=%.4f' % (n, power_law_loss(n))) n *= 10 print('\n=== 2. 数据翻倍收益递减 ===') for n in (100, 1000, 10000): gain = power_law_loss(n) - power_law_loss(2 * n) print('N=%7d -> 2N: Loss 下降 %.4f (保留比例 %.3f)' % (n, gain, doubling_ratio())) print('\n=== 3. 拟合幂律并在大 N 处外推 ===') ns = [100, 200, 400, 800, 1600] losses = [power_law_loss(v) for v in ns] a_fit, b_fit = fit_power_law(ns, losses) print('拟合得到 a=%.3f, b=%.3f' % (a_fit, b_fit)) print('外推 N=10000: 估算 Loss=%.4f' % (a_fit * (10000 ** (-b_fit)))) print('\n=== 4. Chinchilla 最优数据配比 ===') for C in (1e22, 1e23, 1e24): n_opt, d_opt = chinchilla_optimal(C) print('C=%.0e -> N=%.2fB 参数, D=%.2fB token' % (C, n_opt / 1e9, d_opt / 1e9)) print('\n=== 5. 质量折扣后的有效数据量 ===') raw = 10000 # 原始数据量, 单位: 亿 token for q in (1.0, 0.8, 0.5, 0.3): print('q=%.1f -> D_eff=%.0f, 预估 Loss=%.4f' % (q, effective_data(raw, q), power_law_loss(effective_data(raw, q)))) if __name__ == '__main__': main()
return a * (N ** (-b))幂律公式的直接实现,输入数据量、输出 Lossb = -sxy / sxx在 log-log 空间把幂律变直线,回归斜率取负得到指数 ba = math.exp(my + b * mx)由截距反推出缩放常数 an_opt = math.sqrt(C / 120.0)联立 C=6ND 与 D=20N,反推最优参数量d_opt = 20.0 * n_opt每参数约 20 个 token 的 Chinchilla 配比return q * D质量折扣:原始数据打折后才参与幂律计算
常见误区
误区「既然数据量和 Loss 是幂律关系,那就疯狂堆数据,堆到服务器爆炸,模型肯定越来越强。」
正解幂律意味着收益递减——数据量从 1T 加到 2T 的收益,远小于从 0 到 1T。数据量翻倍只带来约 6% 的 Loss 下降,过了收益临界点后,多加数据的性价比极低,应该转而提升质量或按配比扩大模型。
为何常见:媒体报道常强调「数据驱动」,让人误以为数据量是唯一变量,忽略了缩放规律的边际衰减。
误区「反正训练时 Loss 还在降,那就多训几个 epoch?多训几轮总比少训强。」
正解训练曲线上的 Loss 下降可能来自「背题」而非「学会规律」。重复 epoch 时唯一数据量 D 是瓶颈,模型会过拟合。Chinchilla 建议最优配比下重复不超过 1~2 个 epoch,更重要的是去重和扩充数据。
为何常见:训练日志里 Loss 一直在降,容易让人误以为模型还在进步,其实它只是把训练集背得更熟。
误区「爬来的数据 90% 是垃圾?没关系,量大管饱,模型能自己从噪声里学出规律。」
正解低质量数据会教坏模型,等效于拉低质量系数 q,使有效数据量大幅缩水。更糟的是错误标注和重复文本会把偏差放大,让模型形成系统性坏习惯。清洗后「少而精」往往优于「多而杂」。
为何常见:传统机器学习中数据量确实越多越好,很多人把这一直觉直接迁移到大模型,忽略了噪声在超大模型上被放大的风险。
误区「70B 一定比 7B 强,预算内选最大参数量的模型准没错。」
正解参数量和数据量是配对的(Chinchilla)。若数据只有 200B token,硬上 70B 参数只会欠拟合;按配比应该用约 10B 模型 + 200B 数据,或先想办法扩充数据再升级模型。基准榜上的大模型强,是因为它们的参数与数据配比更健康。
为何常见:排行榜上大模型总是靠前,让人忽略了背后的数据配比差异,以为参数量是唯一决定因素。
误区「我可是加了 2T 数据,Loss 才从 2.31 降到 2.25,这钱白花了。」
正解Loss 与任务质量是对数线性关系,Loss 的小幅下降往往对应明显的能力跃迁——比如从「完全不会写代码」到「能写可运行代码」。评价缩放收益要看相对比例(如降到原来的 97%),而不是绝对差值。
为何常见:人们习惯用绝对值衡量进步,而缩放规律的收益本就分布在对数空间里,需要换算成任务指标才知道值不值。
面试题
Q1. 大模型数据量缩放规律中,模型表现(Loss)与训练数据量 N 之间呈什么关系?
- A.线性下降关系
- B.幂律下降关系← 正确答案
- C.指数上升关系
- D.无显著关联性
答案:B。幂律下降 L=a·N⁻ᵇ 是 OpenAI 2020 年在大规模实验验证的规律。线性下降只存在于极小数据区间;大模型不会随数据量指数上升;实验数据统计显著,不存在无关关系。
Q2. 幂律公式 L=a·N^(-b) 中,b 的典型取值范围是?
- A.约 0.05 到 0.1← 正确答案
- B.约 1 到 10
- C.约 100 到 1000
- D.约 -1 到 0
答案:A。b 是幂律指数,实测典型值约 0.05~0.1,表示数据量翻倍时 Loss 只降到 2⁻ᵇ≈93%~95%。b>1 会带来超线性收益,与实验不符;b 为负数则数据越多 Loss 越高,同样不成立。
Q3. 数据量从 N 翻倍到 2N 时,Loss 大约会怎样变化?
- A.降为原来的一半
- B.降为 2 的 -b 次方← 正确答案
- C.保持数值完全不变
- D.反升为原来的 2 倍
答案:B。由 L(2N)/L(N)=2⁻ᵇ,b≈0.1 时 Loss 只降约 6.4%,远不是一半。C、D 与幂律方向矛盾,可排除。
Q4. 关于训练数据的重复使用(多 epoch),正确的说法有哪些?
- A.过拟合风险逐渐上升← 正确答案
- B.训练成本持续浪费← 正确答案
- C.数据量自动随之扩大
- D.唯一数据成为效果瓶颈← 正确答案
答案:ABD。多 epoch 会让模型记住训练集细节而过拟合,同时算力反复消耗在相同样本上;唯一数据量 D 是瓶颈,总读取量 E·D 不能替代 D。数据量不会因为重复而扩大,C 错。
Q5. 面对大量低质量训练数据,合理的处理方式有哪些?
- A.全量清洗并保留高质子集← 正确答案
- B.用质量系数折算有效量← 正确答案
- C.把低质量数据全量加入
- D.对重复样本进行去重化← 正确答案
答案:ABD。清洗去重后保留高质量子集、用质量系数 q 折算有效数据量、对重复样本去重,都是提升有效数据量的手段。低质量数据全量加入会拉低 q 甚至引入污染,因此 C 错误。
Q6. 关于 Chinchilla 最优数据配比,正确的说法有哪些?
- A.参数和数据同比扩大最优← 正确答案
- B.每参数约配 20 个 token← 正确答案
- C.模型越大效果必然越好
- D.数据越多效果必然越好
答案:AB。Chinchilla 的核心是 N 与 D 同比例缩放(D≈20N),而非单方面堆参数或堆数据。模型大但数据不足会欠拟合,数据多但模型小也是浪费,故 C、D 错误。
Q7. 按 Chinchilla 最优配比,70B 参数模型约需准备多少数据?
- A.700 亿 token
- B.1400 亿 token
- C.1.4 万亿 token← 正确答案
- D.2800 亿 token
答案:C。最优配比约为每参数 20 个 token,70B×20=1400B token,即 1.4 万亿(1.4T)。700 亿(0.07T)只有配比的 1/20,1400 亿与 2800 亿也都不足。
Q8. 已知算力预算 C,且最优配比满足 D=20N,则最优参数量 N 的表达式是?
- A.等于 C / 120
- B.等于 C / 6
- C.等于 C 的平方根
- D.等于 C/120 的平方根← 正确答案
答案:D。由 C=6ND 和 D=20N 消元得 C=120N²,两边开平方即 N=√(C/120)。A、B 把中间结果当最终答案,C 忽略了 120 的系数,均错误。
Q9. 数据量缩放中「幂律外推」的正确理解是什么?
- A.用已拟合规律预测将来← 正确答案
- B.用更多 epoch 逼近收敛
- C.用更大模型重做拟合
- D.用学习率曲线做推断
答案:A。幂律外推是把拟合出的 L=a·N⁻ᵇ 代入更大的数据量 N,预测未来 Loss,这是规划数据规模的主要工具。多训 epoch、换模型、看学习率都与外推无关。
Q10. 算力预算变为原来的 4 倍时,Chinchilla 最优参数量与数据量分别约为?
- A.变为原来的 4 倍
- B.变为原来的 2 倍← 正确答案
- C.变为原来的 1.41 倍
- D.保持现有规模不变
答案:B。Chinchilla 下 N∝C^0.5、D∝C^0.5。C 变为 4 倍时,参数量和数据量都乘以 √4=2。1.41 倍对应算力变 2 倍的情形,4 倍对应「只放大单一要素」的误解。