打开任何一篇大模型技术报告的 Data 章节,都会看到一张语料来源饼图:CommonCrawl 占大头,中间夹着代码、数学、百科、多语言几块。这些数字是怎么定的?早期答案是"拍脑袋 + 事后修",现在越来越有量化方法。这篇文章把配比问题写成优化问题,推导每个领域的损失如何随权重变化,然后聚焦最有争议的一块——代码数据到底给非代码能力带来了什么。
配比的优化表述
把语料按来源分成领域 $d \in \{1,\dots,K\}$(网页、GitHub、arXiv、维基……),各抽一个分布 $P_d$。混合权重 $\boldsymbol w = (w_1,\dots,w_K)$ 构成训练分布 $P_{\boldsymbol w} = \sum_d w_d P_d$。配比的优化目标是
$$ \boldsymbol w^\star = \arg\min_{\boldsymbol w} \; \sum_d u_d \, L_d(\theta_T(\boldsymbol w)), $$
其中 $L_d$ 是模型在第 $d$ 个领域验证集上的交叉熵,$u_d$ 是下游权重(通用助手通常取均匀,代码专用模型会给代码领域高权重),$\theta_T(\boldsymbol w)$ 是权重 $\boldsymbol w$ 下训练 $T$ 步得到的模型。难点在 $L_d$ 对 $\boldsymbol w$ 的依赖没有解析形式——它是训练动力学的结果,只能采样测量。
工程上可行的近似是局部线性化:在当前配比 $\boldsymbol w_0$ 附近做网格实验,训练小模型,拟合
$$ L_d(\boldsymbol w) \approx L_d(\boldsymbol w_0) + \sum_{d'} g_{d,d'} \,(w_{d'} - w_{0,d'}), $$
梯度矩阵 $g_{d,d'} = \partial L_d / \partial w_{d'}$ 的语义很直白:第 $d'$ 个领域的权重增加一点,第 $d$ 个领域的损失变化多少。实测这个矩阵高度非对称——网页数据权重的变化几乎不影响代码损失,反过来代码权重增加却会显著拉低网页损失的下降速度。这是因为各领域的数据量与信息密度不同:网页语料冗余度极高(去重后有效信息远小于原始字节),单位 token 的梯度贡献低。GPT-3 时代就用了回归外推的方法定配比,DeepSeek-V3 的技术报告里能看到更细的版本:在小模型上扫多个配比,用二次回归预测大模型最优权重。
代码数据的证据链
"加代码提升推理"已经从传闻变成有对照实验的结论。证据按强度排:
消融对照:StarCoder 2 和 DeepSeek-Coder 的数据消融里,控制总 token 数不变、只调代码占比,非代码的推理基准(GSM8K、HellaSwag 这类)随代码占比上升先升后平,拐点在 20%–40% 区间。反向也成立——完全去掉代码,推理类指标掉得比语言类指标多。这说明代码的作用不是"多学了一门语言",而是某种可迁移的结构训练。
机制解释:代码有四个独特的统计性质。一是长程依赖密度高:变量在 100 行外被引用,逼着模型维持远距离一致性;二是逻辑 token 密度高:if/else/return 这类词携带的约束是刚性的(变量未定义就是错),网页散文没有这种硬约束;三是执行语义:代码是"可以运行的文本",模型从执行结果反馈中学到的是可验证的因果链;四是格式规整:缩进、括号配对提供了免费的结构监督信号。"推理能力从哪来"没有单一答案,但代码是少数几个"加进去就能在所有推理基准上稳定涨点"的数据类型。
时间线佐证:GPT-3(2020,代码极少)在 GSM8K 上 1-shot 约 35%;Codex(2021,几乎全代码)暴露了代码训练带来的 CoT 潜力;PaLM(2022 年 4 月版,代码占比约 5%)把 CoT prompting 推到前台;此后所有主流模型代码占比都在两位数百分比。这条时间线不能证明因果,但和消融实验互相印证。
自动配比:DoReMi 及其局限
DoReMi(2023)把配比问题形式化为 minimax 优化:
$$ \min_{\boldsymbol w} \max_{d} \; \big[ L_d(\theta_T(\boldsymbol w)) - L_d(\theta_T(\boldsymbol w_{\text{ref}})) \big], $$
内层 maximin 找"相对参考配比损失最差"的领域,外层调整权重去补它——直觉就是"哪个领域掉队最多就喂它更多"。算法分两轮:先按初始权重训一个参考模型,再训练一个小代理模型,用群组分配(group DRO)在线更新 $\boldsymbol w$,最后把学到的权重直接用于大模型训练。实测在 The Pile 的 8 个领域上,DoReMi 学到的权重把代理模型对应的全域验证损失压低了 6%+,并且权重分布和人工经验(代码和学术该多喂)方向一致。
局限也明显。两轮训练的开销不小,且外推性依赖"小模型的配比敏感性 ≈ 大模型的"这个假设——规模定律对配比函数的影响没有被系统验证过,只验证过损失值本身。更根本的局限是 minimax 目标对下游权重 $u_d$ 是隐式均匀,真要做"代码专用但别忘通用"的模型,均匀保底未必是你要的权衡。目前工业界的主流仍是"小模型网格扫 + 回归外推",DoReMi 证明了自动配比可行,但没挤掉人工+回归的位置。
小结
语料配比是预训练里少数"花小钱能办大事"的杠杆:一个配比改动让下游一组指标涨 2–3 个点,等效于多加两成数据。代码数据的推理增益有消融实验和时间线双重佐证,机制上对应长程依赖与硬逻辑约束两种统计结构。定配比的可行路线是"小模型扫点 + 回归外推",DoReMi 的 minimax 自动配比提供了理论更干净的替代方案,但还没在最大规模上证明能赢过人工经验。