Drill · 手撕

Drill: RLOO (REINFORCE Leave-One-Out)

可运行的 from-scratch 实现 + 测试。critic-free 的策略梯度基线。

数学 / The math

对每个 prompt 采 KK 个回答,奖励 r1..rKr_1..r_K。RLOO 用留一法作基线(无 value 网络):

Ai=ri1K1jirj=ri(krk)riK1A_i = r_i - \frac{1}{K-1}\sum_{j\neq i} r_j = r_i - \frac{(\sum_k r_k) - r_i}{K-1}

策略梯度损失(最小化):  L=1BKisg(Ai)logπθ(oi)\;L = -\frac{1}{BK}\sum_{i}\mathrm{sg}(A_i)\,\log\pi_\theta(o_i),其中 sg\mathrm{sg} 是 stop-gradient(基线不回传)。

性质:每个 prompt 内 iAi=0\sum_i A_i = 0(无偏、低方差基线)。

与 PPO / GRPO 的对比

baseline critic? clip?
PPO value 网络 V(s)V(s) + GAE 需要
GRPO 组内标准化 (rμ)/σ(r-\mu)/\sigma 不需要
RLOO 组内留一均值 jirjK1\frac{\sum_{j\neq i}r_j}{K-1} 不需要 无(纯 REINFORCE)

文件 / Files

python from_scratch.py     # 演示
python test_rloo.py        # 测试(或 pytest)

追问分层 / Stratified follow-ups