基线先是一个期望恒等式
第二章得到奖励乘score的梯度估计,但其方差可能很大。本章给回报减去基线;基线不是奖励真值,而是参照数。固定输入x,若基线 不依赖当前抽到的轨迹,则它乘score的期望为基线乘零,减去后不改变期望梯度。基线即使数值估错也仍无偏;它影响方差而不是这个恒等式。允许基线由其他独立样本估计,条件是在给定x后与当前样本独立,并在计算score损失时停止梯度。
如果基线直接看当前动作再决定,就不能把它提出期望。极端例子是基线等于当前奖励,所有优势都零,梯度永远零;显然不再等于一般非零的目标梯度。另一个常见混淆是把“无偏”理解成每一批更新方向都好。无偏只描述固定参数时重复抽样的均值,某批估计仍可能很差;经过非线性优化器、裁剪和后续参数改变,参数轨迹也不是精确梯度轨迹的无偏复制。
算例一:两个动作的最简单控制变量
令正确动作概率一半、奖励一,错误动作奖励零。对正确动作logit的score,正确时为一半,错误时为负一半。不加基线,估计器以一半概率取一半,一半概率取零,均值 E[G]=1/2×1/2+1/2×0=1/4;二阶矩 E[G²]=1/2×(1/2)²=1/8。方差的定义是 Var(G)=E[(G−E[G])²]=E[G²]−E[G]²,所以这里为 1/8−(1/4)²=1/16。减常数基线一半后,正确时 ,错误时 ,方差变零而均值不变。
这个例子不能推出基线取期望奖励总能使所有参数梯度方差最小。由于独立常数基线不改估计器均值,Var(G)=E[G²]−E[G]²中的均值平方与b无关,因此最小方差等价于最小二阶矩。对单个标量score s,最小化 时,对b求导得到 ,前提分母正且矩存在。对向量 score,若目标是各坐标方差之和,同样展开平方范数,得到 b*=E[R‖s‖²]/E[‖s‖²];这不保证每个坐标各自都最优。只有score平方权重与奖励满足适当关系,才等于普通平均奖励。本项目使用可解释的留一组均值,不声称它是整个神经网络梯度方差的全局最优控制变量。
含自身的组均值为何少了一截
同一输入独立抽G条轨迹,令第i条奖励为 、score为 ,组均值为全部奖励之和除G。用 作为优势时,基线包含自己的奖励,因此不独立。展开期望:自身那项贡献原梯度的1/G,其他G−1项各因独立而乘零。减去后每项期望是原梯度的 ,对组求平均仍是这个缩放。
这里结论针对不除标准差、同输入独立同分布、固定参数采样、每条相同权重的估计器。G 为八时缩小到八分之七(7/8);G为二时只剩一半;G为一完全零。正的常数缩放有时可以调整学习率吸收,但不能因此叫原目标的严格无偏估计。若任务组大小不一致,不同输入会被不同缩放,连任务权重也改变,不再是简单一个全局学习率可修正的问题。
留一组均值恢复独立性
定义第i条的留一基线为其他G−1条奖励的平均。给定输入和当前参数,独立采样保证其他轨迹与第i条独立,于是基线乘第i条score期望为零。对每条都这么做,再求平均,得到目标梯度的无偏估计。代数上它也等于含自身均值优势乘G除G−1,所以代码可以用总和减自身,高效地一次计算所有留一基线,而不用真的循环重建G份列表。
项目 run.py 的 loo_advantages 把扁平批次按组reshape,要求G至少二且总元素数能整除G。它先求每组和,减当前值再除G−1。所有任务的组必须连续放置;如果先把不同任务样本打乱却仍按八条一组,虽可能偶然形成独立基线,但就不再是约定的同输入控制变量,难度差异会提高方差,解释也与讲义不符。样本编号和输入记录比只存一个平均奖励更有用。
算例二:四条轨迹的优势逐项算
取组奖励 [1,0,0,0]。组均值0.25,含自身优势 [0.75,-0.25,-0.25,-0.25];留一基线分别为 [0,1/3,1/3,1/3],留一优势 [1,-1/3,-1/3,-1/3],恰为前者乘4/3。两组优势和都为零,但“优势和零”本身不能证明期望梯度正确,因为还要乘各自不同的score。零和只说明组内中心化的代数性质。
如果奖励变为 [0,0,0,0] 或 [1,1,1,1],两种中心化优势均为零。它们在本组没有相对信息,不等于整个策略梯度必为零:其他可能抽到的组仍可给非零贡献。项目实际还把采样对数概率比惩罚纳入回报,所以奖励相同但概率比不同的组,正则部分仍可能有信号;训练开始策略与参考完全一致,惩罚为零,若同时无成功,第一批确实可能完全不更新。
标准差归一不是免费操作
有些组相对方法把中心化奖励再除组标准差加小常数。标准差是当前整组随机变量,依赖当前轨迹,与score相关,因此前面的独立基线证明不能直接沿用。即便不含自身基线,也不能把随机分母当成常数提出期望。这样做可能控制尺度,但优化对象和任务加权会改变;必须把它当作不同估计器研究,而不是把“数值更稳定”当作保持原目标的证明。
例如同一输入的两组都只有一条成功,但一组奖励差值被人工缩放十倍。未经标准差归一的梯度也放大十倍;标准差归一后可能近似抵消。这不是哪一种必然正确,而是它们对奖励尺度有不同含义。DeepSeekMath提出的GRPO还涉及旧策略、裁剪、KL和具体优势定义,本课只借其组比较视角,真实项目实现明确的on-policy留一REINFORCE,不挂一个完整GRPO复现的名称。
独立采样条件可以被破坏
若同一组使用束搜索得到几条强相关路径,或抽一条后把它复制八份,其他轨迹不再独立,留一基线也会携带当前动作信息。复制情况下每条奖励相同,中心化完全零,无论真实梯度是否非零。无放回采样也需要重新计算条件分布,不能套用独立同分布证明。项目对每条轨迹独立使用同一模型的分类采样,没有去重、重排或按奖励过滤后再训练。
固定随机种子使实验可重放,不等于把同一随机数重复用于所有成员。torch.Generator控制连续随机数流,multinomial对批内每行产生各自的抽样。测试用同一初始种子重跑应得到同样轨迹,用来查实现漂移;训练中不会每个成员都重新设同一个种子而制造完全相关样本。数据生成、训练采样和评价采样的种子也分开记录。
BUILD THE MECHANISM
用精确枚举检查留一基线
实现无基线、含自身均值和LOO三种组score估计。 下载本课完整项目,在项目根目录运行;只编辑 learner/starter.py,已有构造框架由项目提供。
输入与输出 G>=2;LOO基线排除当前reward;组输出还需除G。
score视作已给定梯度向量,本函数不把基线对policy反传。
# estimate
def estimate(rewards,scores,mode='loo'):
raise NotImplementedError('loo')提示 1
给G=2写四种有序动作组,不用大样本近似。
提示 2
第i基线=(总reward−ri)/(G−1)。
提示 3
每组乘其联合概率;含自身均值应缩小(G−1)/G。
独立检查 .venv/bin/python -m learner.check --stage loo --output runs/learner-loo.json
迁移检验 改p=.3、G=3,用枚举和先写下的精确梯度比较;复制同一成员不再满足独立无偏前提。
参考实现与解释
# estimate
def estimate(rewards,scores,mode='loo'):
n=len(rewards)
if n<2 or len(scores)!=n:raise ValueError('at least two paired samples')
if mode not in ['none','self','loo']:raise ValueError('unknown baseline')
total=sum(rewards);out=[0.]*len(scores[0])
for i,(reward,score)in enumerate(zip(rewards,scores)):
baseline=0 if mode=='none'else total/n if mode=='self'else (total-reward)/(n-1)
for j,s in enumerate(score):out[j]+=(reward-baseline)*s/n
return out本章交付是可枚举的偏差证据
stdlib lab.py 对三动作策略和G等于二、三、四的全部组枚举,总计分别九、二十七、八十一种组。每组概率是动作概率的乘积,累加每条优势乘score再按G平均;结果逐坐标验证留一估计等于解析梯度,含自身均值等于其固定缩放。这不是用大量蒙特卡洛样本近似一个漂亮结论,而是有限空间的精确加权求和,只受浮点舍入误差影响。
读者还应主动移除独立性条件:把组强制复制,就会得到零梯度反例。移除G大于一条件,留一分母为零,代码必须拒绝而不是加一个很小epsilon糊过去。对全零奖励,正确行为是保留零信息而不是偷偷补一个伪成功。下一章把参考策略惩罚加入回报,仍保持本章所有抽样、独立和停止梯度条件,才能把数学推导接到真实训练。
from lab import finite, group_expectation
z=[.3,-.2,.1];g=4
t=group_expectation(z,g);truth=finite(z)["gradient"]
assert max(abs(a-b) for a,b in zip(t["leave_one_out_gradient"],truth)) < 1e-12
print(t)TRY IT YOURSELF
练习一:三条奖励的留一基线
奖励[1,1,0],计算留一优势与含自身均值优势。
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习二:相关采样反例
先抽一条,再复制成八条,用留一基线会怎样?
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习三:最小方差基线
对标量score s,最小化E[(R−b)^2 s^2],推导常数b。