返回 G01~G90 教材库
G02 · 总 Day 182教材已备 ≠ 学习已完成

G02:程序化规则任务生成器

程序化任务生成器用显式规则生产可无限采样、可控制难度且答案可验证的任务族,使“泛化到哪里”从题目印象变成训练规则、组合结构与测试规则之间的可审计关系。

2027-02-23taskfamily、规则组合、IID/OOD切分与生成器

内容类型:预习教材(不代表已完成)
日期:2027-02-23
阶段:P3 · AGI Foundations 90
总路线:Day 182 / 360
周次 / 节奏:W1 · 周二最小机制
状态:教材已备;学习未完成
主题:task family、规则组合、IID/OOD 切分与生成器

一句话定义

程序化任务生成器用显式规则生产可无限采样、可控制难度且答案可验证的任务族,使“泛化到哪里”从题目印象变成训练规则、组合结构与测试规则之间的可审计关系。

学习目标

  1. 能把单道题提升为 task specification → instance generator → deterministic verifier 三层结构。
  2. 能区分实例 IID、组合 OOD 与规则 OOD,避免随机切分掩盖模板泄漏。
  3. 能设计一个小型符号规则任务,明确控制变量、难度与生成失败条件。
  4. 能解释生成器的先验怎样限制结论:程序能生成的任务空间不等于现实世界的全部问题。

核心知识

任务实例可以表示为 x = render(z, r),其中 z 是对象、长度、噪声等潜变量,r 是决定答案的规则,标签由 y = solve(z, r) 得到。生成器的价值是同时掌握数据生成过程和正确答案,而不是让题目“看起来复杂”。如果训练与测试仅对实例随机打散,而它们共享相同规则模板、词汇和长度,测试只说明同分布插值。

组合 OOD 保留基础操作符,却在测试中出现训练未见的组合,例如训练只见 reverseselect-even 的单步任务,测试要求先筛选再反转。规则 OOD 则引入新操作语义,例如从位置变换切换到模运算。两者难度不同:组合 OOD 主要检查已有原语的系统组合,规则 OOD 还要求从说明或示例中识别新规则。

生成器也必须防止捷径。标签可能与长度、固定词、输出格式或样本顺序偶然相关。如果正例总比负例长,模型无需学习规则。因而要记录每个实例的 rule id、primitive set、depth、length、seed 和 nuisance attributes,并检查标签与非目标属性的相关性。

机制与推导

定义一个列表变换语言:

[ r ::= identity \mid reverse \mid rotate(k) \mid filter(p) \mid map(f) \mid r_2 \circ r_1 ]

训练深度 d≤1,组合测试可用 d=2;规则测试留出某个 primitive。生成实例的伪代码是:按 split 选择规则集合;从指定长度区间采样输入;计算确定性输出;若答案不唯一、超出范围或与已有样本重复则拒绝重采样;最后保存 specification 和 provenance。

切分可写为规则集合约束:R_train ∩ R_ruleOOD = ∅,但 Primitive(R_train)Primitive(R_compOOD) 可以相同。单纯要求实例集合不相交 X_train ∩ X_test = ∅ 太弱,因为模板仍可能完全相同。难度向量可写成 h=(length, depth, distractors, description_noise),测试时一次只改变一到两个分量,更容易定位失败来源。

确定性 verifier 不应重新调用同一个生成模型判断答案,而应执行规则解释器。若答案包含多个等价形式,先做 canonicalization,再比较语义结果。生成器与 verifier 共用同一错误实现仍可能产生一致但错误的“真值”,因此至少准备几个手工 oracle case 做交叉检查。

最小练习或观察步骤

  1. 选择整数列表任务,先只实现 reverserotatefilter-even 三个原语,暂不加入自然语言模型。
  2. 为每个原语手推两个输入输出,作为 oracle fixture;再写 specification、generator 与 verifier 的职责边界。
  3. 构造三个 split:训练为单原语,IID 为同原语新实例,组合 OOD 为两个原语复合;可选保留一个未训练原语做规则 OOD。
  4. 统计各 split 的长度、标签长度、原语频次和重复率,寻找非目标相关性。
  5. 故意让某个标签与输入长度相关,再设计平衡采样消除捷径,写下修正前后“模型可能学到什么”。

常见误区与边界

  • 把随机 train/test split 称为新规则泛化;它通常只是新实例。
  • 只保存题面和答案,不保存生成规则、seed 与难度,导致失败无法定位。
  • 用同一个语言模型生成题目、给答案并评分,形成闭环自证。
  • 认为程序化任务天然无污染;公开代码、固定模板和重复 seed 也会泄漏。
  • 通过增加字符串长度制造表面难度,却没有改变所需算法深度。
  • 将 toy task 成功外推到开放世界;生成器只检验被显式编码的能力成分。

研究/系统场景连接

金融零售规则具有天然的程序化结构,例如“金额超过阈值且地区风险为高,同时近七日设备数增加”可被表示为可执行规则树。学习中可以使用完全合成字段构造组合 OOD:训练只见单一阈值与单一时间窗口,测试见合取、优先级冲突或政策更换。这里的目标不是建立真实风控模型,而是观察系统是在记忆模板,还是能从规则说明适应新组合。

Agent 场景可以把任务生成器扩展为状态机:给定初始状态、允许动作和终止条件,自动生成可验证轨迹。研究者因此能分开测量计划失败、工具失败与规则理解失败。P4 具身阶段仍可沿用 specification 思想,但现实动力学与传感噪声不再能被一个完美解释器完全覆盖。

自检问题

  1. 实例 IID、组合 OOD 和规则 OOD 的集合约束有何不同?
  2. 为什么保存 rule id 与 primitive set 比只保存随机 seed 更有解释力?
  3. 生成器和 verifier 共用同一实现会产生什么系统性盲点?
  4. 哪个 nuisance attribute 最可能成为你任务中的捷径?
  5. 这个 toy generator 能支持什么泛化结论,又明确不能支持什么?

专业课程对齐

  • 阅读 On the Measure of Intelligence 中任务、先验与适应效率的关系,把抽象讨论映射到规则生成器的可控变量。
  • 阅读 ARC-AGI-2 Technical Report,关注任务设计、难度与人类可解性,而不是把某个榜单结果当作 AGI 判定。
  • 参考 Stanford CS336 对数据构造、tokenization 与训练输入的工程讨论,思考一个 task specification 如何稳定转成模型可消费样本。

深入学习提示

先把生成器当成科学仪器:每个开关应对应一个假设,每个 split 应对应一种外推。若一次改变规则、长度、词汇和输出格式,失败将无法归因。可继续研究任务等价类、最短描述长度与 curriculum,但不要为了“更像 AGI benchmark”堆叠不可解释变化。理想的下一步不是更多题,而是让一个反例能清楚揭示 baseline 使用了错误捷径。

学后填写区

  • 我选用的规则语言:
  • 三种 split 的精确定义:
  • 发现或预想到的捷径:
  • verifier 的独立检查方式:
  • 本生成器不能测量的能力:
本页是未来 P3 的预习教材。等 P1、P2 完成并正式进入 P3 后,再填写真实理解、实验现象与不确定项;现在阅读不会改变P1 唯一进度账本