type
status
date
slug
summary
tags
category
icon
password
状态
专注质量
预计(分钟)
开始时间
结束时间
文章来源说明
本文参考了以下文章:

🤔 为什么写这篇文章

笔者之前在专栏中发布过一篇文章,作为汇总ChatGPT相关资料的入口。但那篇文章偏向于工程化和使用方面。本文将从科学研究的角度出发,分析大型语言模型的北极星能力是什么,以及如何增强大型语言模型的北极星能力。

📝正文

什么是LLM的北极星能力

首先要明确的是,语言模型通常具有多维能力,正因如此,模型之间的比较变得比较困难,每天都会有一个新闻出现,号称xxx模型在xxx方面超过了ChatGPT。在本文撰写之时,谷歌发布了最新的PALM2.0模型,声称在多个方面超越了GPT4。
通过针对性地训练和强化学习,不同的模型都可能在某些方面超越ChatGPT。举个较为极端的例子,中国的科研团队完全可以发布许多个在“古文和古诗词理解”方面能力强于ChatGPT的大型语言模型,但这并没有太大意义。
研究者一直在努力寻找衡量强大语言模型的正确标准。在GPT-4的发布博客中,作者写道:“在一次随意的谈话中,GPT-3.5和GPT-4之间的区别可能微妙。当任务的复杂程度达到足够的阈值时,差异就会显现出来。”这意味着复杂任务很可能是大型和小型语言模型的关键差异因素。
复杂任务意味着复杂推理,为基于语言模型构建大量应用程序提供了机会。例如AutoGPT,让GPT-4作为控制大脑,自主决策是否该上网搜索、写代码、审查代码,一度被很多人认为是通用人工智能的曙光。从这个角度来看,语言模型成为下一代操作系统或计算平台的可能性很大。毫不夸张地说,未来所有的应用程序或许都要被语言模型重塑一遍,因为自然语言交互已经势不可挡,它直观、方便,并且在算力的加持下表现得比较稳定。
因此,将解决复杂任务的能力/进行复杂推理的能力定义为LLM的北极星能力。

增加大语言模型推理能力的方案

推理的方案与构建通用大型语言模型和聊天机器人的方案密切相关。总共有三个阶段:
  • 预训练 / 持续训练:在这个阶段,我们通常在大型数据集(如科学文献或代码数据)上训练大型模型。
  • 有监督微调:在这个阶段,我们对模型进行微调,以便完成复杂任务的指令。
  • 强化学习:在这个阶段,我们使用诸如任务是否已全部/部分完成的信号作为奖励。
在这一部分中,笔者暂时不详细展开各个具体方案的细节,仅将相关论文和结论罗列,以供后续研究。

预训练与持续训练

我们分析以下几项研究:
  • 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 数据集上的代码性能。
这些研究发现,在大量科学文献 / 代码上进行训练可以显著提高基础模型的推理/编码能力。

监督微调

我们分析:
  • 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[4] 和 MOSS[5] 这样的优秀示例)。然而,闲聊的能力并不能转化为执行复杂任务的能力。从这个角度来看,模型就像人类一样:说得多不如干得好,代码见真章。
  • 实际上,指令调优问题是一个数据混合问题:如何最好地混合来自不同来源的指令数据,以便从所有角度均匀地提高模型性能(而不是像在 CoT specialization[6] 和 the flan collection[7] 中讨论的那样,增加一个维度但降低另一个维度)。
  • 数据混合的简单起点是:使用 10-20 个非思维链的数据点(以平衡不同维度的能力),但尽可能多地使用链式思维数据(以最大化推理能力)。

强化学习

我们分析:
  • 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)有所不同,因为它不需要人类反馈。

推理能力与代码能力的耦合

在我们之前的讨论中,我们提出了一个假设,即在代码上进行训练可能会提高推理能力,原因如下:
notion image
  • 代码注释是自然存在的链式思维数据
  • 面向过程编程类似于逐步解决任务。这适用于简单和中等复杂度的任务
  • 面向对象编程类似于将任务分解为较小的任务,然后分别解决它们。这适用于较高复杂度的任务。
从这个显著的一致性中,我们看到提高推理能力与提高编程能力非常相似。在此,我们通过强调训练大型语言模型进行推理或编码的配方相似性,深化了这个假设:
notion image
上文表中的模型汇总
我们看到推理和代码都经历了:
  • 在连续训练阶段,可以在基础模型上增加代码和科学文献数据。
  • 在有监督的微调阶段,可以根据要求完成复杂任务的指令或编写代码对模型进行微调
  • 在强化学习阶段,将中间推理步骤 / 编译率和最终推理结果 / 代码通过率作为奖励
  • 在解码过程中,推理和编码都会采样多个解决方案,然后从解码空间中选择最佳方案。
这些相似性使得代码和推理之间的联系非常有趣

复杂推理的提示工程

上一小节中介绍了提高LLM复杂推理能力的一些方案,但实际操作上来说,一般是从比较底层的方法去做的。
在这一小节中,笔者要写的内容是当我们已经拥有了一个具有推理能力的模型之后,如何设计提示工程,充分释放模型的潜力。

基础Cot提示工程

以下论文推荐给初学者:
  • 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 数据集,它在测试模型推理能力方面非常有效。

进阶技巧及分析

以下论文讨论了高级 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 推理(虽然内容的正确性可能不起到强烈作用)
简而言之,模型只关注提示的格式,但可能不会受到提示正确性的显著影响。然而,模型在多大程度上会受到提示正确性的影响,或者提示可以在多大程度上覆盖模型的先验信念[8],还是一个尚待研究的问题。
以下论文讨论了如何通过改进和反馈来提高模型性能
  • Madaan. et. al. 2023. Self-refine: Iterative refinement with self-feedback
    • 模型可以在多个场景中(包括代码优化、数学推理、对话响应生成等)对自身的推理进行优化和改进。
  • Madaan et. al. 2023. Learning Performance-Improving Code Edits
    • 在程序轨迹上进行训练可以改善编码。
简而言之,以自然语言形式(而非强化学习中的奖励形式)对模型进行改进和反馈非常有效,可以进一步提高语言模型的性能(无论是通过上下文学习还是微调)。

评价大语言模型的推理能力

评价方法的基础知识

在谈论评估时,有三个重要因素需要考虑:数据格式、能力类型和模型类型。首先,提示时有四种数据格式:
notion image
其中:
  • In-context 指的是在测试问题之前附加一系列上下文示例。
  • Zero-shot 是指在没有上下文示例的情况下直接将测试问题输入给模型。
  • Chain-of-thought 是指在回答之前生成推理。
  • Answer-only 是指没有链式思维,直接给答案。
对于模型能力,有两种大致正交的能力类型:
  • 知识 knowledge:模型是否了解世界
  • 推理 reasoning:模型是否可以根据其知识进行推理。
这两个方面并不是严格正交的,因为一些推理规则也可以被视为某种形式的知识。然而,在评估时,这两种能力有明显的差异:
  • 一些数据集更注重对知识的评估,如 MMLU[9],它测试模型是否具有高达大学水平的知识。
  • 一些数据集更注重对推理的评估,如 BBH[10],它测试模型是否具有逐步解决问题的能力。
  • 对于知识,链式思维与仅回答的表现相似(参见 FlanPaLM[11] 论文)
  • 对于推理,链式思维比仅回答表现得更好(参见原始 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,请参阅 “让我们逐步思考” 的论文[12])。
  • 指令微调过后的 checkpoint 既具有 zero-shot 又有 in-context 的能力。这里需要注意的是,如果没调好,指令微调之后 in-context 性能可能会稍有下降[13]
综上所述,我们建议使用 in-context chain-of-thought 进行评估:
  • In-context 是评估 pretrained checkpoint 的更好方法,因为它更好地揭示了模型潜力。Zero-shot 可能低估模型性能,尤其是对于不支持 Zero-shot chain-of-thought 的(“让我们逐步思考”)的模型。
  • Chain-of-thought prompting 是评估推理能力的更好方法,因为它比 answer-only prompting 更充分地发挥了模型的推理性能。

Chain-of-thought Hub简介

https://github.com/FranxYao/chain-of-thought-hub
在讨论了所有评估基础知识之后,我们介绍 Chain-of-thought Hub,这是一个正在进行的工作,希望成为评估语言模型推理能力的统一平台。我们汇编了一个包括数学(GSM8K)、科学(MATH)、符号(BBH)、知识(MMLU)等复杂推理任务的列表,以衡量哪些模型确实更好。下面是当前的排行榜。尽管许多数字还没跑出来,但当前的内容仍然能给一个大概的模型排名:
notion image
总的来说:
  • 我们根据 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 所有结果的脚本

结论

在这篇文章中,我们讨论了大型语言模型的推理能力。复杂推理不仅仅是更强模型与更弱模型之间的核心区分点,而且还是模型成为下一代计算平台 / 操作系统的基础能力,从而有可能在大模型上建立一个新的生态系统。
我们讨论了构建具有强大推理能力的模型的方法:预训练、有监督的微调和强化学习。我们发现提高推理能力的方法与提高代码能力的方法密切相关,这加深了我们先前关于推理与代码之间密切关系的假设。我们进一步讨论了高级提示工程技巧和在执行复杂推理时模型行为的分析。最后,我们讨论了如何评估模型的推理能力,并介绍了 chain-of-thought hub,这是一个正在进行的项目,旨在统一评估语言模型的推理性能。
我们希望这篇文章能成为构建具有强大推理能力的开源模型的路线图。

参考文章

[1]GPT4: https://openai.com/research/gpt-4
[2]Chain-of-thought Hub: https://github.com/FranxYao/chain-of-thought-hub
[3]大模型的涌现能力: https://yaofu.notion.site/How-does-GPT-Obtain-its-Ability-Tracing-Emergent-Abilities-of-Language-Models-to-their-Sources-b9a57ac0fcf74f30a1ab9e3e36fa1dc1
[4]Alpaca: https://crfm.stanford.edu/2023/03/13/alpaca.html
[5]MOSS: https://github.com/OpenLMLab/MOSS
[6]CoT specialization: https://arxiv.org/abs/2301.12726
[7]FLAN: https://arxiv.org/abs/2301.13688
[8]Larger language models do in-context learning differently: https://arxiv.org/abs/2303.03846
[9]MMLU: https://arxiv.org/abs/2009.03300
[10]BBH: https://arxiv.org/abs/2210.09261
[11]FlanPaLM: https://arxiv.org/abs/2210.11416
[12]Large Language Models are Zero-Shot Reasoners: https://arxiv.org/abs/2205.11916
[13]Specializing Smaller Language Models towards Multi-Step Reasoning: https://arxiv.org/abs/2301.12
致谢:
💡
Written by Aryue,supported by Notion AI.
 
 
当一个月提示词工程师是什么体验?LangChain学习
Aryue
Aryue
一个普通的干饭人🍚
公告
type
status
date
slug
summary
tags
category
icon
password
状态
专注质量
预计(分钟)
开始时间
结束时间
📧:578626935@qq.com