【强化学习】近端策略优化算法(PPO)的理解

本篇博客参考自上海大学刘树林老师的课程。B站课程链接:https://www.bilibili.com/video/BV17t4geUEvQ/?spm_id_from=333.337.search-card.all.click&vd_source=74af336a587568c23a499122c8ffbbee


传统策略梯度训练面临的问题

在这里插入图片描述

其他方法的改进

TRPO算法的贡献

传统方法容易出现策略网络不稳定的问题,基于这个问题,TRPO算法把两次策略 π \pi π的差异设置到一个很小的邻域内。简单说就是“小步、稳走、达到最优策略”。
在这里插入图片描述
下图展示了该优化方法的基本思想。目标函数是 J ( θ ) J(\theta) J(θ),该函数当前的参数是 θ n o w \theta_{now} θnow,该函数很难处理,具体参数/曲线也未知。在 θ n o w \theta_{now} θnow的邻域中,找一条更容易处理的、简单的曲线 L ( θ ∣ θ n o w ) L(\theta|\theta_{now}) L(θθnow)。函数 L ( θ ∣ θ n o w ) L(\theta|\theta_{now}) L(θθnow)和函数 J ( θ ) J(\theta) J(θ)是不一样的,但是在邻域 θ n o w \theta_{now} θnow内,函数 L ( θ ∣ θ n o w ) L(\theta|\theta_{now}) L(θθnow)是可以逼近函数 J ( θ ) J(\theta) J(θ)的。这个阈就被称作置信阈。在这个置信阈中,求曲线 L ( θ ∣ θ n o w ) L(\theta|\theta_{now}) L(θθnow)的最大值,把这个最大值对应的新参数 θ n o w \theta_{now} θnow作为下一个点继续求解。然后再求近似、求最大值…… TRPO借助了这个思想。
在这里插入图片描述
下式就是策略梯度定理, A π ( S , A ) A_{\pi}(S,A) Aπ(S,A)是优势函数。关键要解决两个问题:(1)要使得训练前后的两个策略可控;(2)旧策略收集的数据能够被策略网络多次应用以提升策略训练效果。
解决问题(1):对训练前后的两个策略施加约束;
解决问题(2):使用离轨策略。
在这里插入图片描述
下图展示了TRPO是如何解决这两个问题的。
(1)把原先的同轨策略改造成离轨策略。把现有的策略 π o l d \pi_{old} πold作为一个旧策略,让旧策略去取数据/和环境互动,把训练的策略 π n e w \pi_{new} πnew作为一个新策略。所以现在即有两个策略网络。把旧策略取到的数据 A π o l d ( S , A ) A_{\pi_{old}}(S,A) Aπold(S,A)来训练新策略,得到新策略的网络参数 θ n e w \theta_{new} θnew
(2)增加置信阈。利用KL散度进行约束。KL散度是衡量两个概率分布差异的非对称性指标。在信任域策略优化(TRPO)中,使用KL散度限制策略更新的幅度,确保新策略与旧策略的差异不超过阈值 δ \delta δ
在这里插入图片描述

PPO算法对TRPO的改进

用KL散度的目的是使得新策略和旧策略比较接近,但这样做比较麻烦。干脆取一个很小的 ϵ \epsilon ϵ,把新旧策略的比值控制在 [ 1 − ϵ , 1 + ϵ ] [1-\epsilon,1+\epsilon] [1ϵ,1+ϵ]之间。当比值超过上边界/下边界的时候,强行让比值等于对应的上下边界值。
在这里插入图片描述

PPO算法流程

在这里插入图片描述
第一模块:采集数据
第1步:将当前策略网络参数作为旧策略网络参数 θ o l d \theta_{old} θold
第2步:将初始状态 s 0 s_0 s0输入旧网络策略中,由于状态s和动作a均连续,策略网络采用随机高斯策略框架,策略网络的输出为动作a所服从正态分布的均值 μ o l d \mu_{old} μold和标准差 σ o l d \sigma_{old} σold,由此可以得到高斯分布策略函数 π o l d ( a ∣ s , θ o l d ) \pi_{old}(a|s,\theta_{old}) πold(as,θold),然后抽样选择动作: a 0 a_0 a0~ π o l d ( ⋅ ∣ s 0 , θ o l d ) \pi_{old}(·|s_0,\theta_{old}) πold(s0,θold),并与环境产生交互,环境给出相应的奖励 r 1 r_1 r1,同时状态更新为 s 1 s_1 s1,上述过程就产生了一个四元组 ( s 0 , a 0 , r 1 , s 1 ) (s_0,a_0,r_1,s_1) (s0,a0,r1,s1)。继续以上循环,可以得到多个四元组 ( s 0 , a 0 , r 1 , s 1 ) (s_0,a_0,r_1,s_1) (s0,a0,r1,s1) ( s 1 , a 1 , r 2 , s 2 ) (s_1,a_1,r_2,s_2) (s1,a1,r2,s2),…,将其储存在经验记忆库中,供训练使用

第二模块:计算状态价值函数和优势函数
第1步:从经验记忆库中按照时序依次取出四元组 ( s 0 , a 0 , r 1 , s 1 ) (s_0,a_0,r_1,s_1) (s0,a0,r1,s1) ( s 1 , a 1 , r 2 , s 2 ) (s_1,a_1,r_2,s_2) (s1,a1,r2,s2),…,将其依次输入价值网络中,计算
q 0 = V ( s 0 ; w ) 和 q 1 = V ( s 1 ; w ) , . . . q_0 = V(s_0;w) 和 q_1 = V(s_1;w),... q0=V(s0;w)q1=V(s1;w)...
第2步:计算TD目标
y 0 = r 1 + γ q 1 y_0=r_1+\gamma q_1 y0=r1+γq1
第3步:计算TD误差
δ 0 = q 0 − y 0 \delta_0=q_0-y_0 δ0=q0y0
第4步:计算优势函数 A t A_t At。优势函数 A t A_t At的引入是为了减小策略梯度中产生的方差,为了达到更好的效果,PPO-Clip算法采用了广义优势估计(GAE)近似优势函数 A t A_t At

如下图所示,A2C方法用的是下图中的 A t ( 1 ) A_t^{(1)} At(1)进行计算的,这样计算的偏差比较大。 A t ( k ) A_t^{(k)} At(k)类似于蒙特卡洛方法,但它的问题则是方差比较大。为了弥补两个方法的不足,干脆将 A t ( 1 ) A_t^{(1)} At(1) A t ( k ) A_t^{(k)} At(k)都算出来,分别求单步时序差分、两步、三步,…,再做平滑,这样就能弥补方差和偏差大的问题。这就是一种广义优势函数。
在这里插入图片描述
下图是广义优势估计的定义。这种再次加权,相当于对偏差和方差做出了平衡,这个效果比单用一个优势函数的效果要好得多。
在这里插入图片描述
第三模块:更新评估网络
第1步:计算评估网络(价值网络)的损失函数。这里用均方误差MSE(Mean Squared Error,MSE)来定义评估网络的损失函数,公式表示为针对任意时间步 t t t 时刻的预测值 V ( s t ; w ) V(s_t; w) V(st;w)与目标值 r t + 1 + γ V ( s t + 1 ; w ) r_{t+1}+ \gamma V(s_{t+1};w) rt+1+γV(st+1;w) 之间的差异。
L ( w ) = { V ( s t ; w ) − [ r t + 1 + γ V ( S t + 1 ; w ) ] } 2 L(w)= \{V(s_t; w)- [r_{t+1} + \gamma V(S_{t+1}; w)]\}^2 L(w)={V(st;w)[rt+1+γV(St+1;w)]}2
第2步:针对任意时间步时刻,计算损失函数梯度。
∇ w L ( w ) = 2 { V ( s t ; w ) − [ r t + 1 + γ V ( s t + 1 ; w ) ] } ∇ w V ( s t ; w ) = 2 δ t ∇ w V ( s t ; w ) \nabla_wL(w)=2\{V(s_t;w)-[r_{t+1} + \gamma V(s_{t+1};w)]\} \nabla_w V(s_t; w) = 2 \delta_t \nabla_w V(s_t;w) wL(w)=2{V(st;w)[rt+1+γV(st+1;w)]}wV(st;w)=2δtwV(st;w)
第3步:针对任意时间步t时刻,更新评估网络。
w ← w − 2 α δ t ∇ w ( s t ; w ) w←w-2\alpha \delta_t \nabla_w(s_t;w) ww2αδtw(st;w)
还可以采用小批量更新方法。

第四模块:更新策略网络
第1步:针对所有四元组 ( s , a , r , s ) (s,a,r,s) (s,a,r,s)中的 s s s a a a,分别由动作 a a a概率分布的均值 μ o l d \mu_{old} μold和标准差 σ o l d \sigma_{old} σold构造高斯分布旧策略函数(动作概率密度函数) π o l d ( a ∣ s , θ o l d ) \pi_{old}(a|s,\theta_{old}) πold(as,θold),并计算自然对数 l o g π o l d ( a ∣ s , θ o l d ) log \pi_{old}(a|s,\theta_{old}) logπold(as,θold)

第2步:针对本模块第1步计算出的每个 l o g π o l d ( a ∣ s , θ o l d ) log\pi_{old}(a|s,\theta_{old}) logπold(as,θold),依次单独训练当前网络。

(a)在每次训练中,将四元组 ( s t , a t , r t + 1 , s t + 1 ) (s_t,a_t,r_{t+1},s_{t+1}) (st,at,rt+1,st+1)中的 s t s_t st输入当前策略网络中由动作 a a a,概率分布的均值 μ n e w \mu_{new} μnew和标准差 σ o l d \sigma_{old} σold构造高斯分布新策略函数(动作概率密度函数) π n e w ( a t ∣ s t , θ n e w ) \pi_{new}(a_t|s_t, \theta_{new}) πnew(atst,θnew),并计算自然对数 l o g π n e w ( a t ∣ s t , θ n e w ) log\pi_{new}(a_t | s_t,\theta_{new}) logπnew(atst,θnew)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值