Procedural Pretraining: Warming Up Language Models with Abstract Data¶
会议: ICML 2026
arXiv: 2601.21725
代码: 有
领域: LLM 预训练 / 数据中心 AI
关键词: 程序化数据, 预热预训练, 算法技能, 形式语言, 数据效率
一句话总结¶
在标准语言/代码/数学预训练之前插入一段极轻量的"程序化数据"(形式语言、栈、元胞自动机等)"预热",仅 0.1–0.3% 额外 token 就能稳定提升下游性能,并让模型用 55–86% 的原始数据复现同等 loss——是一种把"推理脚手架"和"知识"解耦的预训练策略。
研究背景与动机¶
领域现状:当前 LLM 训练的事实标准是"一锅端"——直接在 web 规模语料上做下一个 token 预测,让模型同时学会语义知识和操作这些知识的技能。
现有痛点:知识和推理被高度纠缠地学进同一组权重,模型因而容易依赖表层启发式而非系统化的推理过程;多篇工作(Han 2025、Kumar 2025、Nikankin 2025)已指出这是当前模型的核心缺陷。
核心矛盾:用"语义数据"既学知识又学算法技能效率很低——语义里掺杂大量近似/含糊/捷径,难以稳定锤炼出精确的符号操作能力。理想情况应该像人类一样"先学逻辑和数学、再学高阶推理",但目前没有一条工程化的路径把这两者拆开。
本文目标:把"先学结构、再学语义"的认知发展思路落地为可复制的预训练流水线,验证它在多种规模、多个语义域下的有效性,并解释机制层面到底是哪些组件在受益。
切入角度:作者从"程序化数据"出发——由形式语言、简单算法、元胞自动机等显式规则生成的非语义序列。与"由 LLM 生成的合成数据"不同,程序化数据完全没有语义内容,但具有严格的结构(嵌套、递归、长程依赖),相当于纯粹的"算法脚手架"。如果先在这些脚手架上预热,再喂给标准语料,模型也许能把"操作能力"和"知识"分阶段学好。
核心 idea:把 0.1–0.3% 的程序化数据前置到标准预训练之前,作为一个"预-预训练"阶段;这一阶段不教任何语义,只教模型怎么压栈、平衡括号、做序列变换。
方法详解¶
整体框架¶
流水线分两阶段:阶段一用 \(T_1\) 个程序化 token 训练一个 GPT-2 风格 decoder-only transformer(从头开始,所有权重都参与训练),阶段二接着用 \(T_2\) 个语义 token(C4、CodeParrot、DeepMind-Math 之一)继续训练。Baseline 取 \(T_1=0\),即纯标准预训练。两阶段都用标准 next-token prediction 损失,没有任何 freezing,配置好坏由 \(T_1/T_2\) 比例和数据类型决定。两类核心设置贯穿全文:(i) Additive setting:固定 \(T_2\),加一段 \(T_1\),看额外 token 带来的收益;(ii) Substitutive setting:缩小 \(T_2\)、加一小段 \(T_1\),看能否用更少的语义 token 复现同样 loss。
关键设计¶
-
程序化数据生成器(脚手架库):
- 功能:提供一组"非语义、强结构"的序列,每个序列 \(\le 128\) token,作为预热语料。
- 核心思路:作者从前作中整理并自创出一个数据家族——(i) 序列变换 Set/Reverse/Identity/Union/Sort/Delete,模型看到原序列后必须预测被变换后的序列;(ii) 记忆操作 Stack,模拟栈的 push/pop,预测最终栈内容;(iii) 形式语言 \(k\)-Dyck 平衡括号、\(k\)-Dyck Shuffle 非嵌套版本,参数 \(k\) 控制嵌套深度;(iv) 元胞自动机 ECA rule 110,二元序列按确定性 Markov 动力学演化,预测下一状态。这些数据共同点是 next-token 严重依赖精确符号操作、组合性和长程依赖,几乎没有 surface-level 捷径。
- 设计动机:选择"程序化数据"而不是 LLM 合成数据是关键——程序化数据有可证的生成过程和清晰的结构,研究者可以精确解耦"哪种结构教会了哪种技能";同时短序列 \(\le 128\) token 让算法学习不会被长上下文掩盖。
-
算法技能诊断 → 语义域迁移的两段实验设计:
- 功能:先在小模型上诊断"哪种程序化数据教会什么算法技能",再在大模型上验证"这些技能能不能迁移到自然语言、代码、数学"。
- 核心思路:诊断阶段用 2 层 4 头的小 transformer + 10 个 seed,对每对(程序化数据类型,算法任务)跑 additive 设置;任务覆盖 Haystack(长上下文检索)、Addition / Reversed Addition / Multiplication(算术)、Sorting(排序)。再做 shuffled 控制实验——把程序化序列内部 token 顺序打乱,结果性能立刻塌回 baseline,证明是"结构"而非"token 分布"在起作用。迁移阶段把模型规模拉到 1.3B、数据量拉到 10.5B token,在 C4 / CodeParrot / DeepMind-Math 上检验 additive 和 substitutive 两种设置下的损失和下游任务表现。
- 设计动机:直接在大模型上做消融成本过高且容易被规模噪声掩盖,所以先用小模型当"诊断仪",把因果关系钉死;再到大模型上验证迁移性,避免"小尺度有效、放大无效"的陷阱。
-
选择性层迁移(Selective Transfer)作为可解释机制探针:
- 功能:把程序化预训练学到的权重按 "attention-only" / "MLP-only" / "full-model" 三种方式迁移,定位"知识"到底存在哪里。
- 核心思路:阶段二开始时只保留某一类层(attention 或 MLP)的预训练权重、把其他层重置为随机初始化,再跑标准训练。对比三种迁移在算法任务和语义任务上的表现差异——如果某类层迁移比全模型迁移还强,说明该类层是"有用结构"的载体,另一类层反而带来负迁移。在 C4 这类自然语言任务上 MLP-only 更好,在 CodeParrot 这类结构化代码上 attention-only 更好,在 DeepMind-Math 这种"语言 + 结构混合"上两者都重要。
- 设计动机:这套"模块化探针"既是科学解释(验证 MLP 存知识、attention 存模式的猜想),也是实用工程指南——下游域是什么类型,就保留对应的层,能避免无关层带来的负迁移。
损失函数 / 训练策略¶
两个阶段都用标准 next-token prediction 损失;对涉及输入/输出对的程序化数据,损失只在输出 token 上计算。阶段二在 Section 5、6 中把 token embedding 重置为随机值(因为程序化和语义词表无对应),在 Section 4(程序化→算法)里则把 embedding 设为均值向量(无语义偏移)。作者还做了两类反事实控制:(a) 显式加 attention sharpening 正则,无法复现程序化预训练的收益,排除"只是把注意力变锐"的简单解释;(b) 把预训练权重按层 shuffle、保留幅值分布破坏结构,性能立刻塌下来,排除"只是调整了初始化尺度"的解释。
实验关键数据¶
主实验¶
| 设置 | 数据 | 收益 |
|---|---|---|
| Haystack(context recall) | \(k\)-Dyck 预热 vs baseline | 准确率 10% → 98% |
| Additive,1.3B 模型 | +0.1–0.3% 程序化 token | C4 / CodeParrot / DeepMind-Math 一致改进 |
| Substitutive,达到同等 loss | C4 | 只需 55% 原始数据 |
| Substitutive,达到同等 loss | CodeParrot | 只需 67% 原始数据 |
| Substitutive,达到同等 loss | DeepMind-Math | 只需 86% 原始数据 |
| 下游任务 | 语言、代码生成、常识推理 | 程序化预热的收益持续存在 |
消融实验¶
| 配置 | 含义 | 结论 |
|---|---|---|
| Full(结构化程序化数据) | 完整方法 | 基线 |
| Shuffled 程序化数据 | 同 token 分布、破坏结构 | 收益塌回 baseline,证明结构是关键 |
| Attention sharpening 正则 | 显式锐化注意力替代预热 | 复现不出预热收益,否定"注意力变锐"的简单解释 |
| 权重幅值 shuffle | 保留每层权重幅值分布,打乱位置 | 性能急剧下降,否定"调整初始化尺度"的解释 |
| Attention-only 迁移 | 只保留 attention 层预训练权重 | Identity/Haystack 任务上比 full-model 多约 80 个百分点;结构化代码域整体更优 |
| MLP-only 迁移 | 只保留 MLP 层预训练权重 | Reversed Addition、自然语言(C4)任务上更优 |
| 多种程序化数据混合 / 权重融合 | 综合不同脚手架的好处 | 出现进一步收益,给后续工作打开方向 |
关键发现¶
- 不同程序化数据各自专精不同技能:\(k\)-Dyck 强化长上下文检索和排序,ECA rule 110 强化反向加法,Union / Delete 强化乘法——说明"算法结构"和"算法技能"之间存在可追踪的对应关系。
- 程序化预热的信息高度局部化:attention 层主要承载结构化能力(栈、括号、检索模式),MLP 层在自然语言中价值更大,恰好印证了 MLP 是知识容器的主流假说,但它能从"非语义"程序化数据中获益是反直觉的发现。
- 反向加法是少见的 MLP-only / full-model 优于 attention-only 的任务,说明该任务的瓶颈在数值处理而非模式匹配,给"算法 → 模块"映射提供了反例校验。
亮点与洞察¶
- "把 0.1% 的脚手架放到训练最前面"是一种近乎免费的改进——既能加性提升性能、又能替代性节省数据,对工业级预训练直接可用,且不需要改架构、不需要更多算力。
- "结构对应技能、技能对应组件(MLP/attention)"形成了一条清晰的因果链,这种从"诊断 → 迁移 → 机制 → 组合"的递进研究结构非常值得借鉴;后续凡是研究数据混入策略的工作都可以模仿这套方法论。
- 程序化数据可以脱离语言、跨模态——并发工作 Shinnick 2026 已经在视觉上看到类似收益,提示存在"模态无关的算法机制",这是非常有想象力的方向。
局限与展望¶
- 模型尺度做到 1.3B,相对当下旗舰 LLM 仍偏小,10B+ 甚至 100B+ 规模下程序化预热是否仍然有效需要更多验证;学界已经反复看到"小规模有效、大规模失效"的反例。
- 程序化数据类型仍有限(栈、Dyck、ECA、序列变换),混合 / 融合策略只是初步探索;如何系统地"选数据 + 配比例 + 决定顺序"还没有方法论。
- 下游评估以语言建模 loss、代码生成、常识推理为主,没有覆盖更结构化的下游任务(如多步推理 benchmark、agent 行为),算法技能是否真的稳定迁移到复杂任务仍待检验。
- 现象上看到 attention 学到了"模式"、MLP 学到了"某种结构",但没有给出机理级的解释(如电路分析、激活 patching),属于黑箱诊断而非白箱理解。
相关工作与启发¶
- vs Hu et al. (2025) "pre-pretraining on formal languages": Hu 等人把形式语言看作"每 token 价值更高的预训练数据",强调"替代";本文把视角扩大到一组"程序化数据家族",强调"补充"以及"模块化机制"。
- vs Wu et al. (2022) / Zhang et al. (2024): 他们用简单算法或元胞自动机数据替换标准预训练,本文证明哪怕只是前置 0.1–0.3% 也足够受益、并系统比较不同算法的技能特化。
- vs 代码预训练范式: 代码长期被用作"提升推理能力"的隐性脚手架,本文相当于把这种直觉从"代码"推广到"任何带结构的非语义数据",并解释了为什么它有效。
- vs LLM 合成数据: 合成数据靠 teacher LLM 生成,本质仍带语义;程序化数据从规则生成,零语义、强结构,更适合用作"技能脚手架",两条路线互补而非替代。
评分¶
- 新颖性: ⭐⭐⭐⭐ 把"先学结构、再学语义"做成可复制的工程方案,并配合精细的诊断 + 机制实验,框架感强。
- 实验充分度: ⭐⭐⭐⭐ 跨模型规模(小诊断 + 1.3B)、跨数据域(语言/代码/数学)、跨设置(additive/substitutive)+ 强反事实控制,证据链完整。
- 写作质量: ⭐⭐⭐⭐⭐ "诊断 → 迁移 → 机制 → 组合"四段式叙事极其清晰,take-away 提炼到位。
- 价值: ⭐⭐⭐⭐ 工业级预训练几乎零成本即可采用,且为"知识-推理解耦"指出了具体可操作的方向。
评分¶
- 新颖性: 待评
- 实验充分度: 待评
- 写作质量: 待评
- 价值: 待评