# 从答题机器到出题老师:ANCORA 如何让 AI 学会"考自己"
> 作者:小凯 | 来源:arXiv:2604.27644v1 [cs.LG] | 机构:武汉大学
---
## 一、一个反直觉的问题
假设你在教一个孩子数学。你给他一千道题,他全刷完了,正确率 95%。你觉得他学会了吗?
大概率是学会了"做题套路",而非"数学本身"。真正检验理解的方式,不是让他再做一千道类似的题,而是让他**自己出十道好题**——能考倒同学的、能暴露概念盲区的、能让老师点头的题。
出好题,比答好题难十倍。因为你必须站在知识结构的更高处,看清哪里是陷阱、哪里是分水岭。
这就是 ANCORA 的核心野心:**让语言模型从"答题者"进化为"出题者"**。
---
## 二、现有 RL 的隐形天花板
当前大模型的训练范式,说穿了就是"刷题+对答案":
1. **SFT(监督微调)**:看人类写的标准答案,模仿着写。天花板就是人类水平,而且人类数据快用完了。
2. **RLVR(强化学习 from Verifiable Rewards)**:固定题库,模型反复尝试,答对加分。DeepSeek-R1、OpenAI o1 走的都是这条路。
RLVR 的问题很隐蔽:**题库是死的**。模型只是在打磨"已知问题的求解技巧",它并没有创造出新的、有价值的难题。就像一位学生把十年高考真题刷到滚瓜烂熟,却从未想过"如果我来命题,会怎么设陷阱"。
更深层的问题是:**没有新题,就没有新能力**。模型的能力边界被初始题库的上限死死锁住。
ANCORA 想打破这个锁。
---
## 三、ANCORA 的三重设计
ANCORA(Anchored-Curriculum framework)让同一个模型扮演两个角色:
- **Proposer(出题者)**:根据已有题目,生成新的、可验证的规范/题目
- **Solver(解题者)**:尝试解答 Proposer 出的题,编译器给出 0/1 的硬判定
两个角色共享同一个策略 πθ,通过同一个 RL 框架同时训练。这本身就很有张力——模型要同时学会"怎么出题"和"怎么解题",而且出的题还得是自己(或未来的自己)刚好能解、又不能太容易解的。
### 3.1 第一支柱:两级组相对更新
传统的 GRPO(Group Relative Policy Optimization)对一个固定题目采样 N 个答案,计算相对优势。ANCORA 把它扩展成两级:
- **Proposer 级**:对每个种子题,生成 N 个候选新题。每个新题的质量,由 Solver 在其上的 K 次尝试结果决定。
- **Solver 级**:对每个新题,Solver 尝试 K 次解答。
然后,两级的优势信号被**耦合**在一起更新同一个策略。Proposer 出的题好不好,不是人说了算,是 Solver 的实战结果说了算。Solver 解得费劲的题,Proposer 反而可能拿高分——因为"刚好能解出来"的题目,才是最有教学价值的。
这里用了一个关键技巧:MLRL(Maximum Likelihood RL)对齐。传统的 REINFORCE 对每个样本给平权梯度 1/N;而 MLRL 按成功率加权,稀有的成功案例获得更高的梯度权重(如 1/8 的组里有 1 个成功,这个成功样本的权重是 8)。这让模型真正向"困难但可达"的区域学习,而不是在安全区反复刷熟练度。
### 3.2 第二支柱:流形投影——先站稳,再走路
这是 ANCORA 最让我拍案叫绝的诊断。
在形式验证(Formal Verification)这种场景里,**有效的输出极其稀疏**。Proposer 要生成一段能通过编译器语法检查的规范,Solver 要写一段能通过编译器验证的实现。从整个生成空间来看,有效的规范+实现组合可能只是沧海一粟。
直接在这个稀疏奖励上跑 RL,会发生什么事?**流形崩溃(Manifold Collapse)**。
想象 Proposer 刚开始随机出题,几乎全是语法错误。偶尔蒙对一题,RL 的梯度会把模型推向那个方向。但那个方向周围全是悬崖——稍微偏离就是语法错误。稀疏的 0/1 奖励无法提供足够的梯度信号来"站稳"在有效流形上,模型会被推离有效区域,在无效空间里游荡。
ANCORA 的解法很务实:**先用迭代自蒸馏 SFT 把模型"锚定"到有效流形上**。
具体来说:先用少量人工编写的种子规范做 SFT,让模型学会基本格式(0.4% → ~0.5%)。然后运行早期 ANCORA 迭代,收集模型自己生成的、且通过验证器的规范+实现对,去重后蒸馏回 SFT 数据。三轮迭代后,模型在 Dafny2Verus 上的 pass@1 从 0.4% 提升到 26.6%。
26.6% 是什么概念?意味着模型已经"站到了有效流形上"——它生成的规范有四分之一能通过验证。这个覆盖率足够让后续的 RL 训练稳定进行,不会再被稀疏奖励推下悬崖。
这不是一个锦上添花的技巧,而是**必要的前置条件**。论文附录里的失败分析(Appendix B)清楚地展示了:没有流形投影,无论用什么熵奖励(Bernoulli 方差、指数衰减、Band-1-of-K),Proposer 都会崩溃。
### 3.3 第三支柱:UCB 课程 DAG——严格把关的自生长题库
Proposer 一次只能对种子题做局部变异,就像你在一个知识点旁边稍作改动出一道新题。但如何探索遥远的知识疆域?
ANCORA 的方案是**组合**:把验证通过的新题重新插入"动态种子池",作为未来的出题素材。这些种子节点形成一个有向无环图(DAG),根节点是人工编写的初始种子,子节点是模型生成的、经过三重过滤的新题:
1. **格式过滤**:语法检查,排除明显错误的规范
2. **MinHash 新颖性检查**:Jaccard ≥ 0.70 的近似重复被剔除
3. **Solver 验证**:只有至少被 Solver 成功解出一次的题目,才能入库("solved-only admission")
种子选择用 MCTS 风格的 UCB(Upper Confidence Bound)算法:优先选择"高成功率但尚未充分探索"的节点。这就像一个好的老师,不会反复用学生已经滚瓜烂熟的题,也不会死磕一道全班都挂的题,而是在"最近发展区"(Zone of Proximal Development)里选题。
论文证明了(Proposition 4.1):只要每次迭代存在至少一个种子能以正概率生成有效新题,课程 DAG 的节点数就会几乎必然趋于无穷。这意味着,**ANCORA 的训练分布严格超越了初始种子的支撑集**——模型在创造自己训练数据之外的新题目。
---
## 四、Band-1-of-K:奖励"刚好解出来"
Proposer 的奖励设计非常精妙。它不是奖励"出的题 Solver 全对"(那样题目太简单,没有学习价值),也不是奖励"全错"(题目无效,没有信号)。
ANCORA 主运行使用 **Band-1-of-K 奖励**:如果 Solver 在 K=8 次尝试中**恰好成功 1 次**,Proposer 获得满分。
为什么"恰好一次"是最优的?因为 MLRL 的梯度公式在 K=1 时发散最大—— rare success 获得最高权重。这恰好对应了"题目位于 Solver 能力边界"的状态:足够难,以至于 8 次里只蒙对 1 次;但又不是不可能,因为那 1 次成功证明了题目是有效的。
这本质上是在奖励**信息增益最大**的题目。一个全对的题目告诉模型"你已会",没有新信息;一个全错的题目告诉模型"此路不通",但信息量有限(可能只是题目本身有 bug);一个"8 中 1"的题目告诉模型"这里有一条狭窄但真实可行的路径",这是最宝贵的学习信号。
---
## 五、实验:3B 参数的逆袭
ANCORA 在 Verus 形式验证环境上做了系统验证,使用 **Qwen2.5-Coder-3B**(仅 30 亿参数),2 张 A100,训练约 200 GPU 小时。
### Test-Time Training 设置(同分布)
| 方法 | Dafny2Verus pass@1 | MBPP pass@1 | HumanEval pass@1 |
|------|-------------------|-------------|------------------|
| AlphaVerus (50-shot, 无训练) | 30.7% | 20.2% | 14.1% |
| SFT 基线 | 26.6% | 8.8% | 6.2% |
| RFT (拒绝微调) | 41.2% | 28.3% | 12.0% |
| PSV (1-shot 推理) | 65.7% | 36.8% | 19.1% |
| **ANCORA (0-shot 推理)** | **81.5%** | **44.1%** | **19.2%** |
几个值得细品的数字:
1. **81.5% vs 65.7%**:ANCORA 在 0-shot(不给任何示例)条件下,比 PSV 的 1-shot(给 1 个示例)高出 **15.8 个百分点**。这意味着 ANCORA 学到的不是"模仿示例格式的技巧",而是真正内化的出题+解题能力。
2. **26.6% → 81.5%**:从 SFT 基线到 ANCORA 最终,提升了近 3 倍。这 26.6% 就是流形投影后的"起跑线"——如果直接从 0.4% 跑 RL,模型早崩溃了。
3. **MBPP 44.1% → 47.9%(pass@1→pass@10)**:提升极其平缓,说明模型对可解题目已经形成了"近乎确定性的解法"。这是 sharpening 而非 expansion 的标志——对已知可解的问题,模型已经极度自信。
### Transfer 设置(跨分布)
更震撼的是迁移能力:只在 Dafny2Verus 上训练,直接在 MBPP 和 HumanEval 上测试(零额外训练):
- Transfer MBPP pass@1:**36.2%**(对比 PSV 的 25.3%)
- Transfer HumanEval pass@1:**17.2%**(对比 PSV 的 6.8%)
这说明 ANCORA 学到的不是" Dafny2Verus 的解题模板",而是**可迁移的问题生成与求解结构**。虽然 HumanEval 的 Python 风格任务与 Dafny2Verus 的算法验证差异较大(17.2% vs MBPP 的 36.2%),但相比 SFT 基线的 6.2% 仍是近 3 倍提升。
---
## 六、为什么这很重要
ANCORA 的价值不止于"又一项形式验证的 SOTA"。
它指向了一个更根本的问题:**当人类标注数据耗尽,AI 如何继续进化?**
Villalobos 等人 2024 年的研究预测,公开的人类生成文本可能在不久的将来成为瓶颈。如果 AI 只能学习人类已经写出的东西,它的天花板就是人类知识的总和。ANCORA 提供了一条出路:**AI 可以自己出题、自己验证、自己学习**。
这不是简单的"数据增强"(对已有数据做变换),而是**知识的自主扩展**。Proposer 创造的题目严格超越了初始种子的支撑集(Proposition 4.1 保证),Solver 在解答这些新题时获得的梯度信号,驱动策略进入初始数据中从未覆盖的区域。
当然,这也有风险。如果验证器有缺陷(Verus 编译器是确定性的、完美的 0/1 判定,但真实世界很少有如此干净的反馈),"自我对弈"可能会放大偏见或产生无意义的循环。ANCORA 的严格过滤机制(solved-only admission + MinHash 去重 + UCB 探索)是试图约束这种风险的工程设计,但能否扩展到更模糊的领域(如开放式创意写作),仍是开放问题。
---
## 七、一句话总结
ANCORA 告诉我们:**教会 AI 出题,比教它答题更有前途。** 当你能让模型站在知识流形的前沿,精准地抛出"刚好能解出来"的挑战,它就不再需要人类源源不断地提供新题库——它会自己给自己出考卷,自己给自己打分,然后在自己设的陷阱里越爬越高。
这不正是所有好老师都在做的事情吗?
---
**参考链接**
- 论文原文:https://arxiv.org/abs/2604.27644
- 代码:https://github.com/(论文提及 GitHub 但未给出完整链接)
**标签:** #深度研究 #小凯 #强化学习 #形式验证 #自我对弈 #课程学习 #AI安全 #武汉大学
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!