标题 | STaR: Self-Taught Reasoner Bootstrapping Reasoning With Reasoning |
---|---|
作者 | Eric Zelikman, Yuhuai Wu, Jesse Mu, Noah D. Goodman |
机构 | Stanford University, Google Research |
邮箱 | {ezelikman, yuhuai, muj, ngoodman}@stanford.edu |
论文 | https://arxiv.org/pdf/2203.14465 |
摘要 Abstract
生成逐步的 “思想链” 的原理可以提高语言模型在数学或常识性问题解答等复杂推理任务中的表现。然而,要引导语言模型生成推理,目前要么需要构建庞大的推理数据集,要么只能通过少量推理来牺牲准确性。我们提出了一种技术,利用少量原理的例子和大量无原理的数据集进行迭代,以培养执行连续更复杂推理的能力。这种技术被称为 "自学推理"(Self-Taught Reasoner, STAR),它依赖于一个简单的循环:在少量原理示例的提示下,生成可以回答许多问题的新原理;如果生成的答案是错误的,则再次尝试在给出正确答案时生成原理;对最终得出正确答案的所有原理进行微调;重复此过程。我们的研究表明,与直接预测最终答案的微调模型相比,STAR 能显著提高多个数据集的性能,其性能相当于在 CommensenseQA 上微调了 30 倍的最先进语言模型。因此,STAR 可以让模型通过学习自己生成的推理来改进自己。
Generating step-by-step "chain-of-thought" rationales improves language model performance on complex reasoning tasks like mathematics or commonsense question-answering. However, inducing language model rationale generation currently requires either constructing massive rationale datasets or sacrificing accuracy by using only few-shot inference. We propose a technique to iteratively leverage a small number of rationale examples and a large dataset without rationales, to bootstrap the ability to perform successively more complex reasoning. This technique, the "Self-Taught Reasoner" (STaR), relies on a simple loop: generate rationales to answer many questions, prompted with a few rationale examples; if the generated answers are wrong, try again to generate a rationale given the correct answer; fine-tune on all the rationales that ultimately yielded correct answers; repeat. We show that STaR significantly improves performance on multiple datasets compared to a model fine-tuned to directly predict final answers, and performs comparably to fine-tuning a 30× larger state-of-the-art language model on CommensenseQA. Thus, STaR lets a model improve itself by learning from its own generated reasoning.
引言 Introduction
最近的工作,如思维链等,发现了显式中间推理(“原理”)可以提高大型语言模型(Large Language Model, LLM)的性能。其表明了在给出最终答案之前生成明确的推理过程(“原理生成”)对于 LLMs 在数学推理、常识推理、代码评估、社会偏见推理和自然语言推理等不同任务中很有价值。然而,生成原理过程的两种主要方法都有严重的缺点。
原理生成的一种方法是构建一个微调的原理数据集,可以由手动人为构建,也可以使用手工制作的模板自动构建。手动方法成本高昂,并且为每个有趣的问题构建这样的数据集是不可行的。同时,基于模板的方法依赖于自动生成的原理,但只有在已知通用解决方案时才有效或可以制定合理的硬编码启发式。
另一种方法是通过在语言模型提示中仅包含一些原理示例来利用上下文学习。与没有原理的提示(“直接” 提示)相比,这已被证明可以提高数学和符号推理任务的准确性。然而,虽然具有原理的小样本技术往往优于非推理技术,但它们通常远远落后于经过微调以使用较大数据集直接预测答案的模型。
在本文中,我们采用了不同的方法:通过利用 LLM 预先存在的推理能力,我们通过迭代不断地引导产生高质量原理的能力。具体来说,我们使用 few-shot 提示的方法,使大型语言模型自行生成原理,并通过微调那些可以生成正确答案的原理来进一步完善模型的能力。我们重复此过程,每次使用改进的模型生成下一个训练集。这是一个协同过程,其中原理生成的改进了训练数据,而训练数据的改进进一步改进了原理生成。
然而,我们发现这个循环最终无法解决训练集中的新问题,因为它没有接收到它无法解决的问题的直接训练信号。为了克服这个问题,我们提出 合理化 技术:对于模型未能正确回答的问题,我们通过为模型提供正确的答案来生成新的原理。这让模型可以向后推理 —— 给出正确的答案,模型可以更容易地生成有用的原理。然后将这些原理收集为训练数据的一部分,这通常会提高整体准确性。
因此,我们开发了自学推理器(STaR,如下图)方法,这是一种可扩展的引导方法,允许模型学习生成自己的原理,同时还学习解决越来越困难的问题。在我们的方法中,我们重复以下过程:在每次迭代中,首先通过尝试使用当前模型的 原理生成 能力来求解数据集以构建微调数据集;然后,使用 合理化 技术来扩充该数据集,证明模型未能解决的问题的真实答案是合理的;最后,在组合数据集上微调大型语言模型。
方法 Method
引导原理生成(无合理化的STaR)
对于给定的经过预训练的 LLM 模型 以及包含答案 的初始问题 数据集: 。我们的方法从一个小的 prompt 集合 开始,其中包含中间原理的 : ,其中的 (如 )。与标准的 few-shot 提示一样,我们将此提示集连接到 中的每个实例,即 ,这鼓励模型产生一个针对 的原理 ,随后是一个答案 。我们假设产生正确答案的原理比产生错误答案的原理质量更高。因此,我们筛选生成的原理,仅包含产生正确答案的原理( )。我们在这个筛选后的数据集上对基础模型 进行微调,然后通过使用新微调的模型生成新的原理来重新开始此过程。我们不断重复这个过程,直到性能达到稳定水平。注意,在此过程中,一旦我们使用了新的数据集,我们会从原始的预训练模型 开始训练,而不继续训练模型以避免过度拟合。其训练过程可以看作是强化学习式的策略梯度目标的近似。
合理化
引导原理生成算法存在局限性。由于模型仅针对其正确回答的示例进行训练,因此当模型无法解决训练集中的新问题时,改进就会结束。这从根本上来说是由于算法无法从失败的示例中获得任何训练信号。我们提出了一种称为 “合理化” 的技术。具体来说,我们提供答案作为模型的提示,并要求它以与之前的原理生成步骤相同的风格生成原理。给定答案后,该模型能够向后推理,因此更容易生成得出正确答案的原理。例如,在上图中,我们在生成理由的提示中提供了选项 b 是正确答案的提示。我们将合理化应用于模型无法通过原理生成来解决的问题。当向我们的数据集添加合理化生成的原理时,我们不会在其相应的 prompt 中包含提示,就好像模型在没有提示的情况下提出了原理一样。筛选后,我们对先前生成的数据集与合理化生成的数据集相结合进行微调。
具体过程如下算法,其中蓝色部分对应合法化过程。
实验 Experiments
我们使用 GPT-J 作为基础语言模型,并使用 GPT-J 库中的微调脚本。它是一个参数公开的 6B 参数模型,并且该模型足够大,可以生成可引导的重要质量的原理。
算术任务是计算两个 n 位整数之和。我们使用 few-shot 提示输入 1 到 5 位数字。
多项选择常识推理任务 CommonsenseQA (CQA) 是根据 ConceptNet 构建的,ConceptNet 是概念及其与超过一百万个节点的关系的语义图。在 ConceptNet 中为每个问题确定了一组 “目标” 概念,其中目标概念与一个 “源” 概念共享语义关系。然后,每个问题都会被众包,以允许读者识别一个目标概念,同时提及源概念。此外,还添加了两个干扰性答案。该数据集有 12,247 个问题,每个问题有 5 个选择,其中训练集中有 9,741 个问题,开发集中有 1,221 个问题,(保留的)测试集中有 1,285 个问题。
对于算术问题,我们首先生成一个包含 50,000 个随机抽样问题(在数字长度上均匀分布)的数据集。对于算术上的每次外循环迭代,我们从数据集中采样 10,000 个问题。我们为每个数字使用 10 个随机的少样本原理示例作为其相应的少样本提示。对于 9741 个 CommonsenseQA 训练集中的问题,我们将问题添加到 few-shot 原理提示中,并提示模型生成该问题的原理和答案。对于 CQA 上的 few-shot 提示,我们从相同的 10 个问题开始,并更明确地引用相关知识。我们还对小学数学 (GSM8K) 数据集进行了评估,其中包含 7,473 个小学水平应用题的训练示例和 1,319 个测试示例。这些数学问题以自然语言提出,需要两到八个计算步骤才能得出最终答案。该数据集结合了算术和常识推理所需的技能。
算术任务
如上图,展示了当模型在数字位数 1-5 时,外层循环每次迭代的准确度。运行 STaR 16 次迭代后,总体精度为 89.5% 。作为参考,没有原理的模型在 10,000 个示例上训练 5,000 步的基线可达到 76.3% 准确性。值得注意的是,算术问题的小样本精度非常低,即使有这样的原则:两位数加法的精度低于 1% ,并且更多数字的准确度接近于零。
在引入合理化后,准确性能够特别快地提高。进行一次微调迭代后,两位数加法改进为从低于 1% 变为 32%。如果没有合理化,性能的改进是阶段性的:在 n-1 位数字计算取得好结果前,通常 n 位数字计算的结果较差。通过合理化,模型可以一次学习多个长度,尽管精度不一样。合理化允许多次解决许多问题,因此我们训练 STaR 训练 300 个迭代(注意,在没有合理化的情况下这样做会导致 1 位数字加法的过度拟合),并且每次迭代增加 20 个步骤的训练。
我们还进行了一项实验,从第 20 次迭代开始,继续使用额外的位数进行合理化预训练 STaR,同时保持每次迭代的训练示例总数固定。我们发现,这不仅可以快速提高初始数字集的性能,而且当对训练期间从未见过的 9 和 10 位数字示例进行评估时,该模型成功解决了许多分布外问题。这些数字的引入似乎使训练不太稳定,但确切原因尚不清楚。
常识问答
与几个基线进行比较。第一个基线是对 GPT-J 进行微调以直接输出最终答案,我们称之为 “GPT-J Finetuned”。我们还与经过微调的 GPT-3 进行比较,以及带有思想链 (CoT) 原理的 137B 参数 Lambda 模型。
如上表,尽管训练数据较少,但未经合理化的 STaR 优于直接对整个数据集的最终答案进行微调的 GPT-J。合理化的纳入将这一绩效提高到 72.5% ,更接近于 30 倍大小的 GPT-3 的 73% 。正如预期的那样,我们还看到 STaR 超越了少数样本基线,包括更大的 137B LaMDA 模型。如果我们将 STaR 应用于具有更高少样本性能的模型,我们预计精度将进一步提高。
小学数学
如上表所示,我们在 GSM8K 上再次发现,STaR 通过原理或训练直接预测答案(没有原理),大大提高了超出少样本的性能。我们观察到,在此任务中,使用合理化并不能显着提高性能。请注意,在训练中,有必要在第 30 次迭代(7912 步之后)限制训练步数,以防止训练过程变得过长。在没有合理化的 STaR 迭代 36 次和有合理化的额外 10 次迭代后得出结果。
结论 Conclusion
我们提出了自学推理 (STaR),它可以迭代地提高模型生成解决问题的原理的能力。我们通过生成原理来提示模型逐步解决许多问题,然后提示它对出错的问题合理化正确答案。我们对最初的正确解决方案和合理化的正确解决方案进行微调,并重复该过程。我们发现该技术显着提高了模型在符号推理和自然语言推理上的泛化性能。
所提出的 STAR 有几个重要的限制。为了使 STaR 的第一次迭代取得成功,小样本性能必须高于偶然性,这意味着初始模型必须足够大以具有一定的推理能力。例如,我们发现 GPT-2 即使在算术领域也无法从少样本推理中引导。另一个限制是,具有高水平机会表现的设置(例如二元决策)会产生许多糟糕的基本原理,从而混淆了 STaR 方法。一个悬而未决的问题是如何过滤这些设置中的错误推理。
尽管如此,我们相信使用不带推理的示例来引导推理是一种非常通用的方法,并且 STaR 可以作为跨许多领域的更复杂技术的基础。