福生无量摸鱼天尊

强化学习:从模态对齐到策略优化 —— 2、从GSPO、FSPO、GEPO

2025/11/24
3
0

上下文归纳

正如上文所说,qwen团队发现了其存在的缺陷是优势函数\hat{A}_istoken-level,但是奖励函数是序列级别的,这会导致训练大型、复杂的模型(如混合专家模型MoE)和处理长序列任务时尤为突出,常常导致训练过程不稳定甚至模型崩溃。接下来几篇文章分别从不同的角度去对整体流程进行优化,首先我们先确立一下流程:

RLHF的核心在于将文本生成过程形式化为一个马尔可夫决策过程(MDP)。这种映射并非简单的比喻,而是算法实施的数学基础。

基本量

智能体(The Agent):在RLHF系统中,智能体即为需要被优化的语言模型策略\pi_\theta。它的目标是通过与环境交互来最大化累积奖励在训练过程中,智能体的参数\theta 是不断更新的,而其决策逻辑(即生成下一个token的概率分布)构成了策略本身。

状态(The State,S_t:状态的定义在初学者中常引起混淆。在自回归语言模型中,时间步t 的状态S_t 包含了当前时刻之前的所有信息。具体而言,它由输入提示词(Prompt,x)和截止到当前时刻已生成的token序列(y_1, y_2,..., y_{t-1})共同组成。

S_t = \{x, y_1, y_2,..., y_{t-1}\}

这意味着状态空间是极其巨大的,且随着生成的进行,状态不仅在变化,其维度(序列长度)也在增加。每一个生成的token都会导致状态发生确定性的转移。

动作(The Action,A_t:动作是在给定状态S_t 下,智能体从词表V 中选择的下一个tokeny_t。动作空间的大小等于词表大小(通常在32k到150k之间)。值得注意的是,虽然动作的选择是离散的,但在策略优化的过程中,我们关注的是动作的概率分布\pi_\theta(a_t|s_t)

状态转移(Transition,P:在文本生成环境中,状态转移通常是确定性的。一旦智能体选择了动作y_t,新的状态S_{t+1} 必然是S_ty_t 的拼接。即P(S_{t+1}|S_t, A_t) = 1。这简化了RL问题中的某些复杂性,但也引入了长序列依赖的挑战。

奖励(The Reward,R_t:奖励机制是RLHF与传统游戏RL最大的区别所在。在很多RLHF的实现中,环境只在序列生成结束(即遇到EOS token)时提供一个标量奖励r(x, y)。这被称为稀疏奖励(Sparse Reward)或回合末奖励(Episodic Reward)。然而,为了便于优化,PPO等算法通常通过价值函数或特定的奖励分配机制,将这一最终奖励回传或分解到每一个时间步,或者仅在最后一个时间步给予非零奖励,其余步骤奖励为零。

优势函数A(s_t, a_t) 的核心作用是去基线(Baseline Subtraction)。它量化了特定动作a_t 相对于在该状态s_t 下平均表现的优劣程度 。

A(s_t, a_t) = Q(s_t, a_t) - V(s_t)

其中:

  • Q(s_t, a_t) 是在状态s_t 采取动作a_t 的实际价值(Action-Value)。

  • V(s_t) 是状态s_t 的预期价值(State-Value),即基线。

广义优势估计(GAE):在LLM的PPO训练中,我们通常使用广义优势估计(Generalized Advantage Estimation, GAE)来平衡偏差和方差。GAE利用Critic模型来构建TD误差(Temporal Difference Error):

\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)

这里,Critic模型V 扮演了“预期管理者”的角色。如果r_t + \gamma V(s_{t+1}) (实际获得的即时奖励 + 对未来的新预期)大于V(s_t) (原本的预期),则\delta_t 为正,意味着产生了一个“惊喜”,该动作应当被强化;反之则应当被抑制Critic模型的存在虽然增加了计算负担,但它极大地降低了梯度估计的方差。在长文本生成中,由于随机性的累积,同一Prompt下的生成结果质量波动巨大。Critic通过学习一个平滑的价值表面(Value Surface),为策略更新提供了稳定的参考系。

Kullback-Leibler (KL) 散度:在RLHF中扮演着“锚点”或“缰绳”的角色,用于解决Goodhart定律导致的“奖励黑客”(Reward Hacking)问题 。KL惩罚的数学机制 为了防止模型偏离正常的语言轨迹,我们强制要求策略模型\pi_\theta 的输出分布不能与原始的SFT模型(参考模型\pi_{ref})相差太远。

D_{KL}(\pi_\theta || \pi_{ref}) = \sum \pi_\theta(a|s) \log \left( \frac{\pi_\theta(a|s)}{\pi_{ref}(a|s)} \right)

在实际操作中,这种约束通常以逐Token惩罚(Per-token Penalty)的形式直接叠加到奖励信号R_{total}中 :

R_{total}(s_t, a_t) = R_{env}(s_t, a_t) - \beta \log \left( \frac{\pi_\theta(a_t|s_t)}{\pi_{ref}(a_t|s_t)} \right)
  • \beta 是KL惩罚系数,控制约束的强弱。

  • 直观理解: 如果策略模型生成了一个参考模型认为概率极低(\pi_{ref}很小)的token,那么对数项\log(\pi_\theta/\pi_{ref}) 会变得很大,导致总奖励R_{total} 急剧下降。这迫使模型在探索高奖励回复的同时,必须保持“像人说话”的风格。

目标函数(Objective Function):将优势函数KL修正后的奖励转化为参数更新指令的最终公式。

L^{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]

这个目标函数包含两个部分,取最小值(min):

  1. 未裁剪部分r_t(\theta)\hat{A}_t:这是标准的策略梯度目标,鼓励优势为正的动作概率增大。

  2. 裁剪部分\text{clip}(...)\hat{A}_t:如果新策略相对于旧策略变化过大(即r_t 超出了(1-\epsilon, 1+\epsilon) 的范围),这一项会限制梯度的更新幅度。

系统协同效应

这三个组件的协作关系可以总结为:

  1. KL散度修正原始奖励,确保方向不跑偏(Safety)。

  2. 优势函数基于修正后的奖励和Critic的预期,计算相对优劣,降低方差(Efficiency)。

  3. 目标函数利用优势值计算梯度,并通过裁剪机制防止单次更新步长过大导致的策略崩溃(Stability)。

最后就是Actor的\pi_\theta生成数据,Reward Model的r_\phi打分,Reference Model的\pi_{ref}提供约束,Critic Model的V_\psi预测未来价值以计算优势。我们展开来详细说:

PPO训练循环

标准的RLHF训练循环可以细分为三个主要阶段:采样(Rollout)、评估(Evaluation)和优化(Optimization)。

第一阶段:采样(Rollout / Experience Gathering)

这是Agent与环境互动的阶段。

  1. Prompt采样: 从数据集中抽取一批Prompt(例如:“请解释量子纠缠”)。

  2. 生成(Generation): 当前的策略模型\pi_\theta(Actor)接收Prompt,并自回归地生成回复(Response)。

  3. 数据记录: 系统不仅保存生成的文本,还需要保存生成过程中每一个token的对数概率(Log Probabilities)

  4. 参考概率计算: 同时,将同样的Prompt+Response输入到参考模型\pi_{ref} 中,计算参考策略下的对数概率。这一步是为了后续计算KL散度。

第二阶段:评估与信号计算(Scoring & Signal Calculation)

这是Critic和Reward Model发挥作用的阶段。

  1. 奖励打分: 将完整的(Prompt + Response)对输入到奖励模型r_\phi奖励模型只看结果,输出一个标量分数(例如:+7.5)。

  2. KL修正: 根据第一阶段记录的策略概率和参考概率,计算逐Token的KL惩罚,并将其叠加到奖励上通常,KL惩罚加在每一个token上,而环境奖励加在最后一个token上。

  3. 价值估计: 将状态序列输入到Critic模型V_\psi,Critic输出对每一个时间步的价值预测V(s_t)

  4. 优势计算(GAE): 利用修正后的奖励序列和Critic的价值预测序列,通过GAE公式反向计算每一个token的优势\hat{A}_t 和回报目标(Return Target)。

第三阶段:优化(Optimization / Backpropagation)

这是参数更新发生的时刻。

  1. PPO Loss计算: 将数据分批(Mini-batch),计算PPO-Clip策略损失。

  2. Value Loss计算: 计算Critic模型的预测误差(通常是MSE Loss),即L_{VF} = (V(s_t) - R_{target})^2,目的是让Critic下次预测得更准。

  3. 梯度反向传播: 策略损失和价值损失加权求和(有时还加上熵正则项),对Actor和Critic的参数进行反向传播更新

L_{total} = L_{PPO} + c_1 L_{VF} + c_2 L_{Entropy}
  1. 迭代: 更新后的模型成为新的策略模型,进入下一个Step,重复上述过程。

PPO是一种On-Policy算法,这意味着用于更新参数的数据必须是由当前策略生成的。一旦参数更新,旧的数据(Experience)就失效了,必须重新采样。这就解释了为什么RLHF训练如此耗时——大部分时间并没有花在GPU计算梯度上,而是花在了生成文本(Rollout)上。

GSPO:回归序列级优化

组序列策略优化(Group Sequence Policy Optimization, GSPO) 由 Qwen 团队提出,旨在解决上述的单位失配问题。

  • 核心改进:GSPO 放弃了 Token 级的更新公式,转而采用序列级的重要性采样。其计算的概率比率是针对整个生成序列的:

    \rho_{seq} = \frac{\pi_\theta(o_i | q)}{\pi_{old}(o_i | q)}
  • 乐观前瞻(Optimistic Lookahead)归一化:直接计算序列概率的比值会导致数值极不稳定(因为概率是连乘的,数值极小)。GSPO 引入了一种基于长度的归一化技巧,即计算几何平均值:

    \text{IS Weight} = \left( \frac{\pi_\theta(o_i | q)}{\pi_{old}(o_i | q)} \right)^{1/L}

    这种处理方式(类似开L 次方)有效地将数值拉回到了可控范围,同时保留了序列级的整体评估逻辑。实验证明,GSPO 在训练 MoE 模型和长序列任务时,稳定性显著优于 GRPO,消除了模型崩溃现象13

FSPO:追求长度公平性的裁剪

公平序列策略优化(Fair Sequence Policy Optimization, FSPO) 则从另一个角度——裁剪机制(Clipping)——对 GRPO/GSPO 进行了批判。

  • 问题发现:研究者发现,标准的 PPO 式裁剪(例如固定\epsilon=0.2)对不同长度的序列是不公平的。长序列由于包含更多 Token,其新旧策略的累积概率差异天然就比短序列大。因此,长序列的\rho 值更容易超出[1-\epsilon, 1+\epsilon] 的范围而被裁剪截断。这导致长序列的有效梯度信号被系统性地抑制了,模型倾向于通过生成短回复来“安全地”获取奖励,即使长回复才是正确答案。

  • 解决方案:FSPO 提出了一种动态裁剪边界,该边界与序列长度L 相关。具体而言,裁剪范围不再是常数,而是与\sqrt{L} 成正比。

    \text{Clip Range} \propto \sqrt{L}

    这基于统计学中的随机游走理论(方差随步数线性增加,标准差随\sqrt{L} 增加)。FSPO 通过“长度重加权误差(Length Reweighting Error, LRE)”的理论框架证明,这种缩放后的裁剪能保证不同长度序列的更新接受率(Acceptance Rate)保持一致,从而实现了“长度公平”,显著提升了模型在长链推理任务上的表现24

GEPO:组期望策略优化

随着训练规模的进一步扩大,分布式和异构计算环境成为常态,这给 RL 训练带来了新的挑战,如网络延迟导致的 policy staleness 问题。组期望策略优化(Group Expectation Policy Optimization, GEPO)正是为了应对这一挑战而设计的。

  • 核心机制:GEPO 在 GSPO 的基础上,为重要性权重的计算引入了更高层次的平滑机制,称为“组期望重要性权重”(Group Expectation Importance Weight, GEIW)。在标准的重要性采样中,权重是当前策略概率$$p(y∣x) $$与旧策略概率$$ q(y∣x) $$的比值。在高延迟的异步环境中,$$ q(y∣x) $$可能已经非常陈旧,导致这个比率的方差爆炸。GEPO通过用当前批次内该样本的组期望值$$E_{y∼q}[q(y∣x)] $$来代替单个的 $$ q(y∣x) $$,从而对重要性权重进行平滑。

  • 影响:从理论上讲,这种组期望平滑可以指数级地降低重要性权重的方差。在实践中,这意味着即使在存在严重网络延迟(例如,长达1800秒)的异构计算环境中,GEPO 也能保持训练的稳定性,其性能下降幅度远小于 GRPO 和 GSPO,从而为大规模分布式 RL 训练提供了更强的鲁棒性。

其他优化

  • Tree-GRPO:将树搜索(Tree Search)引入 GRPO。在生成过程中,不仅仅是采样G 个独立的序列,而是构建一棵推理树,在关键节点进行分支采样。这允许算法进行更细粒度的“步骤级(Step-level)”信贷分配,而无需训练密集的 PRM27

  • SNIB (Self-Normalized Importance Sampling with Baseline):针对 GRPO 的有偏估计问题,引入了自归一化重要性采样。SNIB 试图在不引入 Critic 的前提下,通过更复杂的数学变换来保证梯度估计的一致性和渐近无偏性,试图在理论严谨性上超越 GRPO28

  • PODS (Policy Optimization with Down-Sampling):关注于训练效率。它在推理阶段生成海量样本(例如G=1000),然后通过最大方差下采样(Max-Variance Down-Sampling)筛选出信息量最大的k 个样本进行训练更新。这种方法在有限的计算预算下最大化了样本效率

更多思考

KL是否必须? 虽然KL散度是标准PPO的核心组件,但近期的研究(如DeepSeek的GRPO)开始探索是否可以移除显式的KL项,转而依靠其他机制(如Group Sampling)来维持稳定性,或者将KL项置于损失函数而非奖励中,以获得更无偏的梯度估计