最近,很多关于较小模型的研究取得了令人振奋的对话能力,这让人们想象,是否较小的模型能具有与像 GPT-3.5 这样的大型模型相当的性能。一般来说,语言模型具有多维能力,所以模型之间的相互对比较为困难。找到正确的衡量标准对于开发强大的语言模型至关重要。在目前阶段,研究者们急切想知道什么是度量大语言模型潜力的关键因素。
在 GPT-4 发布博客中,作者写道:“在一次随意的谈话中,GPT-3.5 和 GPT-4 之间的区别可能是微妙的。当任务的复杂程度达到足够的阈值时,差异就会显现出来。” 这意味着复杂任务很可能是大型和小型语言模型的关键差异因素。
更重要的是,复杂推理为基于语言模型构建大量应用程序提供了机会,从而使语言模型有机会成为下一代计算平台 / 操作系统。这有可能从根本上改变人类与机器的交互方式,重塑整个计算生态系统。
在这篇文章中,我们将仔细分析讨论如何让大语言模型拥有强大的复杂推理能力。
在天体摄影中,当使用长曝光拍摄星轨时,北极星位于星轨的中心,始终指向真正的北方。在古代,它为旅行者指引方向。
目录
1 - 动机:大语言模型作为新一代计算平台
我们研究复杂推理的原因有两个:
- 正如上文提到的,复杂推理是标志着小模型与大模型差异的关键因素,这一点在 GPT-4 发布文章中已经讨论过。
- 复杂推理是使模型成为下一代操作系统的核心能力。
将语言模型视为下一代操作系统的愿景尤为有趣,因为它为构建新应用程序和创建基于语言模型的计算生态系统(可能比超级应用程序如 ChatGPT 提供更大的机会)开辟了无数可能性。复杂推理能力是基础,因为如果我们希望模型成为新的操作系统,它需要能够通过与工具、用户和外部环境的所有元素互动来完成复杂的指令。
本文研究了如何训练具有强大复杂推理能力的模型,如何进行提示工程以充分发挥模型的推理能力,以及如何评估模型的推理性能。本文的内容分为以下几部分:
- 在第 2 部分,我们讨论了构建具有强大复杂推理能力的语言模型的现有方法。复杂推理的方案与通用大型语言模型(LLM)开发的方案相似,包括三个阶段:持续训练 (continue training)、指令微调 (instruction finetuning) 和强化学习 (reinforcement learning)。我们还会进一步讨论代码与推理之间令人惊讶的耦合关系。
- 在第 3 部分,我们讨论了复杂推理的提示工程 (prompt engineering) 技术。当语言模型成为新一代操作系统内核时,提示工程 / 场景学习将成为新一代脚本编程 (shell script)。
- 在第 4 部分,我们讨论了如何评估大型语言模型的推理能力。我们介绍 Chain-of-thought Hub,这是一个包含 100 多个推理任务的数据集合,清楚地标示了大型与小型模型的差异。我们重点介绍了 LLaMA 65B 的出色表现。我们认为它具有非常强大的潜力,可作为再现 ChatGPT-3.5 的基座模型。
2 - 增加大语言模型推理能力的方案
推理的方案与构建通用大型语言模型和聊天机器人的方案密切相关。总共有三个阶段:
- 预训练 / 持续训练:在这个阶段,我们通常在大型数据集(如科学文献或代码数据)上训练大型模型。
- 有监督微调:在这个阶段,我们对模型进行微调,以便完成复杂任务的指令。
- 强化学习:在这个阶段,我们使用诸如任务是否已全部 / 部分完成的信号作为奖励。
我们进一步回顾了在代码上进行训练也可以提高模型推理能力的假设。因此,在我们的文献分析中,我们同时考虑推理和编码。我们将看到,就学习方法而言,这两者之间存在惊人的相关性。
2.1 - 预训练与持续训练
我们分析以下几项研究:
- Lewkowycz et. al. 2022. Minerva: Solving Quantitative Reasoning Problems with Language Models
- 在来自 Arxiv 论文的 38.5B 的 token 上继续训练 PaLM 540B。
- 在 MATH (一个需要使用 LaTeX 格式回答问题的困难数据集),上的得分为 33.6(GPT-4 的得分是 42.5)
- Taylor et. al. 2022. Galactica: A Large Language Model for Science
在包含论文、代码、参考资料、知识库和其他内容的 106B token 上预训练一个120B语言模型。
在MATH上的表现为 20.4(Minerva 33.6,GPT-4 42.5)
Chen et. al. 2021. Codex: Evaluating Large Language Models Trained on Code
在159GB代码数据上继续训练 12B GPT-3 模型,提高了 HumanEval 数据集上的代码性能。
这些研究发现,在大量科学文献 / 代码上进行训练可以显著提高基础模型的推理/编码能力。
2.2 - 监督微调
我们分析:
- Chung et. al. 2022. Scaling Instruction-Finetuned Language Models
- 使用多样化的指令显著提高了模型零样本泛化的能力
- 在指令集合中混合思维链数据(the flan collection 文章中进一步讨论了这个问题)明显提高了模型的思维链能力
- 注意:尽管 the flan collection 数据集从多个维度激发了基础模型的能力,但这些指令并非来自真实的聊天机器人用户互动,因此可能无法直接转化为更好的聊天性能。
- Fu et. al. 2023. Specializing Smaller Language Models towards Multi-Step Reasoning
- 将思维链推理能力提炼到较小规模(小于或等于 10B)的模型。通常,10B 规模的模型非常适合部署(更大的模型太贵了,更小的模型太弱了)。
- 本文讨论了很多工程细节,如数据工程、能力平衡以及小型和大型模型之间的差异
- Li et. al. 2022. Competition-Level Code Generation with AlphaCode
- 在 715GB 的 GitHub 代码上预训练一个 41B 模型,然后在包含 13k 问题的 CodeContest 数据集上进行微调
- 在测试期间,使用采样并根据是否通过示例测试来过滤解决方案。从某种意义上说,这种做法类似于推理问题中的 self-consistency 方法。
目前关于指令微调的理解是:
- 通过使用对话格式的数据,将基本模型调优为聊天机器人相对容易(参见像 Alpaca 和 MOSS 这样的优秀示例)。然而,闲聊的能力并不能转化为执行复杂任务的能力。从这个角度来看,模型就像人类一样:说得多不如干得好,代码见真章。
- 实际上,指令调优问题是一个数据混合问题:如何最好地混合来自不同来源的指令数据,以便从所有角度均匀地提高模型性能(而不是像在 CoT specialization 和 the flan collection 中讨论的那样,增加一个维度但降低另一个维度)。
- 数据混合的简单起点是:使用 10-20 个非思维链的数据点(以平衡不同维度的能力),但尽可能多地使用链式思维数据(以最大化推理能力)。
2.3 - 强化学习
我们分析:
- Uesato. et. al. 2022. Solving math word problems with process- and outcome-based feedback
- 基于中间推理和最终推理结果构建奖励模型。
- Le et. al. 2022. CodeRL: Mastering Code Generation through Pretrained Models and Deep Reinforcement Learning
根据诸如编译错误、运行时错误或是否通过测试等信号训练奖励模型。
这两项工作都使用中间信号(对于推理,看中间步骤是否正确;对于编码,看代码是否编译)和最终信号(对于推理,最终答案是否正确;对于编码,代码是否通过测试)作为奖励。需要注意的是,这种类型的强化学习与基于人类反馈的强化学习(RLHF)有所不同,因为它不需要人类反馈。
2.4 - 推理能力和代码能力的耦合
在我们之前的讨论中,我们提出了一个假设,即在代码上进行训练可能会提高推理能力,原因如下:
- 代码注释是自然存在的链式思维数据
- 面向过程编程类似于逐步解决任务。这适用于简单和中等复杂度的任务
- 面向对象编程类似于将任务分解为较小的任务,然后分别解决它们。这适用于较高复杂度的任务。
从这个显著的一致性中,我们看到提高推理能力与提高编程能力非常相似。在此,我们通过强调训练大型语言模型进行推理或编码的配方相似性,深化了这个假设:
我们看到推理和代码都经历了:
- 在连续训练阶段,可以在基础模型上增加代码和科学文献数据。
- 在有监督的微调阶段,可以根据要求完成复杂任务的指令或编写代码对模型进行微调
- 在强化学习阶段,将中间推理步骤 / 编译率和最终推理结果 / 代码通过率作为奖励
- 在解码过程中,推理和编码都会采样多个解决方案,然后从解码空间中选择最佳方案。
这些相似性使得代码和推理之间的联系非常有趣。
3 - 复杂推理的提示工程
在讨论了如何构建具有强大推理能力的模型之后。在本节中,我们将讨论如何有效地提示模型以充分释放模型的潜力。
3.1 - 基础思维链提示工程
以下论文推荐给初学者:
- Wei et. al. 2022. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models.
- 本文是第一篇发现当使用链式思维进行提示时,存在一个相变现象,表明大型模型在很大程度上优于较小的模型,这进一步导致了涌现能力的发现。
- Wang et. al. 2022. Self-Consistency Improves Chain of Thought Reasoning in Language Models
对采样的 CoT 推理路径进行多数投票,显著提高了推理性能。
Suzgun et. al. 2022. Challenging BIG-Bench Tasks and Whether Chain-of-Thought Can Solve Them
使用 CoT 处理 big-bench 中困难的任务。这篇论文的一个有意义的副产品是 BigBench Hard 数据集,它在测试模型推理能力方面非常有效。
3.2 - 进阶技巧及分析
以下论文讨论了高级 CoT 提示实践:
- Fu et. al. 2023. Complexity-Based Prompting for Multi-Step Reasoning
- 使用复杂链代替简单链作为上下文示例
- Khot et. al. 2023. Decomposed Prompting: A Modular Approach for Solving Complex Tasks
将复杂任务分解为更简单的任务,然后逐个解决
通常,对于复杂任务,首先将其分解为更简单的任务,然后逐步解决更简单的任务。
以下论文讨论了上下文学习为什么起作用:
- Xie et. al. 2021. An Explanation of In-context Learning as Implicit Bayesian Inference
- 语言模型在提示中的示例之间推断出一个潜在概念,并进入相应的任务模式
- Wei et. al. 2023. Larger language models do in-context learning differently
当出现与先验知识相矛盾的上下文示例时,尽管大型模型可能具有更强的语义先验,大型模型可以根据提示词来覆盖语义先验。
简而言之,上下文学习的要点是提示中的示例使模型进入相应的任务模式,然后执行任务。
以下论文讨论了模型在进行思维链推理时的行为:
- Min et. al. 2022. Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?
- 当某些标签错误时,模型仍然可以做出正确的预测。这表明模型更受提示的 [格式] 影响,而不是提示的 [意义] 。
- Wang et. al. 2022. Towards Understanding Chain-of-Thought Prompting: An Empirical Study of What Matters
即使提示中的推理错误,模型仍然可以正确推理,但提示的相关性和推理步骤的顺序更为重要 —— 这再次表明,模型更受提示的 [格式] 影响,而不是提示的[意义]。
Madaan and Yazdanbakhsh. 2022. Text and Patterns: For Effective Chain of Thought, It Takes Two to Tango.
详细分析显示,提示的格式可以改善 CoT 推理(虽然内容的正确性可能不起到强烈作用)
简而言之,模型只关注提示的格式,但可能不会受到提示正确性的显著影响。然而,模型在多大程度上会受到提示正确性的影响,或者提示可以在多大程度上覆盖模型的先验信念,还是一个尚待研究的问题。
以下论文讨论了如何通过改进和反馈来提高模型性能:
- Madaan. et. al. 2023. Self-refine: Iterative refinement with self-feedback
- 模型可以在多个场景中(包括代码优化、数学推理、对话响应生成等)对自身的推理进行优化和改进。
- Madaan et. al. 2023. Learning Performance-Improving Code Edits
在程序轨迹上进行训练可以改善编码。
简而言之,以自然语言形式(而非强化学习中的奖励形式)对模型进行改进和反馈非常有效,可以进一步提高语言模型的性能(无论是通过上下文学习还是微调)。
4 - 评价大语言模型的推理能力
在讨论了训练强大模型的方法和提示技巧之后,现在我们讨论对语言模型推理能力的评估。
4.1 - 评价方法的基础知识
在谈论评估时,有三个重要因素需要考虑:数据格式、能力类型和模型类型。首先,提示时有四种数据格式:
其中:
- In-context 指的是在测试问题之前附加一系列上下文示例。
- Zero-shot 是指在没有上下文示例的情况下直接将测试问题输入给模型。
- Chain-of-thought 是指在回答之前生成推理。
- Answer-only 是指没有链式思维,直接给答案。
对于模型能力,有两种大致正交的能力类型:
- 知识 knowledge:模型是否了解世界
- 推理 reasoning:模型是否可以根据其知识进行推理。
这两个方面并不是严格正交的,因为一些推理规则也可以被视为某种形式的知识。然而,在评估时,这两种能力有明显的差异:
- 一些数据集更注重对知识的评估,如 MMLU,它测试模型是否具有高达大学水平的知识。
- 一些数据集更注重对推理的评估,如 BBH,它测试模型是否具有逐步解决问题的能力。
- 对于知识,链式思维与仅回答的表现相似(参见 FlanPaLM 论文)
- 对于推理,链式思维比仅回答表现得更好(参见原始 CoT 论文,然后参见 FlanPaLM 论文)
在实践中,因为 CoT 在达到或优于 Answer-only 的表现,而且 CoT 更加用户友好(因为它告诉用户思考过程),现代聊天机器人总是部署 CoT(无论你问 ChatGPT 什么,它都会告诉你一堆它的想法)。
最后,在评估方面,我们区分了两种类型的模型:预训练之后的 checkpoint 和指令微调之后的 checkpoint。
- 预训练 checkpoint 具有 in-context learning 的能力。大多数预训练模型可以进行 in-context answer-only,一些更好的模型可以进行 in-context chain-of-thought(但目前尚不清楚为什么某些预训练模型可以进行 CoT 而其他模型却不能)。然而,预训练 checkpoint 可能无法进行 zero-shot,因为它们没有经过这方面的训练(但某些预训练检查点仍然可以进行 zero-shot CoT,请参阅 “让我们逐步思考” 的论文)。
- 指令微调过后的 checkpoint 既具有 zero-shot 又有 in-context 的能力。这里需要注意的是,如果没调好,指令微调之后 in-context 性能可能会稍有下降。
综上所述,我们建议使用 in-context chain-of-thought 进行评估: - In-context 是评估 pretrained checkpoint 的更好方法,因为它更好地揭示了模型潜力。Zero-shot 可能低估模型性能,尤其是对于不支持 Zero-shot chain-of-thought 的(“让我们逐步思考”)的模型。
- Chain-of-thought prompting 是评估推理能力的更好方法,因为它比 answer-only prompting 更充分地发挥了模型的推理性能。
4.2 - Chain-of-thought Hub 简介
项目链接:https://github.com/FranxYao/chain-of-thought-hub
在讨论了所有评估基础知识之后,我们介绍 Chain-of-thought Hub,这是一个正在进行的工作,希望成为评估语言模型推理能力的统一平台。我们汇编了一个包括数学(GSM8K)、科学(MATH)、符号(BBH)、知识(MMLU)等复杂推理任务的列表,以衡量哪些模型确实更好。下面是当前的排行榜。尽管许多数字还没跑出来,但当前的内容仍然能给一个大概的模型排名:
总的来说:
- 我们根据 GSM8K 对模型性能进行排名,这是一个经典的基准测试,用于衡量链式思维数学推理性能。这不是唯一的度量标准,但一个很好的解释是 “在保持其他通用能力的同时,模型在数学方面的表现如何” —— 这也非常困难。
- GPT-4 在 GSM8K 和 MMLU 上明显优于所有其他模型。
- 65B LLaMA 与 text/code-davinci-002 非常接近,这意味着基于它,如果 SFT 和 RLHF 操作正确,我们很有可能基于 65B LLaMA 复现 ChatGPT。
- Claude 是唯一可以与 GPT 系列相媲美的模型家族。
- 较小的模型,如 FlanT5 11B 和 LLaMA 7B,明显落后于排行榜,这意味着复杂推理可能只是大型模型的能力。
进一步地,在 github 仓库中,我们包括了:
- 详细的实验设置和结果分析
- 用于重现 GPT 和 Claude 所有结果的脚本
试一下吧 :)
5 - 结论
在这篇文章中,我们讨论了大型语言模型的推理能力。复杂推理不仅仅是因为它是更强模型与更弱模型之间的核心区分点,而且它还是模型成为下一代计算平台 / 操作系统的基础能力,从而有可能在大模型上建立一个新的生态系统。
我们讨论了构建具有强大推理能力的模型的方法:预训练、有监督的微调和强化学习。我们发现提高推理能力的方法与提高代码能力的方法密切相关,这加深了我们先前关于推理与代码之间密切关系的假设。我们进一步讨论了高级提示工程技巧和在执行复杂推理时模型行为的分析。最后,我们讨论了如何评估模型的推理能力,并介绍了 chain-of-thought hub,这是一个正在进行的项目,旨在统一评估语言模型的推理性能。
我们希望这篇文章能成为构建具有强大推理能力的开源模型的路线图。
人世间数百万个闲暇的小时流逝过去,方始出现一个真正的历史性时刻,人类星光闪耀的时刻 —— 《人类群星闪耀时》斯蒂芬·茨威格
附录:更多大语言模型推理的相关资源
- Lil’Log 2023. Prompt Engineering
- Microsoft Semantic Kernel
- Prompt Engineering Guide
- Huang and Chang 2022. Towards Reasoning in Large Language Models: A Survey
注:文中所提论文可以在原文页面找到相应网址。
原文链接:https://yaofu.notion.site/6dafe3f8d11445ca9dcf8a2ca1c5b199