AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


OpenAI最新推出的RFT是什么?
发布日期:2024-12-07 11:41:06 浏览次数: 2102 来源:熵减AI


好久没更新了,小一个月了吧,这次不找理由了,没错,就是懒
昨天推出了200美金的o1-pro,其实没啥好说的,我是不会买的,今天这个RFT是有点意思的,值得说,所以我写一篇,不然显得不对OpenAI连更12天的尊重。
这个其实算不新不旧的活儿,最早提出类似概念的是字节的论文ReFT
https://arxiv.org/pdf/2401.08967
背后的原理其实也差不多
首先传统的微调问题在哪?,大多数同学会操作FT脚本,但是并不知道自己在干什么,所以我们分析一下。
1- 拟合式,泛化差(RFT能部分解决)
2- 原始数据分布没有,其实这个是重点,但是大多数人解决不了,pretrain就不会你干的,所以泛化不好,同时效果差(解决不了就不说了,其实这个才是重点)
3- 对FT的超参不理解,效果不好,这个其实是可以解决的,如果用心去理解数学原理。
2不好解决,3是个人行为,所以我们主要讲1
我们来分析为什么FT会拟合强,泛化差
因为你的输入就是x,y
比如x="地球为什么是圆的"
y="稳定性最高。"
然后你这条数据(再强调一次本文不考虑你FT的数据质量,像偏微分一样,我们只考虑一个维度,default认为你数据质量和数据分布没问题)进入到了模型中形成了某些权重(别管是Lora还是full FT)
验证的时候你的损失函数就是Loss=y'-y
说白了,你推理的时候y'要尽量="稳定性最高。"
然后呢?然后就没了,那下次有同样的问题,或者语义上非常类似的,你问问还是可以的,稍微扩展一下,是没用的,另外即使语义接近的,比如"月球为什么不是方的",它也有概率答错。
归根结底,你数据量少,数据可能大概率也是垃圾,很难对模型权重形成正反馈。
数据增强是一个比较好的解法,但是不是每个人都有能力去做数据增强的,比如我们前文提到的问题2。
ReFT其实就提出了一个比较取巧的思路。
先看文中比较容易理解的图

ReFT训练分两个阶段,第一阶段就是模型FT阶段,是的,它这个也得FT,FT的语料和大家平常用的不太一样,是带reason的(这块感兴趣的可以看看我以前介绍的类似文章草莓https://mp.weixin.qq.com/s/6cFyYejR7nW7_Eaotuo1KQ?token=728737747&lang=en_US)
它的语料是(x,e,y)
x就是问题 比如"地球为什么是圆的"
y就是答案 比如"稳定性最高。"
e呢?就是COT reasoning 比如"因为它的引力将其物质拉向中心,形成一个接近球形的形状,这样能量最小化,"
这样原始的base模型其实就具备了部分隐式COT的考虑机制,虽然说还没到RL的步骤
而这部分的损失函数,甚至都写成了RL的方法,一眼看上去跟policy-based 状态转移函数RL似的,直接为后面做准备了
其实也好理解,因为cot本来就是若干个a,也就是action组成的,它这么做也无可厚非。
 
理论基础也就是标准马尔科夫决策了,这块也没啥可说的,这块不懂的可以看我的文章https://mp.weixin.qq.com/s/xzUnni8xX_2fsMfDhtysSw?token=728737747&lang=en_US
文中管FT这部分的训练叫warm-up 预热,预热的目的是让base模型有对COT思考和解题的理解能力,为后面的RL做准备。
RL阶段就是之前上一步你经过FT之后,base模型回答问题就带着COT的一部分reasoning么,对吧
那这次就让它一次性生成多个COT reasoning的数据,然后人工或者Rewarding model去直接PPO来on-policy的调就可以了。
 
这块设计挺有意思的。
先让模型生成多个COT的推理答案,然后打分给奖励
定义奖励机制,有3种
EXTRACT:这里是指在生成的链式推理路径 e,也就是这玩意  中提取出答案。如果答案正确,赋予奖励 1;如果部分正确,赋予部分奖励比如0.1;否则无奖励。
怎么定义正确,部分正确和错呢?什么是全正确呢?要求答案是对且可提取,那就是对,反之则是错,但是还有一个中间态,就是部分正确
我举个例子"答案为对并且可提取" 的具体例子

假设我们有一个数学问题:

小明有 5 个苹果,小红给了他 3 个苹果。小明现在有多少个苹果?

模型可能生成以下几种 P-CoT(程序型思维链):

情况 1: 正确的 CoT,答案可提取且为正确值


def solution():"""小明有 5 个苹果,小红给了他 3 个苹果。小明现在有多少个苹果?"""initial_apples = 5given_apples = 3total_apples = initial_apples + given_applesresult = total_applesreturn result


在这个例子中,答案8可以通过执行return result语句轻松提取,并且是一个数值。 因此,该 CoT 符合 "答案为正确并且可提取" 的条件,可以获得完整的奖励(奖励值为 1)。

情况 2: 错误的 CoT,答案可提取但非正确值

def solution():"""小明有 5 个苹果,小红给了他 3 个苹果。小明现在有多少个苹果?"""initial_apples = 5given_apples = 3total_apples = initial_apples + given_applesresult = "小明现在有" + str(total_apples) + "个苹果"return result

在这个例子中,虽然答案"小明现在有8个苹果"可以被提取,但它是一个字符串,而不是数值。 因此,该 CoT 不符合 "答案为正确" 的条件,只能获得部分奖励(奖励值为 0.1)。


情况 3: 错误的 CoT,答案不可提取


def solution():"""小明有 5 个苹果,小红给了他 3 个苹果。小明现在有多少个苹果?"""initial_apples = 5given_apples = 3total_apples = initial_apples + given_applesprint("小明现在有" + str(total_apples) + "个苹果")

在这个例子中,答案8虽然存在于代码中,但它并没有被return语句返回,因此无法被提取。 该 CoT 不符合 "答案可提取" 的条件,无法获得任何奖励(奖励值为 0)。

总结:

"答案为数值并且可提取" 意味着模型生成的 CoT 必须能够清晰地表达答案,并且答案必须对。 只有满足这两个条件,ReFT 算法才能根据答案的正确性来计算奖励,从而有效地训练模型。

也就是

1.当提取的答案(EXTRACT(st+1))与 ground-truth 答案(y)相同时,奖励为 1。

2.当提取的答案不为空(EXTRACT(st+1) ̸= null)并且与 ground-truth 答案不同(̸= y)时,奖励为 0.1 (部分奖励)。

3.当提取的答案为空(EXTRACT(st+1) = null)时,奖励为 0。

那么为什么要有这种半对的0.1奖励呢?啥作用呢?

其实这是个很好的问题,因为它触及了强化学习中奖励机制设计的核心。在 ReFT(强化微调)中,部分正确奖励机制的引入主要出于以下几个原因:

1. 应对稀疏奖励问题:

●在数学问题解答等任务中,模型生成的答案往往只有完全正确才能获得奖励,而稍微偏差一点就会被判定为错误,从而得不到任何奖励。 这种奖励信号过于稀疏,会导致模型难以学习。(当然连续就更麻烦了,又不是电信号或者热力学,很难连续

●部分正确奖励机制可以缓解这个问题,因为它允许模型在答案接近正确时获得部分奖励,从而鼓励模型朝着正确的方向探索。

2. 鼓励模型探索更多样的推理路径:


●如果只给予完全正确或完全错误的奖励,模型可能会倾向于保守地模仿训练数据中的 CoT,而不敢探索其他可能更有效的推理路径。(给一定的探索空间,别老用贪婪)

●部分正确奖励机制可以鼓励模型尝试不同的推理方法,即使它们不能立即得到完美的答案,只要答案朝着正确的方向发展,就能获得部分奖励,从而促进模型的创新能力。(泛化了吧)

3.稳定性:

●完全正确或完全错误的二元奖励信号会导致奖励函数的梯度变化剧烈,不利于模型的稳定训练。

●部分正确奖励机制可以平滑奖励信号,使其更加连续,从而提高训练的稳定性和效率


那这个和ppo一样是对每个完整的答案来打分的,我哪知道每一步应该多少分呢?
其实,这东西怎么讲呢,和ppo一样还是针对总体,那分步的话,它是折现在token上,比如ppo会根据RL散度的惩罚值对每个token做一个几分,然后最后还会反馈到整体得分上
ReFT也差不多,它虽然说是COT生成,但是可不是O1草莓的推理方式,还是类似ppo的思路,那也就是最终所谓的每个a,其实是token级别的。不同于ppo,是用kl散度来搞,它用GAE+TD能来模拟每个token得分

然后它KL也有用
只不过是这么用的:
防止和预热的FT模型差太多。
总体来说呢,ReFT肯定是个进步,但是和O1级别的推理来讲它是上一代的玩法,论文里也提到了想玩PRM,但是这玩意不是贵和麻烦么。。。
回到文章的主题,OpenAI的RFT,我看了一下demo,其实就是ReFT
因为对结果的监督,其实是RL的上一代玩法,说对O1能微调啥的,我信,但是O1的能力是基于过程的RL,如果你就给我个结果,不给过程肯定是不行的啊?
那这里面的鸿沟该如何拟合呢?
以下是我个人理解;
乞丐版:就是ReFT,反正比FT有一定的增强,但是你说在O1上面能有多大提升,我自己觉得,就还好。
牛逼版:不是见得ReFT,当然ReFT肯定得做,毕竟O1也一样要PPO,ORM的RL,这都是其中的一环,但是O1内部可以把你输入的领域知识(前提是带COT步骤的,当然ReFT也得带,不然RL什么呢?)给拆成若干个step,然后O1自己去做数据增强,按着PRM玩一把ReFT,咱不玩token级别的action 和reward了,直接上step级别的,那就猛了,所谓的纯血O1!但是我估计这成本也不好cover,毕竟多少个模型要一起为推理增强的RL来买单... 这可都是钱啊


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询