60亿击败1750亿、验证胜过微调:OpenAI发现GPT-3解决数学题,并非参数越大越好

共 3248字,需浏览 7分钟

 ·

2021-11-04 09:19

视学算法报道

编辑:杜伟、陈

现在,OpenAI 的模型也具备解决小学数学应用题的能力了。

简单的小学数学应用问题,对于人类来说不算什么,但对于模型来说,可能是有难度的。

比如问题:安东尼有 50 支铅笔。他把 1/2 的铅笔给了布兰登,剩下的 3/5 铅笔给了查理。他保留了剩下的铅笔。问安东尼保留了多少支铅笔?


像 GPT-3 这样的大型语言模型虽然取得了许多令人印象深刻的技能,包括模仿人的多种写作风格、20 分钟内完成论文等等。然而,类似 GPT-3 这样的模型很难执行需要进行准确多步推理的任务。就如上述问题让模型给出准确答案还是困难的。

尽管类似 GPT-3 这样的模型可以推导出正确解决方案大致内容,但也经常会产生严重的逻辑错误。

为了在复杂逻辑领域可以达到与人类相媲美的性能,模型必须具有判别自身错误的能力,并谨慎地执行之后的过程。但是,模型如何判别解决方案是否正确,来自 OpenAI 的研究者提出了一个训练验证器(verifier)来判断模型完成的正确性。

在测试阶段会生成许多候选解决方案并选择排名最高的一个。证明验证(verification)显着提高了 GSM8K 的性能,此外也为这一观点(随着数据的增加,验证比微调基线更有效)提供了强有力证据。

具体来说,该研究训练了一个解决小学数学问题的系统,其准确率约是经过微调的 GPT-3 模型的两倍。它能像真正的学生一样可以解决 90% 的数学应用问题:在提供的数据集中进行了小样本测试,结果表明 9-12 岁的学生测试得分为 60%,该研究所提系统在相同的问题上测试得分 55%。

这一结果非常重要,因为今天的 AI 在常识性多步推理方面仍然很弱,即使对小学生来说也很容易,但 AI 还是存在很大的缺陷。该研究通过训练模型来识别其错误,以便它可以反复试错,直到找到可行的解决方案。


  • 论文地址:https://arxiv.org/pdf/2110.14168.pdf

  • 数据集地址:https://github.com/openai/grade-school-math


下面展示了该研究所提新方法生成的解决方案其中一个案例:

Tim 种了 5 棵树。他每年从每棵树上收集 6 个柠檬。他十年能得到多少柠檬?


175B Verification:正确 


175B Fine-tuning:错误 


6B Verification:正确 


6B Fine-tuning:正确 


GSM8K 数据集

OpenAI 基于四个设计原则创建了 GSM8K 数据集:高质量、高多样性、中等难度和自然语言解决方案。

GSM8K 数据集由 8.5K 个高质量小学数学应用题组成。每个问题需要 2 到 8 步解决,解决方案主要涉及使用加减乘除等基本算术运算执行一系列基础计算以获得最终答案。微调后的 SOTA 模型在该数据集上表现不佳,主要是问题的高度多样性导致的。与此同时,GSM8K 解决方案仅依赖于基本概念,因此实现高测试性能是一个容易实现的目标。

GSM8K 数据集中的三个示例问题。

值得注意的是,GSM8K 中的解决方案是用自然语言而不是纯数学表达式编写的。通过坚持使用自然语言,模型生成的解决方案更容易被人类解释。OpenAI 的方法保持相对领域不可知。

 方法

OpenAI 研究了两种解决 GSM8K 问题的方法:微调和验证。微调是基线方法,它使用与 GPT-3 中生成式预训练相同的语言建模目标(Brown 等人,2020 年)。在测试时,OpenAI 通过自回归采样单个低温解决方案并检查最终答案是否正确来判断性能。相比之下,验证包括对多个高温解决方案进行采样,为每个解决方案分配一个分数,并输出排名最高的解决方案。验证器被训练来判断解决方案的正确性,其中训练信号完全取决于解决方案是否获得了正确的最终答案

对于这两种方法,OpenAI 使用 GPT-3 系列模型作为初始化,主要关注 175B 和 6B 大小的模型。175B 模型最大,产生的结果最令引人瞩目,而 6B 模型更易于实现研究目。

 微调

OpenAI 通过更新模型参数来进行微调,以最小化所有训练 token 的交叉熵损失。下图 2 显示了对 20 个 epoch 时不同大小的训练集进行微调后的测试性能。

结果不出所料,可以看到 175B 模型明显优于较小的模型。假设一个对数线性趋势,我们可以简单地推断这些结果,以估计当使用完整的 GSM8K 训练集时,需要具有 10^16 个参数的模型才能达到 80% 的求解率。尽管如此,175B 模型似乎需要至少两个额外数量级的训练数据才能达到 80% 的求解率。


在下图 3 中,OpenAI 展示了 6B 模型测试性能在 100 个训练 epoch 的过程中如何变化。当允许模型对每个问题进行 N 个单独的猜测时,OpenAI 使用 test@N 表示至少一次正确解决的问题的百分比。尽管很快开始过拟合测试损失,但 Test@1 的性能几乎单调地提高。并且,随着 epoch 次数的增加,test@100 的性能比 test@1 下降得更快。


选择具有良好覆盖性的模型对于成功训练验证器至关重要。从实证角度来看,test@100 性能在前几个 epoch 内达到峰值。出于这个原因,OpenAI 使用训练了 2 个 epoch 的模型来生成用于训练验证器的样本。如果改为微调 6B 模型以直接输出最终答案而无需任何中间步骤,则性能会从 20.6% 急剧下降至 5.2%。

 验证

为了改进微调基准,OpenAI 训练验证器判断模型生成的解决方案的正确性,并在测试时搜索这些验证器。以问题和候选解决方案为条件,验证器输出解决方案正确的概率。仅根据它们是否达到正确的最终答案,将训练解决方案标记为正确或不正确。不过,在实践中,一些解决方案会使用有缺陷的推理得出正确的最终答案,从而导致误报。

如下图 4 所示,OpenAI 按如下方式训练验证器: 

  • 在训练集上对模型(生成器)进行 2 个 epoch 的微调;

  • 从生成器中为每个训练问题抽取 100 个完成样本,并将每个解决方案标记为正确或不正确;

  • 在数据集上训练一个单一 epoch 的验证器。



在测试时,OpenAI 对每个测试问题采样了 100 个完成情况,用验证器对它们进行排名,然后返回得分最高的那个。下图 5 展示了 6B 和 175B 模型的验证和微调两种方法之间的对比情况,结果发现在低数据集下使用验证方法是没有好处的。有趣的是,175B 验证器比 6B 验证器更早「起飞」,超越微调基线需要的时间更少。

在完整的训练集上,随着 epoch 的增加,使用验证方法的 6B 模型最终略优于微调的 175B 模型,性能提升大约相当于模型大小增加 30 倍。


训练验证器既可以在全部的生成解决方案里进行单个标量预测(single scalar prediction),也可以在解决方案的每个 token 后进行单个标量预测,OpenAI 选择后者,即训练验证器在每个 token 之后进行预测。实验结果如图 6a 所示,它们分别标记为「解决方案级别」和「token 级别」。

在图 6b 中,通过消融实验验证训练验证器中使用目标(objective)的作用, OpenAI 将使用两个目标与仅使用验证目标进行比较。

在图 6c 中,OpenAI 对生成器和验证器的大小进行了实验,研究发现使用大的生成器、小的验证器组合性能显著优于小的生成器、大的验证器组合。


© THE END 

转载请联系原公众号获得授权

投稿或寻求报道:content@jiqizhixin.com


点个在看 paper不断!

浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报