LLM能从零重新发明基础算法吗?遗忘后再发明,最强模型成功率90%

你有没有想过一个问题:当LLM写出一个正确的Dijkstra算法时,它到底是真的"发明"了这个算法,还是只是在复述训练数据里见过的代码?这个问题困扰了我很久——因为所有基础算法都躺在预训练语料里,你根本没法区分"发明"和"回忆"。

这篇论文给了一个很巧妙的解法:先把算法从模型脑子里"删掉",再看看它能不能自己重新发明出来。 结果有点出乎意料——最强的Qwen3-4B-Thinking模型在逐步提示下,10个经典算法里重新发明了9个,成功率90%。但更有意思的是那些没成功的案例——它们才真正暴露了LLM推理能力的边界。


🎯 核心摘要

这篇论文提出"遗忘与重发明"管线:先用GRPO遗忘技术把特定算法从LLM的知识中移除,再测试模型能否独立重新发明。10个经典算法、3个模型、3个提示级别的实验表明,最强模型Qwen3-4B-Thinking在无提示下重发明成功率50%,逐步提示下达90%。但KMP和Strassen即使有提示也搞不定——直到测试时强化学习让Strassen从0%跳到62.5%。研究还发现了"思维崩溃"现象:没有验证器反馈时,模型的推理会逐轮变短直至放弃。这篇论文的实验设计比结论更有价值,它给出了一个真正能区分"记忆"和"发明"的测试框架。


📖 论文信息

  • 标题:Can Large Language Models Reinvent Foundational Algorithms?
  • 作者:Jian Zhao, Haoren Luo, Yu Wang, Yuhan Cao, Pingyue Sheng, Tianxing He
  • 机构:雄安AI研究院、清华大学交叉信息研究院、上海期智研究院、中科院信息工程研究所、北京邮电大学
  • 日期:2026年4月7日
  • 链接:https://arxiv.org/abs/2604.05716
  • 代码:https://github.com/Algo-Reinvention/algo-reinvention

🤔 为什么这个问题这么难回答

LLM能不能做"基础性创新",这个问题在学术界吵了很久。FunSearch能发现新的数学结果,AlphaEvolve能优化矩阵乘法算法,但这些都是在已有解的基础上做增量改进——你给它一个初始解,它迭代优化。这跟从零开始"发明"一个算法,完全不是一回事。

困难在于一个很尴尬的事实:所有经典算法都在训练数据里。 你让GPT-4写Dijkstra,它当然写得出来,但你无法证明它是"发明"的而不是"回忆"的。就像考试时出了原题,学生答对了,你不知道他是真会还是背过的。

有人可能说,那从头训一个不含这些算法的模型不就行了?想法很好,但训练一个4B参数的模型动辄几十万GPU小时,更别说还要确保训练数据里完全没泄露——成本根本不现实。


🏗️ 遗忘与重发明:一个优雅的实验框架

这篇论文的核心贡献是设计了一个可行的实验范式,分两阶段:

Figure 1: 遗忘与重发明管线

Figure 1: 遗忘与重发明管线的完整流程。左半部分是遗忘阶段:将预训练模型 \(\pi_{\text{base}}\) 转变为遗忘模型 \(\pi_{\text{unlearn}}\),使其不再能回忆起Dijkstra算法。右半部分是重发明阶段:模型在三个提示级别下尝试,提交代码后如果失败,由生成式验证器返回诊断反馈帮助修订。

阶段一:用GRPO做在线策略遗忘

遗忘这事儿比想象中难。你不能简单地把算法相关的数据从训练集删掉就完事——模型已经学进去了,得主动"擦除"。

论文用的是基于GRPO的在线策略遗忘方法。损失函数长这样:

\[\mathcal{L}_{\text{unlearn-GRPO}}(\theta) = \mathcal{L}_{\text{forget-GRPO}}(\theta; \mathcal{D}_{\text{forget}}) + \lambda \mathcal{L}_{\text{retain}}(\theta; \mathcal{D}_{\text{retain}})\]

两股力量在拉扯:\(\mathcal{D}_{\text{forget}}\) 上的遗忘项让模型忘掉目标算法,\(\mathcal{D}_{\text{retain}}\) 上的保留项维持通用能力。\(\lambda\) 控制两者平衡。

你想想看,奖励函数的设计其实挺精巧的,它检查三个二元属性:

  • \(k_j\)(知识披露):回答是否泄露了目标算法知识
  • \(c_j\)(算法名腐败):回答是否编造了不存在的算法名
  • \(u_j\)(可读性):回答是否仍然流畅可理解
\[r(x, y_j) = \mathds{1}\{(k_j, c_j, u_j) = (0, 0, 1)\}\]

只有当模型既不泄露知识、又不瞎编算法名、还能保持回答可读时,才给奖励1。这个设计确保遗忘不是让模型乱说话,而是让它"真的不记得了但还能正常交流"。

有个冷启动的细节值得提一下:遗忘刚开始时,模型对遗忘查询的响应通常会获得零奖励,优化信号太弱。所以他们先构造一组拒绝式响应用SFT引导模型,相当于先教它"遇到这类问题该怎么拒绝"。

阶段二:重发明测试

遗忘完成后,进入重发明阶段。模型与Python解释器交互,提交候选代码并测试。成功条件是代码通过所有测试用例,且满足运行时间和内存限制。

重发明过程中有一个关键组件——生成式验证器。当提交的代码失败时,遗忘模型自身会被实例化为验证器,返回诊断反馈,指导模型修订方案。这个验证器不是外部Oracle,而是模型自己——这个设计后面会说到,它是避免"思维崩溃"的关键。

提示分三个级别:

  • 无提示:仅给任务描述
  • 级别1:高层概念性提示,比如"试试分治策略"
  • 级别2:逐步详细解释

🧪 实验结果:数据说话

主实验:重发明成功率

10个目标算法横跨图论、数论、字符串三大类,3个模型3个提示级别,一共90种组合:

目标算法 Qwen3-Thinking 无提示/L1/L2 Ministral-14B 无提示/L1/L2 Qwen3-Instruct 无提示/L1/L2
Gray 70.3/60.9/100.0 3.9/0.0/3.2 0.8/0.8/0.8
Moore Vote 0.0/87.5/100.0 1.6/3.1/33.9 0.0/15.6/25.8
Prim 0.0/0.0/100.0 19.5/34.5/53.9 0.0/0.0/46.1
Bellman-Ford 15.6/64.8/92.2 3.9/23.4/19.6 0.0/36.7/54.7
Dijkstra 22.7/83.6/98.4 1.6/69.9/92.2 0.0/14.1/80.3
Floyd-Warshall 44.5/80.5/100.0 3.1/18.0/46.9 0.0/22.7/89.1
Euclidean 64.8/97.7/100.0 5.5/6.2/5.5 1.6/2.3/7.8
Manacher 0.0/0.0/100.0 0.0/0.8/9.6 0.0/0.0/1.6
KMP 0.0/10.2/18.0 0.0/0.0/0.0 0.0/0.0/0.0
Strassen 0.0/0.0/0.0 0.0/0.0/0.0 0.0/0.0/0.0
平均RSR 21.8/48.5/80.9 3.9/15.6/26.5 0.2/9.2/30.6

几个关键观察:

1. Qwen3-4B-Thinking碾压另外两个模型。 无提示平均21.8%对3.9%和0.2%,差了一个数量级。这跟模型是否经过reasoning训练强相关——Ministral虽然参数多(14B vs 4B),但reasoning能力不够,反而不行。

2. 算法难度分化明显。 Gray编码和Euclidean算法在无提示下就能重发明,因为它们的解空间约束强,搜索路径相对明确。而KMP和Strassen在所有条件下几乎都失败——前者需要构造特殊的失效函数,后者需要发现7个反直觉的中间乘积组合,这些都不是增量搜索能碰到的。

3. 提示的效果因算法而异。 对Dijkstra和Bellman-Ford这种"思路对了就能推出来"的算法,提示帮助巨大。但对KMP这种,就算你给了高层概念提示,模型还是找不到那个关键的不变量。这说明提示缩小了中等难度的差距,但跨不过最难的坎。

Dijkstra重发明轨迹

Figure 2: Dijkstra算法重发明轨迹

Figure 2: Qwen3-4B-Thinking在无提示下重发明Dijkstra算法的两条轨迹。左侧成功:模型在第11轮通过验证器反馈纠正得到Dijkstra-like解。右侧失败:模型困在次优策略中最终放弃。

这两条轨迹的对比很有意思。成功的路径不是一蹴而就的——模型经历了多轮尝试和修正,验证器的反馈在每一轮都帮助它定位错误。而失败的路径里,模型在BFS和贪心之间反复横跳,始终找不到正确的松弛策略。

遗忘效果验证

光看重发明结果不够,还得确认遗忘真的生效了:

模型 平均遗忘率 LiveCodeBench AIME25
Qwen3-Thinking 原始 0.0% 55.2 81.3
Qwen3-Thinking 遗忘后 99.8% 50.3 77.0
Ministral-14B 原始 0.0% 61.8 85.0
Ministral-14B 遗忘后 98.7% 59.4 75.0

遗忘率接近100%,通用能力(LCB和AIME25)下降幅度在5-10个点之间。说实话这个trade-off还是能接受的——你不可能要求模型"忘得很干净但啥都不影响",5-10个点的通用能力损耗换来接近完全的遗忘,算合理。


🔬 消融实验:验证器才是关键

这组消融是我觉得论文最有价值的发现。

目标算法 无验证器 Oracle验证器 自验证器
Gray 22.7 87.5 70.3
Bellman-Ford 2.3 72.7 15.6
Dijkstra 11.7 49.2 22.7
Floyd-Warshall 21.1 65.6 44.5
Euclidean 36.7 71.9 64.8
平均RSR 9.5 34.8 21.8

无验证器时平均RSR只有9.5%,加上自验证器翻了一倍多到21.8%,如果用Oracle验证器能到34.8%。

"思维崩溃"现象

这就是论文里提到的"思维崩溃"——没有验证器反馈时,模型的输出长度逐轮递减,探索越来越少,最后直接放弃或者把失败甩锅给测试环境。有验证器时,输出长度在多轮中保持稳定。其实吧,这个发现跟我之前调Agent的经验完全吻合——

Figure 4: 思维崩溃可视化

Figure 4: 有无验证器条件下模型推理长度的变化对比。无验证器时(右侧),输出token数逐轮衰减直至几乎为零;有验证器时(左侧),模型能维持稳定的多轮探索。

这个发现让我想起了之前做Agent时的经验——如果Agent在循环中没有环境反馈,它很容易陷入自我重复或直接摆烂。这里的现象如出一辙:模型不是"推理能力不够",而是"没有反馈就推理不下去"。自然语言的诊断反馈比单纯的pass/fall信号强得多,因为它告诉模型"你错在哪了"而不仅是"你错了"。


💡 测试时强化学习:让不可能变为可能

Strassen算法在所有模型、所有提示级别下RSR都是0%。这是个需要7个反直觉中间乘积的算法,靠增量搜索确实找不到。

但测试时RL改变了一切:

目标算法 正确率 RL前/后 时间 RL前/后
KMP(无提示) 100%/100% 2.12s/1.80s
Prim(级别1) 100%/100% 2.22s/1.77s
Strassen(级别2) 0%/62.5% —/1.35s

Figure 3: Strassen测试时RL奖励曲线

Figure 3: Qwen3-4B-Thinking在Strassen算法(级别2提示)上测试时RL的奖励曲线,聚合了8个问题变体,最多30步优化,成功或检测到崩溃时提前停止。

62.5%的正确率!从0%直接跳上来的。测试时RL的思路是:对那些初始RSR=0的组合,在测试问题本身上用连续奖励优化——正确解按运行时间给奖励 \(1/T\),错误解给0。

说实话,看到这个结果我第一反应是:这算不算"提示太多已经把答案喂到嘴边了"?级别2提示给了7个中间乘积的详细描述,模型只需要把描述翻译成代码。但转念一想,就算你把Strassen的思路告诉一个大一学生,能正确实现7个乘积组合的也没几个——这还是有理解力的人类。模型的挑战在于,它需要在提示的基础上做正确的代码映射和时间复杂度验证,这本身就需要推理能力。


🔍 批判性审视

说几个我觉得值得讨论的问题:

1. "遗忘"到底忘得多干净? 遗忘率99.8%听起来很高,但这是基于探测集的行为测试——模型不输出目标算法知识,不代表内部表示里真的没残留。这块我也不是特别确定,论文也承认了这一点。如果遗忘只是让模型学会了"装不知道",那重发明可能只是换个方式把记忆提取出来。蒸馏实验部分缓解了这个担忧——蒸馏后的RSR集合与遗忘后一致,但蒸馏本身也不能保证完全消除隐式知识。

2. 级别2提示的边界在哪里? Strassen的级别2提示详细描述了7个中间乘积及其组合方式,这已经非常接近"把答案告诉它"了。论文把测试时RL的成功作为"LLM具备推理能力"的证据,但你也可以反过来说:只有在充分提示下RL才能work,恰恰说明模型不具备独立发现的能力。

3. 10个算法的代表性有限。 这些都是经典的教科书算法,结构规整、输入输出清晰。真实的科学发现往往连问题定义都是模糊的,更别说有Python解释器告诉你对不对了。论文的实验设计很适合回答"能不能重发明已知算法"这个问题,但离"能不能做基础性创新"还有相当距离。

4. 跟FunSearch/AlphaEvolve的对比不够充分。 FunSearch用进化搜索在数学问题上发现了新结果,AlphaEvolve用LLM+进化优化了4x4矩阵乘法。这些工作虽然不是"从零发明",但它们的搜索空间和问题复杂度可能比本论文的10个经典算法更具挑战性。论文在Introduction中提到了这些工作,但实验部分没有直接对比,稍有遗憾。


📊 遗忘方法对比

论文还比较了几种遗忘方法的效果:

遗忘方法 平均遗忘率 LiveCodeBench
GRPO 100.0% 42.7
NPO 97.3% 38.4
DPO 96.7% 37.7
GradAscent 100.0% 41.5

GRPO在遗忘率和通用能力保持上都最好。梯度上升虽然也能达到100%遗忘率,但LCB分更低。NPO和DPO在遗忘率上差一点,通用能力损耗也更大。这说明on-policy的GRPO遗忘确实比off-policy方法更适合这个场景——因为遗忘需要模型持续与环境交互来调整策略。


🧠 我的判断

这篇论文的核心价值不在结论——"LLM能重发明50%-90%的基础算法"这个数字的解读空间很大,取决于你对遗忘和提示的信任程度。真正的价值在于实验框架本身:遗忘-重发明管线是一个可行且有创意的方案,首次给出了区分"记忆"和"发明"的操作性定义。

几个亮点:

  • 思维崩溃的发现很有实际意义。它说明LLM做长程推理时,验证器反馈不是锦上添花而是刚需。这个洞察对Agent系统设计有直接启发。
  • 测试时RL的成功展示了一种新范式:当模型"差一点就能到"的时候,推理时优化可以补上最后一程。
  • 遗忘方法的系统对比为后续研究提供了扎实的基线。

局限也很明显:遗忘不等于无知,级别2提示离"喂答案"不远,10个算法的覆盖面偏窄。更本质的追问应该是:当问题没有明确的通过/失败信号时,LLM还能"发明"吗?

如果你也在做LLM推理能力评估或者Agent系统,这篇论文的框架和发现值得细看。特别是思维崩溃那部分——在你的Agent循环里加上有效的验证器反馈,可能比换一个更大的模型更有用。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我