ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Transformer】Scaling_Law_大模型涌现能力的规律

【Transformer】Scaling_Law_大模型涌现能力的规律 文章目录一、Scaling Law 到底想解决什么问题二、先用一个玩具例子理解幂律下降三、为什么 loss 是核心观测指标四、Kaplan Scaling Law扩大规模通常会稳定降低 loss五、Chinchilla Law不是只做大模型而是平衡参数和数据六、训练 FLOPs 公式怎么用七、用小实验拟合自己的 Scaling 曲线八、涌现能力为什么像是突然出现九、训练最优不等于推理最优十、数据质量会改变曲线十一、Scaling Law 在工程流程里怎么落地十二、一个面向开发者的判断练习十三、常见误区十四、你应该记住的判断框架总结大模型视角下一篇摘要Scaling Law 不是一句“大模型越大越好”的口号而是一套用实验曲线指导预算分配的方法。它关心的问题很朴素给定训练算力参数量应该多大数据 token 应该多少继续扩大模型还值不值为什么 loss 看起来平滑下降而有些能力却像突然出现本文会从一个可运行的幂律曲线小实验讲起解释 Kaplan Scaling Law、Chinchilla Law、训练 FLOPs、涌现能力、训练最优和推理最优之间的关系。读完后你不需要能设计千亿参数训练计划但应该能看懂“参数、数据、算力、loss”这四件事为什么总是被放在一起讨论。前置知识交叉熵最优化 PPL GPT 系列演进阅读时间约 55 分钟代码环境Python 3.10numpy 1.24入门导读先抓住主线如果你第一次读 Scaling Law最容易被两个词带偏一个是“Law”一个是“涌现”。前者容易让人以为它像牛顿定律一样精确后者容易让人以为模型到了某个规模就会自动打开神秘开关。实际不是这样。更贴近工程实践的理解是Scaling Law 是研究者用大量训练实验拟合出来的经验趋势。它告诉我们在某个模型结构、数据分布、训练方法和评估集范围内随着参数、数据和计算量增加语言建模 loss 通常会以比较平滑的方式下降。它不能保证某个能力必然出现但可以帮助团队少做一些昂贵的盲目尝试。读完先达到这个程度就够了能解释 Scaling Law 为什么同时讨论参数量、训练 token 和算力能理解 loss 的幂律下降意味着“收益稳定但边际收益递减”能用C ≈ 6ND粗略估算训练成本能说清楚 Chinchilla Law 为什么强调“数据不够模型再大也不划算”能谨慎理解“涌现能力”它可能是真实能力跃迁也可能被评测方式放大能区分训练时的 compute-optimal 和部署时的 inference-optimal。带着这 3 个问题读如果预算固定是该训练更大的模型还是喂更多 tokenloss 明明是连续下降为什么某些能力看起来像突然出现训练最优的模型为什么不一定是线上服务最划算的模型一、Scaling Law 到底想解决什么问题训练一个大模型之前团队会面对一组非常具体的问题训练 7B、13B、34B 还是 70B数据准备 500B token、1T token 还是 10T token预算不够时是缩小模型还是减少训练 token已经训练了一个模型继续加数据还有收益吗做更大模型带来的效果提升能不能覆盖训练成本和推理成本这些问题不能只靠直觉回答。因为直觉经常会犯两种错误。第一种错误是只盯着参数量。看到一个模型参数更大就以为它一定更强。但如果训练 token 不够模型可能只是“容量很大却没被充分训练”。第二种错误是只盯着数据量。数据越多当然重要但模型容量太小也可能装不下数据里的复杂模式继续喂数据的收益会变低。Scaling Law 的价值就在这里它把这些问题变成一组可观测、可拟合、可比较的关系。常见讨论里会出现四个变量变量含义你可以怎么理解N模型参数量模型容量能表示多少模式D训练 token 数模型看过多少训练信号C训练计算量大致由参数量和 token 数共同决定Lloss模型对下一个 token 的平均预测难度Scaling Law 不是直接预测“模型会不会写代码、会不会推理、会不会用工具”。它通常先预测更基础的语言建模 loss。然后研究者再观察loss 降低与下游能力提升之间有什么关系。这点很关键。Scaling Law 的第一层目标是预算和训练决策不是玄学式预测智能。二、先用一个玩具例子理解幂律下降很多 Scaling Law 曲线会呈现类似幂律下降的形状。我们先不看论文里的复杂形式用一个简化公式感受一下L ( N ) a ⋅ N − α c L(N) a \cdot N^{-\alpha} cL(N)a⋅N−αc这里L ( N ) L(N)L(N)是模型规模为N NN时的 lossa aa控制曲线整体高度α \alphaα控制 loss 随规模下降的速度c cc可以理解成某种不可约误差或当前条件下很难继续下降的部分。不要把这个公式当成真实训练公式。它只是帮助你看懂“规模增加loss 下降但下降越来越慢”的形状。importnumpyasnp# 假设 scale 表示相对规模1、3、10、30、100、300scalesnp.array([1,3,10,30,100,300],dtypefloat)# 一个玩具幂律曲线不代表真实模型loss2.0*scales**(-0.12)0.5previousNonefors,linzip(scales,loss):ifpreviousisNone:gain0.0else:gainprevious-lprint(fscale{s:6.0f}, loss{l:.4f}, gain_vs_prev{gain:.4f})previousl你会看到两个现象。所以 Scaling Law 的工程含义不是“越大越好”而是“扩大规模通常有效但你要算收益是否值得。”三、为什么 loss 是核心观测指标在语言模型预训练里最常见的目标是预测下一个 token。模型看到前面的 token输出下一个 token 的概率分布。训练时用交叉熵衡量预测有多差。简化写法是L − 1 T ∑ t 1 T log ⁡ p ( x t ∣ x t ) L -\frac{1}{T}\sum_{t1}^{T}\log p(x_t \mid x_{t})L−T1​t1∑T​logp(xt​∣xt​)这句话可以翻译成大白话模型每一步都在猜下一个 token。如果它给真实 token 的概率越高loss 越低如果它总是猜得不确定loss 就高。为什么 Scaling Law 经常用 loss而不是直接用“考试分数”原因有三个。第一loss 在训练过程中持续可观测。你不需要等模型训练完做一堆下游任务训练中就能看到曲线。第二loss 是相对通用的指标。不同下游任务差异很大但语言建模 loss 能给出一个基础能力信号。第三loss 比很多离散任务分数更平滑。比如一道题答对得 1 分答错得 0 分模型从“完全不会”到“差一点会”的过程在分数上可能看不出来但在 token 概率上loss 可能已经下降了。当然loss 不是万能指标。一个模型 loss 更低不代表它在所有产品任务上都更好。特别是对齐、安全、工具调用、长上下文、事实性、代码执行等能力需要额外评估。但在预训练预算阶段loss 是最重要的仪表盘之一。四、Kaplan Scaling Law扩大规模通常会稳定降低 loss早期 GPT 路线的重要经验之一是当模型结构和训练方法相对稳定时扩大模型规模、数据规模和计算量loss 会出现可预测的下降趋势。这类工作给行业带来了一个非常强的信号语言模型不是只能靠手工设计任务技巧提升单纯扩大预训练规模也能带来持续收益。它改变了很多团队的判断方式。在更早的 NLP 时代大家常常围绕具体任务设计特征、结构和训练技巧。进入大模型时代后团队开始更重视这样的问题数据能否扩大一个数量级训练集质量能否稳定模型结构能否支持更大规模训练分布式训练能否稳定跑完扩大规模后 loss 是否沿着预期曲线下降这就是 GPT-3 时代带来的关键变化上下文学习、少样本能力和生成能力的提升让大家意识到“规模本身”是一种能力来源。但早期 scaling 经验也有一个问题很多模型相对更偏向“大参数、少 token”。换句话说模型很大但没有用足够多的数据把它训练充分。这就引出了 Chinchilla Law。五、Chinchilla Law不是只做大模型而是平衡参数和数据Chinchilla 的核心启示可以用一句话概括在给定训练算力下很多大模型并不是参数不够而是训练 token 不够。这句话对初学者很重要因为它纠正了一个常见误解Scaling Law 不等于“参数越大越先进”。假设你有固定训练预算。你可以有两种选择训练一个非常大的模型但只让它看较少 token训练一个稍小的模型但让它看更多 token。哪一个更好直觉上很多人会选前者因为参数大看起来更强。但 Chinchilla 的结果说明在很多计算预算下后者可能更 compute-optimal模型小一点但数据更充分最终 loss 反而更低。我们可以用一个极简预算枚举感受这个问题。假设训练计算量粗略满足C ≈ 6 N D C \approx 6NDC≈6ND其中C CC是训练 FLOPsN NN是参数量D DD是训练 token 数系数 6 是常见粗略估算真实值会随架构和实现变化。如果C CC固定参数N NN变大训练 tokenD DD就必须变小反过来训练 token 变多参数就要变小。deftokens_under_budget(compute_flops,params_billion):在 C≈6ND 下给定训练 FLOPs 和参数量估算可训练 token 数。Nparams_billion*1e9Dcompute_flops/(6*N)returnD/1e9compute3e22# 一个玩具预算不代表实际项目forparams_bin[1,3,7,13,30,70]:tokens_btokens_under_budget(compute,params_b)print(fparams{params_b:2}B - train_tokens≈{tokens_b:8.1f}B)这段代码表达的不是“哪个参数量最好”而是让你看到预算约束算力固定时你不能同时无限增大参数和数据。Chinchilla Law 的工程意义是训练计划要同时考虑参数量和 token 数。一个 70B 模型如果只看了很少数据可能不如一个更小但训练更充分的模型。许多后续模型在设计训练配比时都会参考这种思路。六、训练 FLOPs 公式怎么用C ≈ 6ND是大模型训练中经常出现的粗略估算。它适合用来做早期量级判断。我们写一个简单函数把参数量和 token 数转成训练 FLOPsdefestimate_train_flops(params_billion,tokens_billion):Nparams_billion*1e9Dtokens_billion*1e9return6*N*D configs[(1,300),(7,1000),(13,1400),(70,2000),]forparams_b,tokens_binconfigs:flopsestimate_train_flops(params_b,tokens_b)print(f{params_b:2}B params,{tokens_b:4}B tokens - FLOPs≈{flops:.2e})你可以把这个函数当成一个预算计算器。它至少能帮你建立三个直觉。第一参数翻倍训练 FLOPs 近似翻倍。第二训练 token 翻倍训练 FLOPs 也近似翻倍。第三大模型训练贵不只是因为参数多也因为每个 token 都要经过整个模型。真实训练还会有很多额外因素激活重计算、通信开销、并行策略、优化器状态、硬件利用率、训练稳定性、数据加载、容错重启等。但在战略层面6ND已经足以解释为什么大模型训练是高成本工程。七、用小实验拟合自己的 Scaling 曲线成熟团队不会一上来就训练最终规模模型。更常见的做法是先训练一组小模型观察 loss 是否沿着预期趋势下降再外推更大规模的收益。我们用一组模拟数据演示这个过程。假设你已经训练了几个不同规模的小模型拿到了验证集 lossimportnumpyasnp# 模拟实验结果参数规模和验证 lossparams_millionnp.array([50,100,200,500,1000,2000],dtypefloat)val_lossnp.array([3.21,3.02,2.84,2.61,2.45,2.31],dtypefloat)# 幂律 L a * N^-alpha c 不容易直接线性拟合。# 为了教学简单先忽略 c拟合 log(L) log(a) - alpha * log(N)。xnp.log(params_million)ynp.log(val_loss)slope,interceptnp.polyfit(x,y,deg1)alpha-slope anp.exp(intercept)print(ffitted: loss ≈{a:.3f}* N^(-{alpha:.3f}))fortarget_min[3000,7000,13000]:preda*target_m**(-alpha)print(fpredict params{target_m:5}M - loss≈{pred:.3f})这个例子非常简化真实拟合会更严谨会同时考虑参数量、数据量和计算量会引入不可约 loss 项会使用更多实验点会检查不同数据集上的一致性会关注训练是否充分、是否欠训练、是否过拟合不会随便外推到远超实验范围的规模。但这个小实验足以说明 Scaling Law 的工作方式先做小规模可控实验再拟合趋势最后用趋势辅助大规模训练决策。它不是拍脑袋也不是神谕而是昂贵训练之前的工程风控。八、涌现能力为什么像是突然出现“涌现能力”是 Scaling Law 讨论中最容易被误解的部分。有些任务上小模型表现接近随机模型规模增加到某个点后分数突然明显上升。于是人们说这个能力在大模型中“涌现”了。这件事可能有真实的一面。模型规模扩大后确实可能组合出更复杂的能力例如多步推理、少样本泛化、指令理解、代码生成等。小模型没有足够容量和训练信号时这些能力不明显规模扩大后能力开始可见。但它也可能被评测方式放大。看一个简单例子。假设模型对正确答案的概率是连续提升的但评测指标是“答对/答错”。只要概率没超过某个阈值分数就一直是 0一旦超过阈值分数突然变成 1。importnumpyasnp# 假设模型内部能力是连续提高的scalenp.array([1,2,4,8,16,32,64],dtypefloat)confidence1/(1np.exp(-(np.log2(scale)-4)))# 评测规则是离散的置信度超过 0.5 才算答对score(confidence0.5).astype(int)fors,c,scinzip(scale,confidence,score):print(fscale{s:4.0f}, confidence{c:.3f}, discrete_score{sc})输出里你会看到confidence是平滑增长的但discrete_score可能突然跳变。这就是为什么讨论涌现能力时要谨慎。它可能来自真实能力组合也可能来自指标阈值、样本选择、prompt 格式、解码策略、评分方式等因素。这个观点不是本文的原创而是学术界近几年的重要讨论Wei et al., 2022,“Emergent Abilities of Large Language Models”系统地记录了某些任务在小模型上接近随机、跨过某个规模后突然显著提升的现象是涌现能力这个说法流行的源头Schaeffer et al., 2023,“Are Emergent Abilities of Large Language Models a Mirage?”NeurIPS 2023 最佳论文明确指出Wei 观察到的很多所谓突现本质是评测指标本身离散Exact Match、多选题准确率等造成的指标假象——如果换成对数概率、Brier score 等连续指标去衡量同一批模型的能力其实是平滑连续增长的并没有真正的相变。工程上比较稳妥的做法是观察一个能力是否涌现时同时看离散指标用户视角和连续指标模型视角再判断跳变来自模型能力本身还是评测方式。更稳妥的表达是模型规模扩大后某些复杂能力可能在评测中表现出非线性提升这种现象值得重视但不能简单理解成“到某个参数量就必然拥有某能力”研究和工程上都需要用更细的指标观察能力是连续增强还是确实存在结构性跃迁。九、训练最优不等于推理最优Chinchilla 讨论的是训练计算预算下的最优配比。但线上部署时还有另一个重要问题推理成本。假设有两个模型模型参数量训练 token训练视角部署视角A70B较少可能欠训练单次推理昂贵B13B更多可能更 compute-optimal单次推理便宜如果只看训练预算B 可能更划算。但如果任务非常复杂A 的质量优势可能值得更高推理成本。反过来如果系统每天要处理上亿次请求哪怕 A 的效果略好也可能因为延迟和显存成本无法接受。部署时至少要考虑这些因素单次请求延迟每秒 token 吞吐GPU 显存占用KV Cache 对长上下文和高并发的影响量化后质量下降是否可接受是否能用蒸馏、小模型路由、RAG 或工具调用降低成本用户愿意为质量提升付多少钱。这就是为什么大模型工程里会同时出现两条路线。一条路线继续做更强的基础模型因为它们能探索能力上限。另一条路线做小模型、蒸馏、量化、MoE、缓存、RAG、投机解码和路由因为真实系统要控制推理成本。Scaling Law 帮你决定怎么训练但产品落地还要回答怎么服务。十、数据质量会改变曲线如果只看公式很容易误以为 token 数越多越好。但训练 token 不是沙子不能只按重量算。同样是 1T token质量差异可能非常大是否有大量重复内容是否包含模板化垃圾文本是否混入乱码、广告、采集噪声是否存在评测集污染是否覆盖目标语言和目标领域代码、数学、对话、百科、网页、论文等比例是否合理tokenizer 对目标语言是否友好数据过滤是否误删了高价值内容。低质量数据会带来两个问题。第一模型可能把容量浪费在噪声上。它学到的不是语言和知识结构而是重复模板、采集痕迹和错误模式。第二Scaling 曲线可能失真。你以为扩大 token 没有收益其实是数据质量太差你以为某个模型能力很强其实可能是评测数据被污染。所以真实训练里“数据工程”不是预处理小事而是 Scaling Law 能不能成立的前提之一。十一、Scaling Law 在工程流程里怎么落地如果把 Scaling Law 放进一个真实团队的训练流程大概会长这样。第一步确定目标。比如主要做中文问答、代码助手、数学推理、企业知识库还是通用聊天。目标不同数据配比和评估集会不同。第二步准备多档小规模实验。例如训练 100M、300M、1B、3B 几个模型或者固定参数量改变数据量。第三步确保实验可比。模型结构、tokenizer、数据清洗、优化器、学习率策略、batch size、训练步数都要尽量受控否则 loss 差异可能不是规模造成的。第四步拟合趋势。观察 loss 是否随参数、数据和计算量稳定下降如果某个点异常要检查训练是否不稳定、数据是否有问题、配置是否不合理。第五步做预算决策。根据曲线估算更大模型的收益再结合训练成本和推理成本决定最终规模。第六步做下游验证。语言建模 loss 只是基础指标还要看指令跟随、事实性、代码、数学、安全、长上下文、多轮对话等任务。第七步上线后继续优化。真实用户请求会暴露评测集没有覆盖的问题后续可能需要数据再训练、SFT、DPO/RLHF、蒸馏、RAG 或系统工程优化。这里最重要的不是记住某个公式而是形成一种训练决策习惯先用小实验建立趋势再花大钱。十二、一个面向开发者的判断练习假设你所在团队有一笔固定训练预算打算训练一个领域模型。现在有三个候选方案方案参数量训练 token直觉优势主要风险A30B300B参数大表达能力强token 偏少可能欠训练推理贵B13B1T参数和数据较平衡上限可能低于更大模型C7B2T数据充分部署便宜容量可能不足如果只是写宣传稿很多人会选 A因为参数最大。如果从 Scaling Law 和工程落地看答案没那么简单。你至少要问目标任务是否真的需要 30B领域数据是否足够高质量13B 在小规模实验中的 loss 曲线是否明显优于 7B30B 的推理成本能否被业务收益覆盖是否可以用 13B 或 7B 加 RAG、工具调用、蒸馏来达到目标是否有足够评估集证明更大模型真的更好这个练习说明Scaling Law 不是替你做决定而是让你的问题问得更具体。十三、常见误区误区 1Scaling Law 证明模型越大永远越好。规模扩大通常有收益但收益不是免费的。训练成本、推理成本、数据质量、延迟和产品目标都要一起算。误区 2参数量就是模型能力。参数量只是容量。没有足够数据、训练策略和对齐流程参数量不会自动变成可用能力。误区 3Chinchilla 说明所有模型都应该更小。Chinchilla 强调的是在给定训练算力下平衡参数和 token不是说小模型一定更好。误区 4涌现能力是可精确预测的开关。某些能力可能随着规模出现非线性提升但具体出现在哪个规模、是否稳定出现、是否由评测方式造成都需要实证。误区 5只看预训练 loss 就能决定模型好坏。预训练 loss 很重要但真实模型还要看指令跟随、安全性、事实性、长上下文、代码、数学、工具调用和部署成本。误区 6数据越多一定越好。低质量、重复、污染或领域不匹配的数据会拖累训练效果。Scaling Law 默认你有相对稳定、可控的数据分布。十四、你应该记住的判断框架以后看到一个大模型发布时你可以用下面这组问题快速判断信息密度它的参数量是多少是 dense 还是 MoE它训练了多少 token数据质量和语言比例有没有说明它大概用了多少训练计算量它的 loss 或基础评估是否随规模稳定提升它是否只是训练最优还是推理也划算它的能力提升来自预训练规模、数据质量、SFT、RLHF/DPO还是系统增强它的评测是否可能被污染或被 prompt 技巧放大这套问题会让你从“看参数量热闹”转向“看训练和部署逻辑”。总结Scaling Law 描述的是模型规模、训练数据、计算量和 loss 之间的经验关系。它的核心价值不是神化大模型而是帮助我们在昂贵训练前做预算分配和收益预估。Kaplan 一类早期 Scaling Law 让行业看到扩大模型、数据和计算通常能稳定降低语言建模 loss。Chinchilla 进一步提醒我们给定训练算力时模型不能只大训练 token 也必须足够。涌现能力说明规模可能带来非线性表现但它不能被理解成可精确控制的魔法开关。工程上还必须区分训练最优和推理最优因为线上服务面对的是延迟、吞吐、显存和成本。第一遍记住一句话Scaling Law 不是告诉你无脑做大而是帮助你在参数、数据、算力和成本之间做理性取舍。大模型视角后面你再看预训练数据配比、LLaMA/Qwen 这类开源模型、MoE、蒸馏、量化、RAG 和推理优化时会反复遇到 Scaling Law 的影子。它解释了为什么基础模型训练要烧大量算力也解释了为什么落地系统不可能只追求参数更大。真正成熟的大模型工程是一边探索规模带来的能力上限一边用数据、算法和系统优化把成本压到可用范围。下一篇上下文长度扩展技术综述—— 模型规模决定能力上限的一部分上下文长度决定模型一次能读多少信息。下一篇我们会看为什么长上下文不是简单调大max_length以及位置编码、Attention、KV Cache 和评估体系分别卡在哪里。
返回列表