
让模型像人一样思考
一、背景
2024年9月OpenAI发布的o1-preview模型展现出了在解决复杂问题上的强大逻辑思维能力。相比之前传统的Chat类模型,o1类模型在解决问题时会构建出长序列的思维链chain-of-thought(CoT)进行推理,通过问题拆解、中间步骤验证、思维探索等方法,最终找到问题的正确解答方法。OpenAI对o1模型的介绍中也着重强调了CoT的重要性【1】。
类似于人类在回答一个困难问题时可能会思考很长时间,o1 在解决问题时也采用了链式思维。通过强化学习,o1 学会了优化自己的思维链条并改进使用的策略。它学会了识别和纠正自己的错误,学会将复杂的步骤拆解成更简单的部分,学会在当前方法无效时尝试不同的解决方案。这个过程显著提升了模型的推理能力。
我们分别测试了ChatGPT与OpenAI o1-preview对"strawberry"单词中字母"r"的数量的回答,发现o1-preview不仅给出了正确答案,还展示了它获取答案的推理过程。
o1-preview的出现激起了人工智能领域对大模型推理能力探索的浪潮。至今已经涌现出了QwQ,DeepSeek等许多性能比肩o1的开源模型。与此同时,研究者们探索出了多种模型思维链生成的构建方法。本文就目前最主流的有监督学习SFT + 强化学习RL方法进行一些简单介绍,希望能够给到读者一些启发。
二、构建流程
构建模型思维链背后的关键技术,正是强化学习。强化学习通过奖惩机制,激励模型进行探索,促进其在任务执行中的持续优化。与传统的有监督微调方法相比,强化学习强调更多的探索和自我优化,能够帮助模型突破数据本身的局限,学会更多的推理模式和思维方式。下面就SFT和强化学习在思维链中的应用分别进行介绍。
1.有监督微调SFT
有监督微调SFT是一种非常高效的让模型学习“模仿”生成思维链来解决问题的训练方法。通过在预先构建好的CoT数据中进行teacher learning,SFT可以让不具备生成长CoT内容或者CoT效果比较差的基础模型性能得到大幅提升。SkyThought通过在数学问题中进行研究,作者发现使用高质量CoT数据进行SFT,模型就能够达到比肩o1-preview的效果【2】。
然而仅使用CoT数据进行SFT会存在几点问题:
- 目前CoT的数据主要通过API蒸馏高性能o1类模型生成,这些模型本身的CoT生成能力决定了使用生成数据SFT后的模型上限。
- CoT数据的人工标注成本昂贵,在SFT的后期,模型性能的提升可能对高质量数据的需求成指数级增加。
- SFT方式是一种确定性的学习方式,目前还没有研究发现仅通过SFT能够让模型出现超出数据范围的探索能力,这可能会限制模型学会通用推理能力。
为了解决上面的问题,我们需要借助强化学习的力量。目前几乎所有的研究人员都将SFT作为强化学习的前置训练,以此加速强化学习的训练。值得一提的是,在最近开源的DeepSeek-R1技术报告中,作者发现即使不使用SFT直接在基础模型上进行强化学习训练,模型也能学会生成思维链,而且在训练到一定阶段,模型的思维链中还会自发性地涌现出反思这类行为。不过作者也提到,这种直接强化学习得到的模型生成的内容可读性会比较差【3】。因此,SFT作为RL的前置训练还是有必要的。
2.强化学习训练
强化学习RL早已在人工智能领域大量应用,无论是之前名噪一时的AlphaGo,还是最近几年大模型训练中的RLHF,强化学习已被证明可以应用在进一步提升SFT后的模型性能。在介绍如何应用RL提升模型长CoT能力之前,我们先简单回顾下RL的几个重要概念。
(1)结果监督法
结果监督方法顾名思义,是指只利用最终的结果来对整个策略步骤进行优化的方法。
数据生成:结果监督的数据一般可通过人工标注或者模型生成获得。在使用模型生成时,一般会采用拒绝采样reject sampling的方法。对于数学这类有明确答案的问题,我们可以直接比较生成的最终答案和gt是否匹配,不匹配的数据直接删除。对于代码问题,可以通过执行测试样例的方法剔除错误数据。
模型训练:结果奖励模型ORM一般采用二分类模型,通过标注的数据来判断结果是否正确。所以直接在数据上进行有监督训练即可。
(2)过程监督法
过程监督方法是对思维链的每步推理都进行评分,因此PRM是一种针对思维链训练的改进奖励模型。相比于结果监督,过程监督的奖励更加稠密,因此训练时稳定性和效率会更好。这里我们可以参考OpenAI的比对试验,相比于结果监督模型ORM,过程监督模型PRM在每个问题生成的N个候选答案中找到正确答案的概率更大,并且随着N的增加,其与ORM之间的差距会进一步拉大【4】。
数据生成:OpenAI开源的过程监督数据集PRM800K质量比较高,采用的是人工标注的方法,只可惜PRM800K数据集只有数学问题。除了人工标注方法外,也可以通过模型生成,感兴趣的可以参考Math-Shepherd中的方法【5】。
模型训练:过程奖励模型本质上是一个输出标量分值的模型,不同的研究者会使用不一样的训练方法,可以参考Math-Shepherd中的方法将整个推理过程输入,mask掉步骤以外的tokens,这样可以提高训练效率。最近也发现一篇清华研究者提出的使用隐式奖励训练PRM的方法,这种方法可以直接使用ORM数据来训练,也很有参考价值【6】。
结果监督和过程监督方法对比
优点 | 缺点 | |
结果监督 |
|
|
过程监督 |
|
|
强化学习训练
无论是使用结果奖励模型还是过程奖励模型,有了这些模型我们就可以对策略模型的输出结果打分,然后使用PPO这类强化学习算法不断调整模型参数,让模型自己优化思维链。
3.解码策略
o1类模型的推理除了正常的序列解码之外,还可以结合蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)来增加思维链的搜索空间,从而提高模型找到正确答案的概率。
蒙特卡洛树搜索是一种通过模拟随机游戏过程来寻找最优策略的算法。该算法的主要步骤可以分为四个阶段【7】:
- 选择(Selection):从根节点开始,按照一定的策略(如使用UCT方法)选择一个子节点,直到到达一个尚未完全展开的节点
- 扩展(Expansion):在选择的节点上开展新的子节点
- 模拟(Simulation):从扩展的新节点开始,进行随机模拟直到到达终止状态
- 回溯(Backpropagation):将模拟的结果反馈回树的上层节点,更新这些节点的状态信息
相比于每个节点都随机采样的方法,MCTS依靠(Upper Confidence Bound applied for Trees,UCT)算法实现了搜索过程中规避掉已充分探索的低概率获胜节点,成为找到最佳决策路径的一种非常高效的搜索算法。
UCT值的计算方法
Q:截止到本轮rollout为止,该节点的累积reward
N:截止到本轮rollout为止,该节点的累积被访问次数
N_parent:截止到本轮rollout为止,该节点的父节点累积被访问次数
c:探索权重,c值越大,MCTS越倾向于选择选择累积被访问次数较少的节点
通过UCT的公式,搜索的前期一般将c设置的比较大,对节点充分探索。在探索后期将c值减小,从而更多采样获胜概率高的路径,提高评估准确性。
MCTS方法在大模型推理中的应用
在这里我们以微软的开源工作rStar来详细介绍MCTS是如何应用在大模型推理阶段的。首先假设我们已提前训练好一个具有CoT能力的模型M,并且在模型M中预先定义了5个行动策略,A1、A2、A3、A4和A5。它们分别代表了模型在推理的每一步可以选择的行动,如重构问题、拆解问题,推理下一步等等。在每次回答问题之前,模型会先根据设定的rollouts数量用MCTS方法构建树,然后再从所有的有效回答中选择最佳的一个返回给用户。
上面的描述可能不容易理解,我们可以通过一次rollout过程来帮助我们理解。首先我们把原始问题看作是树的根节点,从根节点出发我们进行一次MCTS。在第一次搜索阶段,因为根节点下面都没有子节点,所以MCTS会选择根节点,而在后续探索中,如果一个节点之前已经被探索过,MCTS会根据其子节点的UCT值选择最大的一个。接着,我们对根节点进行拓展,MCTS会将所有可能的子节点都扩展出来,然后从中随机选择一个。后面的模拟就是会不断重复选择-扩展,直到到达叶子节点(节点生成了最终答案,或者节点到达了最大步骤限制)。这样一个从根节点到叶子节点的路径称之为1个rollout。我们可以发现,在一次rollout过程中,MCTS是有可能在一些扩展阶段生成出叶子节点(但是没有被选择)。此外,实际推理过程中,模型在每个节点都会生成多个sample,每个sample都会被当作一个节点,以此拓展搜索空间。
在多轮rollouts之后,我们就得到了一棵相对完整的树,之后在rStar中,作者使用了另一个打分模型从所有的有效结果路径中找到一个评分最高的路径作为最终结果【8】。
三、总结
模型思维链能力的构建离不开SFT和RL的共同训练。SFT作为RL的前置训练用来提升模型思维链内容的基础质量,因此需要保证数据的质量。RL训练用于进一提高模型思维链的探索能力,其中结果监督和过程监督两种方法各有利弊,应结合自身情况选择。
参考资料:
【1】https://openai.com/index/learning-to-reason-with-llms/
【2】https://novasky-ai.github.io/posts/sky-t1/
【3】https://github.com/deepseek-ai/DeepSeek-R1?tab=readme-ov-file
【4】https://arxiv.org/abs/2305.20050
【5】https://arxiv.org/abs/2312.08935
【7】https://en.wikipedia.org/wiki/Monte_Carlo_tree_search
【8】https://zhuanlan.zhihu.com/p/9154878387
本文转载自 AI遇见云,作者: AI遇见云
