探秘 DeepSeek-R1 与 OpenAI o1&o3,AI 推理藏着哪些颠覆秘密?
🕙发布时间:2025-02-20
近日热文:
1. 全网最全的神经网络数学原理(代码和公式)直观解释
2. 大模型进化史:从Transformer到DeepSeek-R1的AI变革之路
3. 2W8000字深度剖析25种RAG变体:全网最全~没有之一
知乎【柏企】
公众号【柏企科技说】【柏企阅文】
一、引言
在过去一年里,生成式AI的应用和AI智能体的开发呈爆发式增长。LangChain的报告显示,51%的受访者在生产环境中使用AI智能体;德勤的报告则预测,到2025年,至少25%使用生成式AI的公司会启动AI智能体的试点项目或概念验证。尽管AI智能体框架广受欢迎且发展迅速,但构建这些系统的人员很快就会碰到使用大型语言模型(LLM)的局限,其中模型的推理能力往往是最突出的问题。
为了克服推理方面的局限,研究人员和开发者探索了多种技术,从ReAct、思维链(CoT)等不同的提示方法,到构建拥有专门负责规划和评估的独立智能体的多智能体系统。如今,各大公司纷纷发布经过专门训练的新模型,以优化模型的内置推理过程。
DeepSeek的R1、OpenAI的o1和o3的发布,凭借比传统LLM更强大的推理能力,在行业内引起了轰动。这些模型经过训练,能在回答前进行“思考”,具备独立的推理过程,可以将任务拆解为更简单的步骤,对这些步骤进行迭代处理,在给出最终答案前识别并纠正错误。这与GPT-4o等早期模型不同,早期模型需要用户通过提示模型逐步思考,并为模型创建循环,以便迭代地规划、执行和评估任务进度,从而构建自己的推理逻辑。训练像o1、o3和R1这类推理语言模型(RLM)的关键差异之一,就在于对训练后和测试时计算扩展的重视。
在本文中,我们将探讨训练时和测试时计算扩展的关键区别、训练后扩展的方式、如何训练像DeepSeek的R1这样的RLM,以及RLM对AI智能体开发的影响。
二、训练时计算与测试时计算
(一)概述
计算扩展指的是为训练和运行AI模型提供更多资源,如处理能力和内存。简而言之,训练时计算扩展适用于模型学习通用模式的预训练阶段,以及基础模型通过强化学习(RL)或监督微调(SFT)等额外训练,学习更特定行为的训练后阶段。相比之下,测试时计算扩展应用于推理阶段,也就是进行预测时,它为模型提供更多计算能力,使其在生成最终答案前能探索多种可能的解决方案,从而实现“思考”。
需要注意的是,测试时计算扩展和训练后扩展都能帮助模型在给出最终响应前进行“思考”,但二者的实现方式有所不同。
训练后扩展涉及更新或创建新模型,而测试时计算扩展则是在不改变模型本身的情况下,在推理时探索多种解决方案。这两种方法可以结合使用。理论上,对于像DeepSeek-R1这样经过训练后推理能力有所提升的模型,可以通过测试时计算扩展,在推理时进行额外搜索,进一步增强其推理能力。
(二)训练时间计算:训练前和训练后
如今,大多数LLM和基础模型都在大量数据上进行预训练,这些数据来源广泛,比如Common Crawl,其中包含了丰富多样的人类撰写文本。在预训练阶段,模型学习在给定语境中预测下一个最可能出现的单词或标记。预训练完成后,大多数模型会进行监督微调(SFT),以优化模型,使其更适用于遵循指令或聊天等应用场景。想了解更多关于这些训练过程的信息,可以查看我之前的一篇文章。
总体而言,这个训练过程极为耗费资源,在训练出像Claude 3.5 Sonnet、GPT-4o、Llama 3.1 - 405B等模型之前,往往需要进行多次训练,每次训练成本高达数百万美元。这些模型在逻辑推理、数学、编码、阅读理解等多个领域的通用任务基准测试中表现出色。
然而,尽管这些模型在众多问题类型上表现优异,但要让典型的LLM在响应前真正做到“思考”,用户需要进行大量的工程设计。从根本上讲,这些模型接收输入后,直接返回输出作为最终答案。可以将其理解为模型基于预训练学到的信息,或根据用户提示中的指令和信息进行上下文学习,一步得出最佳猜测。这就是智能体框架、思维链(CoT)提示和工具调用受到广泛关注的原因。这些模式让人们能够围绕LLM构建系统,为LLM应用开发提供更具迭代性、结构化且更易成功的工作流程。
最近,像DeepSeek-R1这样的模型,打破了为优化聊天或指令跟随功能而进行的典型预训练和训练后模式。DeepSeek-R1采用多阶段训练后流程,让模型学习更具体的行为,比如如何生成思维链序列,进而提升模型整体的“思考”和推理能力。接下来,我们将以DeepSeek-R1的训练过程为例,详细介绍这一点。
(三)测试时计算扩展:在推理中启用“思考”
测试时计算扩展和训练后扩展的迷人之处在于,推理和迭代解决问题的能力可以内置到模型本身或其推理流程中。无需依赖开发者全程引导推理和迭代过程,模型有机会探索多种解决方案路径、反思进展、对最佳解决方案路径进行排序,并在向用户发送响应前,优化整个推理生命周期。
测试时计算扩展与优化推理性能密切相关,且不涉及修改模型参数。实际意义在于,像Llama 3.2 - 8b这样相对较小的模型,通过在推理时花费更多时间“思考”,研究多种可能的解决方案,能够与大得多的模型竞争。
一些常见的测试时扩展策略包括:
- 自我优化:模型迭代优化自身输出。
针对验证器进行搜索:生成多个可能答案,由验证器选择最佳路径继续推进。常见的针对验证器的搜索策略有:
- N次最佳:针对每个问题生成大量响应,对每个答案进行评分,得分最高的答案胜出。
- 束搜索(Beam Search):通常使用流程奖励模型(PRM)对多步骤推理过程进行评分。先生成多个解决方案路径(束),确定哪些路径最适合继续搜索,然后生成一组新的子路径并评估,持续此过程直至找到解决方案。
- 多样化验证器树搜索(DVTS):与束搜索相关,但会为每个初始路径(束)创建单独的树,然后扩展每棵树,并使用PRM对树的分支进行评分。
三、训练推理语言模型(RLM)
OpenAI在2024年9月发布的o1模型,是首批旨在在响应用户前进行“思考”的模型之一。虽然与GPT-4o等模型相比,o1给出响应的时间更长,但对于更复杂的任务,o1的回答往往更出色,因为它能生成思维链,帮助分解和解决问题。
与前几代模型相比,使用o1和o3需要不同风格的提示工程,因为这些专注于推理的新模型,其运行方式与前代模型有很大差异。例如,让o1或o3“一步一步思考”,效果远不如对GPT-4o下达相同指令。
由于OpenAI的o1和o3模型是闭源的,外界无法确切知晓其开发过程,这也是DeepSeek-R1备受关注的重要原因。DeepSeek-R1是首个在行为和性能上可与OpenAI的o1相媲美的开源模型。这对开源社区意义重大,意味着开发者可以根据自身需求修改R1,并且在计算能力允许的情况下,能够复制R1的训练方法。
(一)DeepSeek-R1训练过程
- DeepSeek-R1-Zero:首先,DeepSeek在其基础模型DeepSeek-V3上进行强化学习(RL)(训练后阶段),得到了DeepSeek-R1-Zero。这个模型学会了如何推理、创建思维链序列,并具备自我验证和反思等能力。一个模型仅通过强化学习就能掌握这些行为,这对整个AI行业都意义非凡。然而,尽管DeepSeek-R1-Zero学习能力出众,但存在语言混合、可读性差等严重问题。这促使团队探索其他方法,以稳定模型性能,打造更适用于生产环境的模型。
- DeepSeek-R1:创建DeepSeek-R1需要一个多阶段的训练后流程,在SFT和RL步骤之间交替进行。研究人员首先使用数千个思维链(CoT)序列示例形式的冷启动数据,在DeepSeek-V3上进行监督微调(SFT),目的是为强化学习(RL)创建一个更稳定的起点,解决DeepSeek-R1-Zero存在的问题。接着,研究人员进行RL,并设置奖励机制,以促进语言一致性,增强模型在科学、编码和数学等任务上的推理能力。然后,再次进行SFT,这次加入了非推理类的训练示例,帮助模型保留更多通用能力,如写作和角色扮演。最后,再次进行RL,以更好地契合人类偏好。最终得到了一个拥有6710亿参数的高性能模型。
- 提炼的DeepSeek-R1模型:DeepSeek团队进一步证明,仅通过SFT,无需RL,就能将DeepSeek-R1的推理能力提炼到开源的较小模型中。他们基于Qwen和Llama架构,对参数在15亿 - 700亿之间的较小模型进行微调,得到了一组更轻便、高效且推理能力更强的模型。这极大地提高了开发者的使用便捷性,因为许多提炼后的模型能在他们的设备上快速运行。
参考文献
1. HuggingFace Blog on Scaling Test Time Compute
2. Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters
3. Solving math word problems with process and outcome-based feedback Process Reward Models (PRM)")
4. Reasoning Language Models: A Blueprint
5. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning
6. Will we run out of data? Limits of LLM scaling based on human-generated data
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。