背景
自OpenAI-o1发布后,工业界和开源社区便纷纷尝试使用强化学习进行复现,大体使用了类似ReFT的技术方案。不过,直到Deepseek R1、Kimi K1.5和Minimax 01公开报道其实现细节,大家才开始对使用强化学习提升模型推理能力产生广泛信心。Deepseek R1 zero充分展现了超大模型强化学习的惊人效果,然而,仍有一些问题尚未解决。
例如,对于小模型(参数量少于70B),蒸馏强模型展现出了显著的有效性,强化学习的有效性能否胜过蒸馏?DeepSeek-R1的报告显示,在Qwen-32B上进行zero RL的效果远不如成本更低的蒸馏方法。既然这一结论已达成共识,那么小模型能否先通过蒸馏,再利用RL进一步提升能力呢?其最终效果会强于使用所有数据进行蒸馏吗?
另外,DeepSeek-R1采用了Cold Start(蒸馏DeepSeek-R1-Zero)-RL-SFT-RL的训练方案,并在AIME 2024上超越了DeepSeek-R1-Zero。在这个复杂流程中每部分对最终能力的贡献有多少?
从某种意义上讲,我们在小模型上重复了DeepSeek-R1的训练流程,部分回答了这些问题。我们能够仅通过蒸馏使用8万条数据从Qwen2.5-32B-Instruct这一非长推理模型训练得到一个强推理模型,侧面验证了DeepSeek-R1的cold-start可能已经产生了很强的推理能力。而在强化学习部分,先使用@绝密伏击 的精选3k数据来提升DeepSeek-R1-Distill-Qwen-14B的能力,得到了我们仅依靠蒸馏技术所能获得的最强14B推理模型。在此基础上,我们再进行RL训练,旨在探索在这一严苛条件下,RL是否还能继续提升模型的能力。
以目前的成果来看,我们可以做出的报告是,强化学习可以进一步提高14B蒸馏模型的推理能力,尽管提升幅度不如蒸馏显著。并且,达成这一步并不轻松。
强化学习最终方案
- 算法:略微修改版GRPO,在verl实现上进行调整
- 数据:Big-Math-RL-Verified
- 模型:DeepSeek-R1-Distill-Qwen-14B 继续训练3000条高质量蒸馏数据版
- 奖励:规则答案验证器,长度奖励
- 训练流程:2-pass的训练流程,小模型离线筛选数据,14B模型在线RL
- 训练开销:16台8xA100-80GB服务器,26小时
各阶段评测结果
训练曲线
训练log:https://wandb.ai/seek4-nus/grpo-r1-share/reports/14B-GRPO--VmlldzoxMTczNzcyMw?accessToken=29hcarwh4qtt4hryx0
技术报告:https://arxiv.org/abs/2503.10460
代码仓库:https://github.com/Qihoo360/Light-R1
强化训练部分已公开训练参数,代码和数据可能在近期公开。
我们避免了哪些失败?
数据
数据是机器学习的基石,强化学习也不例外。受我们在蒸馏阶段最终有效的数据筛选策略和PRIME等工作的启发,我们意识到数据质量对强化学习也有着极大的影响。为了评估这一影响,我引入了两个对于数据在线难度的简单观测,全对率与全错率,即统计一个prompt group所有response全部正确或错误的比例。在观测到当时所用数据存在较大问题之后,对数据进行了更精致的过滤,结果验证了数据质量的显著影响。
开源模型的数据集在线难度观测
这里展示了我们开源14B模型这两个观测指标。可以看到尽管已经做了过滤,在训练后期全对率仍然会上涨到较高水平。从某种意义上这说明了我们的强化学习是有效的,在随机采样中模型能够更好的避免错误,但反而言之,这意味着后期真正能成为GRPO学习主要目标的只有约50%数据。
回看之前失败实验的数据,非全对全错的数据只有约20%,其提供的“RL信噪比”也更低。
直觉上来看,GRPO所做的group norm天然能部分去除全对全错组的影响,这也可能是在我的前期实验中GRPO优于PPO的原因。但在数据“信噪比”较低的情况下,GRPO的group norm会使KL散度,长度控制等设计上的次要优化目标跳变成为优化的主要目标,可能在这种局面下,reinforce++的batch norm会展现出一定优势。
在作出了这一观察之后,我们使用了离线难度过滤来挑选难度适中的样本。这里所用到的过滤操作其实也很简单,使用DeepSeek-R1-Distill-Qwen-7B续训版(Light-R1-7B-DS)采样得到其原始RL数据集上的通过率,只取其中通过率0.2-0.625的数据。
值得注意的是,如果人工检查通过率为0的数据,可以发现超过一半的数据是其标准答案无法被规则验证器验证的,如复杂条件表达式,有自然语言等;有小部分是答案错误的。这些数据可以认为是对RL训练而言的纯噪声数据。从这个角度来看,离线过滤过程可以确保数据与规则验证器对齐。
通过率为0数据的标准答案抽样
在开源模型之后的其他实验中,我们也实现了对全对全错组的在线Loss mask和sampler mask,类似DAPO中实现的操作。
主观的讲,RL对数据质量的要求可能比SFT数据更为严苛。SFT数据由QA对组成,人工标注和模型合成的回答能够部分消弥问题prompt带来的影响,而使用规则奖励的强化学习的过程监督远弱于直接标注,问题prompt可能极大影响学习进程。
生成长度
生成长度是我们在开源模型后的消融实验所确定的第二个重要影响因素。
开源版本确定训练时最大生成长度为24k,这一值来自对base模型在AIME24上表现的统计——这个值是所有能正确回答的题的最短回复的最大值,假如使用这个长度测试的话,Pass@64不会显著降低。
在后续消融实验中,我们确定了以下两点:
- 在更短的生成长度上进行RL,在同样步数下,训练出的模型在benchmark上差于base
- 类似deepscaler的先短后长训练策略仍然无法与在长生成长度设定下进行训练的效果相比,相比base模型甚至可能更差。
上图橘色线为我们的开源模型,绿色线消融实验的最主要不同因素是生成长度为16k,可以看到其倾向于降低长度避免截断,在测试中其表现差于训练前的base模型。
主观来看,RL生效似乎本就与长度有关,无论有无长度奖励,长COT RL都在鼓励模型充分利用其可用回答长度,做出尽量正确的回答。而在可用回答长度已用尽的情况下,模型会将优化目标转为缩短长度避免截断,放弃需要更长回答空间的题,无法进一步提高能力。
模型尺寸
在SFT后RL的实验中,我们也做出了类似于zero RL的观察,模型尺寸是显著影响因素之一。
在难度低(以14B能力衡量)的数据上,越小的模型(如1.5B),因为其base低,可以RL显著提高其能力;越大越强的模型(如32B),在同样的数据上RL可能反而会劣化其能力。
在难度高的数据上(以14B能力衡量),小模型(如14B)反而会表现出难以学习;更大的模型(如32B)却可以稳定提升。
说人话的话,就是小/弱的模型能更简单的在RL阶段展示出喜人的reward上涨曲线,但上限相对较低;大/强的模型需要更精致的数据和算法,但上限更高。
或者说从数据的角度,越online选取的数据,越有利于模型学习。
其它细节
本部分不保证真有用,但至少没太大坏处:
- 长度控制:修改版的Demystifying长度信号,clip了其鼓励正确短答案的奖励,以避免模型在训练初期大幅缩短长度
- 双侧sampling weight clip:避免超大正ratio和负advantage造成的loss spike,MiniMax-01同期亦作出此修改
- 不使用entropy loss:verl的grpo脚本默认会继承PPO的配置项,启用entropy coeff。这使得实际的算法偏离了标准GRPO,并导致了一次7B预实验的熵异常上升。该修正已合入verl,见Pull Request #781 · volcengine/verl[1]。
工程
长思维链模型RL训练计算开销的大部分是其采样部分,对长思维链模型而言,每次rollout都需要等待最长序列完成,因此其会表现出明显的利用率空泡。
kimi针对这一显然的低效问题提出了partial rollout,进行削尾填谷,将部分长序列的尾部生成过程放入下次rollout的头部。我此前在openRLHF上实现了这一技术,大致能加速1/3,在原版grpo算法上也没有太大影响。
但切换到verl后,在verl的单控制器同步设计框架下实现比较困难,加之理论上partial rollout要配合适应半离线样本的RL算法,所以没有实现。
解决这一问题现在最简单的办法,是粗暴的开大TP让最长序列生成的尽可能快。
本部分工程上最大的问题是单次rollout 的时间是最长序列的完成时间,单纯的堆卡无法减少每步的wallclock time。针对这一点可能的很多工程改进还在持续实验中,希望未来能有机会写关于这一块的报告。
我们还需要回答的问题
RL的scaling之路在哪里?
关于zero RL的论文都报告了令人振奋的奖励上涨曲线,但并没有严格的关于long COT RL scaling的研究,无论是算法或工程。在有充分算力的情况下,如何最快最好的用RL提高模型的能力?以现在的技术看来,这一问题的答案似乎是scale模型尺寸。对小模型而言,最有效的scaling方式似乎仍然是先RL大模型再蒸馏再做RL?
现在的奖励模型存在缺陷吗?
规则奖励是本轮RL在大模型上取得显著进展的原因之一吗?这是否说明当前的基于LLM的奖励建模存在缺陷?
现有的成功经验如何用于通用任务?
我们能否在通用任务上取得如此明显的长思维链/RL提升?或者我们只能选择做题能力泛化为通用任务智力?
如何在维持模型能力的同时缩短长COT reasoning或者加速长COT inference?
这一问题的回答能既使长COT模型更实用,又能进一步提高长COT模型RL的可能上限。
或许这些问题能够被回答一二,我们就更有希望见到属于人工智能的下一个纪元。
本文只写了部分我认为的关键之处,尚不完备;我们开源的技术报告的强化训练部分也还需要补充,未竟之处,下次再写。
如何学习大模型 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 的正确特征了。