论文链接:https://arxiv.org/abs/2512.00127

团队:IBM Research(Shailja Thakur 等)

提交日期:2025-11-28(v3 更新:2026-04-27)


📌 核心问题

大语言模型在代码推理任务上表现不佳,根本原因之一是训练数据中的思维链(Chain-of-Thought, CoT)缺乏可验证性。当前主流的合成 CoT 数据通常由教师模型生成“听起来合理”的解释,而非对程序实际执行行为的忠实描述。模型在这些数据上学到的是“语法正确但逻辑有缺陷”的推理模式。

更具体地说,现有方法存在三个关键缺口:(1)只验证最终输出(Outcome Verification),不检查中间推理步骤;(2)只做正向推理(输入→输出),忽略反向推理(输出→输入);(3)缺乏对生成的 CoT 与真实执行轨迹之间的系统性交叉验证。这导致模型“会说”但“不会想”——生成的推理链看似合理,实则与程序的真实行为脱节。

📊 关键数据

实验结果展示了验证质量对推理能力的决定性影响:

  • LiveCodeBench-Exec:峰值提升 +26.6 分
  • CruxEval:提升 +22.2 分
  • HumanEval:提升 +19.5 分

核心发现:验证过的数据质量远比数据数量更重要。使用经过执行轨迹验证的 54,000 条 CoT 数据微调的小模型(8B 参数),在多项基准上超越了使用大规模未验证数据训练的更大模型。

🏗️ 技术架构/设计

  • 三阶段数据合成流水线:Stage A(概念提取+代码合成)→ Stage B(基于共识的代码筛选)→ Stage C(执行轨迹验证的 CoT 生成)
  • Dual Agreement 算法:独立生成 m 个解决方案 × n 个测试用例,通过沙箱执行构建通过/失败矩阵,选择一致性最高的代码-测试对,从源头过滤掉逻辑错误
  • 执行轨迹验证机制:使用 pysnooper 捕获程序执行的完整轨迹(变量赋值、状态转换、控制流),然后用滑动窗口算法将每条 CoT 叙述与真实轨迹交叉验证
  • 双向 CoT 生成:不仅做正向推理(给定输入预测输出),还做反向推理(给定输出推断输入),让模型真正理解程序的因果关系
  • 完整流水线已开源:https://github.com/IBM/verified-code-cot/

🔑 关键洞察

验证质量 > 数据数量

模型在经过执行轨迹验证的数据上学到的推理模式,远优于在大规模未验证数据上学到的。这颠覆了“数据越多越好”的直觉——54,000 条验证数据的效果超过了数十万条未验证数据。

LLM 生成的 CoT 经常“幻觉”

论文中的对比示例极具说服力:对于一个寻找峰值的二分搜索函数,LLM 生成的 CoT 声称“比较 arr[2] 与 arr[1]”,但真实执行轨迹显示比较的是 arr[2] 与 arr[3]。这种细微但关键的错误在未验证的数据中普遍存在,模型学到的是“看起来对”的推理,而非“真正对”的推理。

反向推理是被忽视的训练信号

现有工作几乎只关注正向推理(输入→输出),但反向推理(给定输出推断输入)提供了完全不同的认知视角。双向训练让模型对程序行为形成更完整的理解,这是单向训练无法替代的。

执行轨迹验证可以规模化

通过自动化流水线(概念提取→代码合成→Dual Agreement 筛选→轨迹验证),整个过程无需人工标注,可以大规模生成高质量训练数据。这为解决 LLM 推理训练数据的瓶颈提供了可复用的方法论。

🤔 引发思考

这项工作揭示了一个深层问题:我们用来训练 AI 推理能力的数据本身可能就是“有毒”的。当教师模型生成的 CoT 看似合理但与实际执行不符时,学生模型学到的是错误的推理模式。这不仅是代码推理的问题——任何需要精确推理的领域(数学证明、科学计算、逻辑推导)都面临类似的挑战。执行轨迹验证提供了一个范式:用确定性的程序执行作为“锚点”,校准自然语言推理的正确性。

另一个值得关注的启示是“验证 vs 规模”的权衡。在 Scaling Law 主导的当下,这项研究表明,在某些场景下,精心验证的小数据集可能比大规模未验证数据更有效。这对数据策略有重要影响:与其花更多算力生成更多数据,不如花更多精力验证已有数据的质量。


📖 相关阅读

  • Code Execution as Grounded Supervision for LLM Reasoning(EMNLP 2025)— 同样利用代码执行确定性生成 CoT 监督数据
  • CodeI/O — 大规模 CoT 数据生成但缺乏中间步骤验证
  • SemCoder / rStar-Coder — 使用结果验证但跳过逐步推理验证

逍遥云初 | 2026.06.06