首页/知识库/Scaling Laws 缩放定律:从原理到大规模训练的完整技术体系

Scaling Laws 缩放定律:从原理到大规模训练的完整技术体系

📊机器学习高级✍️ AI Master📅 创建 2026-05-26📖 28 min 阅读
💡

文章摘要

深入理解 AI 模型性能如何随模型规模、数据量和计算资源缩放,从 Kaplan 到 Chinchilla 再到后 Chinchilla 时代的完整技术演进

前置阅读建议

Scaling Laws(缩放定律) 是人工智能领域最重要的经验规律之一。它回答了一个根本性问题:当我们增大模型、增加数据、投入更多计算资源时,模型的性能会如何变化? 这个问题的答案直接指导了 GPT-4、Claude、Gemini 等现代大语言模型的训练决策。

缩放定律的核心发现是:模型的对数损失(log loss)与模型参数量、训练数据量和计算预算之间存在平滑的幂律关系。 这意味着我们可以通过小规模实验外推大规模训练的效果,从而在投入数百万美元算力之前做出科学的训练决策。

本文将从 Kaplan 2020 年的开创性工作讲起,经 Chinchilla 2022 年的突破,再到 2024-2026 年后 Chinchilla 时代的新发现,构建完整的缩放定律知识体系。

图表加载中…

本文涉及神经网络基础、训练流程和损失函数概念,建议先阅读「神经网络基础:从感知机到多层网络」(dl-001)和「信息论基础」(math-006),理解交叉熵损失和梯度的含义。

本文讨论的是语言模型训练的缩放规律,与硬件部署、推理优化等话题无直接关系。请勿将「训练阶段的最优缩放」与「推理阶段的成本优化」混淆。

1什么是缩放定律:核心概念与历史背景

缩放定律的研究灵感来自物理学。在物理学中,标度律描述了系统在尺度变化时的行为规律——例如,为什么大象的腿必须比老鼠的腿更粗(相对于体重的比例)。在 AI 领域,缩放定律描述的是模型性能如何随规模变化

在 2020 年之前,社区对「大模型一定更好」更多是直觉判断,缺乏定量指导。Kaplan 等人的开创性论文首次给出了精确的数学描述,证明了模型损失随规模变化的平滑幂律关系——这意味着增大模型不会遇到突然的「性能墙」,而是持续、可预测地改进。

理解缩放定律的关键前提: 我们衡量模型性能的指标是交叉熵损失(cross-entropy loss)。这是一个信息论概念——损失越低,模型对下一个 token 的预测越准确。交叉熵损失与模型的困惑度(perplexity)一一对应:loss 降低 0.1 大约相当于困惑度减少 10%。

图表加载中…

缩放定律是经验规律,不是理论推导。它来自于对大量实验数据的拟合——先做实验,再找规律,最后用数学公式描述。这种「自底向上」的研究范式是实验 AI 科学的典型做法。

缩放定律描述的是平均趋势,不适用于单个模型。一个 70B 参数的模型不一定比 65B 的好——定律说的是:如果你训练一系列模型并取平均,70B 的平均表现会更好。

2Kaplan 2020:三大独立缩放定律

Kaplan 等人在 2020 年发表的论文《Scaling Laws for Neural Language Models》首次系统性地研究了模型缩放行为。他们的核心实验方法是:固定两个变量,只改变一个变量,观察损失的变化。

第一条定律:模型大小定律(固定数据集和训练步数)。 当数据集大小和训练步数固定时,模型损失随参数量 N 呈幂律下降:L(N) = (N_c / N)^alpha。其中 alpha 约等于 0.076,N_c 是一个常数。这意味着模型越大损失越小,但改进速度递减——从 1B 到 10B 的提升远大于从 100B 到 1000B。

第二条定律:数据集大小定律(固定模型和训练步数)。 当模型大小和训练步数固定时,损失随训练数据量 D 同样呈幂律下降:L(D) = (D_c / D)^alpha,alpha 约等于 0.095。这说明增加训练数据也能持续降低损失,且数据量的缩放指数略高于模型参数量。

第三条定律:计算量定律(固定计算预算)。 当总计算量(以 FLOPs 计,大约等于 6 * N * D)固定时,损失随计算量 C 呈幂律下降:L(C) = (C_c / C)^kappa,其中 kappa 约等于 0.053。这条定律最关键——它告诉我们如何在有限算力下做取舍。

Kaplan 的核心结论(后来被 Chinchilla 修正): 模型参数量的重要性高于数据量。当计算预算固定时,最优策略是用大模型、少数据——参数量应该分配约 85% 的算力,数据量只占 15%。这个结论直接影响了 GPT-3 的训练策略。

图表加载中…

Kaplan 论文中提到的 FLOPs 计算方式:一次前向传播大约需要 2 * N 次浮点运算(N 是参数量),一次完整的训练迭代(前向+反向)大约需要 6 * N 次。这个 6 倍系数是业界共识,也是估算训练成本的基础公式。

Kaplan 定律假设模型训练到收敛。如果训练步数不够(欠训练),模型没有充分发挥容量,那么观测到的损失会高于定律预测值。这也是 Chinchilla 重新审视该假设的切入点。

3Chinchilla 2022:计算最优缩放定律

DeepMind 在 2022 年发表的《Training Compute-Optimal Large Language Models》论文,推翻了 Kaplan 的核心结论,发现了计算最优(Compute-Optimal) 的缩放规律。

核心发现:Kaplan 的结论之所以「偏差」,是因为他们的实验设计中模型没有训练到收敛。 当一个模型给定计算预算后,应该训练多少步、用多少数据?Kaplan 假设「训练到收敛」,但实际实验中他们的模型大多处于欠训练状态。在这种状态下,增大模型看起来比增加数据更有效——但这只是因为大模型「欠训练的程度更严重」,而不是它真的更好。

Chinchilla 的实验方法: 对每个计算预算,他们训练了超过 400 个模型,遍历了不同的参数量和数据量组合,确保每个模型都训练到收敛。然后找到损失最小的那个配置——这就是计算最优配置

Chinchilla 的关键公式:最优数据量 D 与最优参数量 N 的关系是 D 约等于 20 * N。 具体来说,给定计算预算 C = 6 * N * D,最优配置是 N 约等于 C 的 0.5 次方除以根号 120,D 约等于 N * 20。

最直观的理解:当计算预算翻倍时,参数量和训练数据量都应该翻倍。 而不是像 Kaplan 建议的那样主要增大模型。这个发现直接导致了 Chinchilla 模型的成功——一个 70B 参数、用 1.4T token 训练的模型,性能超过了用相同算力训练的 280B 参数、用 300B token 训练的 Gopher 模型。

对业界的影响: Chinchilla 论文发表后,整个行业重新审视了训练策略。LLaMA、PaLM 等后续模型都采用了更接近 Chinchilla 最优比例的训练配置。Chinchilla-optimal 成为了一个标准术语——当你说一个模型是 Chinchilla-optimal 时,意味着它的参数量和数据量比例符合 Chinchilla 的计算最优缩放定律。

图表加载中…

Chinchilla 比例(20 倍 token)在实践中是一个很好的起点,但并非绝对。如果你的数据质量极高(如代码、数学),可能用更少的数据就能达到相同效果。反之,如果数据噪声大,可能需要更多数据。

Chinchilla 定律的适用前提是「从头预训练」。如果你在做微调(fine-tuning)或指令调优(SFT),Chinchilla 比例不适用——这些阶段的缩放规律与预训练完全不同。

4GPT-3 的缩放偏差:为什么大模型 + 少数据不是最优

GPT-3 的训练策略正是基于 Kaplan 的结论——用大模型(1750 亿参数)+ 相对较少的数据(约 3000 亿 token)。这个配置偏离了 Chinchilla 最优比例近 10 倍。

GPT-3 的偏差分析: 按照 Chinchilla 的 20 倍比例,1750 亿参数的模型应该用约 3.5 万亿 token 训练才达到计算最优。但 GPT-3 只用了约 3000 亿 token——仅为最优量的不到十分之一。这意味着 GPT-3 的 1750 亿参数中,有相当大一部分没有被充分利用——模型容量过剩,但数据不足以让它充分学习。

为什么 GPT-3 仍然表现好? 因为 1750 亿参数即使在欠训练状态下,其绝对性能仍然远超小模型。缩放定律告诉我们,即使偏离最优比例,增大模型仍然能降低损失——只是效率不够高。如果用相同的计算预算训练一个更接近 Chinchilla 最优的模型,可以获得更好的性能。

LLaMA 的修正: Meta 的 LLaMA 系列明确参考了 Chinchilla 比例。LLaMA-1 的 65B 版本用了 1.4 万亿 token(约 21.5 倍),LLaMA-2 的 70B 版本用了 2 万亿 token(约 28.6 倍)。这些比例显著更接近 Chinchilla 最优,使得 LLaMA 系列在相同算力下取得了超越 GPT-3 的性能。

在实际项目中,如果你只有有限的高质量数据,不必强行凑到 20 倍比例。更好的策略是:先用现有数据做 Chinchilla 比例下的最大模型,然后尝试增加高质量数据——这是更经济的改进路径。

不要机械套用 Chinchilla 比例。该定律基于纯文本预训练的实验,如果你的训练数据包含代码、多模态或其他特殊类型,最优比例可能会有所不同。应通过小规模实验验证适合你场景的缩放曲线。

5后 Chinchilla 时代:2024-2026 年的新发现

Chinchilla 之后,缩放定律的研究并未停止。2024-2026 年间,研究者发现了多个重要的修正和扩展。

B-sharpening(偏差尖锐化): Hoffmann 等人后续研究发现,在更大规模下,模型损失的缩放曲线实际上比 Chinchilla 预测的更陡峭——这意味着在极大规模下,缩放效果可能比预期更好。这一发现为「继续做大模型」提供了理论支撑。

训练动态缩放(Training Dynamics): 研究者发现,在训练过程中,损失下降的轨迹本身也遵循可预测的规律。这意味着我们可以在训练早期(比如完成 1% 的总训练步数时)就预测最终的损失值,从而决定是否继续训练——这为训练早停(early stopping) 提供了科学依据。

多模态缩放定律: 随着视觉-语言模型的兴起,研究者开始研究多模态模型缩放规律。初步发现表明,图像 token 和文本 token 的缩放指数不同——视觉模态的缩放更陡峭,意味着增加视觉数据对多模态模型的性能提升可能比增加文本数据更有效。

推理能力与缩放的脱节: 一个重要的发现是,数学推理、代码生成等复杂任务的缩放规律与语言建模损失不完全一致。某些模型在损失相同的情况下,推理能力差异显著。这说明单一损失指标无法完全刻画模型能力——我们需要更多维度的缩放度量。

数据质量缩放: 2025-2026 年的研究表明,数据质量的缩放效果可能超过数据数量的缩放效果。用 1 万亿高质量 token 训练的模型,性能可能超过用 3 万亿普通 token 训练的模型。这促使行业从「追求数据量」转向「追求数据质」。

图表加载中…

关注数据质量缩放的最新进展。如果你在做预训练或继续预训练(continued pre-training),优先考虑数据清洗和筛选,而不是盲目增加数据量。高质量的小数据集 > 低质量的大数据集。

多模态缩放定律仍处于早期研究阶段,不同论文给出的结论差异较大。在实际应用中,应以实验验证为准,不要直接套用某个论文的缩放公式。

6缩放定律的数学基础:幂律与拟合

缩放定律的数学形式是幂律(power law):y = a * x 的负 b 次方。取对数后变为线性关系:log(y) = log(a) - b * log(x)。这就是为什么在双对数坐标系中,缩放曲线表现为一条直线。

完整的损失函数形式: Kaplan 提出的联合缩放定律将损失分解为三个部分:L(N, D) = E + (N_c / N)^alpha + (D_c / D)^beta。其中 E 是不可约误差(irreducible error)——即使模型无限大、数据无限多,损失也无法降到 E 以下。这个 E 反映了数据本身的熵——语言中固有的不确定性。

拟合缩放曲线的步骤: 第一步,选择一组不同的 N 和 D 组合;第二步,对每个组合训练模型并记录最终损失;第三步,在双对数坐标系中画点;第四步,用最小二乘法拟合直线;第五步,得到缩放指数 alpha 和 beta。

参数估计的数值范围: 在 Kaplan 的实验中,alpha 约等于 0.076,beta 约等于 0.095,E 约等于 1.69(对应 GPT-2 级别模型的极限损失)。这些数值的具体大小取决于词表大小、数据分布等因素,但数量级是稳定的。

为什么是幂律而不是其他形式? 幂律是复杂系统中的常见模式——从城市规模到地震频率,从网络连接到模型缩放。其根本原因在于神经网络的表征能力随规模增长的方式:每增加一个参数,模型获得的「新能力」递减,但永不归零。这种「永不归零的递减」恰好就是幂律的特征。

python
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

def scaling_law(N, E, Nc, alpha):
    return E + (Nc / N) ** alpha

model_sizes = np.array([1e6, 10e6, 100e6, 1e9, 10e9, 100e9])
losses = np.array([3.2, 2.8, 2.4, 2.1, 1.85, 1.65])

params, _ = curve_fit(scaling_law, model_sizes, losses, p0=[1.5, 1e8, 0.08])
E_fit, Nc_fit, alpha_fit = params

print(f"不可约误差 E = {E_fit:.3f}")
print(f"特征规模 Nc = {Nc_fit:.2e}")
print(f"缩放指数 alpha = {alpha_fit:.3f}")

predicted_loss_1t = scaling_law(1e12, E_fit, Nc_fit, alpha_fit)
print(f"1T 参数模型预测损失 = {predicted_loss_1t:.3f}")

N_range = np.logspace(6, 12, 100)
plt.figure(figsize=(10, 6))
plt.loglog(model_sizes, losses, 'ro', label='实验数据')
plt.loglog(N_range, scaling_law(N_range, E_fit, Nc_fit, alpha_fit),
           'b-', label=f'拟合: L(N) = {E_fit:.2f} + ({Nc_fit:.0e}/N)^{alpha_fit:.3f}')
plt.xlabel('参数量 N')
plt.ylabel('交叉熵损失 L(N)')
plt.title('缩放定律验证:模型规模 vs 损失')
plt.legend()
plt.grid(True, alpha=0.3)
plt.savefig('scaling_law_fit.png', dpi=150)
print("缩放曲线图已保存为 scaling_law_fit.png")

如果你想在自己的实验中验证缩放定律,建议至少训练 5 个不同规模的模型(覆盖 1 个数量级),用双对数坐标画散点图,然后用线性回归拟合。如果 R 方大于 0.95,说明幂律拟合良好。

拟合缩放曲线时,不要包含太小规模的模型(比如参数量少于 100 万)。小模型的行为与大模型有质的差异——它们可能处于「欠参数化」 regime,缩放规律不同。只在你关心的规模范围内拟合。

7缩放定律的实践应用:如何指导训练决策

缩放定律最大的价值不在于学术意义,而在于指导实际的训练决策。当你准备投入数百万美元训练一个大模型时,缩放定律是最可靠的预算规划工具。

场景一:给定计算预算,如何选择模型大小和数据量? 使用 Chinchilla 公式:N 约等于 sqrt(C / 120),D 约等于 20 * N。例如,如果你有 10 的 23 次方 FLOPs 的计算预算,最优参数量约为 90 亿,最优数据量约为 1800 亿 token。

场景二:评估「再大一倍模型」是否值得。 用缩放定律外推:如果模型参数翻倍,损失大约降低 alpha * log(2) ≈ 0.076 * 0.693 ≈ 0.053。这个损失降低是否值得双倍的算力投入?如果你的业务指标(如准确率、用户满意度)对损失的敏感度足够高,就值得。

场景三:训练到一半,该继续还是停止? 用训练动态缩放预测:在训练进行到 1% 时,用当前的损失下降趋势外推最终损失。如果预测值已经接近目标,可以考虑早停;如果差距很大,继续训练。

场景四:增加数据还是增加模型大小? 比较两者的边际效益。如果当前配置中数据量 D 远小于 20 * N(即数据严重不足),增加数据的回报率会远高于增加模型大小。反之,如果数据量已经很充足,增大模型是更优选择。

场景五:多 GPU 训练的并行策略选择。 当模型大小超过单个 GPU 的显存容量时,需要分布式训练。数据并行(Data Parallel)适合模型不太大但数据量巨大的场景;张量并行(Tensor Parallel)适合超大模型;流水线并行(Pipeline Parallel)适合层数很多的模型。选择策略时要考虑通信开销对缩放效率的影响。

图表加载中…

建立你自己的缩放曲线。不同任务、不同数据分布、不同架构的缩放指数可能不同。最好的做法是:用你的具体任务训练 3-5 个不同规模的小模型,拟合出专属的缩放曲线,然后外推到目标规模。

缩放定律给出的是统计平均,不是确定性预测。实际训练结果可能因数据质量、随机种子、架构细节等因素偏离预测值。建议将缩放定律的预测值作为参考区间(上下 10-15%),而非精确目标。

8缩放定律的局限性与前沿讨论

缩放定律虽然强大,但并非万能。理解其局限性对于正确使用缩放定律至关重要。

局限性一:只预测损失,不预测能力。 缩放定律告诉我们损失会降低多少,但损失降低不等于能力提升。特别是在推理、规划、工具使用等复杂能力上,损失与能力的关系是非线性的——有时损失只降一点点,能力却飞跃(涌现能力);有时损失降了很多,能力却没明显变化。

局限性二:假设数据分布不变。 缩放定律的推导假设训练数据的分布是固定的。如果训练数据的质量、多样性或领域分布发生变化,缩放曲线也会变化。例如,从通用网页文本切换到高质量代码数据,缩放指数可能完全不同。

局限性三:不涵盖架构创新。 缩放定律描述的是「在固定架构下增大模型」的规律。但架构创新(如 MoE、注意力机制改进、新的归一化方法)可能带来超出缩放定律预测的性能提升——这就是为什么架构研究和缩放研究同等重要。

局限性四:训练动态的复杂性。 缩放定律关注的是最终收敛状态,但训练过程中的动力学行为(如损失曲线的振荡、阶段性平台期、灾难性遗忘)无法用简单的缩放定律描述。这些动态行为在实际训练中可能导致训练失败或次优收敛。

前沿讨论一:缩放是否会有终点? 一些研究者认为,缩放定律可能在某个规模「断裂」——模型达到某个临界点后,继续增大不再带来有意义的改进。另一些研究者则认为,只要数据量和计算量足够,缩放可以持续——关键瓶颈在于高质量数据的枯竭,而非模型本身的能力上限。

前沿讨论二: "缩放即对齐"假说。有研究发现,当模型足够大时,某些对齐行为(如遵循指令、避免有害输出)会自然涌现,而不需要专门的对齐训练。这一假说如果成立,将对 AI 安全和对齐研究产生深远影响。目前业界共识:缩放定律在已探索的规模范围内(从百万到万亿参数)仍然有效,但超出这个范围需要谨慎外推。

python
import numpy as np

def predict_final_loss(early_losses, early_steps, total_steps, model="power"):
    """
    基于训练早期阶段的损失曲线,预测最终收敛损失
    
    参数:
        early_losses: 早期各检查点的损失列表
        early_steps: 对应的训练步数列表
        total_steps: 总训练步数
        model: 预测模型 ("power" 或 "exponential")
    
    返回:
        float: 预测的最终损失
    """
    early_losses = np.array(early_losses)
    early_steps = np.array(early_steps)
    
    if model == "power":
        best_e = 0
        best_r2 = -1
        
        for e_candidate in np.linspace(0, min(early_losses) * 0.99, 50):
            y = np.log(early_losses - e_candidate)
            x = np.log(early_steps)
            coeffs = np.polyfit(x, y, 1)
            alpha, log_a = -coeffs[0], coeffs[1]
            predicted = log_a + coeffs[0] * x
            ss_res = np.sum((y - predicted) ** 2)
            ss_tot = np.sum((y - np.mean(y)) ** 2)
            r2 = 1 - ss_res / ss_tot
            
            if r2 > best_r2:
                best_r2 = r2
                best_e = e_candidate
                best_alpha = alpha
                best_a = np.exp(log_a)
        
        final_loss = best_e + best_a * (total_steps ** (-best_alpha))
        
        print(f"不可约误差 E = {best_e:.4f}")
        print(f"缩放指数 alpha = {best_alpha:.4f}")
        print(f"拟合优度 R2 = {best_r2:.4f}")
        print(f"预测 {total_steps} 步后损失 = {final_loss:.4f}")
        
        return final_loss
    
    elif model == "exponential":
        from scipy.optimize import curve_fit
        
        def exp_model(s, E, A, tau):
            return E + A * np.exp(-s / tau)
        
        params, _ = curve_fit(exp_model, early_steps, early_losses, 
                              p0=[min(early_losses)*0.9, 1.0, total_steps/10])
        
        final_loss = exp_model(total_steps, *params)
        print(f"预测 {total_steps} 步后损失 = {final_loss:.4f}")
        return final_loss

# 示例:用前 1% 训练数据预测最终损失
early_steps = [100, 200, 500, 1000, 2000]
early_losses = [4.2, 3.8, 3.3, 2.9, 2.6]
total_steps = 200000

predicted = predict_final_loss(early_losses, early_steps, total_steps)
print("如果预测损失仍高于目标,建议继续训练")
print("如果预测损失已接近目标,可以考虑早停以节省算力")

在做技术决策时,将缩放定律作为多个参考维度之一,而非唯一依据。同时考虑架构创新、数据质量、训练策略、对齐需求等因素。缩放定律告诉你「增大模型会怎样」,但不告诉你「什么模型最适合你的任务」。

警惕「缩放迷信」——认为只要模型够大就什么都能解决。事实上,对于特定领域的任务,一个经过精心微调的小模型往往比一个通用大模型表现更好。缩放定律适用于通用能力,不适用于垂直领域的精细需求。

9扩展阅读与学习资源

深入学习缩放定律的推荐路径:

入门级: 先阅读原始论文的摘要和图表,理解核心发现。Kaplan 2020 和 Hoffmann 2022(Chinchilla)的论文都写得非常清晰,不需要深厚的数学背景就能理解主要结论。

进阶级: 亲手验证缩放定律。用开源框架(如 PyTorch)训练一系列不同规模的模型(从 10M 到 1B 参数),绘制损失-规模的双对数图,验证幂律关系。

高级级: 阅读后续的修正和扩展论文,包括 B-sharpening、训练动态缩放、多模态缩放等前沿工作。尝试提出你自己的缩放定律修正版本。

推荐论文列表: Kaplan et al. 2020《Scaling Laws for Neural Language Models》;Hoffmann et al. 2022《Training Compute-Optimal Large Language Models》;Henighan et al. 2020《Scaling Laws for Transfer》;Clark et al. 2022《Unified Scaling Laws for Routed Language Models》。

推荐关注 arXiv 的 cs.LG 分类,搜索「scaling laws」关键词,跟踪最新进展。缩放定律是一个活跃的研究领域,几乎每个月都有新论文发表。

论文中的实验结果基于特定架构(通常是 Transformer)和特定数据分布。在迁移到你的场景时,务必通过小规模实验验证,不要直接套用论文中的数值。

继续你的 AI 学习之旅

浏览更多 AI 知识库文章,或者探索 GitHub 上的优质 AI 项目