Interview: 预训练数据中代码数据的占比对模型推理能力有什么影响?有什么实验证据?
题目解析
近年来多项研究和工程实践表明,在预训练数据中加入代码数据能显著提升模型的通用推理能力,而不仅仅是编程能力。这一发现对数据配比策略有重要影响。面试官想看你是否跟踪了这一方向的研究进展,以及能否给出合理的解释。
解答思路
实验证据来自多个方面:(1)Codex/GPT-3.5/GPT-4的进化——代码训练是从GPT-3到ChatGPT能力飞跃的关键因素之一;(2)Google的Minerva和Llemma表明代码和数学数据对数学推理能力至关重要;(3)对比实验——相同规模的模型,加入代码数据训练后在GSM8K、MATH等推理benchmark上显著提升;(4)LLaMA和DeepSeek等模型明确将代码数据占比设在10-20%。
关键要点
代码数据提升推理能力的可能机制:(1)结构化思维——代码的逻辑结构(条件分支、循环、函数调用)天然训练了模型的逻辑推理能力;(2)精确性要求——代码是不容错的语言,训练模型养成精确表达的习惯;(3)长距离依赖——代码中变量的定义和使用可能相隔很远,训练了模型追踪长依赖的能力;(4)隐式Chain-of-Thought——代码的逐步执行本身就是一种推理链。但代码占比不是越多越好,过多会损害自然语言任务的性能。
加分回答
引用具体研究:Fu等人的工作系统研究了代码数据比例对下游推理任务的影响,发现最优比例在10-20%之间。Muennighoff等人在The Stack上的实验表明代码预训练对跨语言能力也有提升。可以讨论代码数据的质量比数量更重要——来自GitHub的高星仓库代码比随机代码对推理能力的提升更显著。以及代码数据的去重和过滤策略的重要性。
常见踩坑
常见错误是将代码数据的作用简化为让模型会编程——代码训练的溢出效应(spillover effect)对通用推理能力的提升才是最有价值的发现。另一个坑是无法给出具体的实验证据,只是泛泛而谈。也有人忽略了代码数据质量的重要性,低质量代码(如学生作业、自动生成代码)对推理能力的提升有限甚至有害。