
理解什么是推理模型,看懂这篇就够了 精华
DeepSeek-R1、OpenAI o3-mini 和 Google Gemini 2.0 Flash Thinking 是通过“推理”框架将 LLMs 扩展到新高度的典范。
它们标志着从扩展训练时计算转变为扩展测试时计算的范式转变。
在这篇文章中,有超过 40 个自定义视觉效果,你将探索推理领域、测试时计算,并深入研究 DeepSeek-R1。
什么是推理 LLMs?
与常规的LLMs相比,推理LLMs通常会在回答给定问题之前将问题分解为更小的步骤(通常称为推理步骤或思维过程)。
那么,“思考过程”、“推理步骤”或“思维链”究竟意味着什么呢?
尽管我们可以哲学地探讨LLMs是否真的能够像人类一样思考 ,这些推理步骤将过程分解为更小的、结构化的推断。
为了理解如何创建推理LLMs,我们首先探讨从关注训练( 训练 -时间计算)转向推理( 测试 -时间计算)的范式转变。
什么是训练时间计算?
直到 2024 年中,为了在预训练阶段提高LLMs的表现,开发者们增加以下参数的大小:
- 模型(参数数量 )
- 数据集(token数量 )
- 计算能力(浮点运算数量)
综合起来,这被称为训练计算量 ,指的是预训练数据是“人工智能的化石燃料”的概念。简而言之,预训练预算越大,最终得到的模型效果越好.
训练时计算可能包括训练和微调期间所需的计算。
共同成为提高 LLM 性能的主要关注点。
缩放法则
模型的规模(通过计算、数据集大小和模型大小)如何与模型的性能相关,通过各种缩放定律进行研究。
它们是所谓的“幂律”,其中一个变量(例如计算)的增加会导致另一个变量(例如性能)的比例变化。
这些通常是在对数-对数尺度下显示的(这会结果为一条直线),以展示计算能力的大幅增加。
最著名的有“Kaplan” 和“Chinchilla” 规律。这些规律大致表明,模型的性能会随着计算量、标记数和参数数的增加而提高。
它们建议,为了实现最佳性能,这三个因素必须同步扩大规模。
Kaplan 的扩展定律指出,通常情况下,增加模型规模比增加数据更为有效(给定固定的计算资源)。相比之下,Chinchilla 的扩展定律表明,模型规模和数据同样重要。
然而,从 2024 年起,计算能力、数据集规模和模型参数 steadily 增长,但收益已经开始递减。
就像这些幂律一样,随着规模的扩大,边际收益递减。
这个问题引发了思考:“我们是否已经到达了瓶颈?”
测试时的计算是什么?
而不是不断增加预训练预算,推理时的计算允许模型在推理时“ 思考更长时间 ”。
使用非推理模型时,它通常只会输出答案并跳过任何“推理”步骤:
然而,推理模型会通过一个系统的“ 思考 ”过程使用更多的令牌来推导出答案:
想法是,LLM 必须花费资源(例如 VRAM 计算能力)来生成答案。然而,如果所有的计算资源都用于生成答案,这似乎有些效率低下!
相反,通过预先创建包含更多信息、关系和新想法的标记,模型在生成最终答案时消耗了更多的计算资源。
规模法则
首先,是一篇来自 OpenAI 的文章,展示了测试时计算量实际上可能与训练时计算量的扩展趋势一致。
因此,他们认为可能会出现一种范式转变,即在测试时增加计算量,因为这仍是一个新兴领域。
第二,一篇名为“棋盘游戏中的扩展扩展定律”的论文探讨了 AlphaZero,并将其训练到不同程度的计算能力来玩六角棋。
他们的研究显示,训练时的计算量和测试时的计算量密切相关。每条虚线表示达到特定 ELO 分数所需的最小计算量。
在测试时计算扩展与训练时计算扩展类似,正发生着一种范式转变,即使用更多测试时计算来构建“推理”模型。
在这种范式转变中,这些“推理”模型不再仅仅专注于训练时的计算(预训练和微调),而是平衡了训练与推理。
测试时的计算甚至可以按长度进行扩展:
在深入探讨深度搜索-R1 时,我们还将研究长度上的扩展问题!
测试时的计算类别
类似 DeepSeek R-1 和 OpenAI o1 这样的推理模型取得了令人难以置信的成功,这表明除了“思考更长时间”之外,还有其他更多技术手段。
作为我们将要探讨的内容,测试时的计算可以包括多种方式,如链式思考、修正答案、回溯、采样等。
这可以大致分为两个类别
- 在验证器中进行搜索(从生成中采样并选择最佳答案)
- 修改提案分配(训练中的“思考”过程)
对验证器的搜索侧重于输出,而修改提案分布则侧重于输入。
我们将探讨两种类型的验证者:
- 结果奖励模型(ORM)
- 过程奖励模型 (PRM)
他们的名字已经表明,ORM 只关注结果而不考虑底层过程:
相反,PRM 也会评估导致结果的推理过程:
为了让这些推理步骤更加清晰:
注意第 2 步是一个糟糕的推理步骤,PRM 会给出较低的评分!
现在你已经了解了 ORMs 和 PRMs 的区别,接下来让我们探讨一下它们在各种验证技术中的应用吧!
在验证器中搜索
- 首先,创建了多个推理过程和答案的示例。
- 第二,一个验证器(奖励模型)会评估生成的输出得分
验证器通常是LLM,经过微调以判断结果(ORM)或过程(PRM)。
使用验证器的一个主要优势是,无需重新训练或微调用于回答问题的模型。
多数投票法
最简单的方法其实是不使用奖励模型或验证器,而是进行多数表决。
我们让模型生成多个答案,出现频率最高的那个答案将是最终答案。
这种方法也称为自我一致性,旨在强调生成多个答案和推理步骤的重要性。
最佳 N 个样本
首先,LLM(通常称为提案者)生成多个答案,使用的是高温度或不同的温度。
第二,每个答案都会通过输出奖励模型(ORM)进行评分,根据答案的质量打分。得分最高的答案会被选中:
而不是评判答案,过程奖励模型(PRM)也可以用来评估每一步推理的质量,最终选择总权重最高的候选答案。
使用这两种验证器类型,我们也可以根据 RM 对每个答案候选项进行加权,并选择总权重最高的一个。这被称为加权的 N 选一样本:
基于过程奖励模型的束搜索算法
这种方法可以快速停止那些最终评分较低的“推理”路径。
结果的答案随后使用我们之前探讨的 Best-of-N 方法进行加权。
蒙特卡洛树搜索算法
- 选择(根据预设公式选择给定的叶节点)
- 扩展(创建额外节点)
- 随机生成新节点直至到达终点
- 根据输出更新父节点得分(反向传播)
这些步骤的主要目标是不断扩展最佳推理步骤,同时探索其他可能的路径。
因此,这是一个探索与利用之间的平衡。以下是一个节点评分和选择的示例:
因此,当我们选择新的推理步骤来探索时,这不一定是最优路径。
使用这种类型的公式,我们首先选择一个节点(推理步骤),然后通过生成新的推理步骤来扩展它。如前所述,这可以通过使用合理且不同的温度值来实现:
选择并多次展开其中一个扩展的推理步骤,直到得到多个答案。
这些迭代可以根据推理步骤(PRM)、奖励(ORM)或两者的组合来进行评估。
父节点的分数将被更新(反向传播),然后我们可以从选择步骤重新开始这个过程。
修改提案分发
换句话说,采样完成/想法/令牌的分布被改变了。
假设我们有一个问题和一个可以从其中抽样标记的分布。一种常见的策略是获取最高分的标记:
请注意,上面的图片中有一些标记为红色的标记。这些标记更有可能引发推理过程:
虽然选择贪婪标记不一定错误,但选择能引发推理过程的标记通常能得到更好的答案。
当我们调整建议分布(即标记的概率分布),实际上就是让模型重新排序这个分布,使得“推理”标记被更频繁地选择:
修改建议分布的方法有很多种,但通常可以归为两大类:
- 通过提示工程更新提示内容
- 训练模型专注于推理标记和过程
提示调用
通过提示,我们可以向模型提供示例(上下文学习),使其生成类似推理的行为:
这个过程可以通过简单地说“让我们一步一步地思考”来进一步简化。同样地,这会改变建议分布的方式,使得LLM在回答之前更倾向于先分解过程:
然而,模型并没有天生学会遵循这个过程。此外,这是一个静态且线性的过程,这限制了自我改进。如果模型一开始使用了一个错误的推理过程,它往往会保持这个过程而不进行修正。
STaR
一个备受争议的技术被称为 STaR 或自我教学推理器 。STaR 是一种使用LLM生成自身推理数据的方法,作为模型微调的输入。
在第一步(1),系统会生成推理步骤和答案。如果答案正确(2a),则将推理和答案添加到三元组训练数据集(3b)。这些数据将用于对模型进行监督微调(5):
如果模型给出了错误的答案(2b),我们提供正确的答案作为提示,并要求模型解释为什么这个答案是正确的(4b)。最后,我们将这些数据添加到用于模型监督微调的训练数据中(5):
在这里(和其他许多修改提议分布的技术一起),关键在于明确训练模型遵循我们展示给它的推理过程。
换句话说,我们通过监督微调来确定推理过程应该如何进行。
整个流程非常有趣,因为它实际上生成了合成训练示例。使用合成训练示例(如我们在
DeepSeek R-1 中将要探讨的)是一种在其他模型中提炼这种推理过程的惊人方法。
DeepSeek-R1
DeepSeek 通过各种技术出色地将推理精炼到了基础模型(DeepSeek-V3-Base)中。
有趣的是,没有涉及验证者,而是将重点放在强化学习上,而不是通过监督微调来提炼推理行为。
让我们探索他们是如何在模型中训练出推理行为的!
使用 DeepSeek-R1 Zero 进行推理
从 DeepSeek-V3-Base 开始,他们没有采用基于大量推理数据的监督微调,而是仅通过强化学习(RL)来实现推理行为。
为此,他们从一个非常简单的提示(类似于系统提示)开始,用于流水线中:
注意他们明确指出,推理过程应放在标签之间,但没有具体说明推理过程应如何呈现。
在强化学习过程中,创建了两种具体的基于规则的奖励:
- 准确性奖励 - 通过验证答案来给予奖励。
- 使用 和 标签来设置奖励。
在这个过程中使用的 RL 算法称为组相对策略优化(GRPO)11。该算法的直观想法是,它使导致正确或错误答案的所有选择更有可能或更不可能。这些选择既可以是词组集,也可以是推理步骤。
有趣的是,并没有给出 过程的具体示例。它仅说明应使用 标签,除此之外没有更多的说明!
通过提供与链式思维行为相关的间接奖励,模型自己发现,推理过程越长且越复杂,答案越可能是正确的。
标注图来自“DeepSeek-R1:通过强化学习激励推理能力”。通过使用间接的 RL 奖励,模型可以自由探索最优化的推理过程,逐步增加推理步骤。
这个图表尤为重要,因为它强调了从训练时计算转向测试时计算的范式转变。随着这些模型生成更长的思考序列,它们更加注重测试时的计算。
通过这个训练管道,他们发现模型能够自主发现最优的链式思考行为,包括高级的推理能力,如自我反思和自我验证。
然而,它仍然存在一个重大缺陷,即可读性较差且往往会混用语言。因此,他们探索了另一种替代方案,即如今广为人知的 DeepSeek R1。
让我们探讨它们是如何稳定推理过程的!
DeepSeek-R1
- 冷启动阶段
- 基于推理的强化学习算法
- 拒绝采样
- 监督微调
- 所有场景的强化学习算法
在第一步中,DeepSeek-V3-Base 使用了一个约 5000 个标记的小型高质量推理数据集进行了微调,以避免冷启动问题导致可读性差。
在第二步中,生成的模型使用与训练 DeepSeek-R1-Zero 时类似的过程进行了训练。为了确保目标语言的一致性,还添加了一个额外的奖励指标。
在第三步中,经过 RL 训练的模型被用来生成合成推理数据,这些数据将在稍后的阶段用于监督微调。通过基于规则的采样(规则奖励)和奖励模型(DeepSeek-V3-Base),共生成了 600,000 个高质量的推理样本。
此外,使用 DeepSeek-V3 和部分训练数据生成了 200,000 个非推理样本。
在第 4 步中,生成了 800,000 个样本的数据集,并用于监督微调 DeepSeek-V3-Base 模型。
在第 5 步中,使用类似于 DeepSeek-R1-Zero 的方法对生成的模型进行了基于强化学习的训练。为了与人类偏好保持一致,还添加了专注于有用性和无害性的额外奖励信号。模型还被要求总结推理过程,以避免可读性问题。
这就是全部!这意味着 DeepSeek-R1 实际上是通过监督微调和强化学习从 DeepSeek-V3-Base 微调而来的。
大部分工作是确保生成高质量样本!
使用 DeepSeek-R1 精炼推理
DeepSeek-R1 是一个拥有 671 亿个参数的巨大模型。不幸的是,在消费级硬件上运行这样一个模型将会非常困难。
幸运的是,作者探索了将 DeepSeek-R1 的推理质量提炼到 Qwen-32B 等其他模型的方法,我们可以在消费级硬件上运行这些模型!
为此,他们使用 DeepSeek-R1 作为教师模型,较小的模型作为学生。两个模型都会接收到一个提示,并生成一个标记的概率分布。在训练过程中,学生将试图紧密跟随教师的概率分布。
这个过程是使用之前看到的 80 万个高质量样本完成的:
经过提炼的模型表现非常出色,因为它们不仅学习了 800,000 个样本,还学习了 DeepSeek-R1 老师是如何回答这些问题的方法!
不成功的尝试
使用 MCTS 时,他们面临了搜索空间大的问题,因此不得不限制节点扩展。此外,训练精细的奖励模型本身就非常困难。
使用 PRMs 进行 Best-of-N 技术时,他们遇到了计算开销问题,需要不断重新训练奖励模型以防止奖励作弊。
这并不表示这些技术无效,但它揭示了这些技术的一些局限性!
结论
