GPT的微调是怎么回事?

内容分享2小时前发布
0 0 0

只要稍微深入的了解GPT,就会碰到“微调”这个词。微调会使GPT表现得更机智,那么怎么做微调呢?下面通过一篇经典文章(Training Verifiers to Solve Math Word Problems, 2021)详细拆解。这篇文章的作者都来自OpenAI,也就是构建GPT的这家公司,可谓权威性十足。后来碰到通用GPT解决不了的问题,就可以用本文中的微调方法来训练自己的GPT,掌握得好的话,会给出满意的回答。

文章会说明尽管最先进的语言模型在许多任务上可以与人类表现相匹配,但它们依旧难以在多步骤数学推理中表现出强劲的鲁棒性。为了诊断当前模型的失败并支持研究,我们引入了GSM8K数据集,这是一个包含8.5K个高质量、语言多样化的小学数学问题的数据集。我们发现,即使是最大的Transformer模型也无法在测试性能上取得高分,尽管这个问题分布的概念超级简单。为了提高性能,我们提出训练验证器来判断模型完成的正确性。在测试时,我们生成许多候选解,并选择由验证器排名最高的解。我们证明验证在GSM8K上显著提高了性能,并提供了强有力的经验证据表明,与微调基线相比,验证更有效地随着数据的增加而扩展。

1 介绍

近年来,大型语言模型已经展示出在许多不同任务上的惊人技能(Wang等,2019;Brown等,2020)。Kaplan等(2020)描述了增加模型大小的一致好处,表征了跨越多个数量级的扩展趋势。不过,即使是最大的模型在执行多步数学推理时也会失败(Hendrycks等,2021)。模型样本常常包含灾难性错误,即使模型已被适当地微调。因此,数学推理揭示了现代语言模型的一个关键弱点。数学推理中的一个重大挑战是对个体错误的高度敏感(Shen等,2021a)。在生成解决方案时,自回归模型没有纠正其自身错误的机制。偏离方案的解决方案很快就变得无法恢复。

如果我们仅依赖生成方法并从当前趋势进行外推,即使在像MATH数据集(Hendrycks等人,2021)这样具有挑战性的分布上实现中等性能,我们也需要过高的参数数量。这一证据强烈促使我们寻找具有更有利的缩放规律的方法。

GPT的微调是怎么回事?

图1:GSM8K中的三个示例问题。计算注释以红色突出显示。

我们提议训练验证器来评估模型生成的解决方案的正确性,类似于Shen等人(2021a)的同时工作。在测试时,我们会对固定数量的候选解决方案进行采样,并选择验证器排名最高的解决方案。验证器既有其内在的可选性,也由于验证比一般的生成任务更简单而受益。为了促进研究,我们发布了GSM8K,这是一个包含8.5K个高质量的小学数学问题数据集。我们设计这个数据集的目的是具有高语言多样性,同时依赖于相对简单的小学数学概念。最先进的语言模型在这个数据集上很难实现高性能,主要是由于问题之间的高多样性。同时,GSM8K的解决方案仅依赖于基本概念,因此实现高测试性能是一个可行的目标。

我们的主要贡献如下:

  1. 我们呈现了一个有用于探究大型语言模型非正式推理能力的精选数据集,包括8.5K个小学数学问题和自然语言解决方案。
  2. 我们展示了与微调基线相比,验证器的使用导致了近乎一样的性能提升,相当于增加30倍的模型大小,并且验证器在数据增加时具有更好的可扩展性。
  3. 我们展示了Dropout作为一种强劲的正则化器,显著提高了微调和验证的性能。

2 数据集

GSM8K由8500个高质量的小学数学问题组成,由人类问题撰写者创建。我们将这些问题分为7500个训练问题和1000个测试问题。这些问题需要2到8个步骤来解决,解决方案主要涉及使用基本算术运算(+ – ×÷)执行一系列基本计算以达到最终答案。一个机智的初中生应该能够解决每个问题。 我们基于以下设计原则创建了GSM8K。

高质量 我们避免容易出错的爬取程序,而是依赖人工工作者创建问题。在进行了基于工人答案一致性的广泛质量控制后,我们估计不到2%的问题包含破坏性错误。

高多样性 我们致力于在问题中实现高多样性。我们积极避免设计那些从一样的语言模板中抽出或仅在表面细节上有所不同的问题,这是许多其他数据聚焦普遍存在的问题。通过创建每个独特的问题,保持测试性能成为一个更相关的指标。

适度的难度 我们选择一个对于大型最先进的语言模型具有挑战性但不完全无法处理的问题分布。 GSM8K将协助我们更好地了解不同模型和方法在这个难度的甜点中的数据扩展趋势。问题不需要超过早期代数水平的概念,绝大多数问题可以在不明确定义变量的情况下解决。

自然语言解决方案 我们以自然语言而不是纯数学表达式的形式收集解决方案。我们认为这是最普遍有用的数据格式,我们希望它能够揭示大型语言模型的内部独白的特性。我们指示问题撰写者尽可能解释他们的工作,但我们允许他们用自己多样化的语言风格编写解决方案。 完整的GSM8K数据集可以在
https://github.com/openai/grade-school-math找到。示例问题如图1所示,我们在附录A中讨论了其他数据集细节。

3 相关工作

3.1 相关数据集

早期的数学问题数据集(Kushman等人,2014; Roy和Roth,2015)相对较小,不适合用于测试现代语言模型的极限。Dolphin18K(Huang等人,2016)是一个包含18K个问题的较大数据集,但仅以方程式或最终答案的形式提供解决方案。AQuA-RAT(Ling等人,2017)包含100K个问题,但该数据集不幸受到问题模板化程度高和自然语言解决方案的质量控制差的影响。MathQA是AQuA-RAT的最新发布子集,专注于纠正这些错误(Amini等人,2019),但即使是更正后的数据集也存在数据质量问题,约30%的数据存在不一致性(Miao等人,2021)。Ape210K(Zhao等人,2020)是最大的公开数据集,包含210K个中国小学数学问题。不过,由于语言障碍和缺乏自然语言解决方案,我们无法在该数据集上评估我们的方法。

最近开发的ASDiv数据集(Miao等人,2021年),包含2.3K个数学问题,通过确保问题具有高多样性和高质量来解决之前数据聚焦的常见缺陷。我们在创建GSM8K时分享了这些设计原则。不过,我们注意到GSM8K更大,提供自然语言解决方案,并且由于平均需要更多步骤来解决的问题而组成。MATH数据集(Hendrycks等人,2021年)比GSM8K更大且复杂程度更高,但由于高难度使其难以准确衡量现有最先进语言模型的进展。

最近其他与推理相关的数据集聚焦于符号数学推理(Lample and Charton, 2019)、阅读理解(LogiQA)(Liu et al., 2020)以及常识问题回答(CommonsenseQA)(Talmor et al., 2018)。与CommonsenseQA类似,GSM8K包括需要基本背景知识的问题,例如一周中的天数。与LogiQA类似,需要混合阅读理解和逻辑推理,GSM8K的主要难点在于正确解释问题并推理解决步骤。

3.2 相关方法

早期的工作尝试使用递归seq2seq模型(Sutskever等人,2014)及其密切相关的变体(Wang等人,2017;Huang等人,2018)来解决经典的数学应用题基准问题。最近的工作通过设计专门的编码器-解码器架构(Amini等人,2019;Chiang和Chen,2018;Xie和Sun,2019;Chen等人,2020;Li等人,2020)提高了性能,最强的结果一般依赖于来自BERT家族的大型预训练编码器(Chen等人,2019;Kim等人,2020;Liang等人,2021)。

其他最近的工作推荐额外的预训练任务,以进一步提高基于大型Transformer模型的数学推理能力。Hendrycks等人(2021)提出在一个新的AMPS语料库上对模型进行预训练,该语料库来源于Khan Academy问题和Mathematica脚本。类似地,Shen等人(2021b)提出了一个从互联网上提取的从学前到大学级别课程的预训练语料库,而Peng等人(2021)则提出通过预测表达式树中的屏蔽子表达式进行预训练。

GPT的微调是怎么回事?

图2:在不同的训练集大小进行微调后,各种GPT-3模型大小的最终测试性能。皆为3次运行的结果。

与验证类似,其他方法已经对语言模型进行了微调,以在许多模型完成中进行选择。Nichols等人(2020)提出了一种样本-排名方法,以改善大型语言模型的协作叙述能力,培训信号来自人类工作者的偏好。在与我们密切相关的同时工作中,沈等人(2021a)应用了类似的方法来解决数学问题,共同训练模型来生成和排名解决方案。我们的工作与他们的方法有许多基本类似之处,但在几个关键方面有所不同。第一,我们关注自然语言解决方案的空间,由于这是比纯数学表达式更丰富和更普遍的解决方案格式。此外,这个选择使我们的模型能够发展口头分析技能,并产生更容易被人类解释的解决方案。其次,我们提供证据,验证器比基线方法更有利于额外的数据。最后,我们使用单独的生成器和验证器网络,以防止生成器过度拟合。

4 方法

我们研究了两种方法来解决GSM8K中的问题:微调和验证。微调是我们基本的方法,它使用与GPT-3(Brown等人,2020)中的生成预训练一样的语言建模目标。在测试时,我们通过自回归抽样单个低温度解决方案并检查最终答案是否正确来判断性能。相反,验证包括抽样多个高温度解决方案,为每个解决方案分配一个分数,并输出排名最高的解决方案。验证器被训练来判断解决方案的正确性,训练信号仅由是否达到了正确的最终答案来确定。

GPT的微调是怎么回事?

图3:在将6B模型微调后,当允许模型进行1次猜测(左)或100次猜测(右)时的测试解决率。

对于两种方法,我们使用GPT-3系列模型作为初始化,主要关注175B和6B模型大小。175B模型是最大的,产生了最令人印象深刻的结果,而6B模型在研究目的上更为方便。我们在附录B中讨论了超参数的选择。

我们的模型常常无法准确地执行计算。尽管较大的模型比较小的模型少犯算术错误,但这依旧是常见的错误源。为了减轻这个问题,我们训练所有的模型使用计算器,通过将计算注释注入到训练聚焦。在测试时,当模型选择使用这些注释时,计算器将覆盖采样。详细信息可以在附录C中找到。

4.1 微调

我们通过更新模型参数来最小化所有训练令牌的交叉熵损失来进行微调。图2显示了在不同训练集大小下进行微调20个epochs后的测试性能。我们将一样的数据可视化为训练集大小和模型大小的函数。测试性能由每个测试问题的单个低温度(T = 0)样本确定。不出所料,我们看到175B模型明显优于较小的模型。假设一个对数线性趋势,我们可以天真地推断这些结果,估计需要一个有1016个参数的模型才能在使用完整的GSM8K训练集时达到80%的解决率。沿数据维度推断更加困难,由于性能似乎不遵循对数线性趋势。尽管如此,似乎175B模型至少需要额外两个数量级的训练数据才能达到80%的解决率。

GPT的微调是怎么回事?

图4:验证训练管道的图示

在图3中,我们展示了经过100个训练时期(epoch)后6B测试表现如何变化。我们使用test@N来表明模型对每个问题进行N次独立猜测时至少一次正确解决问题的百分比。我们使用低温度(T=0)生成test@1样本,使用较高温度(T=0.7)生成test@100样本。这两个温度值是根据经验选择的,以产生最佳结果。Test@1的表现近似单调增加,尽管我们很快就开始过度拟合测试损失。不幸的是,随着训练时期的增加,test@100的表现下降得比test@1更快。这是可以预料的:随着模型反复遇到一样的数据,它变得越来越不准确,并对其预测过于自信。在测试时,这种过度自信会导致对解空间的覆盖不足,这种效果只有在思考多个样本时才会变得明显。

选择具有良好覆盖范围的模型对于成功训练验证器至关重大。从经验上看,我们发现测试@100的性能在前几个时期内达到峰值。因此,我们使用训练2个时期的模型来生成用于训练验证器的样本。我们在附录D中提供了来自6B和175B模型的几个示例解决方案。我们还注意到,在输出最终答案之前,允许模型生成完整的自然语言解决方案超级重大。如果我们改为微调6B模型以直接输出最终答案而没有任何中间步骤,性能会从20.6%急剧下降到5.2%。

4.2 验证

为了进一步提升FineTuning基准的效果,我们训练验证器来判断模型生成的解决方案是否正确,并在测试时对这些验证器进行搜索。 在给定问题和候选解决方案的条件下,验证器输出解决方案正确的概率。训练解决方案仅基于其是否达到正确的最终答案来标记为正确或不正确。 在实践中,有些解决方案会使用错误的推理方法得出正确的最终答案,从而导致误报。

GPT的微调是怎么回事?

图5:使用6B和175B模型尺寸进行微调和验证的比较。平均值和标准差在3次运行中显示。

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

  1. 在训练集上将模型(“生成器”)微调2个时期。
  2. 对于每个训练问题,从生成器中采样100个完成,并将每个解决方案标记为正确或不正确。
  3. 在此数据集上训练验证器一个时期。 训练2个时期足以使生成器学会此领域的基本技能。我们选择不进行更长时间的训练,由于在此点之后,生成的解决方案的多样性开始崩溃,如图3所示。我们训练单独的生成器和验证器模型以限制生成器的训练并防止过度拟合,但原则上,将这些模型组合应该是可能的。除了预测解决方案的正确性之外,我们还使用与生成器一样的语言建模目标对验证器进行训练。这对于验证器来说是一个有价值的辅助目标。我们在附录E中讨论了其他验证器训练细节。

在测试时,我们对每个测试问题进行100次完成的采样,使用验证器进行排名,然后返回验证器得分最高的一次完成。图5显示了6B和175B模型大小的验证和微调之间的比较。我们发现,在低数据集大小下使用验证并不有益。我们认为这是由于对正确答案过拟合的压力:对于小数据集,对正确答案的过拟合比学习更可推广的正确推理特性更快。不过,一旦我们使用足够大的数据集,我们会看到验证器带来的强劲提升。

GPT的微调是怎么回事?

图6:验证消融实验

有趣的是,175B的验证器比6B的验证器更早地“起飞”,需要更少的训练问题才能超过微调基线。请参见附录D中验证器发现的示例解决方案,以及附录F中验证器置信度的可视化。

4.3 验证消融实验

我们可以训练验证器,在生成的解决方案的条件下进行单个标量预测,也可以在解决方案中的每个标记后进行标量预测。默认情况下,我们选择后者,训练验证器在每个标记后进行预测。这可以看作是一个标记级别的价值函数。我们在图6a中比较了这两种方法,分别标记为“解决方案级别”和“标记级别”。

在每个标记处预测价值函数是比仅判断完整完成更具挑战性和噪声的任务。不过,尽管最初训练速度较慢,标记级别的验证器最终表现优于解决方案级别的验证器。此外,标记级别的验证器在训练后期仍在改善,而解决方案级别的验证器则很快显示出过拟合的迹象。我们假设完整的价值函数提供了一个有用的辅助信号,鼓励模型判断解决方案中的推理,而不仅仅是记忆正确的最终答案。

GPT的微调是怎么回事?

图7:测试时间计算量变化时的性能表现

在图6b中,我们消除了用于训练验证器的目标。如4.2节所讨论的,我们可以选择在验证目标旁边包含语言建模目标。我们将同时使用这两个目标与仅使用验证目标进行比较。虽然两者都是合理的选择,但包含语言建模目标是一个明显的改善。这是有道理的:更好地理解这种语言分布只会有助于验证器在区分样本方面。

在图6c中,我们分别消融了生成器和验证器的模型大小。我们发现使用大的生成器和小的验证器比使用小的生成器和大的验证器表现显著更好。即使验证器比生成器小得多,验证依旧超级有效。这表明验证器可能常常依赖于相对粗略的启发式方法来区分来自给定生成器的解决方案,而不是尝试进行更彻底的验证形式。

5 额外实验

5.1 测试时间计算

在测试时,我们可以选择生成任意多的解决方案供验证器评估,然后选择排名最高的完成度。图7a显示了随着每个测试问题完成数量的增加,6B验证器性能的变化情况。在这个规模下,随着完成数量的增加,性能会提高,直到达到400个。超过这个点后,性能开始下降。这表明搜索的好处最终被找到欺骗验证器的对手方案的风险所抵消。一般,我们使用100个完成度来评估验证器的测试性能,由于这可以以相对较小的计算成本捕捉到大部分验证的好处。

为了进一步提高性能,我们可以对排名靠前的验证器解决方案进行多数投票,而不仅仅选择排名第一的解决方案。

GPT的微调是怎么回事?

图8:6B微调和验证中的丢弃率排除实验。

该投票过程仅思考个别解决方案达到的最终答案:选择的最终答案是得票最多的答案。图7b显示,随着我们允许更多的顶级样本进行投票,性能会发生变化。可预见的是,当我们开始使用更多的样本时,我们可以允许更多的样本进行投票。当我们只有100个样本时,最佳选择是只允许前3-5个样本进行投票。当我们有3200个样本时,最佳选择是允许前30个样本进行投票。

5.2 正则化

我们发现,使用dropout作为正则化器可以显著提高微调和验证的效果。具体来说,我们在网络的每一层的残差路径上应用残差dropout(Vaswani等人,2017)。我们选择所有dropout实验都使用20%的dropout,这是基于超参数扫描结果选择的。我们注意到,GPT-3模型没有使用dropout进行预训练。因此,在涉及dropout的实验中,我们在进行模型微调之前进行了额外的带有dropout的预训练。这可以缓解模型在微调过程中遇到的分布偏移问题。

我们第一研究dropout对各种训练集大小的微调效果。图8a显示,dropout相对于基线模型有显著的改善。接下来,我们研究dropout对验证器的影响,包括解决方案级别和标记级别的变体。在图8b中,我们看到dropout显著改善了解决方案级别的验证器,缓解了未经正则化的基准模型中出现的过拟合现象。值得注意的是,使用解决方案级别验证器的dropout可以达到与标记级别验证器类似的性能水平。在图8c中,我们将dropout应用于标记级别验证器。由于标记级别验证器已经不太容易过拟合,因此dropout的影响不太显著。尽管如此,我们依旧可以看到训练带有dropout的标记级别验证器略微有所提高。请注意,我们将标记级别验证器的批量大小增加了4倍,以更好地处理更困难的目标和dropout的噪声。

6 结论

我们已经看到,相对于微调基线,验证提供了显著的性能提升。在完整数据集上,6B验证略优于微调的175B模型,因此提供了大约相当于30倍模型大小增加的提升。我们还看到,基于记号的验证器不太容易过拟合,而基于解决方案的验证器则容易过拟合,并且所有方法都受益于使用残差丢失进行正则化。我们预计验证将很好地扩展到需要更复杂数学推理的问题分布,并希望GSM8K支持开发更好的扩展方法。

© 版权声明

相关文章

暂无评论

none
暂无评论...