趁着昨天 OpenAI o1 的发布,难得从每日忙碌的产品研发中抽出点时间来,学习跟进一下最近非常火热的 LLM 新范式。
背景简介
先推荐阅读一下拾象的《LLM 的范式转移:RL 带来新的 Scaling Law》,这篇文章很好地科普了基于 RL 的新 LLM scaling 范式。
谈到 Scaling Law,之前我们更多指的是预训练阶段通过堆算力、数据和模型参数来提升智能水平。但最近一年,这条路碰到了不少瓶颈:
- 算力这块,超大规模训练集群本身有不少工程挑战。比如 LLaMA 3 的论文就提到,他们的万卡集群每两小时就会有坏卡故障,想进一步拓展到 10 万卡规模,难度可想而知。
- 数据方面,文本数据到了 10-20T Token 量级后,想再在数量上往上跳一个台阶,难度明显增加。尤其是能带来“增量收益”的复杂推理数据,更加稀缺。
所以大家普遍有种感觉:自 GPT-4 发布后,基本没再见到那种让人惊艳的“魔法时刻”——模型能力大幅提升。不过,Claude-3.5 和 OpenAI o1 逐渐展现出一条新路,也就是拾象所说的 RL 带来的新范式。RL 这个定义很宽泛,在 OpenAI o1 里具体是如何体现的呢?可以看看他们的这张图:
左图说的是训练时的 scaling。面对数据量的挑战,结合 RL 的核心做法就是“合成数据”。
如上图所示,我们可以通过 LLM 生成一系列回答,再利用 LLM 自身作为 reward model 给回答打分,挑出质量高的作为新的训练数据(这里是偏好数据)。大家普遍认为,Claude-3.5 在数学、代码等方面的能力大幅提升,很大程度上就归功于这个方法。尤其是数学和代码,比较容易形成更精确的 reward 计算(可以类比 AlphaZero)。
右图讲的是推理阶段的 scaling。最初的形式可能就是 Jason Wei 提出的思维链(CoT),后来的 Tree of Thoughts (ToT) 则是其拓展,跟 AlphaZero 中的蒙特卡洛树搜索(MCTS)思路很像。
结合官方给的这张图,大家对 o1 的一个直观理解就是:它自带了多轮隐含 CoT 的模型。当然,背后的方法可能复杂得多。这里的一个关键点仍然是我们之前提到的、用于筛选数据的 reward model,它可以帮助在 test time 评估多个候选生成结果以及推理步骤。
总结一下,reward model 确实是核心。在合成数据时,它能帮忙判断数据质量;在 test time search 时,它同样用于评估生成质量,决定是继续探索还是及时剪枝。
问题
这两个应用 RL 的方式看起来挺直观,但背后还是有很多有意思的问题值得深挖:
- 模型自己生成数据给自己训练,真的能不断提升,甚至超越人类能力吗?
- 在数学和代码之外的领域,如何构建有效的 reward model?
- 推理时进行搜索优化,有哪些提高效率和效果的方法?
- 怎么平衡训练时 scaling 和推理时 scaling 两者的算力投入?
带着这些问题,再回看一些相关工作。当然,个人视野有限,可能遗漏了不少重要的工作。
Synthetic Data
Reinforced Self-Training (ReST) for Language Modeling
这是一篇比较早期的讲合成数据应用于模型训练提升的文章,方法很直观。
- 主要分为两个阶段:Grow 阶段,让模型生成多个输出预测。
- Improve 阶段,利用 reward model 对上面的输出数据进行过滤,选出高质量的来做微调(fine tune)。
- 微调时会混入原始数据,跟 RLHF 类似,防止模型跑偏或者坍塌(collapse)。
- 这篇文章做的是翻译任务,用 Metric X 作为 reward model,感觉有 overfit 的风险。
- 多轮迭代能持续提升能力吗?从论文结果来看效果不错,不管是 grow 一次、improve 多次,还是多次 grow,都能持续提升。
- RL 训练之后的多样性如何?文中提到仍然可以结合 best-of-N 获得 test time 的提升。
- 这个策略看起来比较简单,但如果应用于数学/代码等领域,会不会有 reward hacking 的问题?后续有不少文章指出了这一点。
Self-Rewarding Language Models
前面合成数据的示意图就来自这篇文章,也是相当知名的一篇工作。
- 跟 ReST 做 SFT 不同,这里是使用模型自己生成内容,自己打分形成偏好数据集,进行 DPO 训练生成下一代模型。
- 实验跑了 3 轮,有持续提升,但继续跑效果可能会饱和。值得留意的是,这里的验证用的是另一个模型(GPT-4)和人工评估,而不是让模型自己评判。
- 除了任务本身的微调数据外,额外准备给任务打分的评估微调数据,会对 LLM-as-a-Judge 的效果有额外提升。
- 任务能力的提升也带来了评估能力的提升,这点很有意思。
- 文章吐槽了前面提到的 ReST 方法——仅添加正面样例来做 SFT,在他们场景中没效果,偏好数据才有用。
- 语言模型评估时往往倾向于更长的回答,这可能是一种 reward hacking 的表现。另外也有多样性丧失的风险。
Training Large Language Models for Reasoning through Reverse Curriculum Reinforcement Learning
这也是讲合成数据结合 RL 的,重点在 reward model 和数据构建的创新上。
- OpenAI 之前发过文章说,面向过程的 reward model(PRM)效果要显著优于面向结果的 reward model(ORM),但面向过程需要大量的人工标注。同样,RLHF 也很贵。
- 这篇文章提出一个简单却很有效的办法:只用面向结果的 reward model,但巧妙构建出难度循序渐进的多步推理数据,从而实现近似面向过程的 reward model 的效果。
- 具体方法是:让模型生成多步推理和最终结果,然后用面向结果的 reward model 找出那些正确的。假设正确的推理过程有 5 步,我们可以分别构造“已知前 4 步,推理最后 1 步”、“已知前 3 步,推理后 2 步”……以此类推,形成难度逐渐提升的训练数据。这些数据都能通过面向结果的 reward model 来给出 reward,从而提升了奖励信号的密度。
- 他们也用 PPO 进行训练优化,在具体训练时需要注意数据混合,别让大量简单推理问题把模型带偏了。RL 里的“玄学”还是蛮多的。
- 另外一篇工作《Dense Reward for Free in Reinforcement Learning from Human Feedback》,虽然讲的不是合成数据,但目标类似——通过 reward model 的 attention 来构建更丰富的 reward signal。
Easy-to-Hard Generalization
合成数据能否实现“飞升”,是个很有意思的问题。一开始想到的是 OpenAI 的 weak-to-strong,但读了下发现那主要是用于 scalable alignment——用弱模型来对齐下一代的强模型,对齐后强模型能力会下降,但确保了安全。而我们更关心的是:模型在简单问题上训练,能不能泛化到解决困难的问题。
Easy-to-Hard Generalization: Scalable Alignment Beyond Human Supervision
在 AlphaZero 这类游戏环境中,模型的确可以通过完全自我探索、生成数据、训练提升来达到超过人类的水平。但对于数学这类更难定义 reward 的领域呢?
- 这篇文章主要研究模型在简单问题上的训练,能不能泛化到解决更难的问题,主要通过数学题进行实验。实验设定比较复杂,简单来说,一方面是验证在简单问题上做 SFT 能否解决复杂问题;另一方面是在简单问题上训练 reward model,看能不能在 test time 和 RL 中提升效果。
- 一个直觉是:困难的数学问题,经过拆解后,每个推理步骤是简单的。如果每个中间步骤都正确,那么大概率也能解决困难问题,所以可能存在从简单到困难的泛化。
- 文章做了不少实验,选几个有意思的结论:只在简单问题上做 SFT,确实能解决一些困难问题,效果与在全量问题上做 SFT 相差不大。
- 只在简单问题上做的 reward model,也能大幅提升模型的整体效果(test-time search),尤其是在困难问题上。这里的泛化效果比 SFT 更明显。
- 混合面向结果和面向过程的 reward model(OPRM),效果更好。
- 在 Test time search 中,带权重的投票效果最好,不过这里没有比较更复杂的 MCTS 等。
- 进一步用 RL 方法来提升模型,效果排序是 PPO > DPO > ReST。而且,仅在简单问题上训练的 SFT model + reward model,也能超越在所有数据上跑 RL 的效果。
- 可惜文章没有进一步研究 reward model 能不能像 SFT model 那样,通过合成数据继续提升。
The Unreasonable Effectiveness of Easy Training Data for Hard Tasks
上一篇文章提到,在简单问题上训练的效果能泛化到困难问题,甚至比用了困难数据训练的模型效果还好。这篇文章也给出了类似的结论:
- 当困难问题的数据难以收集或噪声较大时,通常用简单问题的数据训练就能有很好的效果。
- 如果要解决的困难问题是大学水平的 STEM 问题,用多简单的数据来训练模型能达到比较好的效果?结论是:初中水平的问题表现就挺好了。
- 文章也提到,他们担心用的模型里已经见过评估集里的困难问题了。不过《Physics of Language Models》(强烈推荐学习)里做了限定更严格的实验,证明了这种泛化能力的存在。
Small Language Models Need Strong Verifiers to Self-Correct Reasoning
这是合成数据与 test time search 交叉的一个研究。
- 大模型默认的自我纠正能力都不太好,但可以通过训练来优化。
- 让模型生成回答,自己进行 verify,尝试 recover,把那些成功的案例作为训练数据去训练 refiner,这样就能有更好的 test time search 能力(从错误中恢复)。
- 很多人都提到“判别”比“生成”容易,但这篇文章的结论是:verifier 是整个环节中最关键的,而且往往需要更大的模型来实现提升。
- 在合成数据实践中,reward model 的能力需求是不是会比 generator/actor 更高,且更难以提升?
Test-time Search
Large Language Monkeys: Scaling Inference Compute with Repeated Sampling
一篇非常知名的讲 test time search 提升模型效果的文章。
- 使用比较弱的模型生成非常多的候选答案(candidates)。
- 使用 verifier 来选择最终答案,比如单元测试、证明检查(Lean)、多数投票等。
- 如果有精确的 verifier,最终效果提升与生成 candidates 的数量呈 log-linear 关系。
- 相比精确的 verifier,多数投票、reward model(比如 ArmoRM-Llama3-8B-v0.1)等往往在几百个 candidates 时效果就饱和了。这说明 reward model 本身也需要 scaling。可以参考最新的 RewardBench Leaderboard。
- 最大化覆盖范围时,不同问题最适合的模型也不一样,有时 8B 模型最好,有时需要用 70B 模型。
- 未来方向:如何提升模型输出多样性,多轮交互(ReAct、树搜索等),从之前的尝试中学习。
An Empirical Analysis of Compute-Optimal Inference for Problem-Solving with Language Models
一篇类似的研究 test time search 策略和效果的文章。

- 同等计算量下,小模型往往效果更好。但由于各种 test time search 的效果会饱和,饱和后就需要引入更强的模型了。
- 普通的 MCTS 算法(ToT 也算一种)效果不好,因为经常没法达到完整的 solution。
- Best-of-N、加权投票等也都需要 reward model。他们基于 Llemma-34B 微调了一个 process reward model。
- 他们还设计了一种新的树搜索算法,把预算(budget)根据 reward 大小分配给不同节点:有希望的节点子孙更多,当完成的 solution 增多时,预算就相应减少。
- 在他们的实验中,新搜索算法虽然表现好,但仍然是会效果饱和的。也就是说,不能在 test time 投入无限算力来达到完美结果。
Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters
研究如何平衡在训练阶段和推理阶段投入的算力,以达到总体最好的效果。

- 第一个维度:利用 verifier 来搜索好的解法。比较不同的 test time 搜索算法,包括并行采样(parallel sampling)、束搜索(beam search)、前瞻搜索(look ahead search)。
- 预算少或问题困难时,beam search 效果好;预算多时,暴力采样效果最好。look ahead search 总体来说表现不佳,与上一篇文章结论一致。
- 需要使用面向过程的 reward model 来实现 beam search 等复杂搜索算法。
- 另一个维度:让模型自我修复。微调模型,使其能在推理过程中纠正自己的错误。需要把正确结果与相似的错误答案配对,让模型学会从错误中恢复的能力。可以发现,这两个维度跟 o1 那两张图很相似。
- 总体来说,sequential 的多步推理效果比多个独立的多步推理效果好,尤其是对于简单问题。
- 算力用在 pre-train 阶段好还是 test-time 好?对于困难的问题,或者推理负载(inference load,比如大规模用量)比较高时,把更多算力放在 pre-train 阶段更好。
- test time 优化的数据也可以反哺 pre-train。
Retrieval Augmented Thought Process for Private Data Handling in Healthcare
一篇比较有趣的 RAG 结合 MCTS 的文章,应用于医疗健康领域。领域特定的 reward model 仍然十分关键,不过文章中没有比较 MCTS 与一些更简单搜索算法的效果。
Reward Model 畅想
OpenAI 在文章里展示了 o1 相对于 GPT-4o 在各领域的提升,其中也包括像法律、公共关系这类偏文科的专业领域。这是否意味着他们已经找到了构建通用 reward model 的路径?这里有几个猜测:
- 如果借用张俊林老师的思路,把语言模型的能力拆解为语言理解、世界知识、逻辑推理三个维度,那么即便是文科领域的问题,甚至创意写作这类任务,是不是也会随着逻辑推理能力的提升而水涨船高?
- 另一种思路是通过“元学习”,结合 LLM 的综合能力来构建通用的 reward model,输出 correctness、helpfulness、safety 等通用标签。这种方法能否随着 scaling 达到通用 reward model 的效果?
- 或许也可以从人类专家的经验开始 bootstrap,一个个构建垂直领域的 reward model(这可能是目前最可行的),并找到一种让它们后续自我提升的方法。不知道是否有关于 reward model 自我提升、scaling up 的相关研究。
- 所谓的隐性知识如何包含在 reward model 中?这或许是下一步通过多模态能力来拓宽模型的感知范围,然后才能转化成更丰富的 reward signal。比如跟人交谈时的语气感知,面部表情判断是否是正向反馈等等。