🌙

RLHF

 

背景

为什么要做 RLHF

感性地说,我在同花顺训问财 agent 的时候,sft 后的模型经常有回答逻辑乱串在一起的问题。比如“评价基金”和“评价基金经理”,“评价基金”的规划需要调用金融数据查询和搜索工具,回答有比较长的逻辑推理和回复;而“评价基金经理”需要调用百科知识和搜索,回答偏总结向。只做sft 的话经常出现“评价基金”调了百科知识工具,回答又偏总结,不给分析;或是“评价基金经理”调用金融查询乱找数据,回答里开始推理分析。用上 RLHF 之后一切问题消失了,很好地完成业务,对问句级的泛化性也有保证。当然 RLHF 也不是银弹,没强化过的地方还是有些问题,比如两个工具的描述十分接近,而 RLHF 数据里又缺少这两种工具的正负反馈,模型最后还是会混用这两种工具。
🎨
评价基金经理 问句:评价一下xxx 背景:{“xxx”: ”基金经理”} 规划:这是一个评价问题,xxx是基金经理,我需要使用百科工具查询xxx的人物信息进行回答。动作:{”百科工具”:”xxx”} 回答:xxx毕业于…[业绩等] 评价基金 问句:评价一下xxx基金 背景:{“xxx”: ”基金”} 规划:这是一个评价问题,xxx是基金名称,我需要使用金融查询工具查询xxx的金融信息,使用搜索工具查询和该基金相关的新闻,最后总结进行回答。动作:{”金融查询”:”xxx”,“搜索”:”xxx”} 回答:xxx是由yyy基金公司….[基本介绍、金融数据等]
RLHF 最核心的应该是 reward model。刚起步阶段可以让人来提供 feedback,或者手动构建一些 feedback,本质上都是人当reward model。但是数据积累到一定阶段,必须总结业务,训 reward model,让模型提供反馈,这里可以用人来监督反馈是否正确。用人直接提供 feedback 是无法 scale up的,人的学习能力很差,而且写很长的 feedback 成本非常高。现阶段模型提供 feedback 已经比较成熟了,定义良好的 reward 是远比人好用的。
总的来说,RLHF 相比于 SFT 的必要性如下:
sft 无法提供负反馈
sft 的训练过程,是一个让模型学习条件概率的过程,Prob( E | ABCD )。这也就是说,模型在训练和学习过程中,只知道 next_token 出什么是正确的,而不知道 next_token 出什么是错误的。这也间接解释了另外一个现象:为什么 sft 的数据多样性很重要。因为没办法, 我们无法直接让模型知道错误的 token 是什么,但只要我们把正确的 token 都喂给它学习,孤立那个错误的 token,似乎也能起到类似的效果。可以这么认为,sft 一直在通过“孤立”来降低错误 token 的出现概率
这就相当于模型没有“错题本”,只会知道正确,而没探索过错误。甚至你越是在 sft 阶段告诉它什么是错误的,它越是容易提高错误 token 的概率。类似“1+1=3,这是错的”,模型一定会学习到“1+1=”下一个 token 是“3”
sft 不具有“向后看”的能力
在 sft 的训练过程中,每一个 token 都只看得见前面的 token。缺少reward会导致模型 greedy decode的时候只能给出当下概率最高的 token,而句子的局部可能是不正确的。但是有了reward 之后,模型会降低对错误的 token 对权重,而更关注“这是错的”,使得“1+1=”后面最大的概率还是“2”,如果你手动拼接“3”到“1+1=”后面,模型就以更大概率输出“这是错的” 。
本质上,sft 的 loss 是平均 loss, rlhf 的 loss 是加权 loss,这个权重从 reward model 和 critic_model 来。
notion image
Reward: 1.344 | Substring: I Reward: 1.152 | Substring: I love Reward: 2.174 | Substring: I love to Reward: -0.385 | Substring: I love to walk Reward: 0.176 | Substring: I love to walk the Reward: 2.305 | Substring: I love to walk the dog Reward: 1.619 | Substring: I love to walk the dog, Reward: -0.201 | Substring: I love to walk the dog, what Reward: 1.255 | Substring: I love to walk the dog, what do Reward: 2.377 | Substring: I love to walk the dog, what do you Reward: 1.179 | Substring: I love to walk the dog, what do you like Reward: 1.298 | Substring: I love to walk the dog, what do you like?

数据

训练

Policy Model 策略优化

先建模好奖励模型 Reward Model 再优化:PPO

RLHF的核心就是4个模型之间的交互过程
  • Actor model:传统的语言模型,最后一层网络是 nn.Linear(hidden_size, vocab_size)
  • Reference model(不参与训练):Actor_model的一个复制
  • Reward model(不参与训练):
    • 将传统语言模型的最后一层网络,由 nn.Linear(hidden_size, vocab_size) 替换成 nn.Linear(hidden_size, 1),也就是说该模型输出的是当前token的得分,而不是对下一个token的预测
    • 输入是prompt + answer, 输出是answer中每个token对应的值,answer中最后一个token对应的值即为这条语料的reward
  • Critic model:Reward_model 的一个复制
notion image
GitHubGitHubDeepSpeedExamples/applications/DeepSpeed-Chat at master · microsoft/DeepSpeedExamples
 

强化学习基础知识

RLHF 完整流程

有了RLHF 和 RL 的基础知识后,我们来介绍每个模型的作用:
  • Reward_model 负责给 LLM 生成的句子打分
  • Actor_model 就是我们要优化的 LLM
  • Critic_model 负责计算Actor_model的状态动作值矩阵,也就是上面提到的Q函数(Reward模型只负责给最后一个token打分,给之前token打分的重任靠Critic_model 完成)
  • Reference_model 是一个标杆,为的是让我们的Actor_model在训练时不要偏离原始模型太远,保证其不会失去原本的说话能力
 

策略梯度理论

节省资源

直接优化:Bradley-Terry Model

  1. bandit:DPO
  1. token:from r to Q*:与bandit不同,但 loss 殊途同归

DPO

为什么 Llama 和 Qwen 选择了 DPO

DPO 改进

改进反馈粒度

token-level
step-level

交互形式多样化

多轮
AgentQ
msghf

多轮 DPO 的 loss 改进

arXiv.orgarXiv.orgBuilding Math Agents with Multi-Turn Iterative Preference Learning
💡
理论指出:如果是多轮,中间有外部的不确定,那么 dpo loss 不能扩展
 

原有 DPO 优化时出现的“缺陷”

样本质量,与当前优化策略的关系

更新 ref 的策略

去掉 ref 部分:提升正样本,减少负样本

后验概率作为 reward
ORPO
APO
GRPO
效果:PPO with critic pretraining > REINFORCE > GRPO, RLOO
不能使用GRPO主要有以下原因:
  • 推理成本增加导致训练效率降低:在常见的模型规模配置下(如所有模型均为70B),使用vLLM或TensorRT - LLM进行PPO样本生成以及DeepSpeed或Megatron进行训练加速时,推理和训练的计算资源消耗近乎相等(约1:1比例)。GRPO去除了critic模型,这可能会因推理成本增加而无意中降低训练效率。
  • 系统复杂性未显著降低:尽管去除了critic模型,但由于多个模型仍需在一个AI系统中与推理和训练模块协同工作,整体系统复杂性基本保持不变。
  • 理论性能提升不明显:理论上,GRPO和RLOO并没有显著提升PPO的性能。虽然采样基线可能比critic学习的估计更准确,但可以通过在PPO训练中冻结actor的权重更新来预训练critic模型,而且PPO本身也可以通过多种策略实现类似的效果,如增加每个提示的响应数量来提高批处理大小稳定性和增强探索。
  • 可能存在归一化问题:GRPO在某些情况下可能会出现问题,例如当两个采样奖励略有不同(如1.001与1.00)时,在归一化过程中可能会放大为显著偏差。
  • Reward Hacking 攻击风险:在Bradley-Terry奖励模型下,GRPO更容易受到奖励黑客攻击。(会生成长的输出以获得奖励,而不是正确的输出)
综上所述,GRPO在训练效率、系统复杂性、理论性能、归一化处理以及安全性等方面存在一些问题,因此在实际应用中需要谨慎考虑是否使用。

转移思路

Rank
生成 loss 代码自动设计 loss

理论假设的不同

IPO
KTO:Kahneman&Tversky human-aware los(HALOs)
Geometric-Averaged

DPO 缺陷

隐式reward的缺陷
负例梯度大
对比 pairwise:当 pairwise 差异小时不稳定
scale 信息相对不好利用:排列组合效率低,gradient 冲突
没有理论改动

scaling laws:奖励模型优化的尺度定律

如何选择

拒绝采样
RAFT
BON
给定KL的情况下理论上最优
实际上考虑效率,负面反馈更重要
分析 DPO 不那么 work 的
从实际学习的效果
差的 token 概率上来了怎么办
在线策略

现状

generator 和 reward model 逐步融合,pipeline rl 化,DPO 就变成一个 loss
这种 loss 就好吗?—-不好。reward model 又回来了
 

Reward Model 奖励模型

目标:用 RM 来学习有好处吗?隐式RM或者独立RM?

RM 的优化

token level
类似COT,先分析后打分
使用原有生成任务来帮助学习
多偏好,细粒度的反馈和对比
避免过度优化
 

BT model外的选择

回归分类:数学、代码等有真实答案的
 

RM类别

数值

BTM
PRM
ORM

对比

PairWise

规则

Rule-based Reward for language Model Safety

LLM as judge:可与生成任务统一建模

看成评价任务
RLAIF:OAIF:用LLM在线地选择 chosen/rejected + DPO
Self-Rewarding Language Model:构建输出模板,打分,从而选择chosen/rejected

RM 的 bias

数据有偏

非内容偏好:输出长度、emoji、加粗、exclamation、list、link、affimtive

Scaling law:奖励模型的尺度定律
 

BT Model 潜在问题

从人类反馈中的纳什学习

理论假设不同
BT model是转成了 point 的 reward,无法表示那种相互循环的偏好
DNO:直接纳什优化
INPO:迭代纳什策略优化
SPPO:self-play 偏好优化
 

推理阶段

怎么拿到更好的样本?推理阶段能提升吗?

搜索出 best

什么是 best
展开节点,剪枝
问题分析:COT

迭代优化

逐步修改、辩论、外部反馈
领域:数学等确定答案的 reasoning

推理阶段尺度定律

 
 

参考文献

Reinforcement Learning From Human Feedback — My sample book
 
notion image