news 2026/4/17 10:44:01

大模型修炼秘籍 第十二章:人师指路——RLHF之精髓

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型修炼秘籍 第十二章:人师指路——RLHF之精髓

第十二章:人师指路——RLHF之精髓

人师指路RLHF,人类偏好学真经。

【本章导读】

RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)是对齐训练的核心方法。通过人类的反馈,模型学会什么是"好"的回答,逐步对齐人类价值观。


一、RLHF的整体架构

【三阶段流程】

┌─────────────────────────────────────────────────────────────┐ │ RLHF三阶段流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 阶段一:监督微调(SFT) │ │ └─ 用高质量指令数据微调预训练模型 │ │ │ │ 阶段二:奖励模型训练(RM) │ │ └─ 用人类偏好数据训练奖励模型 │ │ │ │ 阶段三:强化学习优化(PPO) │ │ └─ 用奖励模型指导策略优化 │ │ │ └─────────────────────────────────────────────────────────────┘

二、阶段一:监督微调(SFT)

【SFT回顾】

在RLHF之前,首先需要通过SFT让模型学会基本的指令遵循能力。这部分在第三卷已详细讲解。

【SFT在RLHF中的作用】

  • 提供一个良好的初始化策略
  • 让模型能够生成合理的回答
  • 为后续的偏好学习打下基础

三、阶段二:奖励模型训练

【奖励模型心法】

奖励模型(Reward Model, RM)是人类偏好的代言人。它学习判断哪个回答更好,为强化学习提供指导信号。

【偏好数据收集】

提示: 请解释什么是机器学习 回答A: 机器学习是AI的一个分支,让计算机从数据中学习... 回答B: 机器学习就是让机器学习东西... 人类标注: A比B好

【数据格式】

{ "prompt": "请解释什么是机器学习", "chosen": "机器学习是AI的一个分支...", "rejected": "机器学习就是让机器学习东西..." }

【奖励模型训练】

将两个回答分别输入模型,计算奖励分数:

奖励模型 ↓ 输入: 提示 + 回答 ↓ 输出: 奖励分数 r(x, y) 训练目标: r(x, y_chosen) > r(x, y_rejected)

【损失函数】

L=−log⁡σ(r(x,ychosen)−r(x,yrejected))L = -\log\sigma(r(x, y_{chosen}) - r(x, y_{rejected}))L=logσ(r(x,ychosen)r(x,yrejected))

【代码示例】

importtorchimporttorch.nnasnnclassRewardModel(nn.Module):def__init__(self,base_model):super().__init__()self.base_model=base_model self.reward_head=nn.Linear(hidden_size,1)defforward(self,input_ids,attention_mask):# 获取模型输出outputs=self.base_model(input_ids,attention_mask=attention_mask)# 取最后一个token的隐藏状态last_hidden=outputs.last_hidden_state[:,-1,:]# 计算奖励分数reward=self.reward_head(last_hidden)returnrewarddefcompute_loss(reward_model,chosen_ids,rejected_ids,attention_mask):# 计算chosen和rejected的奖励reward_chosen=reward_model(chosen_ids,attention_mask)reward_rejected=reward_model(rejected_ids,attention_mask)# Bradley-Terry模型loss=-torch.log(torch.sigmoid(reward_chosen-reward_rejected))returnloss.mean()

四、阶段三:PPO强化学习

【PPO心法】

PPO(Proximal Policy Optimization,近端策略优化)是强化学习的核心算法。它让模型在奖励模型的指导下,逐步优化生成策略。

【PPO原理】

PPO的核心思想:在优化策略时,不要偏离太远,保持稳定。

原始策略: π_old 新策略: π_new 约束: π_new 不要偏离 π_old 太多

【PPO目标函数】

LCLIP=E[min⁡(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]L^{CLIP} = \mathbb{E}[\min(r_t(\theta)\hat{A}_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t)]LCLIP=E[min(rt(θ)A^t,clip(rt(θ),1ϵ,1+ϵ)A^t)]

其中:

  • rt(θ)=πθ(at∣st)πold(at∣st)r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{old}(a_t|s_t)}rt(θ)=πold(atst)πθ(atst):策略比率
  • A^t\hat{A}_tA^t:优势函数估计
  • ϵ\epsilonϵ:裁剪参数

【KL散度惩罚】

为了防止策略偏离太远,加入KL散度惩罚:

Ltotal=LCLIP−β⋅KL(πθ∣∣πref)L_{total} = L^{CLIP} - \beta \cdot KL(\pi_\theta || \pi_{ref})Ltotal=LCLIPβKL(πθ∣∣πref)

其中πref\pi_{ref}πref是参考策略(SFT模型)。

【PPO训练流程】

┌─────────────────────────────────────────────────────────────┐ │ PPO训练流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 用当前策略生成回答 │ │ prompt → policy → response │ │ │ │ 2. 用奖励模型计算奖励 │ │ (prompt, response) → reward_model → reward │ │ │ │ 3. 计算优势函数 │ │ A = reward - baseline │ │ │ │ 4. 更新策略(PPO目标) │ │ 最大化 L^{CLIP} - β·KL │ │ │ │ 5. 重复以上步骤 │ │ │ └─────────────────────────────────────────────────────────────┘

【代码框架】

fromtransformersimportAutoModelForCausalLMimporttorch.optimasoptimclassPPOTrainer:def__init__(self,policy_model,reward_model,ref_model,config):self.policy=policy_model self.reward_model=reward_model self.ref_model=ref_model# 参考模型(冻结)self.optimizer=optim.Adam(self.policy.parameters(),lr=config.lr)self.kl_coef=config.kl_coef self.clip_range=config.clip_rangedefcompute_reward(self,prompts,responses):"""计算奖励"""inputs=self.reward_model.encode(prompts,responses)withtorch.no_grad():rewards=self.reward_model(**inputs)returnrewardsdefcompute_kl(self,prompts,responses):"""计算KL散度"""policy_logprobs=self.policy.log_prob(prompts,responses)ref_logprobs=self.ref_model.log_prob(prompts,responses)kl=(policy_logprobs-ref_logprobs).mean()returnkldeftrain_step(self,prompts):# 生成回答responses=self.policy.generate(prompts)# 计算奖励rewards=self.compute_reward(prompts,responses)# 计算KL散度kl=self.compute_kl(prompts,responses)# 计算PPO损失# ... (简化)ppo_loss=-rewards.mean()+self.kl_coef*kl# 更新self.optimizer.zero_grad()ppo_loss.backward()self.optimizer.step()returnppo_loss.item()

五、RLHF的实践技巧

【技巧一:奖励模型规模】

奖励模型通常比策略模型小:

策略模型奖励模型
7B350M - 1B
70B7B
175B6B

【技巧二:KL系数调整】

KL系数β\betaβ需要动态调整:

  • β\betaβ太大:学习太慢
  • β\betaβ太小:策略可能崩溃

【技巧三:奖励塑形】

可以在奖励中加入额外约束:

Rtotal=RRM+λ1Rsafety+λ2RhelpfulnessR_{total} = R_{RM} + \lambda_1 R_{safety} + \lambda_2 R_{helpfulness}Rtotal=RRM+λ1Rsafety+λ2Rhelpfulness

【技巧四:迭代式RLHF】

第一轮: 收集偏好 → 训练RM → PPO优化 ↓ 第二轮: 用新模型收集更多偏好 → 更新RM → 再次PPO ↓ ...持续迭代

六、RLHF的局限性

【局限一:人类偏好不一致】

不同标注员可能有不同偏好,导致奖励模型学习到噪声。

【局限二:奖励模型过拟合】

奖励模型可能在训练数据上过拟合,泛化能力不足。

【局限三:奖励欺骗】

模型可能学会生成"讨好"奖励模型但不真正有用的回答。

【局限四:计算成本高】

PPO训练需要大量计算资源。


七、本章心法总结

【口诀】

奖励模型学偏好,PPO优化策略调。
KL散度防偏离,迭代训练效果高。

【要点回顾】

要点说明
三阶段SFT → RM训练 → PPO优化
奖励模型学习人类偏好,输出奖励分数
PPO近端策略优化,稳定训练
KL惩罚防止策略偏离太远
实践技巧奖励模型规模、KL系数调整、迭代训练

【下一章预告】

下一章,我们将学习DPO(直接偏好优化),一种更简单、更高效的对齐方法,跳过奖励模型,直接从偏好数据学习。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 10:43:59

企业级开发量身定制的 AI Coding 标准工作流(SOP)

这是一套专为企业级开发量身定制的 AI Coding 标准工作流(SOP)。 在个人开发中,AI 可以是“全自动写手”;但在企业级开发中,AI 必须被定位为 “高级架构师 + 资深研发专家”。核心原则是:人控架构与业务,机控实现与细节。 以下是分为 7 个阶段的从 0 到 1 再到 100 的标…

作者头像 李华
网站建设 2026/4/17 10:42:49

Youtu-Parsing自动化运维:监控、日志与弹性伸缩配置

Youtu-Parsing自动化运维:监控、日志与弹性伸缩配置 最近在帮一个团队部署他们的Youtu-Parsing服务,他们最头疼的不是模型效果好不好,而是服务上线后怎么管。一到晚上流量高峰,服务就卡顿,出问题了也不知道哪里坏了&a…

作者头像 李华
网站建设 2026/4/17 10:39:48

Android端ModbusTcp主站开发实战:从配置到数据读写

1. ModbusTcp协议基础与Android开发准备 工业物联网领域最常用的通信协议之一就是Modbus,而ModbusTcp则是基于TCP/IP网络的变种。相比传统的串口版本,ModbusTcp去掉了校验字段,直接使用TCP协议保证数据可靠性。在Android设备上实现主站功能时…

作者头像 李华
网站建设 2026/4/17 10:38:50

如何免费获取海量音乐资源:洛雪音乐助手跨平台播放器终极指南

如何免费获取海量音乐资源:洛雪音乐助手跨平台播放器终极指南 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop 你是否厌倦了在各个音乐平台之间切换,只为找…

作者头像 李华
网站建设 2026/4/17 10:37:26

Poppler for Windows终极指南:免费开源PDF处理工具快速上手

Poppler for Windows终极指南:免费开源PDF处理工具快速上手 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows平台寻找简单…

作者头像 李华
网站建设 2026/4/17 10:35:35

天龙八部GM工具:单机游戏数据管理的终极解决方案

天龙八部GM工具:单机游戏数据管理的终极解决方案 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 还在为单机版天龙八部游戏的数据管理而烦恼吗?想要轻松掌控游戏世界的每一个细…

作者头像 李华