R1 爆火之后,身边讨论 RL 的声音越来越多,好事情!很开心!
和很多朋友讨论后,发现好像很多的想法是「我想试试 RL,但不太清楚这个任务适不适合用 RL 做」。
所以,这里尝试总结一些近期聊过一些场景,分享一下(纯个人)认为哪些任务上用 RL 收益高,哪些任务其实不是非 RL 不可,希望能够帮助大家理性看待,冷静分析!
我们分为「有 ground truth 信号」和「无 ground truth 信号」两类场景来讨论。
存在GroundTruth 信号
这一类任务通常指能不能够通过任务的最终的明确状态(ground_truth)来构建一个 verifier,从而指导 RL 训练,通俗理解就是我们能不能通过写一个规则代码来判断模型做的「对不对」。比如我们常见的「数学题」(有标准答案,判断模型做没做对),「代码题」(代码是否报错 & 执行结果是否正确)。
这类任务可以优先考虑下是否适合用 RL,
核心原则是:越难标注(或定义)好答案的任务,越适合 RL
。
其中,
人们越难标注的任务(比如数学题,代码题),用 RL 的 ROI 是越高的
,因为在最开始的时候,RL 就是被人们用来解决那些难以获得标注样本,减少 Human Engineering 的场景!(尽管那时候 reward shaping 折磨的人们痛不欲生,丝毫没有感觉到减了多少人工量 TAT)。
但是!有的任务虽然能获通过写代码来判断,
但同时它们的「标准答案」也非常容易产生,那么这类任务就并非是一定要走 RL 这条路子了
。
举例来讲说:假设今天我们要做一个挂接知识库的 Agent,这个 Agent 存在着很明确的规则:该任务下只有 2 种类型的 prompt(水果类、人物类),只要 prompt 中里面出现了「水果」,则调用「水果知识库」;只要 prompt 中出现了「明星」,则调用「人物知识库」。
上述场景中,因为标准答案非常容易标注(准则卡的很死,是水果类就调水果,是人物类就调用人物),尽管构建一个 Rule 的 Verifier 也很容易,但其实走 RL 训练出来的模型能力上限也就是「是水果类就调水果,是人物类就调用人物」,其实和人类标出来的数据(SFT)差不了太多,
这种「容易产生天花板级别答案」的任务,用 RL 就不是那么的有必要啦
。
那一个直接的反例就是:推理 & 数学题。这类任务标注同学看到就头大,吭哧吭哧读完题,看不懂,然后再去查资料,查到一道类似的题,然后开始尝试对着答案去理解,再回头来做现在的题,标注效率不高(还容易出错),给算法同学看,算法同学也累够呛。
所以这种「很难产生好答案,但很容易进行判别结果是否正确」的任务,是 RLer 最喜欢的任务场景!
题外话
:
R1 里使用纯 Ground Truth 去做数学 & 推理 RL,得到了非常漂亮的 response length 递增曲线!但(我个人认为)Response Length 并非越长越好,之所以随着训练变长可能单纯只是因为用的是 ORM(而非 PRM)来训练,从而导致的一种 Length Hacking 现象。因为在整个训练中,模型只受到 Outcome Signal 的影响,那些偏长的答案(包含了诸多转折、验证)能够答对题的概率期望比那些较短答案要高(比如上一步模型答错了,得到了负惩罚,那么下一次模型尝试在上一次答案后面加一个 wait,然后输出另一个答案,可能就对了),所以模型就更倾向去往长的 pattern 学(尽管可能会有错误、无意义的 CoT 出现,但因为中间过程不会被惩罚,所以就保留了这种 format)。
从另一个角度来想(可能不完全适用于 GRPO),假设将任务定义为 sample 一个 token 就是做一次 action,那么对于完成一个同样任务,允许模型在 100 次行为选择(100 个 token)和 10000 次行为选择(10000 个 token)中进行抉择,模型大概率会选择收敛到 10000 次行为选择(更宽松)的策略下。这个猜想来自于:我们以前训练走格子迷宫的 RL 任务里,通常会加入一个步数惩罚(step penalty),以期望 policy model 能在最短的步数内完成任务。
不存在 GroundTruth 信号
事实上,绝大多数任务是不存在「标准答案」的(这意味着大概率需要训练一个 RM),在这类任务下抉择是否要使用 RL 往往比较困难。
这类任务的类型比较多、有点杂,一个比较大的判断是:
那些「宏观标准容易定义,但细节难以精确」的任务,比较适合 RL
。
举例来讲,假如今天有一个 Chat Bot,我们能够对用户可能问的所有 prompt 进行穷举分类,并且每一种类别都有非常明确的「标准态」(包括格式、话术等),当来一条新的 prompt,我们能很快的将其归分到某一个类别,并且按照既定标准生产出一条标准的回复 —— 那 SFT 已经能够满足这个任务的所有需求!
但现实中会面临诸多问题,比如:每一个类别的「标准态」可能在不断变化。
如果是一个很成熟的业务(或产品),标准经历了很久的沉淀后会变的相对稳定;
而对于一个新的产品而言,标准往往会随着时间推移而发生迭代和变更(这通常发生在一些小的细节标准上),这将导致之前标注过的数据需要重新标注(或者丢弃),频繁的 review 过往数据是一件非常费时费力的事情,也很痛苦。
这种没有理想标准(或者标准更迭很快)、存在一些数据不一致性的场景,光靠 SFT 是比较难搞定的。
举个例子,假设我们今天要做一个「表达有逻辑、讲话有温度」的 Model,这其实是一个非常抽象的概念,