¶强化学习基础
对于大语言模型(LLM),在强化学习的语言中,状态是token序列的每个前缀,动作是新的token:
τ=(s0,a1,s1,a2,...,aT,sT)
是一个长度为T的token序列,其中初始状态s0是prompt。
我们假设:
- prompt的分布为 s0∼ρ0(⋅),ρ0与LLM无关,因为它是由人类选择的。
- 新token的分布为 at∼πθ(⋅∣st−1),其中πθ是LLM,通常是一个多头多层的Transformer神经网络。
- 前缀和新token之间的状态转移关系是 st∼ρ(⋅∣st−1,at)。目前,由于at是下一个token,所以这个关系是确定性的st=(st−1,at)。
¶优化目标
θmaxEx∼DpromptEy∼πθ(⋅∣x)[r(y∣x)−βKL(πθ(y∣x),πref(y∣x))],
其中 r(y∣x)=T1∑t=1Tr(yt∣x,y<t) 是响应序列中每个token的平均奖励,并且
KL(πθ(y∣x),πref(y∣x))=T1t=1∑TEyt∼πθ(⋅∣x,y<t)log(πref(yt∣x,y<t)πθ(yt∣x,y<t)),
这是策略模型和参考模型之间下一个token分布的平均KL散度。
- 四模型架构
- 策略模型 πθ(y∣x) (参与训练),一个LLM;
- 参考模型 πref(y∣x) (冻结),一个LLM;
- 价值模型 vμ(y∣x) (参与训练),一个LLM + 线性头;
- 奖励模型 r(y∣x) (冻结),一个LLM + 线性头。
设T是响应序列中的token数量。对于LLM,状态由token序列前缀定义 st=[x,y<t],动作由下一个token定义 at=yt。
- 合并奖励和KL惩罚:
r(yt∣x,y<t)←r(yt∣x,y<t)−βKLt;
- 策略梯度:
∇θEy∼πθ(⋅∣x)[r(y)]=E[∇θlogπθ(y)⋅r(y)]=T1t=1∑TEy[∇θlogπθ(yt∣x,y<t)k=t∑Tr(yk∣x,y<k)]=T1t=1∑TEy<tEyt∣y<t[∇θlogπθ(yt∣x,y<t)(Ey>t∣y≤t[k=t∑Tr(yk∣x,y<k)]−Ey≥t∣y<t[k=t∑Tr(yk∣x,y<k)])]:=T1t=1∑TEy<tEyt∣y<t[∇θlogπθ(yt∣x,y<t)⋅(Qπθ(yt,[x,y<t])−Vπθ([x,y<t]))]:=T1t=1∑TEy<tEyt∣y<t[∇θlogπθ(yt∣x,y<t)⋅Aπθ(at,st)]=∇θT1t=1∑TEy<tEyt∣y<t[Aπθ(at,st)]=T1t=1∑TEy≤t[∇θlogπθ(y≤t∣x)⋅Aπθ(at,st)];
其中 At:=Aπθ(at,st)=Qπθ(at,st)−Vπθ(st) 是优势函数。我们将使用神经网络 vμ(s) 来估计价值函数 Vπθ(s)。
- 估计策略梯度:通过蒙特卡罗采样估计梯度(注意我们不能直接获得优势函数At)。
∇θEy∼πθ(⋅∣x)[r(y)]≈B1i=1∑BT1t=1∑T∇θlogπθ(y≤ti∣xi)⋅Aπθ(ati,sti), yi∼πθ(⋅∣xi);
- 通过token级别采样估计KL散度:
KL=t=1∑TKLt=t=1∑Tlog(πref(yti∣xi,y<ti)πθ(yti∣xi,y<ti));
使用广义优势估计(GAE)估计优势函数At:
引入参数γ∈(0,1),通过降低长期奖励的权重来减少方差,但代价是引入偏差。优势函数的估计有两种直接的方法,但他们各有利弊:
A^t(x,y)=r(at∣st)+γvμ(st+1)−vμ(st);
A^t(x,y)=k=t∑Tγk−tr(ak∣sk)−vμ(st);
考虑多步TD残差:
A^t(1)A^t(2)A^t(3)A^t(k)=rt+γvμ(st+1)−vμ(st);=rt+γrt+1+γ2vμ(st+2)−vμ(st);=rt+γrt+1+γ2rt+2+γ3vμ(st+3)−vμ(st);=rt+γrt+1+⋯+γk−1rt+k−1+γkvμ(st+k)−vμ(st);
GAE使用λ-指数加权的无限多步TD残差,这样可以平衡方差与偏差的tradeoff:
A^t(x,y):=(1−λ)(A^t(1)+λA^t(2)+⋯+λk−1A^t(k)+⋯)=δt+γλδt+1+⋯+(γλ)kδt+k+⋯,
其中 δt=r(at∣st)+γvμ(st+1)−vμ(st)。对于有限时域T,取 A^t=∑k=0T−t−1(γλ)kδt+k。γ和λ在原始论文中都是方差减小参数。
最大化优势(Actor损失):
【这里好像有误!PPO似乎也犯了用无偏估计的梯度来做梯度的无偏估计的错误!】
我们想要更新的是分布中的参数,但却只能拿到从这个分布抽出来的样本,所以需要使用重要性采样技巧,利用一个proposal分布来估计target分布的期望,PPO中的proposal分布选取为 y∼πθold(⋅∣x)(外循环中的上一次迭代)。
θmaxLpolicy(θ)=BT1i=1∑Bt=1∑TA^ti⋅πθold(yti∣xi,y<ti)πθ(yti∣xi,y<ti)≈B1i=1∑BT1t=1∑TEati∼πθold(⋅∣sti)[A^ti⋅πθold(ati∣sti)πθ(ati∣sti)]=B1i=1∑BT1t=1∑TEati∼πθ(⋅∣sti)[A^ti]≈B1i=1∑BT1t=1∑T⋅Aπθ(ati,sti);
更新分布参数的另一种方法是使用对数变换 ∇θEπθ[f]=Eπθ[∇θlogπθ⋅f],但这可能导致高方差。然而,对于微调过的LLM,方差可能不会那么大。
- 最小化价值函数近似误差(Critic损失):
μminLvalue(μ)=BT1i=1∑Bt=1∑T(vμ([xi,y<ti])−Rt(xi,yi))2;
其中 Rt(xi,yi)=A^t(xi,yi)+vμold([xi,y<ti]) 是回报。
注意,回报中涉及的所有值都是由旧批次计算的,而策略使用当前批次。我们不使用当前批次中的值,因为它可能导致优势消失
(价值模型过拟合到当前批次上,导致更新时的优势值很小)。在实践中,我们在策略更新之前还会对价值函数先进行几步预热更新。
- 最终损失:
LPPO(θ,μ)=−Lpolicy(θ)+c⋅Lvalue(μ).