离线策略强化学习
对于基于策略的强化学习,通过建立带θ\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θ(at∣st)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θ′(at∣st)Pθ′(st)Pθ(at∣st)Pθ(st)∇θlogPθ(at∣st)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θ′(at∣st)Pθ(at∣st)∇θlogPθ(at∣st)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θ′(at∣st)1∇θPθ(at∣st)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θ′(at∣st)Pθ(at∣st)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
本文介绍了离线策略强化学习的概念,探讨了重要性采样在策略梯度中的应用,以及由此引出的离线策略梯度计算方法。重点讲解了PPO算法,如何通过KL散度约束来保持采样策略和目标策略的分布接近,并介绍了PPO2算法通过梯度裁剪简化这一过程。
3612

被折叠的 条评论
为什么被折叠?



