注意:本文包含一些过时信息,并没有经过调整适合所有人群阅读。
什么是推理
在使用和评测 LLM 中,经常会碰到推理能力(Reasoning)的概念。这个问题 gpt-4o 是这么回答的:
Reasoning is the cognitive process of drawing conclusions or making inferences based on information, logic, and evidence. It allows individuals to solve problems, make decisions, and understand relationships between concepts. It plays a central role in critical thinking and intellectual development.
在中文语境下,推理会让我直接联系到推理小说(Detective fiction)。巧合的是,Ilya Sutskever 在和黄仁勋在 GPT-4 发布之后的对谈1中,拿推理小说举例:
在书的最后一页,侦探已经搜集了所有了线索,集合所有人,说:「好的,凶手的名字是……」
他用来解释为什么预测下一个词的准确性提升可以表征理解、推理能力的提高。等等,模型的「理解」和「推理」能力是否代表模型可以具备和人类一样的认知了呢?这其实是一个相当难回答的话题。针对「什么是推理」这个问题,OpenAI 的 Noam Brown 给了一个更实在的定义2:解决思考更长时间会有收益的问题的能力。举个简单例子:
- 当碰到类似某个国家的首都的问题,当没有接触过这个知识的时候,绞尽脑汁也没有用
- 方程求解的问题,当我们掌握一些基础知识,是可以泛化到一个新问题上一步步求解
因此反映在模型使用体验上,模型能帮助我们解决需要整合知识、进行复杂步骤推理的任务。在各家厂商模型训练和发布中,衡量推理能力的榜单指标也逐渐迁移到更难的数理、代码任务,比如 o1 在发布博客3中评测了 AIME(美国数学奥林匹克竞赛)、GPQA(博士水平的物化生问题)、CodeForces(代码竞赛)等等榜单。但是不仅如此,在医疗健康4、安全性等问题上,o1 也有更好的表现。
LLM 训练的教育哲学
尽管推理能力的定义比较抽象,但是解决复杂问题的角度出发,训练设计的思想是比较明晰的。
回顾一下 LLM 的训练过程,我们会发现和人类接受教育的过程有些类似:
- 预训练:阅读大量的网页、书籍、论文、代码……模型通过压缩尽可能多的知识,变成了很棒的「复读机」。
- 指令精调:投喂涵盖多种多样主题的问答语料,模型学会如何和人类对话。
- 人类反馈强化学习:对齐人类偏好,输出更有用和更安全的回答。
结合到应试教育里面,会更有体感:
- 光看教科书并不能提高成绩,得刷题
- 刷题基本能应付大多数场景,我们开始有做题的「直觉」,看到题干就能写出答案
但是这并不是顶尖大脑的学习方式,有些人会:
- 在学习中,有更高的知识利用效率,能够发现和总结背后的规律
- 在考试中,能更好地分解问题、长链路思考、反思纠错、交叉验证,准确率更高
这样的思想也反映在一系列的思维链相关的工作中,并通过强化学习给模型打上了「思想钢印」,能主动进行这样的推理,最终得到了 o1 类似的内置思维链推理模型。
在展开后面具体工作的介绍之前,可以看看这个视频5,Hyung Won Chung 打了一个很直观的比方:
Give a man a fish, you feed him for a day. Teach him how to fish, you feed him for a lifetime.
从授人以鱼到授人以渔,对应模型进行思维链训练的重要性。
Teach him the taste of fish and make him hungry.
让他品尝到鱼的滋味并使他饥饿,对应巧妙的设计强化学习的目标,使得模型能够自发地解决吃鱼的问题——可以是钓鱼、电鱼(注意合法性)、赚钱去买鱼。
o1 的线索
尽管 o1 的 release blog [^3] 细节非常少并且使用的时候隐藏了思维链,我们也能大致推测出 o1 背后的相关技术。
OpenAI 声称得益于大规模的强化学习算法,o1 的性能会随着强化学习的训练计算开销和测试开销持续提升。
- 训练上,注意这里特指进行强化学习,这和 scaling laws 主要研究的预训练是不一样的。而在这之前的训练范式中,模型经过多轮 SFT 之后性能基本饱和甚至会下降。
- 推理上,不停增加推理的预算,模型的准确性也在递增,这个倒是符合直觉的。
在谈到思维链的训练时,文中写到通过强化学习,o1 会学会:
- 打磨思维链路、改进使用的策略
- 认识并修改错误
- 把任务拆解成简单任务的组合
- 当前方法行不通时尝试新方法
在使用 o1 之前的模型,为了达到类似的效果需要使用复杂的提示工程或者和模型交互才能得到,而 o1 的训练相当于把这个思维模式固化在模型中,使得模型能够主动去执行这样的思维链。
在推理时,o1 隐藏了思维链,在提供的例子中可以看到分步执行、更改策略等行为。在代码场景,针对 IOI 竞赛题的评估中,50 个提交是通过公共测试用例、模型生成的测试用例、训练的打分函数综合得到的,可以比完全随机提交高近 60 分。当然最终产品中有没有使用这样的方式来进一步增强能力就不得而知了。这也是机器相对于人来说的优势,人无法并发给出这么多候选并进行测试。
如何实现
训练
如何训练一个会主动进行长链路思考的模型?不妨从自己的学习经验出发思考。
比如我们学习这样一个数学问题的求解,可以有如下几种方式:
- 直接抄答案,很有可能我们学习不到任何知识,只是会背答案
- 读题解,掌握求解过程,这其实是非常有帮助的方式,但是存在的问题是如果题目发生变化,可能没有办法迁移到新问题中
- 基于反馈的学习,把问题拆解成多步,并在过程中反思或者接受老师指导,我们能学习到每个原子步骤的方法,进而解决更多问题
对应训练模式可以是:
- SFT,让模型学习这些长思维链的语料,拥有一定的长链思维能力。这其实在当前的范式中已经比较常见了,Huggingface 上也有很多 CoT 语料可供训练。O1 Replication Journey6直接用 1 万条 o1 的数据进行 SFT 就取得了比较好的效果,但是文中也提出这样的方式有「天花板效应」,难以进行进一步提升。
- 强化学习,算法上可能并没有大的创新,但是数据的收集、奖励函数的设计需要巧思。
OpenAI 的 Let's Verify Step by Step7中提出了过程监督的概念,即不仅要求监督模型最终输出,也要监督过程中的每一步。比如其中的数据标注是下面如图所示,标注人员要给每个步骤进行负面、中性、正面的评价。并且为了得到反馈性更强的信号,会给标注人员展示有迷惑性的错误解答。通过不断迭代训练得到一个过程监督奖励模型(PRM),它和结果监督奖励模型(ORM)相比一个显著的特点就是目标预测每一步的正确性,并且有更高的采样性能。综合来看,PRM 能够提供更细致的反馈信号,并提高数据标注的效率,从而提升强化学习的效率。这里的 PRM 可以当作是一种验证器(verifier),也是一种有价值的副产品,这是目前被大规模采用的 DPO 训练所不具备的。
推理
正如人类思考一样,模型花更多的推理预算(更长时间/更多 tokens)能够提升输出的效果。在 o1 之前常常被使用的方法包括 CoT、Self-Consistency 等等。
例如我们已经得到了一个不错的 PRM,可以通过重复采样来获取更好的输出8:
- Best-of-N,验证器得分最高的样本
- Beam Search,每步选择得分最高的 k 个候选项,逐步搜索
- Lookahead Search,类似蒙特卡罗树搜索
除了上面的并行采样,还可以串行的采样充分利用推理预算。例如前面提到 SCoRe 方法训练的模型能进行自我修正,那么在串行生成上可以修正思维策略,起到反思的作用。同时研究 [^9] 发现,对于简单的问题串行生成就足够了,但是对于难的问题,分配一部分预算给并行采样效果会更好。
针对 QwQ 不同推理长度在 MMLU-Pro 计算机科学的榜单评估9中,也可以看到模型的性能直接和 max_tokens
的设置是相关的。这其实也引起我们对一些闭源 API 模型评估指标的担心,因为我们并不知道背后使用的怎么样的推理链路、使用了哪些验证器(可以是 PRM、编译器、形式语言正确性等等)、采用多少推理预算,直接比较它们的性能变得不太有参考价值。
复现工作
国内比较出名的三个复刻的尝试,即 DeepSeek r1、Moonshot k0-math、Qwen QwQ(从取名来看还是 Qwen 有创意得多)。由于很难去横向比较它们的成绩,这里简单罗列一下它们各自 report 的成果。
DeepSeek r110
这里 o1-preview 似乎直接用了 OpenAI report 的值,没有办法确定是否在同一推理预算下的表现。
博客中也给了一个 test-time scaling 图,可以看到红线是单纯的串行生成,效果提升很快,但是对更难的题目,需要用并行生成结合多数投票提升效果。
Moonshot k0-math
没有找到官方博客,只有一些公众号的 PR 稿11。不过这个指标还是比较迷惑的,榜单成绩是自己测试的,前面几个都是中文数据集,重合的榜单有 AIME 但是没有标明指标,看上去可能是 cons@64?值得注意的是 o1 正式版这个榜单已经刷到了 83.3,已经不太够看了。
QwQ
QwQ12发布可谓是热度爆炸,r/localllama 上几天都在讨论这个模型。由于开放了权重,所以结果可复现性比较高。虽然只有 32B 的规模,多项指标已经远超同族的 72B 模型。不过这里也要注意 o1 正式版 AIME Pass@1 已经到了 74.4 分。开源模型要追赶还是要加大参数量和使用 test-time scaling。
Bonus
x^e=e^x 的实数解是什么?
这个问题 QwQ 的解答可以尝试一下。不过对于这些比较简单的问题,模型会不由自主得输出冗长的思维过程,尽管最后能答对。
一些思考
- o1 类的推理模型的强化训练思路从「教」转变成「激励」,这个非常具有启发性。
- 预训练模型的性能逐渐饱和,以强化为代表的 post-train 新范式成为新的突破点。
- Test-time scaling 会让模型的性能更加难以横向对比、期待更开放透明的模型评估方式;对推理系统的复杂性提出更高的要求。
- o1 类的模型为了解决难题而生,其成本不一定适合所有场景。当然最理想的情况是模型/系统能够区分这些问题的难度,主动进行策略选择和切换。