节前匆匆写了篇 OpenAI o1 相关论文概览[1],过节期间做了下 self-critic,发现在整体框架方面的介绍还是讲得不够清楚。比如:
-
看起来都是合成数据,但后面用于监督学习和利用强化学习的思路来优化 generator/actor/policy network(强化学习里的概念真多……),还是很不一样的。
-
所谓的 test-time search 也并不只是作用于推理(inference)阶段利用 CoT,MCTS 来提升 reasoning 效果,在 train-time 也是重要的一环,增强整体生成 reasoning 质量的能力。
-
对于 reward model 来说可能也需要进一步区分,像数学、代码这类在某些情况下可以“形式化验证”的生成内容,可能还是需要构建面向过程的 reward model,这是为什么呢?
鉴于 AlphaGo 非常深入人心,我们可以拿下棋来类比一下 LLM 中的 RL 范式具体是个什么样的概念:
-
下棋的动作,可以类比为 LLM 生成内容。但对于 LLM 来说,这个动作的“粒度”可以有很多种理解,比如每个 token 作为一个动作,也可以是一段推理文本的输出。
-
产出下棋动作的 policy network,基本可以对应到 LLM as generator 自身,与 RLHF 中的定义一致。
-
训练这个 policy network,可以是传统的 supervised training,也可以是 RL 范式中的 PPO,DPO 等。Supervised learning 类似强化学习中所谓的 behavior cloning,泛化能力比较差,也没有强化学习那种“探索”能力的体现。另外 John Schulman 也在分享中提到过行为克隆只是让模型学了个表面,没法达到 alignment 的目的(比如诚实回答自己是否拥有相关知识)。
-
因为下棋的动作对应到 LLM 生成内容,那么自然,棋局状态就对应输入给 LLM 的内容和目前已经生成内容组成的 context。
-
下棋中的环境,是比较明确的游戏规则,可以精确判断胜负,给出 reward。而在 LLM 生成时,这个环境就比较复杂,现阶段更类似于“人类偏好”,比如这个生成内容是不是正确,对人类有帮助,没有违反人类价值观等。如果未来连接了真实世界,那么就会跟人类所处的环境非常类似了,要满足客观世界的各种运行规则。
-
正是由于这个环境和 reward 的复杂性,所以我们才需要像 RLHF 那样,基于人类偏好来构建一个 reward model,作为一个环境模拟器来训练 policy。另外像 LLM as a Judge(verifier/critic)的做法,也可以变相认为是一种 reward model。
-
AlphaGo 中还有个 value network 来评估棋局状态,主要是因为只有在棋局结束时才会有一个胜利/失败的 reward 信号。但棋手肯定会在对弈过程中对当前的局势作出一些评估,来帮助更好地推演几种不同的下法。在 LLM 做生成过程中,如果能有一个随时评估当前生成内容质量的 value network,那么也可以探索多条生成路径,而不仅仅局限于一个个 token 的贪婪解码生成。在类似 ToT 这类工作中,本质上也是用 LLM 自身来作为这个价值评估模型。而在推理场景中,一般把这类模型成为 process reward model。
如果更具体到逻辑推理方面的 LLM 生成,那么这个行为与下棋就更相似了:
在逻辑推理提升中应用 RL 范式
我们可以从这个图出发来一步步理解一下提升模型逻辑推理能力的方法演进。
-
图中的 LLM generator,一开始主要是通过互联网上大量的 question & answer 文本做自监督学习训练出来的,但大家也逐渐意识到,很多回答产生背后包含了很多复杂的逻辑推理和探索试错,这部分的数据往往非常稀缺,限制了模型在逻辑推理能力上的提升。
-
通过 CoT 方法,我们找到了一种让 LLM 自己生成推理过程的方法。加上数学、代码等不少逻辑推理类问题可以像下棋那样有比较精确的形式化验证方式,就可以筛选出正确答案的对应推理过程数据,再用来训练提升 LLM 的逻辑推理能力。这在一定程度上已经有点让 LLM 自己探索,找出好的方案来学习的 RL 的感觉了,只不过这种方法更强调的还是通过学习增强模型做推理的“直觉”。
-
形式化验证能够覆盖的范围毕竟有限,即使是代码等领域,我们也仍然需要构建一些验证结果的 output reward model,让模型能够自己理解和模拟逻辑推演,得到相应的 reward。这个能力在推广到其它领域就更为关键了,就像生物智能在演进过程中也从一阶的行动模型逐渐演化出二阶的可以理解心智、进行模拟的 theory of mind 模型一样。值得再推荐下《A Brief History of Intelligence[2]》这本书。
-
有了 output reward,我们可以利用它来做初步的 test-time search scaling 了,例如并行生成多个推理过程和结果,用 output reward model 来评估选择最优的方案。
-
但这个方法对于“长程推理”来说仍然不理想,就像要下上百步棋才能拿到 reward,这个搜索开销太大了。所以一个自然的想法就是引入 process reward model,能把最终的 reward“归因”到某些推理步骤上,并根据其重要程度给不同的价值得分。这就是经典的 credit assignment 问题。
-
OpenAI 之前的“Let’s verify step by step”文章中使用的是人工标注来获得 process reward model,但我们也可以再套用前面“合成数据->筛选”的逻辑,用 LLM 来生成推理树,再根据最终结果来分配 Q value 给不同的推理节点,学习出一个 process reward model 出来。可以看到,test-time search 其实对于训练阶段数据增强也是有重要贡献的。
-
既然我们要做 test-time search,那么 generator 用 supervised learning 来训练,优化每个 token 的 likelihood 就显得有点“死板”了,使用 RL 的方式,最大化 reward 的期望才是正道。这样才能让模型的输出更具有多样性,覆盖更多的 reasoning 路径,提高应对不同“棋局”的泛化能力。
-
有了 process reward model,我们在做 test-time search 时的效率也会更高,不再需要完成所有的推理步骤,而在任意的中间状态也能估计当前的形势的好坏。在 inference 时利用各种复杂的搜索算法如 MCTS 等也更加可行,且能带来实质性的效果提升。
-
在很多工作中,reward model 也基本复用了 LLM 的绝大部分参数,甚至就是 LLM 自身。因为很多场景的复杂性导致了得到 reward 本身也是个模糊问题,利用 LLM 作为 reward model,我们可以如法炮制,在做评估时也能做 CoT,test-time search 达到 scaling 的目的。谁说“局面评估”不是一个逻辑推理问题呢?
所以总体来看,在逻辑推理领域将 LLM 训练与 RL 范式结合还是比较自然的一个思路。当然现阶段在 LLM 初始训练时还是会先用自监督学习让模型能力达到一个基础水平,未来如何分配 pre-train,mid-train(增强推理能力),post-train(价值对齐)阶段的投入也是个有意思的课题。
有了这个框架,我们再去理解各个论文的工作可能会更系统一些。在上次文章的基础上,我们再来补充几篇有意思的工作简介。
Planning In Natural Language Improves LLM Search For Code Generation[3]
在自然语言计划层面中“搜索”
把 LLM 生成与下棋类比,那么 LLM 生成中的“一步棋”单位应该是什么呢?从直觉来看,LLM 在 token 层面的数据丰富度是足够高的,因此各种语法规范和表达上总体不会有什么大问题。我们更加缺少的是宏观计划层面的数据,所以 action 的单位可能不能太小。这篇文章给出了类似的结论,在自然语言计划层面做 test-time search,然后再生成代码,比直接在 token 或者代码行的层面做 test-time search 效果会更好。
关于 test-time search 的具体策略和效果(比较加权投票,beam search,MCTS 等),以及如何权衡 train-time 和 test-time 算力投入达到同等计算量下最优的效果,可以参考上一篇文章中的论文推荐。
Quiet-STaR: Language Models Can Teach Themselves to Think Before Speaking[4]
Token 级别的 inner thoughts
这篇文章可以说是完全相反的思路,直接在 token level 做“默默思考”。个人感觉在 token level 做这么多并行的 reasoning 好像没有什么必要,计算开销太大,每个 reasoning 也没有啥“回退”机制。还是上面的观点,微观层面的衔接并不是模型推理能力弱的核心问题。
如果对于论文细节感兴趣,可以参考这篇解读:OpenAI 新王炸:神秘项目「草莓」技术详解[5]。为了实现这个目标,背后还是做了非常多细致的工作的。
Q*: Improving Multi-step Reasoning for LLMs with Deliberative Planning[6]
Q value 估计方法
如何从最终的 reward 出发,做 credit assignment,学习出一个 Q value model,这篇文章给出了一些有趣的方案。从直觉上来说,如果某一个推理步骤至关重要,那么达到这一步之后,再让 LLM 去生成后续内容,最终成功的概率也会比较高。这篇文章就是利用这个思路来利用 LLM 展开“轨迹”,得到估计的 Q value,再训练出 Q value model,后续再利用它来做 test-time search。
从文章来看他们并没有使用 LLM 作为 Q value model,缺少了这个 model 本身的 scaling 能力。另外他们也严格区分了 process reward model(评估状态)和 Q value model(评估状态-动作对),比起我画的图来说更为严谨。
Advancing LLM Reasoning Generalists with Preference Trees[7]
构建推理偏好树
同样是利用 test-time search,但这次不是构建 Q value 训练数据,而是构建带有正反例的“推理树”数据。后续再用这部分数据可以做 SFT/RL 优化模型能力,以及构建 reward model 并用于 test-time search。这篇文章中的 reward model 是基于 LLM 的,也具有更好的面向复杂问题的推理能力。
RL on Incorrect Synthetic Data Scales the Efficiency of LLM Math Reasoning by Eight-Fold[8]
为什么要基于正负数据做 RL 优化
一篇非常有意思的文章,阐述了我们为什么应该用 RL 的方式利用正反样例来训练 LLM。文章中有很多有趣的 insights,值得仔细研读,比如:
-
我们之前常说的从 GPT-4 等强模型生成数据来做 SFT,其实没有在模型自身生成数据,做 reject sampling 后做 SFT 效果好。
-
负面数据能够帮助辨别推理过程中的关键步骤,近似于做了 credit assignment。但要注意这里正负数据的配对要比较小心,最好是 per-step 组织的。
-
基于正负数据做 per-step DPO,数据效率能达到“蒸馏” SFT 的 8 倍。
-
如果 SFT 阶段已经 over-train 了,那么利用负样本再来做训练不会有额外提升。
ReST-MCTS*: LLM Self-Training via Process Reward Guided Tree Search[9]
同时训练 LLM 生成和 reward 模型
上一篇文章中提到的数据生成的几篇工作,如 Self-Rewarding[10] 和 MCTS Boosts Reasoning via Iterative Preference Learning[11],主要是利用 test-time search 形成的偏好数据迭代做 DPO 优化 policy。在此基础上,也可以进一步在推理和搜索过程中,同时训练 LLM(policy)和 process reward model(value 评估),例如这篇文章中提出的 ReST-MCTS* 方法就是一例,相比前面的 Q* 更加端到端了。文中的这两个模型是分别优化的,而在 AlphaMath Almost Zero[12] 这篇工作中更是把两个模型合并到了一起。
LLM 基础上加了个 value head 作为 reward model
这种自己生成,自己来评估的方式也被很多人称之为 self-play(包括 Noam Brown)。
Generative Verifiers[13]
GenRM 的效果优势
体现了使用 LLM 作为 RM 的优势,包括 train-time 和 test-time scaling 等,感觉完全可以把 GenRM 放入 LLM + RL 范式中一起来迭代升级。对比数据也显示,fine tune 一下 verify 任务后,GenRM 效果比默认的 LLM-as-a-Judge 要好不少。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。