我们都知道,大语言模型在生成代码方面,表现出了非凡的能力。然而,在具有挑战性的编程任务(比如竞赛和软件工程师的面试)中,它们却完成得并不好。
好在,很多模型会通过一种自修复工作流来「自省」,来自我纠正代码中的错误。
研究者很希望知道,这些模型在多大程度上能提供正确的反馈,并且说明自己生成的代码为什么是错误的。
近日,MIT和微软的学者发现, 在对GPT-4和GPT-3.5,只有GPT-4表现出了有效的自修复。并且,GPT-4甚至还能对GPT-3.5生成的程序提供反馈。
论文地址:https://arxiv.org/abs/2306.09896
爱丁堡大学博士生符尧表示,自己的团队也发现了类似结果——只有GPT-4能够自我改进,而较弱的模型则不能。
也就是说,只有当模型足够「成熟」(规模大且对齐良好)时,可能存在一种新的「涌现能力」(即在自然语言反馈的基础上改进)。
只有足够「成熟」的模型才能听取并在自然语言反馈的基础上进行改进;较弱的模型要么无法理解反馈,要么无法对其进行改进。
我倾向于相信这种「涌现能力」(通过语言反馈自我改进)将对LLM的发展产生非常重大的影响,因为这意味着AI可以在很少的人工监督下持续不断地进行自主改进。
俄勒冈州立大学杰出教授Thomas G. Dietterich认为,这可能是LLM包含了多个子模型,这些子模型之间可能存在不一致性,而这种情况在更大的模型中更为常见。
「自我改进」是去除这些不一致性的过程。他的预测是,一旦这些不一致性被消除,自我改进将停止。
对此,符尧非常同意:「在上下文学习中使用自我改进,可能会一定程度上推动模型,但进展不会很大;而强化学习可能会推进得更远。之后,模型需要与世界进行交互,通过接受基于实际情境的反馈来进一步改进。」
不过,俄亥俄州立大学工程系杰出助理教授Yu Su则认为,这可能只是因为在指令微调的数据上存在一些无意的差异而已。
对此符尧表示,他在Claude模型上也发现了类似的行为——Claude-instant无法很好地响应语言反馈(因为它很难理解和遵循指令),但Claude可以。
而且,这些观察结果还在多篇相关的论文中出现,不太可能是无意的数据差异。
揭秘用于代码生成的GPT自修复
大语言模型怎样通过自我修复提高性能?这个过程是靠模型的自省,自我纠正代码中的错误。
下图显示了模型自修复方法的典型工作流。
首先,我们会给定一个规范,从一个代码生成模型中给一个程序采样,然后在规范中的一组单元测试上执行这个程序。
如果程序在测试中失败,错误消息会被传送到反馈生成模型,输出一个代码失败原因的解释,然后把反馈传给修复模型。
从表面上看,这个工作流似乎非常完美。它让系统克服了在解码过程中不良样本引起的错误,还模仿了人类软件工程师写代码的试错方法。
然而,工作流有一个问题:自修复需要对模型进行更多的调用,从而增加了计算成本。
而且,研究者们发现了一个很有意思的现象:大模型自修复的有效性不仅取决于模型生成代码的能力,还取决于它对于代码如何在任务中犯错的识别能力。
目前还没有任何工作对此进行详细调查,因此,作者们研究了GPT-3.5和GPT-4在解决竞赛级代码生成任务时的自修复有效性。
他们提出了一种pass@t的新评估策略,在这个策略中,根据从模型中采样的token总数来衡量任务的通过率。
因为使用的是pass@t,而不是传统的pass@k(根据实验数量衡量通过率),这样就能与纯粹基于采样的方法进行公平的比较。
从实验中,研究者发现:
1. GPT-4才能实现自我修复带来的性能提升;对于GPT-3.5,在所有预算下,修复后的通过率要低于或等于基准的无修复方法。
2. 即使对于GPT-4模型,性能提升也最多只能算是适度的(在预算为7000个token的情况下,通过率从66%提高到71%,约等于45个独立同分布的GPT-4样本的成本),并且取决于初始程序的多样性足够丰富。
3. 使用GPT-4生成的反馈替换GPT-3.5对错误的解释,可以获得更好的自修复性能,甚至超过基准的无修复GPT-3.5方法(在7000个token下,从50%提高到54%)。
4. 使用人类程序员提供的解释替换GPT-4自己的解释,可以显著改善修复效果,修复并通过测试的程序数量增加了57%。
实验
研究人员又进一步针对3个问题进行了测试:
1. 对于更加有挑战的编程任务中,这些模型的自我修复是否比不进行修复的i.i.d.有更好的采样?
2. 更强的反馈模型会提高模型的修复性能吗?
3. 如果让人类参与功能最强模型的自我修复循环,提供人工反馈,是否可以解锁更好的修复性能?
首先研究团队引入了一个很有挑战的编程任务:Automated Programming Progress Standard (APPS)数据集中的编程任务。
这个数据集中的任务包括从入门级到大学竞赛级的编程任务,可以用来评估人类程序员解决问题和代码能力。
研究人员选取了300个任务,包括60个入门级别的任务和60个竞赛级别的任务。
研究人员选取了GPT-3.5和GPT-4作为模型,使用模板字符串连接和单次提示词来进行自我修复。
下图为提示词的实例之一。
自修复需要强大的模型和多样化的初始样本
研究人员让单个模型分别进行代码的修复生成和反馈生成。
在右边的图中,我们沿轴显示了具有两个超参数的热图,其中每个单元格中的值表示平均通过率,当给定相同的token预算(即t的相同值pass@t)时,自我修复由基线的平均通过率归一化。
从图中可以看到,对于GPT-3.5模型,pass@t在所有设置下都低于或等于相应的基线(黑),清楚地表明自我修复对GPT-3.5并不是一种有效的策略。
而在GPT-4(下图)中,有几个值的自修复通过率明显优于基线。
GPT-4反馈改进了GPT3.5的修复结果
研究人员又进一步进行了新的实验,评估使用单独的、更强的模型来生成反馈的效果,目的是为了测试一个假设:由于模型无法内省和调试自己的代码,阻碍了自我修复(比如说对于GPT-3.5)。
这个实验的结果如上图(亮蓝色)所示。
在绝对性能方面,GPT-3.5,GPT-4确实突破了性能障碍,并且比GPT-3.5的i.i.d.采样略微更高效。
这表明文本反馈阶段本身是至关重要的,改进它可以缓解GPT-3.5自修复的瓶颈。
人工反馈显著提高了GPT-4修复的成功率
在最后一项实验中,想要研究在用更强的模型(GPT-4)进行修复时,加入专家人类程序员的反馈的影响。
研究目的是了解模型识别代码中错误的能力与人类的能力相比如何,以及这如何影响自修复的下游性能。
研究人员研究人员招募了16名参与者,包括15名研究生和1名专业机器学习工程师。
每个参与者都有五种不同的基础程序,基于他们的Python经验编写代码。
每个程序都取自不同的任务,参与者永远不会看到属于同一个任务的两个不同的程序。
然后,参与者被要求用他们自己的话解释这个程序做错了什么。
实验结果如下图所示:
研究人员发现,当我们用人类参与者的调试替换GPT-4自己的调试时,总体成功率提高了1.57×以上。
不出意外的是,随着问题变得更难,相对差异也会增加,这表明当任务(和代码)变得更复杂时,GPT-4产生准确和有用反馈的能力远远落后于人类参与者。
作者介绍
Jianfeng Gao
高剑锋是微软的杰出科学家和副总裁,也是IEEE Fellow。
在微软研究院,他是Redmond分部深度学习(DL)组的负责人。该组的使命是推进DL的最新技术,并将其应用于自然语言和图像理解以及构建对话代理。他领导了构建大规模基础模型的研究,这些模型为微软的重要人工智能产品提供了支持。
从2022年开始,他负责自我改进人工智能的研究,其中包括对LLM(如ChatGPT/GPT4)进行增强和适应,以用于商业人工智能系统的开发。
在此之前,他于1999年在上海交通大学获得博士学位。
Chenglong Wang
Chenglong Wang是微软研究院的研究员,此前在华盛顿大学获得了博士学位,并曾就读于北京大学。
符尧的相似发现
论文地址:https://arxiv.org/abs/2305.10142
在这篇论文中,研究人员研究了多个LLM是否能够在谈判博弈中进行自主改进。
如果LLM能够相互进行改进,这将意味着研究人员有可能在最少的人为干预下创建强大的AI代理。
他们让两个LLM分别扮演买方和卖方的角色,目标是与买家达成交易,买家的目标价格应该较低,卖家的目标价格应该较高。
研究人员又找来第三种语言模型,扮演评论家提供反馈,以改进另两个LLM的谈判策略。
研究人员让两个LLM进行了多轮比赛,使用之前的谈判历史和AI反馈作为上下文,迭代地改进模型的谈判策略。
两个LLM分别是GPT和Claude,使用交易价格作为评估指标。
团队发现,只有一小部分可以通过AL反馈进行自我博弈并提高交易价格,较弱的模型要么不理解游戏规则,要么不能纳入AI反馈以进一步改进。
此外,扮演不同角色的模型从反馈中学习的能力不同。例如,Claude-instant作为买方比作为卖方更难提高。
同时,当游戏展开到多个回合时,更强大的代理可以通过有意地使用之前的经验和迭代AI反馈来不断提高自己的表现,但却有更高的破坏交易的风险。
研究人员希望这部分工作能够提供一些初步探索,让模型通过游戏和AI反馈自主地相互改进。
研究人员研究了多个LLM是否可以在协商游戏中以最少的人为干预进行相互改进,就像AlphaGo Zero那样——AI智能体通过在明确定义的规则下,持续进行竞争游戏来提高自己。
这个问题具有深远的意义。如果智能体能够进行自主改进,研究人员就可以在很少的人工注释下创建强大的智能体,大大节省了训练成本。
在风险方面,它还意味着将能创建出具有有限人工监督的强代理。
下图就是Claude和GPT讨价还价的图示:
第一轮先由买卖双方自由发挥,然后AI给出反馈。
之后买卖双方再根据反馈的内容进行新一轮互动。
图B展示了AI可能给出的反馈,以及GPT-4根据反馈如何提升自己。
比如flinch technique,一种砍价的时候的「退缩技巧」,展示出一种意外和失落。
话术就像:哎这可比我想的贵啊。
只有性能强大的AI才能每轮都从反馈中提升,性能较弱的AI做不到这一点。
下图中C1表示可以进行日常交谈的模型,C2表示可以进行角色扮演、讨价还价的模型,C3表示单轮内可以从AI反馈中提升自己的模型,C4则是最强一批——可以持续进行提升的模型。
实验表明,在AlphaGo Zero模式下,在定义明确的规则下,通过迭代AI反馈的持续比赛,某些模型确实可以得到改善。
研究人员还展示了下一轮游戏中,价格改进和成功率之间的权衡,因为更好的交易价格也伴随着更高的风险。
这表明,在未来的研究中,可能会考虑全局优化,以提高多轮的整体收益。
研究人员进一步从迭代AI反馈中展示了语言改进的证据:在多轮游戏中,一个模型可能比另一个模型精炼, 可以更好地调整单词,从而更有效地获得更好的交易。
研究人员相信该结果对AI研究具有深远的影响。
从积极的方面来看,它表明了在最少的人为干预下不断改进语言模型是非常可能的。
而风险方面,在研究人员的框架中监督模型行为可能更具挑战性——因为模型是自主行动的,这需要未来在多智能体游戏环境下进行对齐和安全性研究。