9 强化学习- RLHF/PPO/DPO/GRPO

大模型训练大体可以分为3种模式:

  1. 预训练(Pretraining)
  2. 有监督精调(Supervised Fine-Tuning, SFT)
  3. 基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)。

其中,SFT让模型通过学习训练数据数据分布的方式来提高模型在特定任务或指令上的表现,与其不同的是,RLHF使用人类反馈来定义奖励函数,然后通过强化学习算法优化模型。让模型能生成符合人类喜好的回复。

1 强化学习基础

        强化学习(Reinforcement Learning, RL)是机器学习的一个重要分支,主要研究智能体(Agent)如何在一个环境中通过与环境交互来学习策略,以最大化某种累积奖励。强化学习的核心思想是通过试错(Trial and Error)来学习,智能体通过执行动作(Action)来影响环境,并从环境中获得反馈(Reward),进而调整其策略(Policy)以优化长期奖励。

1.1 强化学习的基本要素

  • 智能体(Agent):学习和决策的主体。
  • 环境(Environment):智能体交互的外部世界。
  • 状态(State):环境在某一时刻的描述。
  • 动作(Action):智能体在某一状态下可以执行的操作。
  • 奖励(Reward):智能体执行动作后从环境中获得的反馈。
  • 策略(Policy):智能体在给定状态下选择动作的规则。(策略分为确定性策略(deterministic policy)和不确定性策略(stochastic policy),确定性策略只每种状态下选择的action是确定的即百分之百选择一种策略,而不确定性策略指某种状态下选择的action是不确定的,策略只是确定action的分布,然后在分布中进行采样来确定策略)
  • 价值函数(Value Function):评估在某一状态下长期累积奖励的期望值。

1.2 切入LLM

Policy, 策略网络被训练的主要的LLM,输入文本,输出文本
Reward Model,奖励模型提前被训练的模型。输入完整的文本,输出一个价值(数字)
Critical ,价值模型(value model)被训练的另一个模型LLM2。输入部分文本,输出一个价值(数字)
States,状态t时刻得到的序列
Action,动作t时刻LLM输出的下一个Token

核心问题:当前的生成的序列好不好?基于当前状态生成的下一个token好不好?好的话就进行鼓励,不好的话就加以批评。

主流的RLHF算法有PPO(Proximal Policy Optimization)、DPO(Direct Preference Optimization)、GRPO等。

2 RLHF(基于人类反馈的强化学习)

  • 是什么:像教小孩一样教AI。比如训练ChatGPT时,人类会判断哪些回答好、哪些不好,AI通过这种反馈学习。
  • 三步教学法:
  1. 预训练:AI先读大量书,学会基础说话能力。
  2. 奖励模型:人类对多个回答排序(比如A > B > C),AI学会判断好坏的标准。
  3. 强化学习:AI不断调整自己,目标是让奖励模型给它打高分。

大预言模型中强化学习的主要流程:(已经有一个进行微调后的大预言模型LLM)

  1.  将1个prompt输入到要训练的LLM里面,得到10个输出;
  2. 让标注人员对这个10个输出进行排序,质量从高到低。
  3. 用标注后的数据,训练一个Reword Model,使其根据任务输入得到一个质量的分数/
  4. 使用PPO/GRPO算法,微调Policy Model (LLM),使其能够遵守Reword Model的建议,合理的鼓励,坏的抑制。

2.1 Reworad model

  • Reward model: 人工是标记不完的,所以需要一个模型自动的干活;
  • Reward model也是从一步一步开始训练的。

Reward Model的输入通常包含以下两部分:

  • Prompt(用户输入):原始的问题或指令文本
  • Response(模型输出):待评估的生成内容文本

具体实现中,输入可能以以下形式组合:

  1. 文本拼接方式:[prompt] + [separator] + [response]34
  2. 嵌入向量方式:分别对prompt和response编码后合并特征向量16

Reward Model的输出是一个标量值(scalar),表示对生成内容的质量评估:

  • 数值范围:根据实现方式不同,可能是:
    • 无界实数(如-∞到+∞)1
    • 有界分数(如0-1或1-5)37
  • 语义解释:分数越高表示生成内容质量越好,越符合人类偏好25

在 ChatGPT 中,奖励模型是通过人工标注的「排序序列」来进行训练的,如下图所示:

InstructGPT Reward Model 训练流程

这是什么意思呢?

        如上图所示,ChatGPT 并不是直接让人工去标注每一句话的真实得分是多少(尽管模型最终要预测的就是每句话的得分),而是让人去对 4 句话按照好坏程度进行「排序」。通过这个「排序序列」,模型将会学习如何为每一个句子进行打分。听起来很绕对吧?

既然最终目的是训练一个句子打分模型,为什么不让人直接打分,而是去标排序序列呢

今天我们就来好好聊一聊这个非常巧妙的思想。

视频讲解在这里:

​编辑​知乎视频10.1 万播放 · 150 赞同视频

2.1.1 「标注排序序列」替代「直接打分」

大家在曾经考语文的时候,都写过作文吧?

而作文的分数也成为了整个语文考试中不确定性最大的环节。

因为「打分」这个行为的主观性太强,同一篇作文不同的老师可能会打出不同的分数

为了统一打分标准,通常在阅卷的时候都会制定一系列的规则,例如:主题明确,语句通顺,句子优美等。

但,即便如此,不同老师对「主题明确」和「句子优美」也有着不同的看法。

这就导致我们很难统一所有老师的看法,使得不同人在看到同一篇作文时打出相同的分数。

而标注员在给 ChatGPT 进行标注的时候,就可以看做有很多个「老师」在给模型写的作文「打分」。

因此我们可以看出,直接给生成文本进行打分是一件非常难统一的事情。

如果对于同样的生成答案,有的标注员打 5 分,但有的标注员打 3 分,模型在学习的时候就很难明确这句话究竟是好还是不好。

既然打「绝对分数」很难统一,那我们转换成一个「相对排序」的任务是不是就容易许多呢?

举例来讲,假设今天模型生成了 2 句话:

1. 香蕉是一种黄色的水果,通常长在树上,是猴子非常喜爱的水果。
2. 香蕉很酸,富含矿物质元素。

如果让作业员去打分,可能不同人打出来不同的分:

生成句子得分(标注员1)得分(标注员2)
香蕉是一种黄色的水果,通常长在树上,是猴子非常喜爱的水果。4.55.0
香蕉很酸,富含矿物质元素。1.00.5

但如果我们只让标注员对这两个答案进行好坏排序,就能得到统一的结果:

生成句子对排序(标注员1)排序(标注员2)
A:香蕉是一种黄色的水果,通常长在树上,是猴子非常喜爱的水果。
B:香蕉很酸,富含矿物质元素。
A > BA > B

「绝对分数」难以统一

「相对排序」容易统一

不难看出,用「相对任务」替代「绝对任务」能够更方便标注员打出统一的标注结果。

那么,「统一」的问题解决了,我们怎么通过「排序序列」来教会模型「打分」呢?

2.1.2. Rank Loss —— 通过排序序列学会打分

假定现在有一个排好的序列:A > B > C >D。

我们需要训练一个打分模型,模型给四句话打出来的分要满足 r(A) > r(B) > r(C) > r(D)。

那么,我们可以使用下面这个损失函数:

其中,yw 代表排序排在 yl 的所有句子。

用上述例子(A > B > C > D)来讲,loss 应该等于(损失函数计算所有"前面项减后面项"的组合):

loss = r(A) - r(B) + r(A) - r(C) + r(A) - r(D) + r(B) - r(C) + ... + r(C) - r(D)
loss = -loss

为了更好的归一化差值,我们对每两项差值都过一个 sigmoid 函数将值拉到 0 ~ 1 之间。

可以看到,loss 的值等于排序列表中所有「排在前面项的reward」减去「排在后面项的reward」的和。

而我们希望模型能够「最大化」这个「好句子得分」和「坏句子得分」差值,而梯度下降是做的「最小化」操作。

因此,我们需要对 loss 取负数,就能实现「最大化差值」的效果了。

reward model训练:https://www.zhihu.com/search?q=reward%20model%E6%80%8E%E4%B9%88%E8%AE%AD%E7%BB%83&search_source=Suggestion&utm_content=search_suggestion&type=content https://zhuanlan.zhihu.com/p/595579042

3 GRPO

 黄色的需要训练的模型。蓝色是训练好的模型。

PPO需要四个模型,Actor生成响应,Critic评估未来收益,Reward提供即时奖励,Reference通过KL散度约束Actor避免偏离预期,四者协同优化策略。

提示输入 → 策略模型生成响应 → 奖励模型评估 → 价值模型预测 → 
优势计算 → PPO损失计算 → 模型参数更新 → 新策略生成

模型名称别名初始化来源是否可训练输入输出核心功能
Actor ModelPolicy ModelSFT模型✅ 是用户prompt生成文本(response)待训练的主模型,通过强化学习优化生成策略。
Critic ModelValue ModelReward模型✅ 是prompt + response预测长期价值(V值)评估生成token的期望回报,指导Actor优化
Reward Model-偏好数据集训练❌ 否prompt + response即时奖励分数提供生成内容的绝对质量评分。
Reference Model-SFT模型❌ 否同Actor的输入同Actor的输出分布通过KL散度约束Actor,防止过度偏离SFT表现。
  •  Reference Model和Actor Model在初始化阶段是相同的模型(都来自SFT模型),但在训练过程中它们有以下本质区别
  • 模型共享:Critic和Reward模型通常共享底层架构但不同参数
  • 内存消耗:四个模型中仅Actor和Critic需要保存梯度,占主要计算资源
  • 进化变体:如GRPO算法通过移除Critic模型简化架构。

GRPO VS PPO:

  • 移除价值网络(Critic):GRPO不再需要单独训练价值函数模型,而是通过组内样本的相对比较来计算优势值;
  • 降低显存占用:相比PPO需要同时维护Actor和Critic两个大模型,GRPO仅需策略模型,显存需求降低约40%;
  • 计算效率优化:通过组内相对奖励机制,避免了PPO中复杂的优势函数估计过程;

Group Relative Policy Optimization (GRPO) 的核心创新在于它彻底摒弃了独立的、需要训练的价值模型,从而从根本上解决了PPO的内存瓶颈问题 。GRPO通过一种新颖的、基于群体的采样和比较机制来直接估计优势函数:

对于一个给定的提示prompt,GRPO不再像PPO那样只生成一个响应,而是利用当前的策略模型采样生成一个包含 K 个候选响应的群体(group)。使用一个奖励模型为Group中的每一个response打分。群组打分。

相对优势(Relative Advantage)是 GRPO 的精髓所在。它不依赖一个独立的价值模型来提供“期望奖励”的基线,而是直接利用组内所有样本的奖励信息来计算每个样本的“优势”(Advantage)。具体方法是对组内的奖励进行标准化处理,对于组内的第 i 个输出,其优势计算:

 这个标准化的优势值直接告诉模型,当前这个输出与本次采样的“平均水平”相比,是更好还是更差,以及好/差的程度。这提供了一个非常稳定和局部的学习信号。
 

3.1 GRPO的数学形式与稳定性机制

GRPO的策略更新目标函数与PPO类似,旨在最大化带权重的优势函数,同时通过KL散度正则项保持训练稳定。其损失函数可以表示为 :

其中,

重要性采样比率:,

  • πθ(oi|q)是新策略下生成响应oi的概率
  • πθ_old(oi|q)是旧策略下生成响应oi的概率;
  • 衡量新旧策略在相同条件下做出相同决策的概率差异;
  • 校正从旧策略采样数据用于新策略训练时的分布偏差;
  • 控制策略更新的幅度,防止更新过大导致训练不稳定;

Ajk是上面计算出的相对优势(经过减去均值除去标准差的结果),β 是控制KL散度惩罚强度的系数。这个KL散度项确保了新策略不会与旧策略(参考模型)偏离太远,其作用类似于PPO中的裁剪(clipping)机制,都是为了保证训练的稳定性(不要一次激励的太多)。

对于一个 70B 参数的 LLM,一个价值模型同样需要约 140GB(FP16 格式)的显存。移除它意味着几乎将训练时所需的模型总内存减少了三分之一(策略模型 + 参考模型 vs. 策略模型 + 参考模型 + 价值模型)。这使得在同等硬件条件下,可以微调更大规模的模型,或者使用更大的批次大小(Batch Size)来提升训练效率。

GRPO本质上是用计算换显存。价值模型的角色(提供奖励基线)被一个简单的、几乎无计算开销的组内统计(求均值和标准差)所取代。这不仅节省了内存,还避免了训练价值模型所需的前向和反向传播计算,从而加速了每个训练步骤。

总结来说,GRPO 通过用组内相对奖励标准化来巧妙地生成优势信号,从而抛弃了对昂贵的价值模型的依赖,直接解决了 PPO 在微调大模型时最主要的内存和计算瓶颈。

链接:https://www.zhihu.com/question/10766825126/answer/1926963248709765073
 

### DeepSeek 7B-RLHF 模型介绍 DeepSeek 7B-RLHF 是基于 DeepSeek 系列的 7B 大小的语言模型,经过强化学习(Reinforcement Learning from Human Feedback, RLHF)优化后的版本。该模型通过结合人类反馈来调整其输出,以更好地满足用户的需求和期望[^1]。 ### 训练方法 在训练过程中,DeepSeek 7B-RLHF 首先会进行监督微调(Supervised Fine-Tuning, SFT),然后利用人类反馈数据来构建奖励模型(Reward Model)。这个奖励模型用于评估生成文本的质量,并指导后续的强化学习过程。具体来说,使用 PPO(Proximal Policy Optimization)算法对模型进行进一步训练,使其能够在面对不同任务时生成更符合人类偏好的回答[^2]。 ### 应用场景 DeepSeek 7B-RLHF 可应用于多种自然语言处理任务,特别是在需要高质量、高准确性输出的场景中表现尤为突出。例如: - **客服聊天机器人**:提供更加自然流畅的对话体验。 - **内容创作辅助工具**:帮助创作者撰写文章、故事或诗歌等。 - **教育领域**:作为智能导师系统的一部分,为学生提供个性化的学习建议和支持。 - **法律咨询**:协助律师快速查找相关信息并生成初步意见书。 - **医疗健康**:支持医生进行诊断决策,同时也能向患者解释复杂的医学术语和治疗方案。 这些应用不仅限于商业用途,在学术研究和社会服务等多个方面也具有广泛的应用前景[^3]。 ```python # 示例代码 - 使用 HuggingFace Transformers 加载预训练模型 from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-7b-rlhf") model = Auto.ModelForCausalLM.from_pretrained("deepseek-ai/deepseek-7b-rlhf") input_text = "你好,世界!" inputs = tokenizer(input_text, return_tensors="pt") outputs = model.generate(**inputs) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值