Skip to content

策略改进方法:TRPO+PPO

📅 发表于 2025/09/02
🔄 更新于 2025/09/02
👁️ -- 次访问
📝 0 字
0 分钟
rl-theory
#方差
#TRPO
#新旧策略
#策略单调递增
#重要性采样
#KL约束
#信任区域
#KL球
#GAE
#PPO
#优势策略梯度
#PPO-Penalty
#PPO-Clip
#GRPO

必备知识

重要性采样

重要性采样

问题定义

  • 函数f(x),需要从分布p(x)中采样,来计算期望值;但现在很难从p(x)中采样

方法

  • 从另一个容易采样的分布q(x)中采样,间接达到从p(x)中采样的效果
Exp(x)[f(x)]=p(x)f(x) dx=q(x)p(x)q(x)f(x) dx=Exq(x)[p(x)q(x)f(x)]Exp[f(x)]=Exq[p(x)q(x)f(x)]=1Nip(xi)q(xi)f(xi)
  • p(x)q(x)重要性权重用来修正采样的偏差,即两个分布直接的差异。
  • 重要性采样也是一种特殊的MC采样,允许从简单分布采样,避免直接从困难分布采样的问题。

缺点

  • q(x)必须尽可能接近p(x)q越接近p方差越小;否则,尽管期望相同,但方差会很大
  • 如果采样次数不够多Exp[f(x)]Exq[p(x)q(x)f(x)] 会有很大的差异

主流方法

TRPO

Trust region policy optimization

背景

TRPO 提出背景

Actor-Critic 缺点

  • 虽然简单直观,但训练不不稳定
  • 目标:找到θ=argmaxθJ(θ),沿θJ(θ)方向迭代更新策略参数
J(θ)=Es0[Vπθ(s0)]=Eπθ[t=0γtr(st,at)]
  • 缺点:沿策略梯度更新参数,可能由于步长太长策略突然显著变差,从而影响训练效果

策略目标

TRPO 策略目标

核心目标

  • 期望借助当前θ找到一个更优θ,使得J(θ)J(θ)
  • 只要找到一个新策略,使EstvπθEaπθ(st)[Aπθ(st,at)]0,就能保证策略性能单调递增
J(θ)J(θ)=11λEstvπθEaπθ(st)[Aπθ(st,at)]Aπθ(st,at)=r(st,at)+γVπθ(st+1)Vπθ(st)

难点

  • 直接求解该式非常困难,πθ是我们需要求解的策略,又要用它收集样本。
  • 把所有可能的新策略拿来收集样本,又用它来判断条件,显然是不现实的。

目标优化

  • 对状态访问分布做了相应处理,忽略两个策略的状态访问分布,直接采用旧策略πθ的状态分布
Lθ(θ)=J(θ)+11λEstvπθEaπθ(st)[Aπθ(st,at)]
  • 新旧策略接近时,状态访问分布变化很小,近似是合理的,动作仍然用新策略采样得到,用重要性采样做处理。
  • 这样就能基于旧策略πθ采样出的数据,来估计并优化新策略πθ
Lθ(θ)=J(θ)+EstvπθEaπθ(st)[πθ(as)πθ(as)Aπθ(st,at)]

KL 约束

  • 增加KL约束保证新旧策略足够近
maxθ Lθ(θ),s.t.  Estvπθk[DKL(πθk(s),  πθ(s))]δmaxθ Lθ(θ),s.t.  Estvπθk[DKL(πθk(s),  πθ(s))]δ
  • 信任区域:不等式约束定义了策略空间中的一个KL球
  • 在信任区域中
    • 学习策略和环境交互的状态分布,与上一轮策略最后采样的状态分布一致
    • 可以基于一步行动的重要性采样使当前学习策略稳定提升

信任区域示意图:左侧无信任区域,梯度更新可能导致性能骤降;右侧有信任区域,每次梯度更新都能带来稳定提升。

目标推导过程

J(θ) 另一种形式

J(θ)=Es0[Vπθ(s0)]=Eπθ[t=0γtVπθ(st)t=1γtVπθ(st)]=Eπθ[t=0γt(γVπθ(st+1)Vπθ(st))]

J(θ)J(θ)推导过程

J(θ)J(θ)=Es0[Vπθ(s0)]Es0[Vπθ(s0)]=Eπθ[t=0γtr(st,at)]+Eπθ[t=0γt(γVπθ(st+1)Vπθ(st))]=Eπθ[t=0γt(r(st,at)+γVπθ(st+1)Vπθ(st))]=Eπθ[t=0γtAπθ(st,at)]=t=0γtEstvπθEaπθ(st)[Aπθ(st,at)]=11λEstvπθEaπθ(st)[Aπθ(st,at)]

广义优势估计

GAE 笔记

GAE
  • 对不同TD步数的优势估计进行指数加权平均,平衡方差和偏差
δt+l=rt+l+γV(st+l+1)V(st+l)AtGAE(γ,λ)(st,at)=l=0(γλ)lδt+lAtGAE(γ,λ)(st,at)=l=0(γλ)l(rt+l+γV(st+l+1)V(st+l))
python
def compute_advantage(gamma, lmbda, td_delta):
    td_delta = td_delta.detach().numpy()
    advantage_list = []
    advantage = 0.0
    for delta in td_delta[::-1]:
        advantage = gamma * lmbda * advantage + delta
        advantage_list.append(advantage)
    advantage_list.reverse()
    return torch.tensor(advantage_list, dtype=torch.float)

PPO

背景

PPO 背景

TRPO的问题

  • 计算复杂, 每步更新运算量非常大

PPO

  • 基于TRPO的思想,但实现更简单,能学的一样好、甚至更快。

算法流程

笔记

PPO算法流程

  • 初始策略参数θ0
  • 每一次迭代,用前面训练的演员θk 和环境交互,采样大量(s,a)
  • 根据θk交互结果,估计Aπθk(st,at)
  • 采样到这组数据后,最大化目标函数,可以让θ更新很多次,
  • 由于有了重要性采样,θkθ 有差异也没关系,可以训练θ
JPPOθk(θ)=Jθk(θ)βKL(θ,θk)

重要性采样

PPO 重要性采样

策略梯度

  • 交互策略πθ:与环境交互,采集大量数据来训练πθ
  • 学习策略πθ:要训练学习的网络,πθ更新多次后,再去更新πθ
J(θ)=Eτpθ(τ)[pθ(τ)pθ(τ)R(τ)logpθ(τ)]

优势策略梯度

  • 优势作权重
J(θ)=E(st,at)πθ[Aπθ(st,at)alogpθ(atst)a]
  • 引入重要性采样
J(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aπθ(st,at)alogpθ(atst)a]
  • 优势应是演员和环境交互时计算出来的
J(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aπθ(st,at)alogpθ(atst)a]

目标函数

Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aπθ(st,at)a]Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aπθ(st,at)a]

优点

  • 可通过重要性采样把同策略换成异策略
  • 核心还是TRPO里的求解

目标函数

信息

PPO 目标函数

JPPOθ(θ)=Jθ(θ)βKL(θ,θ)Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aπθ(st,at)]JPPOθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aπθ(st,at)]βKL(θ,θ)

TRPO 目标函数

JTRPOθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aπθ(st,at)],  KL(θ,θ)δ

GAE

GAE 笔记

GAE
  • 对不同步数的TD优势估计进行指数加权平均,平衡方差和偏差
δt+l=rt+l+γV(st+l+1)V(st+l)AtGAE(γ,λ)(st,at)=l=0(γλ)lδt+lAtGAE(γ,λ)(st,at)=l=0(γλ)l(rt+l+γV(st+l+1)V(st+l))

PPO-Penalty

PPO-Penalty
  • KL散度:是约束行为上的距离,而不是参数上的距离,也因此无法使用L1L2范数等距离方法。
JPPOθ(θ)=Jθ(θ)βKL(θ,θ)
  • 自适应KL散度,自动调节β,设置最大值和最小值,自动调节
    • KL(θ,θ)>KLmax: 相距太远,没有起效果,应该增大β
    • KL(θ,θ)<KLmin: 相距太近,KL太强了,应该减小β

PPO-Clip

PPO-Clip

核心思想

  • 不做KL散度,直接做裁剪,约束变化范围,希望采样策略和学习策略不要差距太大。
JPPOθ(θ)=st,atmin(pθ(atst)pθ(atst)Aπθ(st,at),clip(pθ(atst)pθ(atst),1ϵ,1+ϵ)Aπθ(st,at))

缺点不足

PPO不足

GAE带来的计算开销大、训练不稳定

  • GAE 主要依赖于单步时序误差
δ=rt+γV(st+1)V(st)
  • 计算TDError之前,需为每个token计算奖励价值
    • 每个token的价值需由独立的Critic模型计算得到
    • Critic通常和策略模型同架构和大小,Critic计算开销非常大,且训练不稳定导致 无法提供准确的价值信号

GRPO

背景

GRPO 背景

解决PPO训练开销大,训练不稳定的

  • 不用GAE

核心思想

GRPO 核心思想

Group Relative Policy Optimization

  • 核心思想
    • 把多次采样的奖励均值,作为优势估计的baseline,避免单独优化Critic模型带来的麻烦
  • 具体操作
    • 对1个输入1q,多次rollout
      • 采样一组G个输出{o1,o2,,oG},为每个样本计算奖励得{r1,r2,,rG}
    • 单个样本中的所有token 共享一个优势
      • 优势计算:减去组内奖励均值、除以标准差
A^i,t=r^i=rimean(r)std(r)
总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025