DeepMind提出代码链,通过“代码思考”改进推理性能

在未来,如果想要精确地操控机器人,除了让它理解简单易操作的指令,可能还需要一种更智能、可以理解复杂推理的方法来执行指令。

谷歌DeepMind最近提出了一个简单且高效的方法 Chain of Code(CoC),可以优化大语言模型的代码来驱动推理。Chain of Code通过“以代码方式思考”来拓宽语言模型正确回答推理问题的范围。

Chain of Code的核心思想是鼓励大语言模型 以一种灵活的伪代码形式来表示语义子任务。通过采用这种伪代码的形式,可以让代码解释器清晰地捕捉到未定义的行为,并将其传递给语言模型进行模拟(LMulator)。

▲图1 CoC 生成代码并通过语言模型增强的代码模拟器推理

如图 1 的结果展示,这项工作突显了如何更好地结合代码的结构和计算能力以及语言模型的推理能力,实现了一个兼具两者优势的推理器。

论文题目:
Chain of Code: Reasoning with a Language Model-Augmented Code Emulator

论文链接:
https://arxiv.org/abs/2312.04474

博客地址:
https://chain-of-code.github.io/


代码链(Chain of Code, COC)

先前研究工作的推理多是通过上下文学习实现,为模型提供示例,而不是通过梯度更新权重。本研究将问题分解为子步骤时,提出了三种为 CoC 奠定基础的方法:

  • CoT:这些子步骤用自然语言表示,反映了解决复杂问题时的思维过程。

  • ScratchPad:在模拟代码输出时保持中间步骤的程序状态,使 LM 充当代码解释器。

  • Program of Thoughts:专注于生成代码本身,然后由代码解释器执行以解决推理问题。

如下图 2,蓝色高亮表示语言模型生成,红色高亮表示由语言模型生成的代码由解释器执行,紫色高亮表示 LMulator 通过绿色的程序状态模拟代码。与以往的推理方法相比,CoC 先生成代码或伪代码以解决问题(图 2d),然后使用代码解释器执行代码(图 2e),并在无法执行时使用语言模型模拟代码(LMulator)。

▲图2 CoC 与先前推理方法的对比

CoC 分为两个步骤:

  1. 生成:在给定要解决问题的情况下,语言模型生成用于推理问题的代码或伪代码。

  2. 执行:生成的代码通过代码解释器执行或者通过 LMulator 执行,模拟代码的执行过程。

CoC 生成

给定要解决的问题,CoC 生成代码结构的推理子步骤,可以是明确的代码、伪代码或自然语言形式。图2d 展示了解决 BIG-Bench 中对象计数问题的潜在生成过程。

CoC 执行

CoC 的核心贡献不仅在于生成推理代码,更在于执行方式:

  • 一旦编写了代码,一旦代码编写完成,系统会尝试由代码解释器(如 Python)来运行代码。

  • 如果代码成功执行,系统会更新程序状态并继续执行。

  • 然而,如果代码无法执行或者引发异常,系统将切换到语言模型模拟执行。

  • 接着,通过语言模型的输出来更新程序状态,并继续执行。

这一混合模式称为 LMulator(语言模型 LM 和代码模拟器 emulator 的混合词)。图 2e 展示了如何在生成的代码中切换并保持程序状态,同时在 Python 执行器和 LMulator 之间进行转换。

CoC 执行

CoC 的生成过程的比较直接,但执行阶段相对较为复杂。实现采用 Python 的 try 和 except 机制并维护程序状态。CoC 逐行执行代码:

  • 如果一行代码能够由代码解释器执行,系统将执行该代码、更新程序状态,并继续执行。

  • 当代码无法由解释器执行时,语言模型将获取程序的上下文,包括问题、之前行以及程序状态历史,并生成下一个程序状态。这一模拟过程还能利用思维链(CoT)确定回复方式。

  • 之后,生成的程序状态被同样更新给代码解释器。这种程序状态的共享机制适用于任意交织的情形,即使涉及控制流(如 for 循环和 if 判断)。

  • 整个代码运行过程将持续进行,最终答案将以"answer"变量的值的形式检索,或在无法恢复的错误情况下,语言模型将输出"A: answer"。

CoC 的优势

CoC 的主要优势在于:

  1. 它将代码的表达力与语言模型的语义和常识知识相结合,使得在新领域中能够充分利用代码。这种结合允许语言模型轻松处理那些难以用代码表达的规则。这不仅在对推理问题有益,而且其灵活性使其能够执行更富有表现力的语言,如伪代码。

  2. 它充分发挥了语言模型的编程能力,这得益于现有高质量数据。

  3. 它继承了代码推理的许多优势,既有代码正式且富有表达力的结构,又能利用代码提供的强大计算工具。

  4. 它继承了通过中间步骤推理的许多技术优势,如 CoT,使得语言模型在需要时能够利用更多计算来解决问题,并提供更多的可解释性。

实验

问题 1:整体性能如何?

在 BIG-Bench Hard(BBH)上,CoC 的效果达到了 84%,比 CoT 还高出 12%。此外,在 23 项任务中的 18 项中,CoC 的表现都超过了人类评分员的平均水平。

▲表1 整体性能(%),包括单一任务的 few-shot 提示和跨任务提示

问题 2:在哪些类型的问题上表现最好?

图 3 中,对实验结果根据问题的类型(算法与自然语言)进行了区分,观察到在算法任务中,CoC)表现尤为出色,而在自然语言任务中,CoC 与 CoT 的表现相当。在保持自然语言任务中 LM 语义推理能力的同时,还灵活使用 LMulator 模拟代码执行输出。

▲图3 根据任务类型分组的平均性能比较

图 3 将任务细分为两个主要类别,以捕捉每个问题的回复有多大不同。当代码被重复运行并由 Python 执行时,CoC 几乎达到了 100% 的准确率。其他类别对于 CoC 来说更具挑战性,然而,在每个类别中,我们仍然看到相对于 Baseline 的明显性能提升。

问题 3:各方面如何影响整体性能?

▲图4 按任务类型分组的 CoC 消融实验

可以看到,执行 Python 的方法在一些任务上实现了 100% 的性能:如果代码正确,那么模型每次都会是正确的。然而,仅依赖 Python 的方法在应用于非算法任务时表现不佳,几乎全部失败。CoC (Python) 消融实验表明,如果应用于数值问题,则代码推理的性能良好

▲图5 与人类相比,所有 BIG-Bench Hard 任务的结果

在消融实验中 CoC 首先尝试使用 Python 运行整个代码,如果失败,则使用语言模型模拟代码,该方法表现不错。由此,尽管观察到性能轻微下降,但保持程序状态使性能提升

问题 4:在模型规模上的扩展性如何?

图 6 展示了 CoC 在不同模型规模下的性能。与 CoT 提示类似,随着模型规模的增加,CoC 的改进也在增加。在某些算法任务中,CoC 的表现甚至超过了最优秀的人类评分员。这表明较小模型更容易输出结构化代码作为中间步骤,而不是自然语言。

▲图6 模型规模变化下的平均性能

问题 5:作为通用推理器在跨任务提示上的表现如何?

作者使用来自不同问题的几个示例来提示语言模型。在图 6 和表 2 中可以看到,所有方法的性能都有所下降,但 CoC 在规模上几乎达到人类平均性能的同时,还超越了 CoT 和直接提示。

▲表2 通过单一任务 few-shot 提示和跨任务提示的消融(%)

问题 6:与经过指令微调的聊天模型相比如何?

基于 text-davinci-003 的代码链(Interweave)甚至在性能上超过了一个规模更大的指令型模型 GPT-4,其中 GPT-4 接受在解决推理问题时生成代码的指令。

▲表3 在聊天界面中与经过指令微调的模型比较,使用和不使用工具。

机器人下游任务

机器人任务需要语义和算法推理,以及通过代码与其他 API,因此 CoC 非常适合像机器人任务这样的下游应用。能够在运行时用 Python 解释器和 LMulator 解决挑战,同时允许更多的可解释性和对机器人策略的精细控制

CoC 首先生成代码来解决问题,然后使用 Python 执行代码,如果无法执行,就使用 LMulator 执行。在这个任务中,机器人成功地将便利贴放入回收箱,将橙皮放入堆肥箱。

▲图7  任务“将桌子上的物体分类到堆肥箱和回收箱”的机器人轨迹可视化

总结

本文深入探讨了 Chain of Code(CoC)的创新方法,该方法通过将代码和语言模型结合,推动语言模型进行更有效的推理。CoC 的核心思想是通过编写代码进行推理,然后通过代码解释器或语言模型模拟执行代码,从而扩展语言模型正确回答推理问题的范围。

虽然 CoC 的实施方法在执行和上下文长度方面存在一些限制,但在解决语义推理问题方面表现出色。这为未来的研究提供了广泛的可能性,包括与其他模态的集成,以及在新的应用领域如机器人和增强现实中的应用。

CoC 的灵活性和不错的性能为语言模型与代码推理的融合开辟新的前景,为解决更多推理相关的复杂问题提供了潜在的研究方向。

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值