R1爆火之后,思考到底什么任务适合用RL做?

大模型机器学习算法

大家好,今天给大家带来一篇好友知乎@何枝的文章,《到底什么任务适合用 RL 做?》


        
        
            

          链接:https://zhuanlan.zhihu.com/p/25269200188 
          
   

 
        
      

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,这其实是一个非常抽象的概念,

从标注的思路来讲,我们需要首先尽可能的细致的定义一堆子要求,比如:先摆论据再出结论。

当数据标了一段时间后,我们发现:先出结论,再提供论据或许能更直观、人们获取信息效率更高,此时又要去重新 review 之前标注过的全部数据,这样的反复 review 会很折磨。

所以,一种更好的方式是,在满足 High Level 的大标准前提下,只比较模型生成结果的好坏( 虽然我们不知道这个问题的最完美的答案是怎样的,但我们总能在当前的几个候选答案里找出最好的那一个 ),随着不断的迭代,一些超出我们预期的答案会慢慢出现,模型也随之变的越来越强,走一条「没有最好,只有更好」的路子。

同时,对于那些因为标准变更带来的「不一致性数据」,比起 SFT 来说,使用 RM Uncertainty 能更好缓解不一致性带来的矛盾影响。

写在最后

最后,我们可以尝试通过这样的分析来理解:

  • SFT 的上限收敛于标注数据,如果能「快速」、「便捷」的收集到「理想标准下的标注数据」,那么其实 SFT 已经能很好满足任务需求;
  • 如果「难以定义理想标准(如创作)」、或者「有标准,但难以产生标注数据(如数学)」,那么可以考虑尝试 RL。但,上 RL 的挑战确实会比 SFT 大不少,需要有着强大的心理准备(包括但不局限于训练框架、调参稳定、Reward Hacking 这些问题)。不过,有时候不去自己努力拼搏拼搏,怎么能知道什么叫绝望呢:)

PS:看到这里,如果觉得不错,可以来个 点赞在看关注 。 给公众号添加【星标⭐️】不迷路!您的支持是我坚持的最大动力!

欢迎多多关注公众号「NLP工作站」, 加入交流群 ,交个朋友吧,一起学习,一起进步!

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
大规模高性能计算集群优化实践
随着机器学习的发展,数据量和训练模型都有越来越大的趋势,这对基础设施有了更高的要求,包括硬件、网络架构等。本次分享主要介绍火山引擎支撑大规模高性能计算集群的架构和优化实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论