外观
A3 扩展规律:用小实验决定大训练
给定训练预算,应该扩大模型还是喂更多 token?这是 A3 的核心,而不是单纯画一条下降曲线。官方 2025 实验使用训练 API 查询指定模型配置与算力预算后的训练 loss,并要求在较小的试验预算下预测更大预算的最优配置。该 API 属于历史课程基础设施,本仓库不假设今天校外仍可访问;下面的本地拟合例明确使用合成数据。
预算把模型与数据绑在一起
对稠密 Transformer,忽略一些较小项的常用估算是
固定
flowchart LR B[选择多档预算 C] --> N[每档尝试多个规模 N] N --> D[按 C 反推训练 token 数 D] D --> L[测量 loss 与波动] L --> O[找到每档预算的最优区域] O --> F[拟合 Nopt 与 C 的关系] F --> V[留出一档验证外推]
查看流程图文本
flowchart LR B[选择多档预算 C] --> N[每档尝试多个规模 N] N --> D[按 C 反推训练 token 数 D] D --> L[测量 loss 与波动] L --> O[找到每档预算的最优区域] O --> F[拟合 Nopt 与 C 的关系] F --> V[留出一档验证外推]
两种建模思路
第一种先对每档算力预算测量多个规模,在
第二种对损失曲面建模:
因此
当两指数接近时,两者随预算近似平方根增长。这里推导的是给定损失模型下的最优解;不是对所有任务、数据和架构都成立的自然定律。部署成本、延迟和重复推理量也可能让实际选择偏离训练算力最优。
拟合最容易犯的错误
如果 fit_power_law 要求已知 floor,并拒绝非正残差,故意暴露这个前提。
python
x = np.array([1., 2., 4., 8., 16.])
loss = 1.2 + 3.0 * x**(-0.4) # 人工构造,不是训练结果
a, alpha = fit_power_law(x, loss, floor=1.2)
# 应恢复 a≈3.0, alpha≈0.4实际实验中,学习率没调好、batch 不合适、数据重复过多都会抬高 loss,却不一定是规模规律。应固定可比的数据分布与 tokenizer,并把训练配置变化记录下来。不同 run 使用相同 token 数但不同数据质量,也不满足“只改变模型规模”的控制条件。
让有限预算产生信息
先用少量对数间隔的规模探索曲线,识别明显欠拟合或训练不足的范围;再把预算集中在可能最优的区域。至少保留一个预算档不用来拟合,用它检验预测误差;更严格地,用不同 seed 重复关键点,估计训练随机性。报告置信区间或敏感性分析,比多写几位小数更有意义。
预算核算包含失败运行。记录每次 run 的参数量、实际 token 数、估算 FLOPs、训练步数、学习率、最终 loss、异常状态;只删除“表现不好”的运行,会产生选择偏差。若使用官方 A3 2025 API,还要遵循该快照说明中的模型定义:API 模型不完全等同于 A1,自行从 A1 推导参数/FLOPs 前必须核对归一化、激活和位置编码差异。
本地练习与自测
在报告图上区分实际测量点、拟合曲线与外推区间,可以防止读者误以为整条线都来自训练。横轴跨度很大时使用对数尺度,同时注明参数量是否排除 embedding、token 数是否包含重复样本。模型宽度还受头数整除、硬件对齐和可用层数约束,连续最优点最后要映射成可训练的离散配置,再核算一次预算。
先运行 python3 labs/llm/algorithms.py,验证合成幂律恢复。然后把 floor 错设为 1.0,观察指数变化。最后用至少三档 --dim 训练同一小语料:这只能展示小规模实验设计,语料过小且步数有限,不能据此给大模型预测训练成本。
曲线 R² 很高,为什么仍不能相信远距离外推?
训练范围内拟合好,不能证明函数形式在更大规模成立。数据质量、训练稳定性、架构与瓶颈都可能改变;参数之间的可辨识性也可能很差。应留出较大规模点验证,并报告对拟合范围、floor 和初始化的敏感性。
来源:A3 2025 固定讲义、Kaplan 等、Chinchilla。下一章:数据工程。