策略梯度小计

RL 好难啊,RL 好难啊。

这里记录(抄一些) cs336 和 spinning up 的推导和训练流程,主要遵循 cs336 的一些精简定义。以及做作业的一些坑。

定义

方程

简单的梯度上升为:θk+1=θk+αθJ(θk)

一个重要的结论为 θJ(θk)=E[θlogP(τ|θ)R(τ)]=E[tθlogπθ(at|st)R(τ)]

因此从一个批次样本 D={τi}i=1N 可以获得无偏估计:

\nabla_\theta J(\theta_k) = \frac{1}{N} \sum_{i=1}^N\sum_{t=0}^T \nabla_\theta \log \pi_\theta (a_t^i | s_t^i) R(\tau^i)$$ 这是最基础的训练方程,训练过程中需要关注的为: 1. 求解策略 $a_t$ 2. 求归一化概率对数值 $\log \pi_\theta (a_t | s_t)$ REINFORCE 梯度的一个问题为方差大,主要来源为 $R(\tau)$ ,我的理解为:对于每一个策略都对整体轨迹的奖励乘积,而轨迹有不同噪声,在奖励积累时方差也在线性积累($R(\tau)$ 积累方差,整个求和过程再积累方差),方差就爆炸了。 ## 改进 ### baseline 一个改进方法为为奖励设置基线,引入只和 $s_t$ 有关的函数 $b(s_t)$: $$B=\nabla_\theta J(\theta_k) = \frac{1}{N} \sum_{i=1}^N\sum_{t=0}^T \nabla_\theta \log \pi_\theta (a_t^i | s_t^i) (R(\tau^i)-b(s_t))

这里的 b(st) 可以是一个训练的模型 (PPO),例如 Vπ(s)=E[R(τ)|st=s] ,即 st=s 开始策略预测的期望回报,也可以是不用训练的值,例如后续的 GRPO。

一个重要结论为:

E[tθlogπθ(at|st)]=tE[logP(x)]=0

考虑将期望展开,将对数导数展开得到常数导数恒定为 0 ,因此添加 b(st) 仍为无偏估计。

应该注意的是,我们在此重新定义了一个梯度,这不是损失,不应将其作为评估指标。

Off-Policy

我们可以将先前的一次采样结果缓存,重复利用,得到离轨策略梯度:

1Ni=1Nt=0Tπθ(at|st)πθold(at|st)θlogπθ(ati|sti)R(τi)

这仍然是一个无偏估计。

off-policy 在采样困难的场景有较大的用处,因为可以多次复用初始采样,但由于还要维护历史值,其计算量比在线验证更大。

注意:这里是对概率的比值,而实际编写时通常直接得到的为对数概率,需要做一个转化。

GRPO

GRPO 在 baseline 上不训练一个模型,而是采用直接计算的方法,对于一个问题 q ,采样 G 个输出 o1,2,G ,并计算对应奖励 r1,2,,G ,其 advantage 为:

Ai=rimean(r1,r2,,rG)std(r1+r2+rG)

一个输出 oi 内部的每个 token,都用同一个 Ai 作为基线。

clip

clip 的用处在于限制 off-policy 乘积因子的改变幅度:

tokenobjective=min(πθ(at|st)πθold(at|st)Ai,g(ϵ,Ai))g(ϵ,Ai)={(1+ϵ)Ai(1ϵ)Ai

通常 ϵ0.2

当该输出奖励高,Ai>0 ,clip 会限制梯度的增长,当 Ai<0 ,clip 也会限制模型的下降。