策略梯度怎样使用奖励:从四种回答到 baseline

成长演进

具备清晰骨架、初步数学推导或工程验证,持续补充论据与实测。

ℹ数字花园

🌿 什么是数字花园与思想演进?

遵循 Maggie Appleton 与 Andy Matuschak 的常青笔记理念:这里不是按时间沉底的流水账,而是持续修剪打磨的知识生态。文章按成熟度经历:

  • 🌱 萌芽 (Seedling): 发散灵感、读书摘录、开放猜想
  • 🌿 演进 (Budding): 结构渐明、初步代码推导、积极修正
  • 🌳 常青 (Evergreen): 逻辑闭环、持久经得起检验的基石
  • 🔬 实验待证 (Speculative): 结合沙盒与仿真探针的理论探索
浏览全站数字花园与笔记全景 →

上一篇已经把奖励定义清楚:答案合格得一分,否则零分。现在的问题是,检查器只返回一个数,模型却有许多参数。这个数怎样变成参数更新?

关键不是对整数答案求导,也不是要求 JSON 检查器可微。我们调整的是产生答案的概率:让带来较高收益的选择,在相同条件下更可能出现。

本篇先把整段回答看作一个动作,再回到 token。所有概率和数值都是自写教学例子;没有训练真实语言模型。

从四个候选开始#

沿用 a=2、b=12 时求最小 n 的任务。为了能完整手算,暂时只允许四种回答。

候选概率 p奖励 R
{"n":4}0.21
{"n":5}0.30
{"n":3}0.40
答案是40.10

单次期望奖励 J 是 0.2。我们给四个候选各设一个可调的分数 z,再用 softmax 得到概率。这里的 z 是四个独立参数;真实语言模型通过共享网络生成 token 分数,远比这个例子复杂。

pi=ezi∑jezj.p_i=\frac{e^{z_i}}{\sum_j e^{z_j}}.

可以取 z_i=log p_i,得到表里的起点。把某个 z 增大,通常会提高相应概率,但其他概率必须一起变化,因为总和仍需为一。

直接算一次准确梯度#

在这个有限例子里,期望可以直接展开:

J=∑ipiRi.J=\sum_i p_iR_i.

对 z_j 求导,利用 softmax 的导数,得到:

∂J∂zj=pj(Rj−J).\frac{\partial J}{\partial z_j} =p_j(R_j-J).

四个分量分别是:

(0.16,  −0.06,  −0.08,  −0.02).(0.16,\;-0.06,\;-0.08,\;-0.02).

第一项为正,说明沿这个局部方向增加正确候选的分数可以提高期望奖励。其余项为负,并不是检查器给它们发了负分,而是概率归一化把它们与正确候选联系起来了。

采用梯度上升,取教学步长 0.1,把 z 加上 0.1 倍上述向量,再算 softmax,正确候选概率约变成 0.203624。这个变化可以逐项复算,不能据此推断真实网络的一步更新一定改善全部题目。

真实回答太多,无法逐个枚举#

一个模型可以生成海量不同回答,我们不能把它们全部列出来求和。策略梯度的作用,是把这份全量计算改写成可以用采样估计的形式。

先固定一道题 x。设奖励 R(x,y) 不直接依赖训练参数,回答空间固定,并满足交换求和与求导所需条件。对概率为正的回答,有:

∇θpθ(y)=pθ(y)∇θlog⁡pθ(y).\nabla_\theta p_\theta(y) =p_\theta(y)\nabla_\theta\log p_\theta(y).

因此可以把期望奖励的导数改写为:

∇θJ=Ey∼pθ[R(x,y)∇θlog⁡pθ(y)].\begin{aligned} \nabla_\theta J &=\mathbb E_{y\sim p_\theta}\big[\\ &\quad R(x,y)\nabla_\theta\log p_\theta(y)\big]. \end{aligned}

这就是这里需要的似然比梯度。检查器不用可微;可微的是模型赋给采到答案的 log probability。若奖励本身显式依赖 θ,还需处理相应导数,不能直接套这个只含固定奖励的推导。

OpenAI Spinning Up 的官方推导给出了同样的 log-derivative 变换及采样估计条件;本文把它缩小到一个可枚举回答空间,便于检查数值。策略优化推导

一次采样的更新为什么噪声大#

在四候选例子里,如果采到正确答案,R=1,关于 z 的梯度估计是:

(0.8,  −0.3,  −0.4,  −0.1).(0.8,\;-0.3,\;-0.4,\;-0.1).

如果采到其他任一答案,R=0,这个最简单估计器给出零向量。正确答案以 0.2 的概率出现,因此估计向量的平均正好是上一节的准确梯度。

无偏说的是重复采样后的期望,并不意味着每一小批都接近准确梯度。连续几次没有采到正确答案完全可能发生。增大样本量可以改善估计,但需要更多生成与评分成本。

也不能先只保留成功样本,再把它们当作未筛选的当前策略样本套原式。筛选改变了分布;若改做成功样本的监督微调,那是另一个明确的目标。

baseline 为什么能减而不改期望#

假设给这道题设置一个不随本次回答变化的数 b(x),把奖励换成 R−b。这里的 b 叫 baseline,可以理解为“这道题通常能拿到多少分”的参照。

它不改变期望梯度,原因不是经验,而是下面这个恒等式:

Ey∼pθ[∇θlog⁡pθ(y)]=0.\mathbb E_{y\sim p_\theta} [\nabla_\theta\log p_\theta(y)]=0.

展开后,它就是全部概率之和一的导数。因此,不依赖本次动作的 b 乘到这个零向量上,不增加期望梯度。

回到例子,取 b=0.2。成功样本的权重变成 0.8,失败样本变成 −0.2。失败样本现在也会贡献非零估计,全部样本的加权平均仍然是原梯度。

但任何 baseline 都降低方差是错的。对第一个 z 分量,本例 b=0 时估计方差为 0.1024,b=0.2 时为 0.0576,b=2 时则增大到 0.2304。这些数描述的是这个坐标的单样本方差,不是整个网络梯度的统一方差。

常用的状态价值估计能提供参照,但期望奖励也不必然是所有参数坐标、所有度量下的最优方差 baseline。讨论“更稳定”时应说明实际估计和比较方式。

baseline 不能偷偷包含自己的答案#

“同题所有回答的平均奖励”看起来是自然的 baseline,却需要检查它是否包含正在加权的那个样本。

设独立同分布采 G 个回答,用这 G 个奖励的均值给每个样本减去 baseline。因为每个样本的奖励也进入均值,简单奖励加权估计的期望会变成原梯度的 (G−1)/G。G=1 时甚至直接为零。

这是当前这个简单估计式的结论,不是说所有组内方法都无效,也不是对 GRPO 完整目标的概括。若使用其余 G−1 个样本的均值,即 leave-one-out baseline,在独立采样、G>1 等前提下,不包含自己的奖励,可以恢复这里需要的独立性。若再除以样本标准差,又引入了新的随机权重,不能继续未经证明地称为相同目标的无偏估计。

后文讲组内算法时,需要分别看“减均值”“除标准差”“裁剪概率比”和“如何平均 token”,不能把它们揉成一句“降低方差”。

回到语言模型,答案概率怎样计算#

一段回答的 log probability 是逐 token 的条件 log probability 之和:

log⁡pθ(y∣x)=∑t=1Tlog⁡πθ(yt∣x,y<t).\begin{aligned} &\log p_\theta(y\mid x)\\ &\quad=\sum_{t=1}^{T}\log\pi_\theta(y_t\mid x,y_{<t}). \end{aligned}

所以终局反馈可以乘到这份总和上,再通过网络反向传播。对于这里没有中途奖励的设定,这是从整段动作走回 token 的连接;它不代表每一个 token 都被检查器独立判为正确。

有效位置只包含要优化的生成动作,不能顺手把 prompt 和 padding 算进去。正常结束标记按轨迹定义处理,长度截断按采样协议记录。沿用第二、三卷的方法,先检查标签位置和 mask,再看训练曲线。

如果为了“不同长度公平”而把每段求和改为除以自己的长度,就改变了不同回答的权重。对固定回答空间和不变长度定义,它对应奖励按长度缩放后的另一种估计,不再自动等于原来最大化完整任务成功率的梯度。

同样,温度和 top-p 会改变实际采样分布。生成时用一种分布、计算 log probability 时用另一种分布,不能直接援引上面的同分布无偏证明。实际训练需要明确行为策略与目标策略,或者采用合适的校正;只记录模型名称是不够的。

loss 的负号与停止梯度#

优化器通常最小化 loss,而前面是最大化奖励。因此单批样本常写成负的“权重乘 log probability”均值。实现示意为:

# 示例张量接口,不是完整训练脚本。
# logp: 每条回答的有效生成位置 log probability 之和
# reward、baseline: 每条回答对应的标量
advantage = (reward - baseline).detach()
loss = -(advantage * logp).mean()

这里的 .detach() 表示策略损失把权重视为固定值,不沿 baseline 或奖励的计算图求导。若价值模型需要训练,应有自己的监督目标;共享网络参数时,还要检查两类损失如何合并。

这段代码也不能拿一批旧样本无限训练。参数更新后,固定样本不再来自新的当前分布,原来的一步梯度解释就不再直接成立。PPO 等方法要处理的正包括如何有限地复用样本、如何限制更新;下一篇会展开 PPO。

用什么检查一次实现#

先在本篇的四候选空间中计算准确梯度,再用有限差分核对。然后枚举每种采样结果,以对应概率加权,检查有无 baseline 的期望相同;另枚举两次采样,确认包含自身均值与 leave-one-out 的差别。

这些检查适合发现负号、概率归一化、错误权重等问题。进入真实语言模型后,还需要检查生成设置、有效 token 范围、奖励与回答是否配对、梯度是否有限,以及更新前后的独立任务收益。

训练日志里的 surrogate loss 下降,不等于平均奖励必然提高。它首先是构造更新方向的工具。一次小批估计可能有噪声,过大的步长可能破坏局部近似,奖励漏洞也可能让更高 reward 对应更差答案。

第一道自检题:为什么奖励只有 0 和 1,准确梯度的失败候选分量仍然可以为负?请从 softmax 的归一化解释。

第二道自检题:把所有样本的平均奖励减掉,为什么 G=1 时没有信号?若用独立的 baseline,又需要检查哪些计算图和采样条件?

文章概念网络

从章节进入正文概念。实线表示所属层级,虚线连接跨章节重复出现的概念,不代表因果关系。

59 / 59 个节点 · 正文标记术语与关键词概念

策略梯度怎样使用奖励:从四种回答到 baseline同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept策略梯度怎样使用奖励:从四种回答到 baseline策略梯度怎样使用奖励:从四种回答到 baseline产生答案的概率产生答案的概率从四个候选开始从四个候选开始答案是4答案是4直接算一次准确梯度直接算一次准确梯度上升上升真实回答太多,无法逐个枚举真实回答太多,无法逐个枚举似然比梯度似然比梯度策略优化推导策略优化推导一次采样的更新为什么噪声大一次采样的更新为什么噪声大无偏无偏baseline 为什么能减而不改期望baseline 为什么能减而不改期望baselinebaseline任何 baseline 都降低方差任何 baseline 都降低方差baseline 不能偷偷包含自己的答案baseline 不能偷偷包含自己的答案leave-one-out baselineleave-one-out baseline回到语言模型,答案概率怎样计算回到语言模型,答案概率怎样计算loss 的负号与停止梯度loss 的负号与停止梯度.detach().detach()用什么检查一次实现用什么检查一次实现tokentoken奖励奖励动作动作选择选择奖励奖励tokentoken归一化归一化奖励奖励利用利用奖励奖励采样采样策略梯度策略梯度策略策略优化优化微调微调采样采样策略策略奖励奖励状态状态动作动作奖励奖励tokentokenGRPOGRPO采样采样tokentoken采样采样奖励奖励策略策略动作动作反馈反馈PPOPPO奖励奖励策略策略优化优化奖励奖励采样采样归一化归一化rewardrewardtokentoken
策略梯度怎样使用奖励:从四种回答到 baseline

策略梯度怎样使用奖励:从四种回答到 baseline

回到原文 ↗
BIBTEX

引用本文

@article{2026-10-23-llm-training-rl-03-policy-gradient,
  author  = {枫语},
  title   = {策略梯度怎样使用奖励:从四种回答到 baseline},
  journal = {枫语},
  year    = {2026},
  month   = {oct},
  url     = {https://meiluosi.github.io/posts/2026-10-23-llm-training-rl-03-policy-gradient/}
}
🌐

本篇知识星丛与滑动侧栈

策略梯度怎样使用奖励:从四种回答到 baseline 当前主轴

搜索

正在载入索引…