GPT-4数学能力还能更强!
新研究发现GPT-4代码解释器做题准确率与其使用代码的频率有关。
为此,研究人员提出新方法对症下药,直接将其数学能力拔至新SOTA:
在MATH数据集上,做题准确率从53.9%增加到了84.3%。
你没听错,就是前段时间被称为ChatGPT推出后最强模式的那个代码解析器(Code Interpreter)。
研究人员窥探了其代码生成和执行机制,使用自我验证、验证引导加权多数投票的方法,直接打开其做数学题的任督二脉。
好奇网友随即而来:
还想看他们做高数。
还有网友认为:
这也就是大脑的工作方式,人类在解决数学问题时也会自我验证。
一起来康康这项研究的细节~
两步提升数学能力
GPT-4代码解析器的代码生成和执行机制究竟是怎样的?
来自港中文MMLab、南京大学、中科大、清华、城大、长沙理工等多个机构的学者为解开这一问题,使用特定代码约束提示进行了一项试验。
他们设计了3种不同的提示方法,限制GPT-4代码解析器使用代码的频率:
Prompt 1:完全不允许使用代码,输出完全依赖自然语言推理,禁止将代码合并到解决方案中。
Prompt 2:只允许使用1次代码,也就是在生成解决方案时,只能在单个代码块内使用代码。
Basic Prompt:没有限制,GPT-4代码解析器可以进行一系列推理步骤,每个步骤都可由文字+Python代码组成。
△(a)不同提示回答准确率比较(b)代码使用频率与五个难度级别准确率都成比例,数学问题相对复杂时更明显
结果发现,允许GPT-4代码解析器多次生成和执行代码,其解题正确度明显高于仅用自然语言推理或只用1次代码的情况。
经分析,研究人员认为代码的多次生成和执行可以让GPT-4代码解析器逐步完善解决方案,当代码执行产生错误时,GPT-4代码解析器可以自我调试修改方案。
继而引入“代码使用频率”概念,量化不同提示方法下代码的使用次数。
基于前面的分析结果,研究人员希望能加强GPT-4代码解析器生成准确代码、评估代码执行结果以及自动调整解决方案的能力。
所以提出了CSV(自我验证)提示的方法,也就是为解决方案C引入了一个额外的验证阶段,称为V。
加入自我验证提示效果对应上图绿色Verification Prompt。
如此一来,GPT-4代码解析器需额外生成代码来验证答案,如果结果是False则重新推理得到正确答案。
CSV提示不仅对验证到逻辑推理每一步都进行了扩展,而且可以自动更正错误,无需外部模型或人工参与。
△MATH数据集中第712个中级代数问题。
CSV prompt:To solve the problem using code interpreter step by step, and please verify your answer using code interpreter.
通过上图这个例子可看出,在没有自我验证的情况下,模型生成了一个错误的答案。通过自我验证,模型纠正了错误并生成了正确的答案。
此外,鉴于CSV可以有效地验证问题的答案,研究人员又提出了验证引导加权多数投票(VW-voting)的方法,将自我验证结果集成到多数表决中,给予不同验证状态不同权重,使表决更可靠。
在实际操作中,一旦一个答案被确认为错误,那就不会进行额外的验证,从而得到一个错误的验证状态。研究人员分配相应的权重给这些状态:真实(wT)、不确定(wU)和错误(wF)。
最后从候选答案中择取得分最高的那一个:
比此前最高水平提高30%
用上了上述方法,GPT-4代码解析器做数学题的能力up up。
在MATH数据集上,原始GPT-4代码解析器的准确率为69.69%,使用CSV提示后提高到73.54%,再结合加权多数表决后进一步提高到84.32%,相比之前SOTA提高了30%以上。
△在MATH数据集上的准确率(%)
在MATH数据集的各个子任务中,提出方法均取得显著提高,尤其是在高难度级别的题目中效果更明显。例如在中级代数(Intermediate Algebra)题目中,原来的GPT-4代码解析器准确率为50.1%,使用新方法后提高到74.4%。
除此之外,研究人员还在GSM8K、MMLU-Math、MMLU-STEM等数据集上进行了验证。
△在GSM8K数据集上的表现
上表可以看出,使用验证引导加权多数投票的方法还可以显著减少需要采样的解路径数量(Sampled paths),在GSM8K数据集上只需要5个路径就达到97%的准确率。
△在MMLU数据集上的表现
针对不同难度的题目(下图a)以及不同类型题目(下图b)的测试中,使用新方法后准确率都有了提升。
△每条曲线上的四个点分别对应于使用Prompt 1、Prompt 2、BasicPrompt、CSV Prompt得到的结果。
研究人员还发现GPT-4代码解析器的代码使用频率提高与准确率提高正相关。随着题目难度的增加,代码使用频率稳步上升。这说明在较难的数学问题上,更频繁地使用代码很重要。
此外,值得注意的是,尽管添加基于代码的自我验证可以提高每个单独题目类型的性能,但改进的程度也因题目类型而异,从7.6%到仅0.6%不等。