Scaling Law 与 Chinchilla 优化
Scaling Law 揭示了语言模型性能与模型规模、数据量和计算量之间的幂律关系,Chinchilla 研究进一步指出训练数据量应与模型参数同步增长,深刻改变了大模型的训练策略。
Kaplan Scaling Law
OpenAI 2020 年的 Scaling Law 研究发现模型性能遵循幂律关系:
$$L(N, D) = \frac{A}{N^\alpha} + \frac{B}{D^\beta} + L_\infty$$
其中 N 为模型参数量,D 为训练数据量,α ≈ 0.34,β ≈ 0.28。
核心发现:
- 参数缩放:增大模型参数持续降低损失
- 数据缩放:增加训练数据持续降低损失
- 计算预算:给定计算预算,存在最优的模型大小和训练步数
- 平滑可预测:小规模实验可以预测大规模性能
Chinchilla 最优训练
DeepMind 的 Chinchilla 研究(2022)修正了 Kaplan 的结论:
关键发现
- 数据量与参数量应等比例增长:之前 GPT-3 等模型训练不足
- Chinchilla (70B) 在 1.4T Token 上训练,超越了 Gopher (280B) 在 300B Token 上的表现
- 计算最优分配:模型参数和训练 Token 数应同时增长
python
# Chinchilla 最优缩放计算
def chinchilla_optimal(compute_budget):
"""给定计算预算,计算最优模型大小和数据量"""
# Chinchilla 缩放系数
# N ∝ C^a, D ∝ C^b, a ≈ 0.50, b ≈ 0.50
a = 0.50 # 模型参数指数
b = 0.50 # 数据量指数
# 最优分配
N_opt = (compute_budget ** a) * 0.3 # 系数根据拟合确定
D_opt = (compute_budget ** b) * 0.3
return N_opt, D_opt
# 示例:1e21 FLOPs 计算预算
N, D = chinchilla_optimal(1e21)
print(f"最优模型参数: {N:.2e}")
print(f"最优训练Token: {D:.2e}")对训练策略的影响
Chinchilla 的发现直接改变了大模型的训练策略:
| 策略 | 之前(Kaplan) | 之后(Chinchilla) |
|---|---|---|
| 模型大小 | 尽可能大 | 与数据量平衡 |
| 训练 Epoch | 多轮训练 | 约 1 个 Epoch |
| 数据需求 | 被低估 | 与参数量等比例 |
| 最优模型 | 更大更少训练 | 适中大小充分训练 |
Llama 验证了 Chinchilla
Llama 系列模型验证了 Chinchilla 的结论:Llama-1 7B 在 1T Token 上训练(约 140 Epoch),而 Llama-2 70B 在 2T Token 上训练。充分训练的较小模型可以匹敌或超越训练不足的更大模型。
超越 Chinchilla
后续研究发现 Chinchilla 的结论在某些情况下需要修正:
- 数据复用:多轮训练在数据受限时仍然有效
- MoE 模型:稀疏模型的缩放规律与 Dense 模型不同
- 微调缩放:微调数据的缩放规律与预训练不同
- 推理缩放:推理时增加计算也能提升性能
实际应用
Scaling Law 的实际应用:
- 训练预算规划:根据 Scaling Law 预测所需计算量
- 小规模预实验:用小模型预测大模型性能
- 最优模型选择:在给定预算下选择最优的模型大小
- 数据收集规划:确定需要多少训练数据