Program Semantic Inequivalence Game with Large Language Models
本文引入了一种半对抗性的“语义不等价博弈”(SInQ),其中生成代理与评估代理通过协作合成训练数据,以增强大语言模型的程序语义推理能力,并证明了其在跨语言漏洞检测和复杂标识符替换任务中的显著改进。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正在教一个聪明但思维过于刻板的机器人如何编写计算机代码。你可能会想:“如果我给它展示一百万个关于如何盖房子的例子,它就会知道如何建造摩天大楼。”但计算机是很微妙的。它们擅长模仿模式,但当被要求理解代码背后的“深层逻辑”时,往往会栽跟头——比如为什么食谱中一个微小的变化会导致蛋糕塌陷,或者一个隐藏的后门是如何让窃贼潜入数字房屋的。这就是“程序语义学”(program semantics)的世界,它研究的是代码实际“做了什么”,而非代码“看起来在做什么”。
为了教会机器人这种深层逻辑,我们通常需要人类老师指出每一个错误,但这既慢又贵。另一种方法是让机器人进行自主练习,但它往往只会练习简单的部分,而忽略了那些困难的谜题。这篇论文探索了一种新的训练 AI“程序员”的方法,即把它们变成一场高风险逻辑游戏的玩家。与其仅仅是记忆答案,不如让 AI 学习去发现两段看似几乎完全相同的代码之间那不可见的差异。如果它能掌握这个游戏,它在寻找安全漏洞和编写更安全软件方面可能会变得更加出色,即使面对从未见过的语言也是如此。
代码大侦探游戏
本文的作者 Antonio Valerio Miceli Barone、Vaishak Belle 和 Ali Payani 发明了一种聪明的训练方法,称为语义不等价游戏(Semantic Inequivalence Game,简称 SInQ)。把它想象成一场数字版的“找不同”游戏,由两个不断试图智斗对方的 AI 智能体来进行。
玩家:爱丽丝(Alice)与鲍勃(Bob)
想象两个 AI 侦探,爱丽丝和鲍勃,正坐在彼此对面。
- 爱丽丝是恶作剧者。她会被给予一段代码(我们称之为程序 P),她的任务是创建一个“伪造”版本(程序 Q),这个版本看起来与原程序几乎完全一样,但行为却略有不同。她还必须找到一个特定的“测试输入”(比如一个特定的数字或单词)来证明这两个程序是不同的。如果她找不到差异,她就输了。
- 鲍勃是侦探。他会被展示程序 P 和程序 Q。他的任务是弄清楚:“这些程序真的不同吗?”如果它们确实不同,他必须找到那个暴露差异的具体测试输入。如果他找到了,他就赢了;如果他漏掉了,爱丽丝就赢了。
训练循环
起初,爱丽丝不擅长制造复杂的伪造品,而鲍勃擅长识破它们。但随着他们反复对弈,他们都会变得越来越强。爱丽丝学会了制作更难被察觉的伪造品,而鲍勃学会了寻找更深层、更细微的线索。他们在一种“自我博弈”(self-play)的循环中互相训练,类似于国际象棋大师通过与一个每次对局都会变得更聪明的计算机对弈来进行练习。
这里的奇妙之处在于,他们不需要人类老师来评价“做得好!”或“回答错误”。这个游戏内置了一个裁判:计算机沙盒。他们只需运行这两个程序并使用该测试输入即可。如果结果不同,则说明输入有效,游戏是公平的。如果结果相同,则说明恶作剧失败了。这意味着 AI 是通过实践而非猜测来学习的。
他们的发现
研究人员在两个不同的 AI 模型(gpt-4o-mini 和 gpt-4.1-nano)上测试了这个游戏,以观察玩这个游戏是否能让他们在现实世界的编程任务中表现得更好。
1. “Python 内置标识符交换”挑战
他们测试了一个极其困难的谜题,即“Python 内置标识符交换”。想象一个程序,其中的 print 和 len(Python 的标准工具)被互换了位置。对人类来说这很令人困惑;但对 AI 来说,这是一场噩梦,因为代码看起来很正常,但行为却很诡异。
- 结果: 玩过这个游戏的 AI(鲍勃)在其中一个模型上显著提高了识别这类诡计的能力。对于 gpt-4o-mini,在没有任何额外提示的情况下,其准确率从极低的 1.65% 跳升至 5.35%。然而,在另一个模型上结果却褒贬不一:在 gpt-4.1-nano 上,训练实际上在没有额外提示的情况下让性能略有下降,且使用“思维链”(chain-of-thought,即让 AI 阐述其推理过程)的方法反而导致准确率进一步下降。这表明,虽然游戏教会了 AI 去观察得更深,但其收益高度依赖于所使用的具体模型。
2. 寻找安全漏洞(漏洞检测)
团队还测试了这种训练是否有助于 AI 发现代码中的安全漏洞。他们使用了两个基准测试:
- PySecDB: 一个关于 Python 代码变更的数据集,用于观察是否修复了安全问题。
- CodeXGLUE: 一个 C/C++ 代码数据集(一种与 AI 训练时使用的 Python 不同的编程语言!),用于寻找已知漏洞。
- 结果: 玩过这个游戏的 AI 在发现这些漏洞方面表现出了微小但持续的进步,甚至是在它训练期间从未见过的 C/C++ 语言中也是如此。这意义重大,因为它表明 AI 学到的是一种通用的“逻辑识别”技能,而不仅仅是记忆 Python 的答案。
3. 编写新代码
最后,他们检查了该游戏是否能帮助 AI 从头开始编写新代码。结果喜忧参半。AI 在编写代码方面并没有变得更好,但也没有变差。作者认为这很合理:他们训练的是“侦探”(鲍勃),而不是“作者”(爱丽丝),因此侦探变得更敏锐了,擅长发现错误,但不一定会变成一个更好的创作者。
大局观
论文指出,这种“语义不等价游戏”是一种强大的方法,可以教会 AI 理解代码的逻辑,而不只是模仿模式。通过强迫 AI 去寻找两段程序之间微小且不可见的差异,它学会了更加谨慎和讲究逻辑。
然而,作者也谨慎地指出,这并不是解决所有编程问题的万灵药。改进是真实的,但在某些领域表现得较为温和,且该方法依赖于 AI 能够运行代码来检查答案。他们还指出,由于预算限制,他们只进行了几轮训练,因此如果进行更长时间的游戏,可能会有更大的潜力。
简而言之,通过将代码训练转变为一场“找不同”的游戏,研究人员展示了 AI 可以通过这种方式变得成为一名更敏锐、更具逻辑性的侦探,能够发现其他模型可能会忽略的安全风险和混乱逻辑。这是迈向让 AI 不仅仅是一个代码生成器,而是一个真正的代码推理器的重要一步。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。