从零开始构建一个推理模型——理解推理模型

0 阅读30分钟

本章内容包括

  • 在 LLM 语境下,“推理”具体指什么
  • LLM 的常规预训练与后训练阶段
  • 提升 LLM 推理能力的关键方法
  • 推理与模式匹配有何不同
  • 为什么我们要从零开始构建推理模型

欢迎来到大语言模型(LLM)的下一个阶段:推理

LLM 已经彻底改变了我们处理和生成文本的方式,但它们的成功,在很大程度上一直是由统计模式识别驱动的。不过,推理方法上的新进展,如今已经让 LLM 能够处理更复杂的任务,例如求解逻辑谜题,以及涉及多步运算的高阶数学问题。此外,推理也是让“智能体型”AI 真正落地的关键技术。理解各种推理方法,正是本书的核心主题。

在《从零开始构建推理模型》(Build a Reasoning Model (From Scratch) )一书中,你将通过一种动手实践、代码优先的方法,学习 LLM 推理方法的内部机理。我们会从一个预训练好的 LLM 出发,逐步为它扩展推理能力。我们会亲手、从零开始实现这些推理组件,以便真正看清这些方法在实践中到底是如何工作的。

如果你也好奇 LLM 本身是如何被构建和训练出来的,我之前由 Manning 出版的《从零开始构建大语言模型》(Build A Large Language Model (From Scratch)mng.bz/orYv)已经对这些基础做了详细讲解,不过阅读本书并不要求你必须掌握那些内容。到本书结束时,你将理解推理模型是如何工作的,并具备设计、原型化和评估各种提升LLM 推理能力主流方法的能力。

本书聚焦实践应用与原理解释,因此它既适合 LLM 工程师、机器学习研究者、应用科学家,也适合软件开发者阅读。

1.1 在 LLM 语境下定义“推理”

什么是基于 LLM 的推理?光是回答和讨论这个问题,本身就足以写满一本书。不过,那会是另一本完全不同类型的书,而不是这本以实操、动手编码为导向、强调从零实现 LLM 推理方法的书。尽管如此,我仍然认为,有必要先简要界定一下:在 LLM 的语境里,我们所说的“推理”到底是什么意思。

所以,在接下来几章真正进入编码部分之前,我想先用这一节为全书开个头:定义一下在 LLM 语境中的推理,介绍提升 LLM 所谓“推理行为”的主要技术,并简要说明它与模式匹配、逻辑推理之间的关系。这将为后续讨论打下基础:包括 LLM 当前是如何构建的、它们如何处理推理任务,以及它们擅长什么、不擅长什么。

在 LLM 的语境下,推理意味着:模型在给出最终回答之前,会展示它是如何一步步得到这个答案的,也就是先解释中间步骤,再给出最终响应。

进一步来说,当前对“推理模型”的定义,通常指的是:一种经过增强的 LLM,它会在给出答案之前解释自己的步骤;而这种对中间步骤的解释,往往会提升模型在复杂任务上的准确性,例如编程、逻辑谜题和数学问题。

思维链(Chain-of-Thought, CoT)

在 LLM 领域里,推理常常被称为思维链(Chain-of-Thought,CoT)。在这个过程中,模型会生成一系列中间步骤或解释,用来展示它是如何一步步得出最终答案的。研究者和工程师常说,模型不是直接跳到结果,而是“逐步思考”这个问题。换句话说,模型把自己的推理过程显式表达出来,让人更容易跟随。

需要注意的是,在本书中,我们会沿用 LLM 研究者和工程师常用的说法,使用“推理”(reasoning)和“思考”(thinking)这些术语来描述所谓的推理模型。但这并不意味着 LLM 真的是像人类那样在思考或推理。

图 1.1 展示了一个传统 LLM 是如何生成用户问题答案的。

image.png

图 1.1 简化展示了一个传统的、非推理型 LLM 如何对问题给出简短回答。

如图 1.1 所示,传统 LLM 可能不会展示它是如何得出答案的。虽然答案本身也许是正确的,但它无法帮助用户理解这个答案背后的过程。

图 1.2 展示了一个 LLM 进行多步(CoT)推理的简单例子。

image.png

图 1.2 简化展示了一个推理型 LLM 如何通过思维链来处理多步推理任务。它不是简单回忆一个事实,而是把若干中间推理步骤组合起来,最终得出正确结论。至于这些中间推理步骤是否展示给用户,则取决于具体实现方式。

LLM 生成的中间推理步骤——如图 1.2 所示——看起来很像一个人在把脑中的思考过程大声说出来。然而,这些方法以及它们产生的推理过程,到底与人类推理有多接近,仍然是一个开放的研究问题,而这并不是本书试图回答的内容。甚至,这个问题本身是否能够被明确回答,都还不确定。

虽然图 1.1 是一个典型的思维链推理示例,但必须强调:LLM 的推理不同于传统的、确定性的推理

例如,符号逻辑引擎或定理证明器会遵循严格的、基于规则的步骤,这些步骤能够保证一致性和正确性。(符号逻辑引擎有点像严格照着菜谱做菜:每一步都是固定的,每次都必须导向同样的结果。用烹饪来打比方,如果你每一步都完全照做,最后总会做出同一道菜。)

相比之下,LLM 是以自回归的方式生成推理的,也就是说,它是基于训练数据中学到的统计模式,一次预测一个 token。因此,LLM 的“推理步骤”并不保证在逻辑上一定成立,即使它们看上去非常有说服力。

因此,本书关注的重点,是解释并实现那些能够提升 LLM 推理能力的基础技术,从而让 LLM 更擅长处理复杂任务。我希望,通过亲手实践这些方法,你将更有能力理解和改进当前正在被开发的各种推理方法,甚至进一步探索它们与人类推理之间的关系。

LLM 推理与人类推理

LLM 的推理过程在表面上可能与人类思维相似,尤其体现在它会把中间步骤表述出来。然而,必须认识到一个关键差异:人类可以通过有意识地应用逻辑规则,或基于脑中的世界模型进行确定性推理。这里的“确定性”意味着:如果我们从同样的事实出发,遵循同样的步骤,就总会得到同样的结论。相比之下,当前 LLM 的推理是概率性的,也就是说,它是根据训练数据中的统计模式逐 token 生成内容,并不保证逻辑一致性。

人类在推理时,往往会有意识地操作概念、直觉性地理解抽象关系,或者从少量例子中进行泛化。而 LLM 则相反:它依靠从海量文本中提取模式来工作,而不是依赖内置的推理规则,也不具备任何形式的有意识思考。

简而言之,尽管增强了推理能力的 LLM 所产出的结果看起来像人类思考,但其底层机制与人类推理有着显著差异,而且这仍然是一个非常活跃的探索方向。

1.2 理解标准的 LLM 训练流水线

本节会简要概括传统(非推理型)LLM 通常是如何训练出来的,这样我们才能理解它们的局限到底在哪里。这些背景也有助于为接下来关于模式匹配与逻辑推理差异的讨论建立上下文。

在应用任何具体的推理方法之前,传统 LLM 的训练通常被划分为两个阶段:预训练(pre-training)和后训练(post-training),如图 1.3 所示。

image.png

图 1.3 典型 LLM 训练流水线概览。流程从一个随机初始化权重的初始模型开始,然后在大规模文本数据上进行预训练,通过预测下一个 token 来学习语言模式。之后,后训练阶段通过指令微调和偏好微调进一步优化模型,使 LLM 更好地遵循人类指令,并与人类偏好对齐。

在典型 LLM 训练流水线的预训练阶段(如图 1.3 所示),LLM 会在海量的、未标注文本上进行训练,这些文本规模通常以 TB 计,包括书籍、网站、研究论文以及许多其他来源。预训练的目标,是让 LLM 学会预测这些文本中的下一个词(也就是下一个 token)。

词与 token

Token 是语言模型处理的一种小型文本单位。根据所谓的分词器(tokenizer)如何切分文本,一个 token 可以是完整的单词、单词的一部分,甚至是标点符号。

例如,句子:

“An LLM can be useful.”

在一个常见的 tokenizer 中,可能会被拆分为如下 token:

  • “An”
  • “ L”
  • “LM”
  • “ can”
  • “ be”
  • “ useful”
  • “.”

然后,这些 token 会被转换成数值 ID,供模型处理。

Tokenizer 本身并不是 LLM 模型的一部分,但它仍然是整个 LLM 文本处理和生成流水线中的关键组件。下一章我们会看到 tokenization 在实践中是如何工作的。

当 LLM 在超大规模数据集上完成预训练之后,就会变得非常强大;这种数据集通常包含数 TB 文本,大约相当于 3000 亿到 4000 亿个 token。这种训练通常需要数千张 GPU 持续运行数月,成本高达数百万美元。这里所谓“强大”,是指 LLM 开始能够生成与人类写作极其相似的文本。同时,在一定程度上,预训练好的 LLM 还会表现出所谓的涌现能力(emergent properties),也就是说,它们能够执行一些并未被显式训练的任务,比如翻译、代码生成等等。

然而,这些预训练模型本身只是后训练阶段的基础模型。后训练阶段通常会使用两项关键技术:监督微调(supervised fine-tuning,简称 SFT,在文献中也常被称为指令微调 instruction tuning)和偏好微调(preference tuning,通常通过强化学习结合人类反馈来实现),从而让 LLM 学会更好地响应用户查询,这一点如图 1.4 所示。

image.png

图 1.4 语言模型在不同训练阶段的响应示例。提示词要求模型总结睡眠与健康之间的关系。预训练 LLM 会生成一个相关但不够聚焦、也没有严格遵循指令的回答。经过指令微调的 LLM 会给出简洁且准确、与提示更对齐的总结。进一步经过偏好微调的 LLM,则会通过更友好、更吸引人的表达方式进一步优化回答,使其更贴近用户偏好、更具可读性。

如图 1.4 所示,指令微调提升了 LLM 执行类似个人助理任务的能力,例如问答、摘要、翻译等。随后,偏好微调会进一步打磨这些能力。顾名思义,偏好微调帮助模型使回答更贴近用户偏好。(有些读者可能更熟悉“基于人类反馈的强化学习”,也就是 RLHF,这其实只是实现偏好微调的一种具体方法。)

简而言之,我们可以把预训练理解为一种“原始语言预测”(即通过 next-token prediction),它赋予 LLM 一些基础性质和生成连贯文本的能力。而后训练阶段则通过指令微调增强模型的任务理解能力,再通过偏好微调让模型生成更符合人类偏好和风格要求的答案。

不过,也值得注意的是,即便一个模型已经做过指令微调,它也还不是一个真正意义上的“聊天机器人”。聊天界面还额外引入了一层机制,用来在交互式、多轮对话场景中引导模型的响应。这通常包括系统提示词、对话历史管理,以及其他编排逻辑(附录 G 中会有一个这方面的实现示例)。

注意

上面提到的预训练和后训练阶段,在我由 Manning 出版的《从零开始构建大语言模型》中有详细讲解。本书并不要求你必须掌握这些阶段的细节。更具体地说,在下一章中,我们会直接加载一个已经完成昂贵的预训练和后训练阶段的模型,这样我们就能把重点放在后续章节中真正属于“推理模型”的那些方法上。

1.3 通过训练与推理阶段技术来提升 LLM 推理能力

在公众视野中,LLM 推理真正开始广为人知,是在 2024 年 9 月 12 日 OpenAI 在 ChatGPT 中发布 o1 时。那次发布让“LLM 推理”这一概念迅速走红。OpenAI 在公告文章中提到:

“We’ve developed a new series of AI models designed to spend more time thinking before they respond.”

也就是说:

“我们开发了一系列新的 AI 模型,这些模型被设计为在响应之前花更多时间进行思考。”

OpenAI 还写道:

“These enhanced reasoning capabilities may be particularly useful if you're tackling complex problems in science, coding, math, and similar fields.”

也就是说:

“如果你正在处理科学、编程、数学以及类似领域中的复杂问题,这些增强后的推理能力会特别有帮助。”

几个月后,也就是 2025 年 1 月,DeepSeek 发布了 DeepSeek-R1 模型及其技术报告(arxiv.org/abs/2501.12…),其中详细介绍了构建推理模型的训练方法。这在业内引起了巨大反响,因为他们不仅免费且开源地提供了一个能够与专有 o1 模型竞争、甚至在一些方面超过它的模型,还公开分享了一套训练此类模型的路线图。

本书的目标,就是通过从零实现相似方法的方式,解释这些用来开发推理模型的方法究竟是如何工作的。

开发和提升 LLM 推理能力的方法,大致可以分成三大类,如图 1.5 所示。

image.png

图 1.5 提升 LLM 推理能力的三类常用方法。这些方法——推理阶段计算扩展、强化学习和蒸馏——通常是在传统训练阶段(初始模型训练、预训练、以及指令与偏好微调后的后训练)之后应用的,但推理技术也可以应用到预训练后的基础模型之上。

如图 1.5 所示,这些方法应用在那些已经经历了传统预训练和后训练阶段的 LLM 上,也就是已经完成了指令微调和偏好微调的模型。

推理阶段计算扩展

推理阶段计算扩展(inference-time compute scaling,也常被称为 inference compute scaling、test-time scaling 等)指的是:在推理阶段(也就是用户向模型提问时),通过增加计算资源来提升模型推理能力的方法,而不需要训练或修改底层模型权重。它的核心思想是:用更多的计算换取更好的性能,从而让即使是固定不变的模型,也能通过诸如思维链推理和各种采样策略等技术,表现得更强。这部分会是第 4 章和第 5 章的重点。

强化学习

强化学习(RL)指的是通过训练来提升模型推理能力的方法:模型会被鼓励去采取那些能够带来高奖励信号的行动。这些奖励既可以是比较宽泛的,例如任务是否成功、某种启发式评分;也可以是更窄、更可验证的,例如数学题是否答对、代码任务是否正确。

与推理阶段计算扩展不同,强化学习并不是在不改动模型的前提下提升性能;它会在训练过程中更新模型权重。这使得模型能够通过试错,根据环境反馈,逐步学习和改进自己的推理策略。我们将在第 6 章和第 7 章中更详细地探讨 RL。

面向推理的强化学习与偏好微调中的 RL

在推理模型开发的语境里,有必要把这里提到的 RL,与传统 LLM 开发中偏好微调所使用的 RLHF(基于人类反馈的强化学习)区分开来——后者我们在前面图 1.5 中已经提到过。

这两者底层用的都是同一种过程(强化学习),但它们最主要的区别在于:奖励是如何获得和验证的

  • RLHF 使用的是人类判断作为奖励来源;
  • 而用于推理模型的 RL,通常依赖自动验证器或环境反馈。

RLHF 会将人类对模型输出的显式评价或排序作为奖励信号,从而直接引导模型朝着人类更偏好的行为方向发展。相比之下,在推理模型语境下的 RL,通常依靠自动化或基于环境的奖励信号,这种奖励往往更客观,但不一定像人类偏好那样贴近主观标准。例如,在推理模型开发中,RL 可能会通过对数学证明正确性的明确奖励,来训练模型在数学任务上表现更好;而 RLHF 则会让人工评审者对多种回答进行排序,从而鼓励模型输出更符合人类标准和主观偏好的内容。

蒸馏

蒸馏(distillation)是指将大型、强大模型学到的复杂推理模式迁移到更小或更高效的模型中。在 LLM 语境下,这通常意味着:使用由更强大模型生成的高质量标注指令数据集,对较小模型进行监督微调(SFT)。这种技术在 LLM 文献中通常被称为知识蒸馏,简称蒸馏。

不过,需要注意的是,这和深度学习中的传统知识蒸馏略有不同。在传统知识蒸馏中,较小的“学生”模型通常会同时学习较大“教师”模型的输出结果和 logits;而在 LLM 里所说的蒸馏,更多指基于高质量生成样本做 SFT。这个话题会在第 8 章进一步讨论。

1.4 通过模式匹配来建模语言

如前一节所述,在预训练阶段,LLM 会接触海量文本,并通过识别和复现这些数据中的统计关联来学习预测下一个 token。这个过程让它们能够生成流畅、连贯的文本,但它的根本基础,仍然是表层相关性,而不是真正意义上的深层理解。

LLM 对提示词作出响应的方式,是生成与训练中见过的模式在统计上相一致的文本延续。归根结底,它们是在做输入与输出之间的模式匹配,而不是通过显式逻辑推导来得到答案。

来看一个简单例子:

提示词

The capital of Germany is…

回答

Berlin.

当一个 LLM 输出 “Berlin” 这个答案时,它并不是在做逻辑推导。相反,它是在回忆训练数据中学到的一种非常强的统计关联。这种行为就是我们所说的模式匹配:模型基于学到的相关性来续写文本,而不是通过结构化的推理步骤来得出答案。

但是,那些超出单纯模式识别范围的任务呢?也就是说,那些正确答案取决于是否能够从给定事实中推出结论的任务呢?这就引出了另一种能力:逻辑推理

逻辑推理指的是:通过系统地运用规则来得出结论。与模式匹配不同,它依赖中间推理步骤,以及识别矛盾、或基于形式化关系推出蕴含结论的能力。

来看下面这个例子:

提示词:
“All birds can fly. A penguin is a bird. Can a penguin fly?”

这个问题有两种评估方式。

第一种,是在封闭世界(只看提示本身)的设定下:根据提示中的两个前提——“所有鸟都会飞”和“企鹅是一种鸟”——有效答案应该是:

“Yes, a penguin can fly.”

第二种,是在开放世界(允许使用背景知识)的设定下:如果我们允许使用提示中没有给出的背景知识,例如“企鹅不会飞”,那么这个外部事实就会与由前提推导出的结论发生冲突,如图 1.6 所示。一个真正具备推理能力的系统,应该能够注意到这种不一致,并且要么请求澄清,要么弱化第一个陈述,例如改写成:

“Most birds can fly, with exceptions such as penguins.”

image.png

图 1.6 展示了矛盾前提如何导致逻辑不一致。根据 “All birds can fly” 和 “A penguin is a bird”,我们会推导出 “Penguin can fly”。但这一结论又与已知事实 “Penguin cannot fly” 相冲突,因此产生了矛盾。

图 1.6 展示了一个基于逻辑推理的系统会如何处理上面提到的 “All birds can fly…” 这个提示。

相比之下,基于统计模式匹配的 LLM 并不会显式追踪这种矛盾,而只是根据训练中学到的文本分布来做预测。例如,如果训练数据中“所有鸟都会飞”这一类信息被强烈强化,模型就可能会非常自信地回答:

“Yes, penguins can fly.”

下一节中,我们会看一个具体例子,看看 LLM 是如何处理这个 “All birds can fly…” 提示的。

逻辑推理与规则系统

为什么显式的、基于规则的系统如今没有那么流行了?
在 20 世纪 80 到 90 年代,基于规则的系统曾经被广泛应用于医疗诊断、法律判决和工程领域。它们在今天依然被用于一些关键领域(如医学、法律、航空航天),因为这些领域往往需要明确的推理过程和透明的决策路径。

不过,这类系统实现起来非常困难,因为它们高度依赖人工编写的启发式规则。(所谓启发式规则,就是那种能够快速给出“足够好”答案的简单决策规则,但并不保证最优解。)相比之下,深度神经网络——包括 LLM——并不依赖手写规则;它们从数据中学习决策模式,并且在大规模训练下具有很强的灵活性。

1.5 在没有显式规则的情况下模拟推理

在上一节中,我们看到,相互矛盾的前提会导致逻辑不一致。传统 LLM 并不会显式追踪这些矛盾,而是基于学到的文本分布来生成回答。

现在,让我们来看一个具体例子——如图 1.7 所示——看看像 OpenAI ChatGPT 中的 GPT-4o 这样的非推理增强型 LLM,是如何回答上一节那个 “All birds can fly…” 提示的。

image.png

图 1.7 一个示意性例子,展示语言模型(ChatGPT 中的 GPT-4o)如何“看起来像是在推理”一个带有矛盾前提的问题。

图 1.7 中的例子显示,GPT-4o 看起来给出了正确答案,尽管它通常并不被归类为推理模型;与之对应,像 OpenAI 的 o1、o3、o4-mini,以及更近期的 GPT-5,才是明确按照推理方法开发出来的模型。

那么,4o 是怎么生成这个答案的?这是否意味着 GPT-4o 在显式执行逻辑推理?答案是否定的,至少不能轻易这么说。更准确地讲,GPT-4o 至少在熟悉的语境中,非常擅长模拟逻辑推理

GPT-4o 并不会显式地执行矛盾检查;它仍然是基于概率加权的模式来生成答案。这种方式之所以有效,是因为如果训练数据中存在大量类似“企鹅不会飞”这样的修正性信息,模型就会学到“企鹅”和“不会飞”之间的统计关联。正如图 1.7 所展示的,这使得模型即使没有显式实现基于规则的逻辑推理方法,也依然能给出正确答案。

换句话说,模型是隐式地识别出矛盾的,因为它在训练过程中频繁见过这一类推理场景。它的有效性,极大依赖于通过大量接触“类似推理模式”而形成的统计关联。

所以,即使一个传统 LLM 像图 1.7 那样,看起来像是在进行逻辑演绎,它也并没有真的执行显式、基于规则的逻辑,而只是借助其海量训练数据中学到的模式。

尽管如此,GPT-4o 在这个例子中的成功,恰恰很好地说明了:当模式匹配在超大规模训练下进行时,它可以变得非常强大。然而,这类基于模式的“推理模型”通常会在以下场景中遇到困难:

  • 逻辑场景是新的(训练数据中从未出现过)
  • 推理复杂度很高,涉及复杂、多步的逻辑关系

逻辑推理与当前的推理型 LLM 产品

虽然 GPT-4o 没有被官方标注为推理模型,但 OpenAI 已经提供了多个专门的推理模型,包括 o1、o3、o4-mini 和 GPT-5。此外,其他公司也一直在开发具备显式推理能力的 LLM。就目前写作本书时而言,较为知名的例子包括 Anthropic 的 Claude 4、xAI 的 Grok 4、Google 的 Gemini 2.5、DeepSeek 的 R1、阿里的 Qwen3 等等。本书聚焦的,正是这些模型所采用的那些技术。

正如我们将看到的,这些能力的增强,并不是通过实现一个显式的、基于规则的推理流水线来做到的(图 1.6 只是展示了规则式推理的大致思想)。相反,LLM 的推理能力是通过改造后的推理阶段方法和训练方法逐步学习出来、增强出来的。

我们可以说:LLM 是通过学习到的模式来模拟逻辑推理的,而我们又可以进一步通过专门的推理方法——例如推理阶段计算扩展和后训练策略(如强化学习)——来增强这种能力,但模型内部并没有真正显式执行基于规则的逻辑。

此外,还值得一提的是:LLM 的推理能力其实是一个连续谱。也就是说,在像 OpenAI 的 o1 和 DeepSeek-R1 这样的专门推理模型出现之前,LLM 就已经能够在一定程度上模拟出推理行为了。例如,它们能够通过生成中间步骤来得出正确结论,这本身就符合我们前面对“推理”的定义。如今我们明确称之为“推理模型”的东西,本质上只是这种能力的更精细、更强化的版本。而这些增强后的推理能力,正是通过特定的推理阶段计算扩展技术(第 4、5 章)以及有针对性的后训练方法(如强化学习,第 6、7 章)来实现的,它们的目标就是提升并强化这种“看起来像推理”的行为。

1.6 为什么要从零开始构建推理模型?

自从 DeepSeek-R1 在 2025 年 1 月发布之后,提升 LLM 推理能力已经成为 AI 领域最热门的话题之一,而且这是有充分理由的。更强的推理能力可以让 LLM 处理更复杂的问题,从而在用户真正关心的各种任务上变得更强。

这种转变,也体现在 OpenAI CEO 于 2025 年 2 月 12 日的一段表述中:

“We will next ship GPT-4.5, the model we called Orion internally, as our last non-chain-of-thought model. After that, a top goal for us is to unify o-series models and GPT-series models by creating systems that can use all our tools, know when to think for a long time or not, and generally be useful for a very wide range of tasks.”

这段话大意是:

“接下来我们将发布 GPT-4.5,也就是我们内部称为 Orion 的模型,它将是我们最后一个非思维链模型。此后,我们的一个核心目标,是通过构建能够使用我们所有工具、知道什么时候该长时间思考、什么时候不该、并且能够广泛胜任各种任务的系统,把 o 系列模型和 GPT 系列模型统一起来。”

这段话清楚地表明,主流 LLM 提供商正在从传统模型转向推理模型。这里的“思维链”(chain-of-thought),指的是一种提示技术,它会引导语言模型逐步推理,以增强其推理能力;我们会在第 4 章和第 5 章对此展开更详细的讲解。

同样值得注意的是,这里提到模型需要知道“什么时候应该长时间思考,什么时候不应该”。这其实暗示了一个很重要的设计考量:推理并不总是必要的,也不总是值得的。

例如,推理模型非常适合处理复杂任务,如解谜题、高阶数学题、困难编码任务等;但对于一些更简单的任务,例如摘要、翻译或基于知识的问答,它们并不是必需的。事实上,把推理模型用在所有任务上,往往会带来低效和高成本。例如,推理模型通常更贵、更啰嗦,而且有时还会因为“过度思考”而更容易出错。所以,这里适用一个非常简单的原则:针对任务,选用合适的工具(或者合适类型的 LLM)

推理模型通常比非推理模型更贵,主要有两个原因。

第一,它们往往会生成更长的输出,因为它们会包含中间步骤,用来解释答案是如何得出的。正如图 1.8 所示,LLM 是一次一个 token 地生成文本,而每生成一个 token,都需要完整执行一次前向传播。如果一个推理模型的答案长度是普通答案的两倍,那么它大致就需要执行两倍数量的前向传播,这自然会增加计算成本。

image.png

图 1.8 LLM 的逐 token 生成过程。每一步中,LLM 都会接收截至当前为止已经生成的完整序列,然后预测下一个 token。这个 token 可能代表一个单词、子词或标点符号,具体取决于 tokenizer。新生成的 token 会被追加到序列末尾,并作为下一步的输入。这种迭代式解码过程既用于标准语言模型,也用于以推理为导向的模型。

第二,很多推理工作流会要求模型为同一个任务运行多次,例如采样多个候选解、调用工具、或者运行一个验证器。这些额外调用会成倍增加被处理的 token 数量,使得成本进一步高于图 1.8 所展示的那种“单次调用”行为。

也正因为如此,从零开始实现这些模型和方法才特别有价值。这是理解它们工作机制的最佳方式之一。而一旦我们真正理解了 LLM 和这些推理模型是如何工作的,我们也就能更好地理解它们背后的各种权衡。

1.7 从零开始构建推理模型的路线图

现在,我们已经从宏观角度讨论了 LLM 中的推理。接下来的章节,将带你一步步通过编码,亲手实现并应用各种推理方法。整个过程会分为多个阶段,如图 1.9 所示。

image.png

图 1.9 本书覆盖的推理模型开发主要阶段的一个整体心智模型。我们从一个传统 LLM 作为基础模型开始(阶段 1)。在阶段 2,我们会讲解各种评估策略,用来追踪阶段 3 和阶段 4 中推理方法带来的推理能力提升。

如图 1.9 所示,我们会把推理模型的开发分成若干阶段来讲解。

  • 阶段 1(下一章),我们会加载一个已经完成基本预训练和指令微调的传统 LLM。
  • 然后,在阶段 2,我们会介绍评估 LLM 和推理能力的常用方法,这样在后续阶段应用各种增强推理的方法时,我们就能衡量它们带来了哪些提升。
  • 阶段 3 将介绍一些推理阶段技术,这些技术可以在不改动模型权重的情况下提升 LLM 的回答质量和推理行为。需要注意的是,这些技术既可以用于传统 LLM,也可以用于已经训练成推理模型的 LLM。
  • 阶段 4 将介绍真正用来开发推理模型的训练方法。

我很期待接下来的旅程,也希望你同样如此。

1.8 小结

传统 LLM 的训练通常分为几个阶段:

  • 预训练:模型从海量文本中学习语言模式
  • 指令微调:提升模型对用户提示词的响应能力
  • 偏好微调:让模型输出更符合人类偏好

推理方法是在传统 LLM 之上进一步叠加的。

在 LLM 语境中,推理指的是:通过让模型在给出最终答案之前,显式生成中间步骤(思维链),从而提升它在多步任务上的准确性。

LLM 中的推理不同于基于规则的推理,也很可能不同于人类推理;当前比较普遍的共识是:LLM 的推理本质上仍然依赖于统计模式匹配。

LLM 中的模式匹配完全依赖于从数据中学到的统计关联,它能支撑流畅的文本生成,但并不具备显式的逻辑推理机制。

提升 LLM 推理能力,可以通过以下方式实现:

  • 推理阶段计算扩展:无需重新训练,通过增加推理阶段计算来增强推理能力(例如思维链提示)
  • 强化学习:通过奖励信号显式训练模型
  • 监督微调与蒸馏:使用更强推理模型生成的样本来训练模型

从零开始构建推理模型,能够帮助我们从实践中真正理解 LLM 的能力、局限性,以及它们在计算成本上的各种权衡。