强化学习与指令调优

本章介绍强化学习在大模型对齐中的应用

指令微调 (Instruction Fine-Tuning, SFT)

SFT 的目标是把“会续写的预训练模型”变成“能遵循指令的助手模型”。它通常是对齐流水线的第一步,也是后续 RLHF/GRPO 等方法的基座(reference / 初始化)。

1) 问题形式:把任务统一成条件生成

对每条指令数据,我们构造输入 (x)(system + user + history)与目标输出 (y)(assistant answer),用 teacher forcing 训练:

[ \mathcal{L}{\text{SFT}}(\theta) = -\sum{t=1}^{|y|} \log p_\theta(y_t \mid x, y_{<t}) ]

工程上关键不是公式,而是数据协议

  • system prompt 里约束角色与风格

  • user prompt 表达任务

  • assistant 输出要尽量结构化、可验证(尤其在高风险任务)

2) 数据:决定“助手长什么样”

常见数据类型:

  • 指令-回答(single-turn)

  • 多轮对话(multi-turn)

  • 结构化输出(JSON/表格/代码)与格式约束

经验法则:

  • 数据质量 > 数据量(对齐数据噪声会直接变成模型行为)

  • 覆盖“拒答/澄清/引用证据”这些行为,否则后续 RL 更难补齐

3) 工程配方要点(最常见的坑)

  • 过拟合与遗忘:只用指令数据会让模型遗忘预训练能力;实践中会混入部分预训练数据,或控制学习率与训练步数。

  • 长度与截断:对话历史过长会被截断,导致训练信号不一致;需要明确 truncation 策略(优先保留 system 与最近轮次)。

  • 损失掩码:通常只对 assistant 片段计算 loss,避免模型学会“复读用户输入”。

  • 评测:SFT 的离线评测建议包含结构化校验(格式、可执行性、引用),而不是只看生成相似度。

强化学习策略

PPO 原理

在对齐里,PPO(Proximal Policy Optimization)的核心是:在不让策略更新“跳太远”的前提下,使用偏好/奖励信号提升输出质量,并用 KL 约束保持与参考模型(通常是 SFT 模型)一致,从而避免发散与灾难性遗忘。

1) 基本对象:policy / ref / reward

  • (\pi_\theta):当前策略模型(要优化)

  • (\pi_{\text{ref}}):参考模型(通常冻结的 SFT 模型)

  • (r(x,y)):对给定输入 (x) 与输出 (y) 的奖励(来自 RM/规则/评测器)

2) 目标:带 KL 正则的策略优化

对齐里常用的形式是最大化期望奖励,同时惩罚偏离参考策略:

[ \max_\theta \ \mathbb{E}{y \sim \pi\theta(\cdot \mid x)}\Big[r(x,y)\Big] - \beta , \mathbb{E}\big[D_{\text{KL}}(\pi_\theta ,|, \pi_{\text{ref}})\big] ]

其中 (\beta) 控制“对齐强度”(越大越保守,越小越激进)。

3) PPO 的 clipped objective:限制每步更新幅度

定义重要性采样比(token 级或序列级):

[ \rho_t(\theta)=\exp\big(\log \pi_\theta(a_t\mid s_t)-\log \pi_{\theta_{\text{old}}}(a_t\mid s_t)\big) ]

PPO 的核心是对 policy gradient 项做裁剪:

[ \mathcal{L}_{\text{PPO}}(\theta) = -\mathbb{E}\Big[\min\big(\rho_t(\theta)\hat{A}_t,\ \text{clip}(\rho_t(\theta), 1-\epsilon,1+\epsilon)\hat{A}_t\big)\Big] ]

直觉:如果新策略相对旧策略变化太大,就把收益项裁掉,避免不稳定的大步更新。

4) 优势函数(Advantage):奖励如何分配到 token?

LLM 对齐里常见做法是“序列级奖励 → token 级广播”,即对一个回答得到一个总奖励 (r),再估计优势 (\hat{A}) 并分配到每个 token。

是否引入 value baseline(critic)取决于方法:

  • PPO 通常训练 value head 来降低方差

  • GRPO 用组内相对优势替代 value baseline(见子章节)

5) 工程实现要点(决定成败)

  • KL 的估计与控制:KL 爆掉通常意味着策略发散;需要 KL target、动态调 (\beta)、以及稳定的 KL 估计器。

  • reward hacking:模型会钻奖励函数漏洞;必须把 reward 拆成可验证子项,并做对抗样本回归。

  • 采样策略:temperature/top-p 会影响探索;太贪婪会学不到改进,太随机会引入噪声与不稳定。

  • 离线/在线一致性:离线 reward 指标提升不代表线上可用,需要把“可控失败/拒答/引用”纳入评测闭环。

GRPO 原理

详见子章节:GRPO(Grouped PPO)理解

Reward 模型与评价指标

对齐的本质是:你用什么“奖励/评价”定义“好答案”,模型就会朝那个方向优化。因此 reward 设计与评测体系往往比算法名词更关键。

1) Reward 的来源

常见三类:

  • Reward Model(RM):人类偏好数据(pairwise/排序)训练出的评分模型

  • 规则/可执行校验:格式校验、单元测试、执行结果(代码/SQL/工具调用)

  • LLM-as-a-Judge:用更强模型做评审(需要防止偏差与可被攻击)

工程建议:优先使用“可验证 reward”(规则/执行反馈),RM/LLM judge 用来覆盖不可完全形式化的质量维度(有用性、表达等)。

2) 偏好数据与 RM 训练要点

  • 数据形式:((x, y^+, y^-)) 或排序列表

  • 训练目标:让 RM 对偏好样本打更高分

  • 风险:分布漂移、标注者偏差、提示注入与对抗样本

3) 指标体系:离线与在线要区分

离线常见:

  • win-rate / preference rate(对比评测)

  • 任务成功率(可执行任务)

  • groundedness(是否引用/是否可追溯到证据)

在线常见:

  • 用户满意度 proxy(但要防“讨好式对齐”)

  • 失败率(拒答率、工具调用失败、格式错误)

  • 安全事件率(越权、敏感输出)

4) 一个实用原则:把“质量”拆成可审计子项

例如把“好答案”拆成:

  • 是否遵循指令(format / constraints)

  • 是否引用证据(source / region / quote)

  • 是否可执行/可验证(tests / validators)

  • 是否安全(policy)

这样你的 reward 才不容易被 hack,评测也更可复现。

安全性与偏差控制

对齐不是“把模型变乖”,而是把模型行为约束到可控、安全、可审计的范围内。安全性与偏差控制需要同时发生在:数据、训练目标、推理策略、以及系统权限层。

1) 安全对齐的基本策略

  • 数据层:加入拒答/澄清/安全替代方案的高质量示例(SFT + 偏好数据)

  • 目标层:把安全约束显式纳入 reward(惩罚越权、惩罚无证据断言)

  • 推理层:模板与 guardrail(例如必须引用、必须结构化、必须走工具)

  • 系统层:权限与沙箱(能调用哪些工具、能访问哪些数据、关键动作二次确认)

2) 偏差与公平性:不要只靠“过滤数据”

偏差来源包括:

  • 训练语料的历史偏差

  • 偏好标注者的偏好与文化差异

  • 评测集覆盖不足(忽略长尾用户)

工程上可做的事情:

  • 对关键人群/场景做分桶评测(slice evaluation)

  • 监控线上输出分布漂移(例如拒答率、敏感触发率)

  • 建立“偏差事故”的回归集与持续评测

3) 安全上线清单(推荐最小集合)

  • 红线策略:明确哪些输出必须拒答/转人工

  • 可审计日志:请求、上下文、工具调用、最终输出与引用证据可回放

  • 灰度与回滚:对齐策略变更必须可控扩散

  • 对抗测试:提示注入、越权、数据泄漏、幻觉诱导


本章小结

  • SFT 定义“助手形态”,RL 对齐定义“偏好与约束”,系统设计保证“可控与可审计”。

  • PPO 的关键是“限制更新幅度 + KL 约束”;GRPO 用组内相对优势降低对 value baseline 的依赖。

  • Reward 与评测体系决定上限:优先可验证 reward,质量拆成可审计子项,建立线上闭环与回归集。