基于离线策略的强化学习(PPO)

本文介绍了离线策略强化学习的概念,探讨了重要性采样在策略梯度中的应用,以及由此引出的离线策略梯度计算方法。重点讲解了PPO算法,如何通过KL散度约束来保持采样策略和目标策略的分布接近,并介绍了PPO2算法通过梯度裁剪简化这一过程。

离线策略强化学习

对于基于策略的强化学习,通过建立带θ\thetaθ的策略模型,通过策略梯度进行优化,梯度如下 ∇θU=Eτ−pθ(τ)[∇θlogPθ(τ)R(τ)]\nabla_\theta U=E_{\tau -p_\theta(\tau)}[\nabla_\theta log P_\theta(\tau)R(\tau)]θU=Eτpθ(τ)[θlogPθ(τ)R(τ)]
该方法是在线策略(on-policy),即学习更新的策略和与环境交互采样的策略是同一个,这带来一个问题,当进行策略参数θ\thetaθ更新后,原来旧θ\thetaθ的策略采样的数据就无法在用了,需要用新的策略采样才能进行梯度计算。这样样本利用率低,训练时间长。
因此需要将目标策略和采样策略进行分离,利用重要性采样进行梯度计算。

重要性采样

假设f(x)f(x)f(x)服从p(x)p(x)p(x)分布,求x的期望E(x)=∫p(x)xdxE(x)=\int p(x)xdxE(x)=p(x)xdx
我们想用采样的方式进行计算,但是服从p(x)p(x)p(x)分布的样本不好得到,相反,服从q(x)q(x)q(x)分布的样本好得到。因此我们想用q(x)q(x)q(x)分布的样本来代替p(x)p(x)p(x)分布的样本,显然这是有误差的,因此需要对期望进行修正。
在这里插入图片描述
其中p(x)q(x){p(x) \over q(x)}q(x)p(x)称为重要因子,相当于把q(x)q(x)q(x)分布的样本当场是真实p(x)p(x)p(x)分布的样本来计算时,需要乘上这个重要因子修正,保证这么做是可以的。
存在的问题
要求这两个分布要比较接近,差别不能太大。意味着目标学习策略的参数θ\thetaθ和采样策略的参数θ′\theta ^{\prime}θ要比较接近。

离线策略梯度

设学习目标的策略为πθπ_\thetaπθ,采样策略为πθ′π_{\theta^{\prime}}πθ
∇θU=Eτ−pθ(τ)[∇θlogPθ(τ)R(τ)]\nabla_\theta U=E_{\tau -p_\theta(\tau)}[\nabla_\theta log P_\theta(\tau)R(\tau)]θU=Eτpθ(τ)[θlogPθ(τ)R(τ)]
就变成了
∇θU=Eτ−pθ′(τ)[Pθ(τ)Pθ′(τ)∇θlogPθ(τ)R(τ)]\nabla_\theta U=E_{\tau -p_{\theta^\prime}(\tau)}[{P_\theta(\tau)\over P_{\theta^\prime}(\tau)} \nabla_\theta log P_\theta(\tau)R(\tau)]θU=Eτpθ(τ)[Pθ(τ)Pθ(τ)θlogPθ(τ)R(τ)]
R(τ)R(\tau)R(τ)用优势函数表示Aθ(st,at)A_\theta(s_t,a_t)Aθ(st,at),该优势函数其实是采样策略π′π^{\prime}π与环境采样得到的,因此实际为Aθ′(st,at)A_{\theta^{\prime}}(s_t,a_t)Aθ(st,at),Pθ(τ)P_\theta(\tau)Pθ(τ)用之前得到的状态-动作对表示,Pθ(st,at)P_\theta(s_t,a_t)Pθ(st,at)

∇θU=Eτ−pθ′(τ)[Pθ(st,at)Pθ′(st,at)∇θlogPθ(st,at)Aθ′(st,at)]\nabla_\theta U=E_{\tau -p_{\theta^\prime}(\tau)}[{P_\theta(s_t,a_t)\over P_{\theta^\prime}(s_t,a_t)} \nabla_\theta log P_\theta(s_t,a_t)A_{\theta^{\prime}}(s_t,a_t)]θU=Eτpθ(τ)[Pθ(st,at)Pθ(st,at)θlogPθ(st,at)Aθ(st,at)]
Pθ(st,at)=Pθ(at∣st)Pθ(st)P_\theta(s_t,a_t) =P_\theta(a_t|s_t)P_\theta(s_t)Pθ(st,at)=Pθ(atst)Pθ(st)
上式就变成
∇θU=Eτ−pθ′(τ)[Pθ(at∣st)Pθ(st)Pθ′(at∣st)Pθ′(st)∇θlogPθ(at∣st)Aθ′(st,at)]\nabla_\theta U=E_{\tau -p_{\theta^\prime}(\tau)}[{P_\theta(a_t|s_t)P_\theta(s_t)\over P_{\theta^\prime}(a_t|s_t)P_{\theta^\prime}(s_t)} \nabla_\theta log P_\theta(a_t|s_t)A_{\theta^{\prime}}(s_t,a_t)]θU=Eτpθ(τ)[Pθ(atst)Pθ(st)Pθ(atst)Pθ(st)θlogPθ(atst)Aθ(st,at)]
由于要求,两个的分布差距不能太大,为了计算方便,Pθ(st)Pθ′(st){P_\theta(s_t) \over P_{\theta^\prime}(s_t) }Pθ(st)Pθ(st)可以看出是1。
∇θU=Eτ−pθ′(τ)[Pθ(at∣st)Pθ′(at∣st)∇θlogPθ(at∣st)Aθ′(st,at)]\nabla_\theta U=E_{\tau -p_{\theta^\prime}(\tau)}[{P_\theta(a_t|s_t)\over P_{\theta^\prime}(a_t|s_t)} \nabla_\theta log P_\theta(a_t|s_t)A_{\theta^{\prime}}(s_t,a_t)]θU=Eτpθ(τ)[Pθ(atst)Pθ(atst)θlogPθ(atst)Aθ(st,at)]
根据∇θZ=Z∇θlogZ\nabla_\theta Z=Z\nabla_\theta logZθZ=ZθlogZ
可得 ∇θU=Eτ−pθ′(τ)[1Pθ′(at∣st)∇θPθ(at∣st)Aθ′(st,at)]\nabla_\theta U=E_{\tau -p_{\theta^\prime}(\tau)}[{1\over P_{\theta^\prime}(a_t|s_t)} \nabla_\theta P_\theta(a_t|s_t)A_{\theta^{\prime}}(s_t,a_t)]θU=Eτpθ(τ)[Pθ(atst)1θPθ(atst)Aθ(st,at)]
则逆推可以得到该梯度的目标函数
Uθ=Eτ−pθ′(τ)[Pθ(at∣st)Pθ′(at∣st)Aθ′(st,at)] U_\theta=E_{\tau -p_{\theta^\prime}(\tau)}[{P_\theta(a_t|s_t)\over P_{\theta^\prime}(a_t|s_t)} A_{\theta^{\prime}}(s_t,a_t)]Uθ=Eτpθ(τ)[Pθ(atst)Pθ(atst)Aθ(st,at)]
PPO
采样策略和目标学习策略的分布不能差异太大,为了对目标函数进行这个条件约束,可以在目标函数中,加入KL散度,进行约束。
在这里插入图片描述
这里的KL散度并不是计算参数θ\thetaθθ′\theta^{\prime}θ数值之间的差距大小,而是由这两个参数所决定的策略分布的差异,即通过一些同样状态,输入策略函数,比较两者的输出的动作差异大不大。因为可能两个分布的参数差距很小,但是实际得到的分布结果会差很多,而这里要求的是分布的差距不能太大。
在这里插入图片描述
基本流程,通过πθ′π_{\theta^{\prime}}πθ采取一些样本,利用目标函数通过这些样本进行反复更新目标策略πθπ_{\theta}πθ的参数,之后计算下两个策略之间的差异,超过事先设定的最大值,增大对散度项的惩罚。更新一下采样策略的参数,继续采样。
PPO2
PPO需要计算对于KL散度的计算比较麻烦,因此有了简化算法PPO2,两个分布不能差距太大的约束条件,利用对梯度剪切实现。
在这里插入图片描述
在这里插入图片描述
当A大于0时,我们希望增加这个动作的概率,梯度越大越好,但是梯度大这意味着两个策略的比值πθπθ′π_\theta \over π_{\theta^{\prime}}πθπθ要大,但是要求又不能太大,因此设定最大为1+ϵ\epsilonϵ,当计算出来的梯度大于这个值时,就取这个值。A小于0同理。

参考

https://zhuanlan.zhihu.com/p/78680750

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值