拓冰建站拓冰建站
首页 / 资讯中心 / 正文

AI之人类反馈强化学习(RLHF)

人类反馈强化学习Reinforcement Learning from Human Feedback, RLHF是一种通过人类偏好信号迭代优化大语言模型LLM输出特征的技术框架。其核心意图在于解决大语言模型在预训练与有监督微调阶段产生的“生成能力强但对齐度差”的问题将主观、模糊的人类偏好转化为可量化的标量梯度驱动模型在开放域生成任务中实现安全、有用且诚实的输出。解决了传统有监督微调SFT仅能模仿固定文本模式、缺乏主观价值判断逻辑且在开放域生成中极易触发模式崩溃或输出有害内容的问题。通过“SFT筑基 $ \rightarrow $ 偏好建模RM $ \rightarrow $ 强化学习PPO闭环对齐”的三阶段训练范式利用四模型联动架构将离散的生成动作映射为带约束的偏好回报。引入动态 KL 散度约束与比率剪切Clip机制在最大化偏好奖励的同时设定语言分布基准锚点规避奖励黑客Reward Hacking现象平衡模型对齐度与泛化生成能力。架构解析RLHF 系统架构通过四个核心语言模型的协同运行完成偏好信号的捕获、评估、状态估计与策略更新。层级职责与设计说明输入与状态采样层提供连续的 Prompt 指令流 $ x $构成强化学习环境的状态起点。策略与参考控制层策略模型Actor Model, $ \pi_\theta $待优化的主网络负责根据当前状态生成动作Token并接收梯度更新。参考模型Reference Model, $ \pi_{\text{ref}} $冻结参数的初始 SFT 模型作为概率分布的基准锚点。偏好评估与价值估计层奖励模型Reward Model, $ r_\psi $冻结参数的评估模型对完整的生成序列输出全局偏好标量得分。价值模型Critic Model, $ V_\phi $可更新的评估网络预测当前状态下的累积回报降低策略梯度的估计方差。强化学习优化执行层解耦计算 Token 级别的重构奖励、基于 GAE 的优势估计以及带 Clip 的 PPO 梯度反向传播。四种模型说明一、策略模型Actor Model$ \pi_\theta $Actor 直译为“演员 / 动作执行者”。在经典强化学习的 Actor-Critic 框架中Actor 负责根据当前的环境状态State做出动作Action。在 LLM 场景中“状态”是 Prompt 已生成的文本“动作”就是预测下一个 Token。核心作用与用途核心角色待训练的主模型即最终我们要交付给用户使用的 AI 模型如 ChatGPT 的主干模型。主要职责生成文本接收 Prompt 输入自回归地采样生成回答序列yyy。接收梯度更新在强化学习训练过程中根据奖励信号和优势估计Advantage通过 PPO 算法更新自身参数θ\thetaθ使其未来生成高分回答的概率更高。二、参考模型Reference Model$ \pi_{\text{ref}} $Reference 直译为“参考 / 参照物”。它充当 Actor 训练过程中的语言分布锚点Anchor。核心作用与用途核心角色冻结的 SFT有监督微调模型参数在整个 RL 阶段完全不更新。主要职责计算 KL 散度约束对于 Actor 生成的同一个序列Ref 模型同时计算其 Token 级别的对数概率$ \log \pi_{\text{ref}} $。防止策略漂移与模式崩溃Reward Hacking如果只追求高奖励分Actor 可能会找到 RM 的漏洞如反复输出特定冗余高分词汇、投机取巧。Ref 模型通过衡量 Actor 与 Ref 之间的 KL 散度惩罚偏离过远的行为确保模型在学会“讨好人类”的同时保留基本的语言表达能力和通用知识。三、奖励模型Reward Model / RM$ r_\psi $Reward 意为“奖励 / 偏好打分器”。在强化学习中环境需要给智能体Agent反馈一个标量 Reward。由于“回答质量好坏”无法用简单的硬编码规则衡量因此专门训练了一个 AI 模型来模拟人类的偏好打分。核心作用与用途核心角色人类偏好的量化裁判打分器。主要职责评价文本质量输入“Prompt 完整的生成回答”输出一个标量实数得分$ r_\psi(x, y) $。引导对齐方向RM 在 RLHF 阶段 2 已通过人类排序数据Pairwise Loss训练完成参数在 PPO 阶段冻结不更新。它作为固定的外部环境反馈指示回答是否符合人类的“有用、无害、诚实”标准。四、价值模型Critic Model$ V_\phi $Critic 直译为“评论家 / 评估者”。在 Actor-Critic 架构中Actor 负责“演”Critic 负责“评”。不同于 RM 给出的终态结果得分Critic 评估的是过程中的中间状态价值。核心作用与用途核心角色动态更新的状态价值预测网络。主要职责预测累积回报Value Estimation输入当前状态Prompt 已生成的局部 Token预测从当前位置开始到生成结束能够获得的预期累积回报$ V_t $。计算优势函数Advantage Function将实际获得的奖励与预测的基线值相减$ A_t R_t - V_t $从而计算出当前动作是“超出预期”还是“低于预期”。降低策略梯度的方差在强化学习中直接用全局 Reward 引导更新 会导致梯度的波动幅度极其巨大 方差极大训练极不稳定。Critic 的存在相当于建立了一个“期望基线”帮助 Actor 更稳定地学习。Critic 的参数$ \phi $会根据实际表现误差在训练中动态更新。系统运行逻辑系统运行遵循“指令输入 $ \rightarrow $ 多模型推理评估 $ \rightarrow $ 奖励重构与优势估计 $ \rightarrow $ 闭环更新”的严格时序逻辑。执行链详细步骤指令接收与生成环境向 Actor 输入指令 $ x $Actor 按自回归方式采样生成完整回答 $ y $。多模型联合前向传播序列 $ (x, y) $ 并行送入 Ref 模型计算对数概率 $ \log \pi_{\text{ref}}(y_t \vert{} x, y_{t}) $。RM 模型计算终止步的序列级标量奖励 $ r_\psi(x, y) $。Critic 模型计算各个时间步 $ t $ 的状态价值估计 $ V_t $。奖励信号重构根据 Actor 与 Ref 的概率比值计算逐 Token 的 KL 散度惩罚将 RM 的全局标量奖励叠加至末端 Token推导出各步的即时奖励 $ r_t $。优势估计与梯度更新结合 $ V_t $ 与 $ r_t $ 构建广义优势估计GAE利用剪切目标函数更新 Actor 参数 $ \theta $同时最小化价值预测误差更新 Critic 参数 $ \phi $。代码实现样例偏好奖励模型 (RM) 损失函数奖励模型通过学习人类对不同候选回答的排序偏好将非结构化文本评价转化为可计算的实数标量。importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassPairwiseRewardLoss(nn.Module): 基于 Bradley-Terry 模型的 Pairwise Ranking Loss 实现 针对同一 Prompt 下的高质量回答 (winning) 与低质量回答 (losing) 计算交叉熵损失 def__init__(self):super().__init__()defforward(self,rewards_chosen:torch.Tensor,rewards_rejected:torch.Tensor)-torch.Tensor: :param rewards_chosen: 优胜回答的标量得分Shape: (batch_size,) :param rewards_rejected: 劣势回答的标量得分Shape: (batch_size,) # 防御性校验断言输入张量形状一致ifrewards_chosen.shape!rewards_rejected.shape:raiseValueError(fShape mismatch: chosen{rewards_chosen.shape}vs rejected{rewards_rejected.shape})# 计算得分差值并应用 Sigmoid 交叉熵损失# L_RM -E [ log(sigmoid(r_w - r_l)) ]logitsrewards_chosen-rewards_rejected loss-F.logsigmoid(logits).mean()returnloss逻辑解析该阶段作用于 SFT 之后为 PPO 阶段提供稳定、无偏的打分裁判。输入校验部分直接拒绝尺寸不匹配的 Batch 维度确保张量计算的安全性。F.logsigmoid(rewards_chosen - rewards_rejected)在数值上等价于 $ \log \sigma(r_w - r_l) $相比显式调用torch.sigmoid再取log能有效防止数值下溢Underflow。采用 Pairwise 相对排序而非直接回归绝对打分避开了不同标注员在绝对打分标准上的主观偏差使梯度更新更加稳定。Token 级奖励重构与 KL 散度惩罚在强化学习采样阶段通过在即时 Reward 中嵌入针对策略模型偏离度的 KL 散度约束防止模型走向模式崩溃。$ \mathcal{L}{\text{RM}}(\psi) -\mathbb{E}{(x, y_w, y_l) \sim D} \left[ \log \sigma \left( r_\psi(x, y_w) - r_\psi(x, y_l) \right) \right] $$ r_t \begin{cases} -\beta D_{\text{KL}}(\pi_\theta \parallel \pi_{\text{ref}})t t T \ r\psi(x, y) - \beta D_{\text{KL}}(\pi_\theta \parallel \pi_{\text{ref}})_t t T \end{cases} $importtorchdefcompute_token_level_rewards(log_probs_actor:torch.Tensor,log_probs_ref:torch.Tensor,reward_score:torch.Tensor,kl_coef:float0.02,pad_mask:torch.TensorNone)-torch.Tensor: 计算逐 Token 的即时奖励并在末端 Token 叠加 RM 标量得分 :param log_probs_actor: Actor 生成的对数概率, Shape: (batch_size, seq_len) :param log_probs_ref: Ref 模型对相同序列的对数概率, Shape: (batch_size, seq_len) :param reward_score: RM 模型对完整序列的评估得分, Shape: (batch_size,) :param kl_coef: KL 散度惩罚系数 (beta) :param pad_mask: Mask 矩阵1 表示有效 Token0 表示 Padding # 1. 计算 Token 级别的近端 KL 散度近似值# D_KL(pi_theta || pi_ref)_t log(pi_theta) - log(pi_ref)kl_divergencelog_probs_actor-log_probs_ref# 2. 计算纯 KL 惩罚项: -beta * D_KLkl_penalty-kl_coef*kl_divergence rewardskl_penalty.clone()# 3. 寻找序列最后一个有效 Token 的索引叠加 RM 得分batch_size,seq_lenlog_probs_actor.shapeifpad_maskisnotNone:# 获取每个序列最后一个有效 Token 的位置last_non_pad_indicespad_mask.sum(dim-1).long()-1else:last_non_pad_indicestorch.full((batch_size,),seq_len-1,devicelog_probs_actor.device,dtypetorch.long)# 4. 在末端叠加环境终态奖励forbinrange(batch_size):last_idxlast_non_pad_indices[b]rewards[b,last_idx]reward_score[b]# 5. 清理 Padding 区域的异常数值ifpad_maskisnotNone:rewardsrewards*pad_maskreturnrewards逻辑解析连接 Actor/Ref/RM 模型预测结果与后端的 GAE 优势估计是防止 Reward Hacking 的核心防线。利用对数概率差值log_probs_actor - log_probs_ref替代准确的积分 KL 散度属于极高效的逐样本点估计方法。通过pad_mask.sum(dim-1).long() - 1精确定位动态 Variable-length 序列的实际结尾避免将 RM 奖励错误叠加在 Padding 位置。将稀疏的序列级奖励 $ r_\psi(x, y) $ 拆分为密集Dense的 Token 级即时信号大幅平滑了强化学习的credit assignment贡献度归因难度。PPO 策略截断损失计算 (Actor Loss)基于新旧策略概率比率进行 Clip 截断控制单次梯度更新的步伐步长。$ \mathcal{L}_{\text{CLIP}}(\theta) \hat{\mathbb{E}}_t \left[ \min(r_t(\theta)\hat{A}_t, \text{clip}(r_t(\theta), 1-\epsilon, 1\epsilon)\hat{A}_t) \right] $importtorchdefcompute_ppo_actor_loss(log_probs_current:torch.Tensor,log_probs_old:torch.Tensor,advantages:torch.Tensor,clip_eps:float0.2,mask:torch.TensorNone)-torch.Tensor: 计算 PPO 带 Clip 的 Actor 损失函数 :param log_probs_current: 当前更新步骤策略模型的 log_prob, Shape: (batch_size, seq_len) :param log_probs_old: 采样阶段旧策略模型的 log_prob, Shape: (batch_size, seq_len) :param advantages: GAE 计算出的优势估计 A_t, Shape: (batch_size, seq_len) :param clip_eps: 策略裁剪超参数 epsilon :param mask: Mask 矩阵排除 Padding Token # 1. 计算概率比率 ratio pi_theta(a|s) / pi_theta_old(a|s)# 利用 exp(log_pi - log_pi_old) 避免数值下溢ratiotorch.exp(log_probs_current-log_probs_old)# 2. 未裁剪的目标函数surr1ratio*advantages# 3. 裁剪后的目标函数ratio_clippedtorch.clamp(ratio,1.0-clip_eps,1.0clip_eps)surr2ratio_clipped*advantages# 4. 取两者的极小值悲观估计并加负号转化为最小化目标policy_loss-torch.min(surr1,surr2)# 5. 应用 Mask 并计算全局均值ifmaskisnotNone:policy_loss(policy_loss*mask).sum()/mask.sum().clamp(min1.0)else:policy_losspolicy_loss.mean()returnpolicy_loss逻辑解析实现强化学习梯度的反向传播直接更新 Actor 模型参数 $ \theta $。通过torch.exp(log_probs_current - log_probs_old)安全求解概率比率 $ r_t(\theta) $。torch.min(surr1, surr2)实现了 PPO 的“悲观界”思想Pessimistic Bound当优势为正且策略比率过高时强制截断梯度避免单次梯度更新破坏已习得的对齐能力。使用固定窗口 $ \epsilon $ 截断而非计算代价高昂的二次 Hessians 矩阵 Hessian-vector 隐式优化如 TRPO极大地降低了在大语言模型规模下的计算复杂度。总结RLHF 成功构建了“人类意图偏好 $ \rightarrow $ 标量评估 $ \rightarrow $ 概率策略演进”的工程闭环在大语言模型解决模式崩溃与价值观安全对齐层面起到了不可替代的作用。工程洞见防范奖励黑客Reward Hacking的复合防御策略单纯依赖固定超参数 $ \beta $ 的 KL 惩罚很难在训练后期抵御奖励模型的漏洞攻击例如生成极长冗余文本刷高分。生产环境中可采用动态 KL 系数控制器根据当前 Batch 的平均 KL 散度偏离程度自适应放大或缩小 $ \beta $或在 RM 输入端增加对抗性数据混洗。多模型显存解耦与流水线并行RLHF PPO 阶段需要同时维护 Actor、Ref、RM、Critic 四个模型显存开销极大。推荐采用分布式拆分策略Actor 和 Critic 执行频繁的梯度更新并驻留于训练 GPU而 Ref 与 RM 模型仅做前向 Inference可部署在独立的推理节点上通过高性能 RPC/NCCL 框架传输概率与标量值。优势函数归一化Advantage Normalization在计算 PPO 损失之前务必在 Mini-batch 维度上对优势估计 $ \hat{A}_t $ 执行 Zero-mean 及 Unit-variance 的归一化处理。该步骤能极大平滑不同 Prompt 难度差异带来的奖励震荡提高梯度更新的数值稳定性。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门