Try Again, Don't Look Back: Blind Resampling Outperforms Self-Repair in Small Code Models
本文表明,对于小型代码模型,盲目重采样(在没有反馈的情况下重试)的效果优于或等同于标准的自我修复方法,同时使用的 Token 数量显著减少,因为基于模型自身失败尝试的条件化会导致其“锚定”在原始错误上,而非有效地利用执行反馈。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正在教一个机器人写计算机代码。你给机器人一个任务,比如“写一个程序来计算两个数字之和”,然后它尝试去完成它。有时,机器人会犯错,导致代码无法运行。在人工智能的世界里,有一个流行的概念叫作“自我修复”(self-repair)。这就像是告诉机器人:“嘿,你搞砸了。这是你出错的代码和错误信息。现在,观察它,思考哪里出了问题,然后尝试修复它。”这听起来像是从错误中学习的一种聪明方法,对吧?但这里有一个陷阱。当我们测试这种“修复”是否有效时,我们通常会将其与一个在失败后直接放弃的机器人进行比较。这有点不公平,因为获得第二次机会的机器人之所以成功率更高,仅仅是因为它多试了一次,而不是因为它真的从错误中学习了。为了真正知道“修复”是否是那个神奇的要素,我们需要将它与一个获得第二次机会但却看不见自己旧错误的机器人进行比较。这篇论文深入探讨了这样一个问题:是回顾失败并尝试修复它更好,还是忘掉失败并从头开始尝试一种全新的方法更好?
研究人员决定让一些小型 AI 模型玩一场“重试,但不回头看”的游戏。他们使用了一个巧妙的“安慰剂”实验设计,这通常是我们在医学中用来观察药物是否起作用,或者仅仅是由于服用药物的心理暗示起到了作用。在这里,他们对比了机器人尝试修复代码的四种不同方式:
- 盲目重采样(Blind Resampling): 机器人获得了第二次机会,但它对第一次尝试一无所知。这就像要求一名学生重新参加数学考试,但不给他们看第一份卷子。
- 安慰剂(The Placebo): 机器人看到了它出错的代码,以及一条简单的提示说:“这是错的”,但没有任何细节说明为什么错。
- 真实反馈(Real Feedback): 机器人看到了出错的代码以及具体的错误信息(例如“你漏掉了一个分号”)。
- 反思(Reflection): 机器人看到了错误,并被要求在尝试修复之前,先写一段话来解释哪里出了问题。
他们在三种不同规模的 AI 模型(小、中、稍大)上进行了这项测试,并观察了它们写对代码的次数。
这里有一个令人惊讶的转折:回顾错误实际上让小型机器人的表现变差了。
对于较小的模型(15 亿和 30 亿参数),“盲目重采样”策略是明显的赢家。它不仅准确率最高,而且在计算时间和能源消耗方面也最便宜。当研究人员强迫机器人查看自己失败的代码时(“安慰剂”或“反馈”组),机器人陷入了僵局。它们倾向于对错误的原始代码进行微小到几乎不可察觉的修改,而不是构思一个全新的解决方案。论文将这种现象称为**“锚定效应”(anchoring)**。这就像如果你试图画一只猫,画坏了,然后试图通过只擦掉坏画中的几条线来修复它。结果你会得到一只奇怪的、半成品式的猫。但如果你直接换一张新纸从头开始,你可能会画出一只完全不同的、更好的猫。
研究人员发现,当机器人查看自己的失败尝试时,它们会重复生成一个几乎一模一样的程序,频率高达 33% 到 68%。相比之下,当它们盲目尝试(不看之前的尝试)时,重复自身的概率仅为 2% 到 14%。错误信息中的“信息量”完全没有起到帮助;一个简单的“这是错的”提示与完整的错误报告一样糟糕。甚至要求机器人“大声思考”其错误(反思)也未能挽救局面;这只会让过程变得更加昂贵,而无法在结果上带来显著的提升。
然而,对于更大的“大脑”,仍有一线希望。当他们测试最大的模型(70 亿参数)时,回顾过去的惩罚几乎消失了。“盲目重采样”和“自我修复”的方法在统计学上不相上下。这表明,随着 AI 变得越来越聪明,它会变得更擅长不再被自己的错误所困扰。但这对于许多人实际使用的较小、较廉价的模型来说,建议很明确:不要回头看。
论文还排除了其他几种可能性。他们检查了是否是因为提示词(prompts)过长导致机器人感到困惑,但加入来自其他成功任务的代码并没有损害性能。这证明了问题不在于长度,而专门在于机器人看着它自己的失败。他们还检查了是否是由于计算机存储数字的方式(量化)导致的故障,但即使使用更高的精度,结果依然保持不变。
那么,结论是什么?如果你正在使用小型 AI 来编写代码,不要浪费时间向它展示它的错误并要求它修复。它很可能会陷入一个微小且无意义的修改循环中。相反,直接让它从头开始尝试。这更快、更便宜,而且出奇地效果更好。试图“修复”一个糟糕的第一尝试所付出的代价,仅仅是让你被困在那个糟糕的第一尝试中。有时候,前进最好的方式就是忘掉过去,重新开始。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。