大语言模型(LLM)的强化学习

一、核心定义:状态(s)、动作(a)、奖励(R)

对于LLM而言,需要对应RL的三个重要概念:状态(s)、动作(a)、奖励(R)
1. 状态(s):输入的Prompt,比如“写一首关于春天的诗”。
2. 动作(a):输出的Token序列,动作 a 是模型生成的Token序列,比如“春天来了,万物复苏,花开满园。”
3. 奖励(R):衡量动作质量的函数,奖励 R(s,a) 只在序列结束时计算,比如生成完“春天来了,万物复苏,花开满园。”后,才给这个完整的回答打分。

二、优化目标:最大化期望奖励

1. 基本优化目标

目标最大化生成的句子的期望奖励。

2. 基于next-token prediction的乘法原理分解

【生成这个句子 a 的可能性】

三、状态转移函数:从 st−1 到 stst​

1. 状态转移函数的定义

【选下一个词的概率】(0或1)

在已生成的Token序列 $s_{t-1}$​ (比如“春天来了,万物复苏”)下,生成下一个Token $a_{t-1}$ (比如“花开”)后,新的Token序列 $s_t$ (比如“春天来了,万物复苏,花开”)的概率一定是1或0。

在LLM中,状态转移函数是确定的

公式p(s_t | s_{t-1}, a_t) = \delta(s_t = \text{concat}(s_{t-1}, a_t))

四、奖励函数的特殊设计:只在序列结束时计算

【当前步骤的奖励】

1. 奖励函数的定义

定义:在LLM中,奖励函数 R(st,at) 通常只在序列结束时计算,

当 t<T 时,生成还未结束,奖励为0。

当 t=T 且 a_T=eos 时,生成结束,计算整个序列的奖励 R(s,a1,...,aT)。

公式
'

五、优化目标的重新定义

重新定义:结合状态转移函数,优化目标可以重新定义为:

——【生成这个句子 a 的可能性】
——【选下一个词的概率】
——【当前步骤的奖励】

——【对每个Token求和】
——【对所有可能的状态和动作求和】

直观含义是:求和所有可能生成的句子的每一个token,每个token的选取概率是【生成这个句子 a 的可能性】*【选下一个词的概率】*【当前步骤的奖励】,因此套三层求和。

六、KL散度约束:防止策略偏离过大

1. KL散度约束的作用

作用:KL散度约束是为了防止策略 πθ​ 偏离参考策略 πref 过大,从而保证生成的文本不会“跑偏”。

公式

七、总结:RL for LLM的核心流程

  1. 输入Prompt:用户输入Prompt s ,作为状态 s0​ 。
  2. 生成动作:模型根据策略 πθ(at∣st) ,自回归生成Token序列 a=[a1​,a2​,...,aT​] 。
  3. 计算奖励:当生成结束( aT=eos )时,计算整个序列的奖励 R(s,a) 。
  4. 优化目标:最大化期望奖励 J(θ) ,同时通过KL散度约束防止策略偏离过大。
  5. 更新策略:根据奖励和KL散度,更新策略 πθ​ ,使其生成更高质量的文本。

我们核心讨论的点就在于如何最大化奖励J(θ)。

GRPO——Clip机制+相对优势

GRPO的核心动机:为什么要“去价值网络”?

前面的TRPO和PPO都是更新双模型的,一个策略模型,一个价值估计模型(隐藏在GAE的优势估计中),每次更新完策略模型后,都需要同步更新价值估计模型。

 

在标准PPO中,计算优势函数 A(s,a) 需要一个价值网络 V(s) 来做基线(Baseline),这带来了两个问题:

  • 双倍参数开销:需要同时训练策略网络(Policy)和价值网络(Value),内存和计算成本高。
  • 训练不稳定:价值网络拟合不准会直接影响策略更新的方向。

GRPO的解决思路
既然我们最终的目标是让模型生成“奖励更高”的文本,为什么不直接用同一组输入(Prompt)下,不同输出(Token序列)之间的相对奖励差异来代替复杂的 A(s,a) 计算呢?

这就是GRPO的“Group Relative”思想:在同一组Prompt下,让表现好的Token序列“拉高”表现差的Token序列的梯度,而不是去拟合一个全局的 V(s) 。

直观而言:

GRPO的目标不是让学生“考满分”,而是让学生“比班里平均水平考得好”。

对于每个Token,如果它出现在“高分学生”的序列里,它就会得到正向激励;如果它出现在“低分学生”的序列里,它就会被惩罚。

从PPO到GRPO

其中:

如果LLM使用PPO训练,就需要持续更新bn这个基线函数,时间空间开销都是两倍,我们考虑用蒙特卡洛采样直接估计A。

GRPO具体过程:【前面提到的RL for LLM核心流程】

轨迹奖励函数 R(s,a) 是固定的,不参与训练更新

在 LLM 中,生成是自回归的,每个 token 依赖于前面的 token。所以 ρ 需要基于当前 token 的条件概率,而不是整个序列的概率。
=》

对比前面LLM的优化函数,能发现不少区别,我们解释一下:
+KL约束

首先,KL约束之前我们讲PPO就说过了,将其用“CLIP截断+min”解决了。
其次,为什么 GRPO 的优化函数有 1/N 和 1/J ?
因为 GRPO 的优化目标是一个期望(Expectation)蒙特卡洛估计

1. 1/N:对 Prompt 的期望进行估计

理论上的优化目标:我们希望优化模型在所有可能的 Prompt 上的表现。但我们只能通过蒙特卡洛采样实现,因此用这 N 个 Prompt 的平均值来近似整个期望。

2. 1/J :对回答的期望进行估计

理论上的优化目标:对于每一个 Prompt sn​ ,我们希望优化模型在所有可能的回答上的表现。用这 J 个回答的平均值来近似这个期望。

至于括号内的不同,则是工程实践上的差异,原本的LLM使用的其实是在追求绝对的“好”,而GRPO是追求相对的“好”,这种指导方向上的差异就决定了二者肯定不一样,LLM的优化函数适合理论推导,他需要遍历所有情况,所有的prompt所有的回答,这是不可能的。而我们用的GRPO采用“CLIP截断+min”内化了KL散度约束,并通过“蒙特卡洛采样”解决了需要遍历所有情况的问题,是工程实践中的标杆!

DAPO

一、DAPO:给“剪贴板”动个手术(不对称剪贴)

1. 它是啥?

DAPO 是对 PPO 里的 Clip 函数 做了微调。

2. 背后的痛点

PPO 原来的 Clip 是对称的(比如 clip(ρ, 0.8, 1.2))。这就像给模型设了个“紧箍咒”:

  • 如果模型想变好(优势是正的),它最多只能把概率提高 20%。
  • 如果模型想变差(优势是负的),它最多只能把概率降低 20%。

这其实不太公平!我们更希望模型大胆地变好,而不是被限制住。

3. DAPO 怎么改的?

它把 Clip 改成了不对称的:

  • 上限放宽一点(比如 1 + 0.28):鼓励模型大胆探索好的动作,让原本很少被选的优质回答能获得更高的概率。
  • 下限收紧一点(比如 1 - 0.2):惩罚坏动作要狠一点
4. 好处

防止模型陷入“熵崩塌”(Entropy Collapse)——也就是防止模型变得越来越死板,只会说那几句最保险的话,不敢创新了。

GSPO

1. 它是啥?

GSPO 是把强化学习的优化粒度从“整句话”细化到了“每一个字(Token)”。

2. 背后的痛点

传统方法(比如 PPO)是“句子级”的:

  • 一句话生成完了,得到一个总分。
  • 然后用这个总分去更新这句话里每一个字的生成概率。

这很不合理!比如一句话是“今天天气真好,我要去跑步”,如果总分高,难道是因为“跑步”这个词特别好?还是因为“天气”这个词特别好?传统方法把功劳平均分给了所有字,这叫信用分配不均

3. GSPO 怎么改的?

它做了一件很暴力但有效的事:每个 Token 都算一次奖励和更新

  • 它定义了一个新的概率比 $\rho_n^j(\theta)$,这个比值是基于整句话的,但被应用到了每一个 Token 上。
  • 优化目标 $J_{GSPO}$​ 里,那个 $\sum_{t=1}^{|a_n^j|}$​ 就代表它要对这句话里的每一个 Token 都算一遍梯度。
4. 好处
  • 训练更快:因为每个 Token 都在参与更新,信息利用率变高了。
  • 效果更细:模型能学到具体哪个词用得好,哪个词用得不好,而不是只看整句话的结果。
算法 核心改动 想解决的问题
DAPO Clip 不对称(上松下紧) 防止模型太保守,鼓励大胆探索好答案
GSPO 从“句子级”改成“Token 级” 解决“整句奖励”导致的信用分配不均,训练更精细

维度 PPO GRPO
优势函数计算 $A(s, a) = Q(s, a) - V(s)$ $\hat{A}_{nt}^i = R_n^i - \mu_n$
网络结构 双网络(策略网络 + 价值网络) 单网络(仅策略网络)
计算开销 高(需要训练和推理价值网络) 低(无需价值网络)
适用场景 通用强化学习任务 LLM对齐(RLHF),尤其是资源受限场景
稳定性 依赖价值网络的拟合精度 依赖组内采样的多样性,稳定性稍弱但效率更高

所有双模型策略网络的运行过程就和GAE的原型Baseline模型一致,交替更新,教学相长

补充证明

\delta_k = \arg\max_{\delta} g_k^T \delta \quad \text{s.t.} \quad \delta^T F_k \delta \leq \epsilon

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐