Skip to content

策略梯度算法

📅 发表于 2025/08/31
🔄 更新于 2025/08/31
👁️ -- 次访问
📝 0 字
0 分钟
rl-theory
#策略梯度
#轨迹概率
#轨迹回报
#对数微分技巧
#梯度上升法
#策略梯度目标函数
#策略梯度loss
#策略函数设计
#logits_p
#权重
#基线
#优势函数
#降低方差
#策略梯度分类
#蒙特卡洛策略梯度
#时序差分策略梯度
#REINFORCE算法
#REINOFRCE++

基于策略的算法

对策略参数化,直接对策略进行优化。

策略梯度算法

假设策略πθ(as),是关于θ连续可微函数;用梯度上升算法 直接对策略参数θ进行优化使目标函数J(θ)最大J(θ)是策略的期望奖励。

J(θ)=Eτpθ(τ)[R(τ)]=τpθ(τ)R(τ)

目标函数

目标函数

轨迹概率pθ(τ)

pθ(τ)=p(s0)πθ(a0s0)p(s1s0,a0)πθ(a1s1)p(s2s1,a1)=p(s0)t=0Tpθ(atst)p(st+1st,at)

目标函数J(θ):策略的价值期望/期望奖励

  • 调整演员内部参数θ使得Rθ的期望值最大
J(θ)=R¯πθ=Eτpθ(τ)[R(τ)]=τpθ(τ)R(τ)

轨迹奖励R(τ),Gt,Gtn

  • R(τ) 是一个随机变量,非标量,和策略参数θ无关
    • 同一状态下采取的动作不一定相同,策略依概率选择,有随机性
R(τ)=G(τ)=r0+γr1+γTrT=t=1Tγt1rt
  • Gt:某条轨迹从时刻t开始到结束的累计奖励
Gt=k=t+1Tγkt1rk=rt+1+γGt+1
  • Gtn第n条轨迹从t时刻开始到结束的累计奖励
Gtn=k=t+1Tnγkt1rkn=rkn+γGt+1n
  • G由交互得到,非常不稳定,方差很大

轨迹

目标函数,期望奖励

策略梯度定义

策略梯度定义

目标函数

J(θ)=τR(τ)pθ(τ)=Eτpθ(τ)[R(τ)]

策略梯度定义

J(θ)=τR(τ)pθ(τ)

策略梯度推导结果

J(θ)=1Nn=1Nt=0TnG(τn)logpθ(atnstn)J(θ)=1Nn=1Nt=0TnG(τn)logpθ(atnstn)a

策略梯度推导过程

两个对数技巧

对数定义

  • 对数定义:log(x)=loge(x),国际新标log是以e为底的对数
y=log(x)ey=x
  • 对数导数
f(x)=log(x)f(x)=log(x)=1x
  • 导数链式法则
g(x)=logf(x)    g(x)=log(f(x))=1f(x)f(x)

对数乘法公式

log(ab)=loga+logb

对数微分技巧‼️

logf(x)x=1f(x)f(x)    logf(x)=1f(x)f(x)f(x)=f(x)logf(x)
策略梯度推导过程

1. 对数拆解梯度pθ(τ)

  • 对数微分拆解为期望形式
J(θ)=τR(τ)pθ(τ)=τR(τ)pθ(τ)logpθ(τ)=Eτpθ(τ)[R(τ)logpθ(τ)]
  • 推导结果
J(θ)=Eτpθ(τ)[R(τ)logpθ(τ)]

2. 细拆轨迹概率梯度 logpθ(τ)

  • 代入轨迹概率的 动作策略π状态转移概率 p去掉无关项
logpθ(τ)=log(p(s0)t=0Tπ(atst)p(st+1st,at))=(logp(s0)+t=0Tlogpθ(atst)+t=0Tlogp(st+1st,at))=logp(s0)θ, 0+t=0Tlogpθ(atst)θ, 0+t=0Tlogp(st+1st,at)θ,0=t=0Tlogpθ(atst)
  • 推导结果
logpθ(τ)=t=0Tlogpθ(atst)

3. 采样计算策略梯度

  • 采样N条轨迹代回细拆项求解最终公式
J(θ)=Eτpθ(τ)[R(τ)logpθ(τ)]=1Nn=1NR(τ)logpθ(τ)=1Ni=1NR(τn)t=0Tnlogpθ(atnstn)=1Nn=1Nt=0TnG(τn)logpθ(atnstn)
  • 推导结果
J(θ)=1Nn=1Nt=0TnG(τn)logpθ(atnstn)

参数学习过程

策略梯度学习过程

数据采样

  • 利用θ参数的actor和环境交互采集n条样本,收集每条样本的奖励。
  • 每个样本只使用一次
    • 模型更新完成后 ,需重新采样才能更新模型

梯度计算

  • 为每一对(s,a)
    • 计算对数概率 logpθ(atnstn)
    • 对数概率取梯度,并乘以权重 ,即回报G(τn)
  • 代入策略梯度函数求出整体梯度
J(θ)=1Nn=1Nt=0TnG(τn)logpθ(atnstn)

梯度上升法做参数更新

  • 最大化目标函数 J(θ)
θθ+αJ(θ)

策略梯度loss

策略梯度loss

策略梯度loss

传统交叉熵/监督学习loss

  • 预测值,有真实值,做交叉熵评判准确程度
H(p,q)=xXp(x)logq(x)H(y,y)=iyi,logyi,H(y,y)=ilogyi,

策略梯度loss-轨迹粒度

  • 轨迹回报越高希望轨迹概率也越高,即二者同分布,使用交叉熵来衡量,非常合适
  • R(τ)代表实际回报,代替真实分布
L(θ)=τpθ(τ)R(τ)logpθ(τ)

策略梯度loss-动作粒度

  • 预测动作,但并没有真实动作作为参考
  • 所以使用奖励回报/优势函数等作为权重,表示动作的好坏
    • 动作回报越小,表明动作at不好loss权重应该降低优化粒度小一点
    • 动作回报越大,表明动作at较好loss权重应该增加优化粒度大一点
loss=Gtlogpθ(atst)

策略函数设计

随机策略,输入状态s,输出对应动作概率分布

离散策略函数设计

Softmax计算概率

  • ϕ(s,a)是模型输出前面一层,计算softmax得出概率
πθ(sa)=pθ(as)=eϕ(s,a)aAeϕ(s,a)

一般ϕ(s,a)和softmax合在一起的

  • 最终策略梯度如下,一般写作logits_p,对应的 pθ(s,a) 叫做 probs
θlogπθ(sa)=logpθ(s,a)=logits_p
连续动作空间策略函数

策略动作从高斯分布得出

  • 在模型最后一层输出均值和方差两个值,来构建一个高斯分布,进行采样即可
N(ϕ(s)θ,σ2)θlogπθ(sa)=(aϕ(s)θ)ϕ(s)σ2

策略梯度权重多种形式

策略梯度权重多种形式

策略梯度形式

J(θ)=1Nn=1Nt=0TnΨtlogpθ(atnstn)a

权重Ψt的7种表现形式

  • G(τ) 轨迹总奖励
R(τ)=G(τ)=r0+γr1+γTrT=t=1Tγt1rt
  • Gt 动作at的奖励
Gt=k=t+1Tγkt1rk=rt+1+γGt+1
  • Gtb(st) 动作at奖励减去偏移量
Gtb(st)
  • Qπ(st,at) 状态动作值函数
Qπ(st,at)
  • Aπ(st,at) 优势函数
Aπ(st,at)=Qπ(st,at)Vπ(st)
  • TD误差
Aπ(st,at)=rt+1+γVπ(st+1)Vπ(st)TD
  • GAE
AtGAE(γ,λ)(st,at)=l=0(γλ)lδt+lAtGAE(γ,λ)(st,at)=l=0(γλ)l(rt+l+γV(st+l+1)V(st+l))

策略梯度重要技巧

朴素PG权重存在问题

朴素PG做法
  • G(τ)作为权重恒大于0 有大有小
  • 一条轨迹内,为所有动作a分配相同的权重
J(θ)=1Nn=1Nt=0TnG(τn)logpθ(atnstn)a
问题1:权重恒大于0

理想情况

  • 在某状态s,有3个可执行动作abc
  • 现在需把3个动作概率都提高权重大的,提高的多权重小的,提高的少
  • 做完权重归一化后权重大的,概率上升权重小的,概率下降

MC采样实际情况

  • 有3个动作,但可能只采样到动作b和c没采到动作a。现要提升s所有动作概率
  • 由于没有采样到a实际仅提升b和c的概率会导致a的概率下降
  • 这就明显有问题a可能很好,由于没被采样就导致概率下降

方差较大

  • G(τ) 采样方差较大。
问题2:一条轨迹内所有动作权重都相同

问题

  • 为一条轨迹内,所有动作都使用相同的权重显然是不公平的
  • 有的动作可能好,贡献的多需提升概率;有的动作可能差,贡献的少需要降低概率

添加基线/优势函数

权重添加基线/优势函数

背景

  • 解决权重 R(τ)恒大于0带来的问题(未采样动作概率更新+方差大。)
  • 加上基线,使其有正有负,降低反差。

核心思想

  • 添加基线函数b,使用新权重 R(τ)b有正有负
    • R(τ)b>0超过基线,让(s,a)概率上升
    • R(τ)b<0低于基线,让(s,a)概率下降
J(θ)=1Nn=1Nt=0Tn(R(τn)b)线logpθ(atnstn)a
  • Rb:也称为优势函数

基线函数b的选择

  • 平均值 b=E[G(τ)],V(s):不断把G(τ)值记录下来,求平均即可
  • R和b相关性越高方差越小,公式推导出来的。
降低方差方法的公式推导

目的

  • 估计E[f],构造新估计量f^,使得
    • 无偏性E[f]=E[f^]
    • 减小方差Var(f^)<Var(f)

核心方法

  • 构建f^:引入一个f相关的辅助函数gE[g]已知。
f^=fα(gE[g])
  • 保证无偏性推导期望:推导可知E[f^]=E[f]
E[f^]=E[f]αE(gE[g])=E[f]α(E[g]E[g])=E[f]Var(f^)=Var(fα(gE[g]))=Var(fαg)=Var(f)+α2Var(g)2αCov(f,g)
  • 最小方差求解求解极值点 α取值
    • 方差恒为正,是常数;根据上式可知Var(f^)是关于α凹函数必然存在极小值
    • 求导数并使其为0,求解出最小值时的取值。
Var(f^)α=2αVar(g)2Cov(f,g)=0:α=Cov(f,g)Var(g)
  • 最小方差求解代回极值点求解出最小值
Var(f^)=Var(f)+Cov2(f,g)Var(g)2Cov2(f,g)Var(g)=Var(f)Cov2(f,g)Var(g)=Var(f)(1Cov2(f,g)Var(f)Var(g))=Var(f)(1ρ2(f,g)))

结论

  • 方差极小值fg的相关性越高,Var(f^)越小

分配合适的分数

分配合适的分数

背景

  • 解决同一轨迹内所有动作权重都相同的问题
  • 使其有区分度,鼓励好的动作抑制差的动作

方法1:使用动作时刻t后面的奖励

  • 动作(st,at)的权重
    • 不用时刻0到结束的总奖励,而用动作时刻t开始到结束的总奖励
    • 不用G(τ),改Gt作为(st,at)的权重
J(θ)=1Nn=1Nt=0Tn(Gtnb)线logpθ(atnstn)aGtn=k=t+1Tnγkt1rkn=rkn+γGt+1n

方法2:使用优势函数Aθ(st,at)

  • 优势函数Aθ(st,at):在状态s采取动作a相对于其他动作的优势
  • 优势函数Aθ(st,at):一般由网络估计出来,称为critic评论员
J(θ)=1Nn=1Nt=0TnAθ(stn,atn)logpθ(atnstn)a

不同动作贡献不同,权重也应该不同:

策略梯度算法分类

分类概览

策略梯度分类概览

MC 蒙特卡洛方法

  • 回合更新使用Gt作为权重
  • REINFORCE算法
J(θ)=1Nn=1Nt=0TnGtnlogpθ(atnstn)a

TD 时序差分方法

  • 步骤更新TD估计Q函数,作为权重
  • Actor-Critic算法
J(θ)=1Nn=1Nt=0TnQn(stn,atn)Qlogpθ(atnstn)a

蒙特卡洛策略梯度优缺点

MC 策略梯度 优缺点

优点 (相比于基于价值的算法)

  • 适用于连续动作空间
  • 适用于随机性策略
  • 计算出的策略梯度是无偏的基于价值的算法则是有偏的

缺点

  • 采样效率低MC采样 不如 TD采样
  • 高方差MC高方差,估计梯度时甚至比基于价值的算法方差还高;G很不稳定
  • 收敛性差:容易导致局部最优解
  • 难以处理高维离散动作空间

蒙特卡罗策略梯度

REINFORCE 算法

REINFORCE 核心思想

核心思想

  • 在策略梯度基础上,使用Gt作为动作权重一个回合更新一次
J(θ)=1Nn=1Nt=0TnGtnlogpθ(atnstn)aGt=k=t+1Tγkt1rk=rt+1+γGt+1
  • 回合数据

算法步骤

  • 根据策略采样一个回合数据;采样后,从0到T每时刻 根据(st,at,Gt)做参数更新
(s0,a0,r0),(s1,a1,r1),,(sT,aT,rT)(s0,a0,G0),(s1,a1,G1),,(sT,aT,GT)
  • 计算每时刻Gt权重
Gt=k=t+1Tγkt1rk=rt+1+γGt+1
  • 计算动作策略梯度(st,at) 对数概率梯度
logpθ(atst)
  • 每时刻更新参数
θθ+αγtGtlogpθ(atst)

算法流程

伪代码

REINFORCE++ 算法

待定

总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025