3. 强化学习基础

在深入 PPO 与 RLHF 的算法细节之前,必须先夯实强化学习的理论基石。大语言模型的“对齐”本质上是一个序贯决策问题:模型根据当前的上下文(状态)生成下一个 (动作),随后将新生成的 拼接到上下文中形成新的状态。这一过程天然符合马尔可夫决策过程(MDP)的建模框架。本章将系统梳理 MDP 的五元组定义、策略与奖励的设计逻辑、价值函数的估计方法,以及策略梯度定理的推导直觉。这些概念不仅是理解 PPO 截断目标函数的前提,更是后续设计 RLHF 奖励模型与 KL 散度约束的理论依据。

强化学习核心概念关系与优化路径 MDP 五元组 (S, A, P, R, γ) 状态 S: 序列 动作 A:下一个 转移 P:确定性拼接 策略 π(a|s) LLM = 策略网络 输入:Prompt + 已生成 Tokens 输出:词表概率分布 采样决定动作 奖励 R(s,a) 级:KL 惩罚 序列级:RM 模型打分 折扣因子 γ ∈ [0,1] 稀疏 vs 稠密奖励 价值函数 V(s):状态期望回报 Q(s,a):动作期望回报 A(s,a)=Q-V:优势函数 策略梯度 ∇J(θ) = E[∇logπ·A] PPO 截断目标 重要性采样 + KL 约束 优化目标:最大化期望累积折扣奖励

上图展示了强化学习各核心概念之间的逻辑关系:MDP 定义了问题框架,策略网络(即 LLM)负责产生动作,奖励信号提供学习反馈,价值函数用于评估当前状态或动作的长期收益,而策略梯度算法则利用这些信号更新策略参数。在 RLHF 场景中,我们通常使用 PPO 算法,其本质是一种基于策略梯度的 Actor-Critic 方法,其中 Actor 是生成模型,Critic 是价值网络。

3.1 马尔可夫决策过程:LLM 生成的形式化框架

马尔可夫决策过程(Markov Decision Process, MDP)是强化学习的数学基础。一个 MDP 由五元组 (S, A, P, R, γ) 定义。在 LLM 对齐场景中,这些元素有非常具体的对应关系:状态空间 S 是所有可能的 序列(包括 Prompt 和已生成的部分);动作空间 A 是词表 V 中的所有 ;状态转移概率 P(s'|s,a) 是确定性的——给定当前序列和选择的 ,下一个状态就是拼接后的新序列;奖励函数 R(s,a) 需要精心设计,通常由奖励模型(Reward Model)和 KL 散度惩罚项组成;折扣因子 γ 通常设为 1(因为序列长度有限,且我们不希望过度折扣远期 的影响)。

MDP 的核心假设是马尔可夫性质:当前状态包含了决定未来所需的所有历史信息。对于 LLM 而言,这意味着模型只需要关注当前的 序列,而不需要追溯更早的 Prompt 细节——因为所有历史信息都已编码在上下文中。这一性质使得我们可以将文本生成视为一个逐 的决策过程,从而使用强化学习算法进行优化。

关键理解: 在 RLHF 中,我们并不显式建模状态转移概率 P。因为 LLM 的生成过程是自回归的,给定当前序列和下一个 ,下一个状态是唯一确定的。这大大简化了问题,使我们能够专注于策略优化和奖励设计。

3.2 策略与奖励:驱动模型行为的两个杠杆

策略 π(a|s) 定义了在状态 s 下选择动作 a 的概率。在 LLM 中,策略就是语言模型本身——它接收当前的 序列作为输入,输出词表上每个 的概率分布。在 RLHF 训练中,我们通常使用一个初始的 SFT(监督微调)模型作为策略的初始化,然后通过强化学习不断调整其参数,使得生成序列的期望奖励最大化。

奖励函数的设计是 RLHF 中最关键也最困难的部分。一个典型的奖励函数由两部分组成:

R(s, a) = R_RM(s, a) - β * KL(π_θ(·|s) || π_ref(·|s))

其中 R_RM 是奖励模型对当前状态-动作对的打分,β 是 KL 惩罚系数,π_ref 是参考策略(通常是 SFT 模型)。KL 散度项的作用是防止策略偏离参考模型太远,从而保持生成文本的流畅性和多样性。奖励模型通常基于人类偏好数据训练,能够对完整序列进行整体打分,但为了在 级别提供奖励信号,我们通常将序列级奖励分配到每个 上,或者使用密集奖励设计。

奖励类型 定义 LLM 对齐中的应用 优缺点
稀疏奖励 仅在序列结束时给出奖励 整体回答质量评分 简单但学习效率低,难以定位问题
密集奖励 每个时间步都给出奖励 级 KL 惩罚 + 过程奖励 学习信号丰富,但可能引入噪声
基于偏好的奖励 由奖励模型从人类对比中学习 RLHF 中的 RM 打分 能捕捉复杂人类偏好,但训练成本高

在 PPO 实践中,我们通常采用“序列级奖励 + 级 KL 惩罚”的混合方案。具体来说,当模型生成完整序列后,奖励模型给出一个整体分数,然后我们将这个分数均匀分配到每个 上,同时每个 位置减去该位置的 KL 散度值。这种设计既保证了全局优化方向,又提供了局部约束。

3.3 价值函数与优势估计:衡量“好”与“多好”

价值函数用于评估状态或状态-动作对的长期期望回报。状态价值函数 V(s) 表示从状态 s 开始,遵循当前策略所能获得的期望累积奖励;动作价值函数 Q(s,a) 表示在状态 s 采取动作 a 后,继续遵循策略所能获得的期望累积奖励。两者的差值 A(s,a) = Q(s,a) - V(s) 被称为优势函数,它衡量了相对于平均水平,采取某个特定动作的优势程度。

在 PPO 中,我们使用一个 Critic 网络(价值网络)来估计 V(s)。这个网络与 Actor 网络(策略网络)共享部分参数或完全独立。优势估计通常使用 Generalized Advantage Estimation(GAE)方法,它通过平衡偏差和方差来提供更稳定的优势信号:

A_t = δ_t + (γλ)δ_{t+1} + (γλ)²δ_{t+2} + ... + (γλ)^(T-t+1)δ_{T-1}
其中 δ_t = r_t + γV(s_{t+1}) - V(s_t)

λ 是 GAE 参数,控制偏差-方差权衡。当 λ=0 时,优势估计退化为一步 TD 误差,方差小但偏差大;当 λ=1 时,变为蒙特卡洛估计,偏差小但方差大。在 LLM 对齐任务中,由于序列长度通常为几百到几千个 ,我们倾向于使用中等大小的 λ(如 0.95),以平衡估计稳定性。

实践建议: 价值网络的输入与策略网络相同(都是 序列),但输出是一个标量值。在实现时,通常将价值网络设计为与策略网络共享 Transformer 主干,只在最后一层分叉。这可以节省大量显存,但需要注意两个任务可能相互干扰。如果资源充足,使用独立的 Critic 网络往往更稳定。

3.4 策略梯度定理与 PPO 的优化目标

策略梯度定理是强化学习中最核心的数学结论之一。它告诉我们,策略参数的梯度可以表示为期望形式:

∇J(θ) = E[∇_θ log π_θ(a|s) * A(s,a)]

这个公式的直觉是:如果一个动作的优势为正,我们就增加该动作的概率;如果优势为负,就降低其概率。梯度的大小由优势值加权,优势越大的动作,其概率调整幅度越大。然而,直接使用这个公式进行梯度更新存在两个问题:一是样本效率低,每次更新只能使用当前策略采样的数据;二是更新步长难以控制,可能导致策略剧烈震荡。

PPO(Proximal Policy Optimization)通过引入截断的替代目标函数解决了这些问题。其核心思想是限制每次更新的幅度,确保新策略与旧策略的差异不会太大:

L_CLIP(θ) = E[min(r_t(θ) * A_t, clip(r_t(θ), 1-ε, 1+ε) * A_t)]
其中 r_t(θ) = π_θ(a_t|s_t) / π_θ_old(a_t|s_t)

这里 r_t(θ) 是重要性采样比率,表示新旧策略在动作 a_t 上的概率比。clip 函数将比率限制在 [1-ε, 1+ε] 范围内(通常 ε=0.2),从而防止过大的更新。当优势为正时,我们限制比率不能超过 1+ε;当优势为负时,限制比率不能低于 1-ε。这种机制确保了策略更新在信任区域内进行,既保证了收敛性,又保持了样本效率。

常见误区: 许多初学者误以为 PPO 的 KL 惩罚与截断目标是重复的机制。实际上,PPO 中的 KL 惩罚是作为自适应惩罚系数存在的,而截断目标才是核心约束。在 RLHF 实践中,我们通常同时使用两者:截断目标保证策略更新的稳定性,而额外的 KL 惩罚(相对于 SFT 模型)则用于保持生成文本的语言质量。两者作用不同,不可互相替代。

3.5 案例拆解:从理论到 RLHF 训练的最小闭环

为了将上述概念串联起来,我们设计一个简化的 RLHF 训练场景。假设我们有一个 7B 参数的 SFT 模型作为初始策略,目标是让模型生成更符合人类偏好的回答。

初始状态: 我们收集了 10 万条 Prompt,每条 Prompt 对应 4 个不同模型生成的回答。人类标注者对这 4 个回答进行排序,得到偏好数据。我们使用这些数据训练了一个奖励模型 RM,其输入是 Prompt + 回答,输出是一个标量分数。

训练循环: 在每次 PPO 迭代中,我们从 Prompt 池中采样 512 条 Prompt,使用当前策略(LLM)生成回答。对于每个生成的序列,我们计算:

  1. 奖励模型打分:RM(prompt, response) → 标量
  2. 每个 位置的 KL 散度:KL(π_θ(·|s_t) || π_ref(·|s_t))
  3. 综合奖励:R_t = RM_score / T - β * KL_t(T 为序列长度)
  4. 使用 GAE 计算优势估计 A_t
  5. 计算截断目标 L_CLIP 和价值网络损失 L_V = (V(s_t) - R_t)²

关键参数设置: 学习率 1e-6(LLM 微调通常需要较小学习率),KL 系数 β 初始为 0.02,GAE 参数 γ=1.0, λ=0.95,PPO 截断 ε=0.2,每次迭代使用 4 个 epoch 的 mini-batch 更新。训练过程中监控两个关键指标:KL 散度值(应保持在 0.01-0.1 之间)和奖励模型打分(应逐步上升)。

结果与复盘: 经过 2000 步迭代后,我们发现奖励模型打分提升了 15%,但 KL 散度从 0.02 上升到 0.15,说明策略偏离参考模型过远。此时我们增大 β 到 0.05,KL 散度回落到 0.08,但奖励提升速度放缓。最终我们采用动态 KL 调整策略:当 KL 超过阈值时自动增大 β,低于阈值时减小 β。这种自适应机制在 PPO 中被称为 "Adaptive KL Penalty",是 RLHF 训练中非常实用的技巧。

经验总结: RLHF 训练是一个多目标优化问题,需要在“满足人类偏好”和“保持语言质量”之间取得平衡。价值网络提供了对状态价值的估计,使得优势计算更加准确;而 KL 约束则像一个安全护栏,防止策略在追求奖励的过程中产生退化。理解这些基础概念,是调试 PPO 训练不稳定问题的前提。

3.6 常见误区与总结复盘

在强化学习基础概念的学习和实践中,有几个高频误区需要特别留意:

  • 混淆状态价值 V 和状态-动作价值 Q: V(s) 是对状态的评估,不依赖于具体动作;Q(s,a) 是对动作的评估。在 PPO 中,我们只需要 V(s) 来计算优势,不需要显式估计 Q。有些实现错误地使用 V(s_{t+1}) 代替 Q(s_t, a_t),导致优势估计偏差。
  • 忽略折扣因子 γ 的影响: 在 LLM 任务中,序列长度通常有限(几百到几千 ),γ=1 是合理选择。但如果任务涉及无限长对话,γ 必须小于 1 以保证累积奖励收敛。
  • 奖励模型与策略共训练导致奖励黑客: 如果奖励模型与策略同时更新,策略可能找到奖励模型的漏洞,获得虚高分数。正确做法是冻结奖励模型参数,只更新策略。
  • KL 惩罚系数 β 设置不当: β 过小导致策略偏离参考模型,生成质量下降;β 过大则抑制策略学习,奖励提升缓慢。建议使用自适应 KL 调整,目标 KL 值设为 0.02 左右。