(在天体摄影中,当使用长曝光拍摄星轨时,北极星位于星轨的中心,始终指向真正的北方。在古代,它为旅行者指引方向。)
作者 | 符尧
爱丁堡大学博士生
最近,很多关于较小模型的研究取得了令人振奋的对话能力,这让人们想象,是否较小的模型能具有与像 GPT-3.5 这样的大型模型相当的性能。一般来说,语言模型具有多维能力,所以模型之间的相互对比较为困难。找到正确的衡量标准对于开发强大的语言模型至关重要。在目前阶段,研究者们急切想知道什么是度量大语言模型潜力的关键因素。
在 GPT-4 发布时的博客中,作者写道:“在一次随意的谈话中,GPT-3.5 和 GPT-4 之间的区别可能是微妙的。当任务的复杂程度达到足够的阈值时,差异就会显现出来。”这意味着,复杂任务很可能是大型和小型语言模型的关键差异因素。
更重要的是,复杂推理为基于语言模型构建大量应用程序提供了机会,从而使语言模型有机会成为下一代计算平台 / 操作系统。这有可能从根本上改变人类与机器的交互方式,重塑整个计算生态系统。
在这篇文章中,我们将仔细分析、讨论如何让大语言模型拥有强大的复杂推理能力。
1
动机:大语言模型作为新一代计算平台
我们研究复杂推理的原因有两个:
-
正如上文提到的,复杂推理是标志着小模型与大模型差异的关键因素,这一点在 GPT-4 发布文章中已经讨论过。 -
复杂推理是使模型成为下一代操作系统的核心能力。
-
在第 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 -
根据诸如编译错误、运行时错误或是否通过测试等信号训练奖励模型。
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 进阶技巧及分析
-
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 是指没有链式思维,直接给答案。
-
知识:模型是否了解世界 -
推理:模型是否可以根据其知识进行推理。
-
一些数据集更注重对知识的评估,如 MMLU,它测试模型是否具有高达大学水平的知识。 -
一些数据集更注重对推理的评估,如 BBH,它测试模型是否具有逐步解决问题的能力。 -
对于知识,链式思维与仅回答的表现相似(参见 FlanPaLM 论文) -
对于推理,链式思维比仅回答表现得更好(参见原始 CoT 论文,然后参见 FlanPaLM 论文)
-
预训练 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 是评估 pretrained checkpoint 的更好方法,因为它更好地揭示了模型潜力。Zero-shot 可能低估模型性能,尤其是对于不支持 Zero-shot chain-of-thought 的(“让我们逐步思考”)的模型。 -
Chain-of-thought prompting 是评估推理能力的更好方法,因为它比 answer-only prompting 更充分地发挥了模型的推理性能。
4.2 Chain-of-thought Hub 简介
-
我们根据 GSM8K 对模型性能进行排名,这是一个经典的基准测试,用于衡量链式思维数学推理性能。这不是唯一的度量标准,但一个很好的解释是 “在保持其他通用能力的同时,模型在数学方面的表现如何” —— 这也非常困难。 -
GPT-4 在 GSM8K 和 MMLU 上明显优于所有其他模型。 -
65B LLaMA 与 text/code-davinci-002 非常接近,这意味着基于它,如果 SFT 和 RLHF 操作正确,我们很有可能基于 65B LLaMA 复现 ChatGPT。 -
Claude 是唯一可以与 GPT 系列相媲美的模型家族。 -
较小的模型,如 FlanT5 11B 和 LLaMA 7B,明显落后于排行榜,这意味着复杂推理可能只是大型模型的能力。
-
详细的实验设置和结果分析 -
用于重现 GPT 和 Claude 所有结果的脚本
试一下吧 :)
5
结论
人世间数百万个闲暇的小时流逝过去,方始出现一个真正的历史性时刻,人类星光闪耀的时刻 —— 《人类群星闪耀时》斯蒂芬·茨威格
附录:更多大语言模型推理的相关资源
-
Lil’Log 2023. Prompt Engineering -
Microsoft Semantic Kernel -
Prompt Engineering Guide Huang and Chang 2022. Towards Reasoning in Large Language Models: A Survey
试用OneFlow: github.com/Oneflow-Inc/oneflow/
本文分享自微信公众号 - OneFlow(OneFlowTechnology)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。