RLHF(基于人类反馈的强化学习)
说明
- 笔记部分内容学自网络,仅供学习和交流使用,最终著作权归原作者所有
RLHF
- RLHF论文,RLHF官网展示
- RLHF(Reinforcement Learning with Human Feedback,基于人类反馈的强化学习)是一种结合强化学习和人类反馈的方法,用来训练人工智能模型,使其行为更符合人类的需求和偏好。
- 它的核心目标是解决模型输出不够贴近人类需求的问题,让 AI 不仅能“回答问题”,还能“回答得好、回答得安全”。
- 需要RLHF的主要原因是为了让人工智能模型的输出更符合人类的需求和偏好,解决传统机器学习方法中的一些核心问题。
- RLHF(基于人类反馈的强化学习)的核心价值在于解决传统AI训练中的关键瓶颈。传统方法依赖预定义奖励函数,但面对对话、内容创作等复杂任务时,很难用简单规则量化"好坏"——比如"贴心回答"或"优质文章"的标准本身就极具主观性,且环境反馈(如用户点击)往往无法提供明确优化方向。RLHF通过引入人类偏好训练奖励模型,让AI学会更符合人类期望的行为。
- 这种方法显著提升了模型的"人性化"表现。普通AI常存在语境理解偏差、回答生硬缺乏温度,甚至对错误答案过度自信等问题。RLHF通过人类反馈帮助模型把握微妙的人际互动细节,使输出更自然得体。同时,它有效强化了内容安全防线,能主动规避歧视性言论、危险建议和偏见输出,这些在纯数据训练中难以彻底解决的问题。
- 针对不同用户需求,RLHF展现出强大的适应能力。专业用户可获得精准的技术解答,普通用户得到通俗的解释,法律、医疗等特殊领域也能获得定制化内容。这就像教学生写作:预训练好比学生自学写作基础,而RLHF则是老师批改作文时指出"这里太啰嗦"“这个观点很好”——通过持续反馈,学生不仅掌握技巧,更学会如何打动读者。最终,AI在技术准确性与人文关怀之间找到最佳平衡,实现综合性能的质的飞跃。
- 总之,用户需求高度主观或多样化的任务、安全性和可靠性要求高的任务、任务目标复杂且难以明确量化、需要动态优化的场景都需要RLHF。
RLHF 是否必要取决于任务的特点和目标:
- 如果任务目标模糊、需要个性化、安全性高且对人类偏好敏感,RLHF 是非常需要的。
- 如果任务明确、无需人性化表现,且已有成熟规则或奖励函数,RLHF 就不是必须的。
RLHF流程分解
RLHF 的过程可以分为三个主要阶段:
- 预训练阶段 使用大规模数据训练一个语言模型,让它学会语言的基本语法、语义和知识。模型虽然很强大,但回答可能会答非所问、不够自然或礼貌、输出危险或不适当的内容。
- 奖励模型训练阶段(Reward Model Training):引入人类的反馈。
- 人类对这些模型生成回答(多个版本)进行评分或排序。
- 根据这些数据,训练一个 奖励模型(Reward Model, RM),用来预测哪些回答更符合人类偏好。
- 强化学习阶段(RL):利用 强化学习(如 PPO 算法),奖励模型提供评分,模型调整自己的输出行为,生成更高分的回答。通过不断的试错和优化,模型最终能够生成更加优质和人性化的回答。

- 第一步:训练监督策略模型
- 从提示词数据集中取样提示词:首先,从包含各种提示词的数据集中随机选取一个提示词作为初始输入。
- 数据标记工程师给出期望的输出行为:然后,由人工标注员为这个提示词提供一个期望的故事内容或结构,作为模型的目标输出。
- 通过监督学习微调:接下来,使用监督学习的方法对模型进行微调,使其能够基于提供的提示词生成接近于预期结果的故事。
- 第二步:训练奖励模型
- 取样一个提示词和模型多个输出:再次从数据集抽取一个提示词,并让模型产生多个不同的故事版本。
- 数据标记工程师给出优劣排序:人工标注员会对这些不同版本的故事进行评估并按质量高低进行排序。
- 训练奖励模型:最后,用这些带有评分的故事样本去训练一个奖励模型,该模型学会预测哪些故事更符合人类的标准。
- 第三步:采用近端策略优化进行强化学习
- 从提示词数据集取样一个新的提示词:继续从数据集中获取新的提示词作为下一个迭代的基础。
- PPO模型由模型初始化:使用之前训练好的模型开始生成故事。
- 模型生成一个输出:模型尝试根据新提示词生成一个完整的故事。
- 奖励模型计算输出奖励值:接着,奖励模型会评价这个新生成的故事,并给出相应的分数。
- 利用PPO算法结合奖励更新策略:最后,通过PPO算法,结合奖励模型的反馈来调整模型的行为,使得它在未来能够生成更加高质量的故事。

一:使用PPO+reward(奖励模型)组合成RLHF模式,边学习,边练习,并且通过教师指导,评分,不断改进。
二:使用DPO+reward(奖励模型)在寻找学习资料,不断学习别人好的技巧与坏的技巧,然后进行评判后学习。
三:使用DPO(直接偏好)在寻找一堆学习资料,不断学习别人的技巧,自我进行练习评判。
- RLHF应用到GPT过程大致包括以下步骤:
- 收集反馈数据,数据形式通常是成对比较,例如:回答A比回答B更有用、更准确或更安全。——收集反馈数据
- 使用反馈数据训练一个奖励模型,预测生成内容的质量评分。奖励模型的目标是将人类偏好转化为机器可优化的奖励信号。——训练奖励模型
- 利用奖励模型的输出作为目标函数,训练语言模型。具体方法是使用强化学习算法(如 PPO)微调 GPT 模型,使其生成的内容能够最大化奖励信号。——策略优化
- 不断收集新的用户反馈和数据,更新奖励模型和策略优化的结果。——持续优化与迭代
RLHF框架组成
RLHF模型组成
RLHF 主要由以下模型组成:
- Actor Model(动作模型):需要优化的语言模型,负责生成实际的文本回答,参数会在训练过程中不断更新。
- Reference Model(参考模型) :Actor Model 的初始副本,参数固定不变,用于计算 KL 散度,防止 Actor 与初始模型偏离太远。
- Reward Model(奖励模型):经过人类偏好训练的评分模型,为Actor生成的文本提供奖励信号,指导 Actor 向更好的方向优化。
- Critic Model(评论家模型):估计价值函数,预测动作的长期收益,帮助 PPO 算法更好地优化Actor。
1. Actor Model 接收提示,生成回答 --小明(Actor Model): 正在学习滑雪的学生
↓
2. Reward Model 评估回答质量,计算奖励 --小明的录像带(Reference Model): 记录了小明最初的滑雪水平
↓
3. Reference Model 计算与 Actor 的 KL 散度 --裁判(Reward Model): 为每个动作打分的评判员
↓
4. Critic Model 预测状态-动作价值 --教练(Critic Model): 预判动作价值的指导者
↓
5. PPO 使用这些信息更新 Actor Model
Step 1: 生成阶段
用户: "请解释 RLHF"
↓
Actor Model: 生成回答 "RLHF 是..."
Step 2: 评估阶段
Reward Model: 给回答打分 (比如 8 分)
Reference Model: 检查与原始模型的差异
Critic Model: 预测这个动作的价值
Step 3: 更新阶段
根据上述信息使用 PPO 更新 Actor Model
RLHF过程举例
-
训练前准备:
Reference Model(录像带):输入:相同的滑雪场景 → \to →输出: 生成动作的概率分布(用于后续计算 KL 散度)
Reward Model(裁判)训练:输入: 大量人类标注的动作评分数据 → \to →输出: 学会评判动作的好坏 -
每轮训练循环:
# 第一步:Actor 生成动作 Actor(小明): 输入: 滑雪场景(prompt) 输出: 动作概率分布和具体动作 例如: { "向左转": 0.7, "直滑": 0.2, "向右转": 0.1 } 最终选择: "向左转" # 第二步:Reference 生成概率 Reference(录像带): 输入: 相同的滑雪场景 输出: 原始的动作概率分布 例如: { "向左转": 0.3, "直滑": 0.4, "向右转": 0.3 } # 第三步:计算 KL 散度 KL_divergence = compute_kl( actor_probs={0.7, 0.2, 0.1}, reference_probs={0.3, 0.4, 0.3} ) # 第四步:Reward Model 评分 Reward Model(裁判): 输入: (滑雪场景, 小明的动作) 输出: 具体分数 例如: 8.5分 # 第五步:Critic 预测 Critic(教练): 输入: (滑雪场景, 小明的动作) 输出: 预期的长期价值 例如: 预测后续动作平均可得7.8分 -
更新阶段:
# PPO 更新 def update_actor(): advantage = reward - critic_value # 如果 KL < 阈值: if kl_divergence < max_kl: if advantage > 0: # 好的动作 # 增加该动作的概率 increase_action_probability() else: # 不好的动作 # 减少该动作的概率 decrease_action_probability() # 更新 Critic critic_loss = (reward - critic_value)^2 update_critic(critic_loss) -
一次完整的训练循环场景: “陡峭的雪坡”
- Actor 输出动作概率: [0.7, 0.2, 0.1],选择动作: “左转”
- Reference 输出动作概率: [0.3, 0.4, 0.3]
- KL 散度计算结果: 0.45 (需要<0.5)
- Reward Model 输出,即时分数: 8.5
- Critic 输出,预期价值: 7.8
-
最终更新: 由于 KL<0.5 且 advantage>0(8.5-7.8=0.7),增加"左转"动作的概率,更新 Critic 的预测能力。
-
优势值 = 实际得分 − 教练预测分 优势值 = 实际得分 - 教练预测分 优势值=实际得分−教练预测分。例如:裁判实际打分: 8 8 8分。教练之前预测: 7 7 7分。优势值 = 8 − 7 = 1 8 - 7 = 1 8−7=1分(正值说明超出预期)
奖励模型
1. 数据收集阶段
- 准备工作:设计提示模板,招募专业标注人员,制定详细的评分标准。
- 收集过程:提示示例,“解释什么是机器学习”。
- 模型生成多个回答:
- A: “机器学习是AI的一个分支,可以让计算机自动学习”
- B: “机器学习是一种让计算机从数据中学习的方法。通过分析大量数据,计算机能够识别模式并做出预测”
- C: “机器学习就是让机器变聪明的技术”
人类标注: 评判标准: 准确性、完整性、清晰度,给出排序: B > A > C。记录原因: B更专业且详细,A基本正确但不够深入,C过于简单。
2. 数据处理阶段
- 数据清洗删除矛盾的排序,处理不一致的标注,确保数据质量。
- 转换为训练样本:原始数据:提示P,回答A、B、C,排序B > A > C。
- 转换为配对形式:
- 样本1: (P, B, A) 标签: 1 (B更好)
- 样本2: (P, A, C) 标签: 1 (A更好)
- 样本3: (P, B, C) 标签: 1 (B更好)
3. 模型构建
模型结构
- 基础: 预训练语言模型
- 输入层: 处理(提示,回答)对
- 中间层: 提取特征
- 输出层: 单个分数
保持不变的部分:所有的 Transformer 层、词嵌入层、位置编码、注意力机制(也就是理解语言的所有能力)。
改造部分:仅改变最后的输出层,从"预测下一个词",变成"给出一个评分"。
- 把一个"会写作"的模型,改造成一个"会打分"的模型,但保留它理解语言的所有能力。
- 原始模型:文本 -> Transformer层 -> 语言模型头 -> [词1概率,词2概率,词3概率…]
- Reward Model:文本 -> Transformer层 -> 新全连接层 -> [单个分数]
4. 训练过程
- 初始化阶段:加载预训练模型,初始化新增参数,设置学习率等超参数。
- 训练循环中每个批次,读取批次数据,然后提示-回答对,最后人类排序标签。
- 前向传播:输入提示和两个回答,分别计算两个回答的分数,计算分数差异。
- 损失计算,例如: 回答B得分: 7.5,回答A得分: 5.8,确保分数差符合人类排序。
- 反向传播:计算梯度,更新模型参数。
实际上,Reward Model 最初并不知道该给多少分
- 初始阶段:模型随机给分,可能给好回答3分,可能给差回答7分(完全不准确)。
- 训练过程模型学习是"相对关系":不直接学习"这个回答值6分",而是学习"A回答应该比B回答分数高"。核心目标:让好回答的分数 > 差回答的分数。例如:好回答(A)当前得7分,差回答(B)当前得8分,违反"A应该>B"的规则,需要调整参数使 Score(A) > Score(B)。
参数调整过程
- 计算损失,损失函数公式为: − l o g ( s i g m o i d ( S c o r e A − S c o r e B ) ) -log(sigmoid(Score_A - Score_B)) −log(sigmoid(ScoreA−ScoreB))
- 当 Score_A < Score_B 时,损失值大
- 当 Score_A > Score_B 时,损失值小
- 反向传播
- 计算每个参数对损失的影响
- 沿着减小损失的方向调整参数
- 使 Score_A 变大,Score_B 变小
第一轮:A(好回答): 3分 B(差回答): 7分 损失大 -> 调整参数
第十轮:A(好回答): 5分 B(差回答): 4分 损失减小 -> 方向正确
第五十轮:A(好回答): 8分 B(差回答): 3分 损失很小 -> 符合预期
- 关键点:具体分数(如6分还是7分)不是直接教的,而是通过大量的"比较学习"自然形成的。重要的是分数的相对关系,而不是绝对值。
- reward停止:损失值足够小 (如 < 0.01),连续多轮损失不再明显下降,在验证集上的表现不再提升。
评判模型
1. 初始阶段
- Critic 状态:随机初始化的小网络,完全不会预测,预测值与实际分数差距很大。实际场景:
- Actor: “我要左转”
- Critic: “我觉得可能得3分”(随机预测)
- Reward Model: “实际得8分”
- Critic: “记录下来,原来这种动作能得8分”
2. 学习阶段
- 早期学习:收集大量(动作,实际分数)的数据,不断调整预测模型,预测误差逐渐减小。
- 中期学习:开始掌握一些规律,预测分数更接近实际,可以给出较合理的预测。
- 后期学习:预测更准确稳定,理解哪类动作分数更高,能较好预测动作价值。
3. 应用到 Actor 的过程
- 初期合作:Critic 预测不准、Actor 主要依赖 Reward Model、Critic 在后台默默学习
- 中期合作:Actor: “我有两个选择,左转或直滑”、Critic: “根据经验,左转可能得7分,直滑可能得5分”、Actor: “那我选左转”(参考 Critic 建议)
- 成熟合作:Critic 预测准确度高、Actor 更信任 Critic 的建议、配合更默契
- 完整的训练循环 每轮训练:
- Actor 面临选择
- Critic 提供预测分数
- Actor 参考预测做选择
- Reward Model 给出实际分数
- Critic 对比预测和实际分数
- 更新自己的预测模型
- 下一轮预测更准
示例:
第一轮:Critic 预测"左转"3分,实际得8分,学习调整预测模型。
第十轮:Critic 预测"左转"6分,实际得8分,预测更准。
第五十轮:Critic 预测"左转"7.8分,实际得8分,预测已经很准确。
RLHF与PPO的异同
| 对比项 | 传统 PPO | RLHF |
|---|---|---|
| 核心机制 | 价值估计、策略限制、迭代优化、Actor-Critic 架构 | 价值估计、策略限制、迭代优化、Actor-Critic 架构 |
| Actor | 执行动作的智能体 | 生成文本的模型(Actor Model) |
| Critic | 评估状态价值 | 预测长期价值(Critic Model) |
| Reward | 预定义的奖励函数 | 人工反馈训练的奖励模型(Reward Model) |
| 策略约束参考 | 旧策略(Old Policy)限制更新幅度 | 参考模型(Reference Model)限制偏离 |
| 对比维度 | 传统 PPO | RLHF(基于 PPO 改造) |
|---|---|---|
| 适用场景 | 通用强化学习任务(如游戏、机器人控制) | 大语言模型优化(文本生成、对话系统等) |
| 奖励来源 | 环境提供的即时奖励,每步动作均有明确反馈 | 奖励模型(Reward Model)预测的人类偏好评分,仅对完整序列给出奖励 |
| 状态空间 | 明确的结构化状态(如游戏画面、传感器数据) | 文本语义空间(高维、非结构化) |
| 动作空间 | 有限离散动作(如上下左右) | 超大规模词表(通常 50,000+),动作依赖上下文 |
| 策略约束 | 重要性采样比率约束单步更新幅度 | KL 散度约束(避免偏离参考模型的文本分布) |
| 优化目标 | 最大化环境奖励,简单策略熵正则 | 多目标平衡:人类偏好奖励 + KL 散度 + 值函数损失 |
| 奖励分配 | 无需额外处理,环境直接提供 | 需通过值函数估计中间状态回报(稀疏奖励问题) |
强化学习(RL)
- 生成过程:状态与动作
模型逐词生成文本,每一步都是一个决策点:
- 状态:当前已生成的全部内容,包括初始提示词和已选中的词。
- 动作:从所有可能的下一个词中选择一个。
示例: - 初始状态:
"请解释什么是AI" - 动作1:选择
"AI"→ 新状态:"请解释什么是AI [SEP] AI" - 动作2:选择
"是"→ 新状态:"请解释什么是AI [SEP] AI是"
这个过程持续进行,直到模型生成一个结束符,形成一个完整的回答。
- 决策与奖励机制
在每个状态下,模型的核心任务是:
- 预测:基于当前状态,预测所有候选词的概率分布。
- 选择:根据策略(如概率最高或随机采样)选择一个词。
- 更新:将选中的词添加到序列中,进入下一状态。
奖励的评估发生在整个回答生成完毕之后。一个独立的奖励模型会对生成的完整回答进行打分。
RLHF工作流示例:
- 生成:Actor模型根据提示
"解释AI是什么",生成回答"AI是一种模拟人类智能的技术"。 - 评分:奖励模型接收
(提示, 回答)对,输出一个分数,如8分。 - 优化:该分数将作为强化学习中的奖励信号,用于指导Actor模型的更新。如果实际得分高于Critic模型的预期(优势为正),则增加生成此类回答的概率。
KL散度的应用:确保模型稳定性
- 在RL训练中,为防止Actor模型为追求高奖励而偏离其原始能力,引入KL散度作为约束。
- 作用与时机
- KL散度用于衡量Actor模型与一个固定的参考模型在生成同一词时的概率分布差异。这个参考模型通常是训练前的SFT模型,代表了模型的基础能力。
- 约束时机:在Actor模型每次更新参数、生成新词时,都会计算与参考模型的KL散度,确保其行为不会“跑偏”。
示例:- 提示:
"解释AI" - 参考模型:倾向于生成平实、客观的解释。
- Actor模型:若突然想生成“AI乃是一种神奇的魔法”这类风格迥异的内容,KL散度会急剧增大,触发惩罚机制。
- 提示:
- 工作原理
KL散度作为一个惩罚项被整合到Actor的损失函数中。其工作流程如下: - 对比概率:对于同一个状态(如
"解释AI"),分别获取参考模型和Actor模型对下一个词的概率分布。 - 计算差异:计算两个分布之间的KL散度值。
- 施加惩罚:如果KL散度值过大,意味着Actor的决策与参考模型差异显著,系统会施加一个较大的惩罚,降低这种“出格”行为的总体收益,从而迫使Actor模型回归到更安全、更接近原始能力的生成路径上。
具体判断示例: 在生成 "AI" 之后:
* 参考模型:"是" (80%), "表示" (20%)
* Actor模型:"乃是" (90%), "是" (10%)
两者概率分布差异巨大,KL散度值会很高,系统将对此进行惩罚,引导Actor避免做出如此剧烈的风格转变。
更多推荐

所有评论(0)