PPO(Proximal Policy Optimization)算法原理及实现,详解近端策略优化

 近端策略优化(PPO),它的性能与最先进的方法相当或更好,同时更容易实现和调整。PPO因其易用性和良好的性能成为OpenAI默认的强化学习算法。(2017年,openAI官网发布)

Proximal Policy Optimization (openai.com)

官方代码:

openAI给出的ppo官方代码OpenAI Baselines: high-quality implementations of reinforcement learning algorithms - openai/baselinesicon-default.png?t=N7T8https://github.com/openai/baselines官方论文参考:

openAI论文icon-default.png?t=N7T8https://arxiv.org/abs/1707.06347

具体步骤是怎样的?
PPO算法的具体步骤是基于对策略梯度方法的改进,它主要包括以下几个关键的步骤:

1、收集数据:通过在环境中执行当前策略(policy)来收集一组交互数据。这些数据包括状态(state)、动作(action)、奖励(reward)以及可能的下一个状态。

2、计算优势估计:为了评价一个动作相对于平均水平的好坏,需要计算优势函数(advantage function)。这通常是通过某种形式的时间差分(TD)估计或者广义优势估计(GAE)来完成的。

3、优化目标函数:PPO算法使用一个特殊设计的目标函数,r_t({\theta})=\frac{\pi_\theta (a_t|s_t)}{\pi_{\theta_{}old} (a_t|s_t)}这个函数涉及到概率比率
 表示旧策略。目标函数的形式通常为:
L(\theta )=E(min(r_t(\theta )\hat{A},clip(r_t(\theta ),1-\epsilon,1+\epsilon )\hat{A})

其中,\hat{A}是优势函数的估计\epsilon是一个小的正数(如0.1或0.2),clip 函数限制了概率比率r_t(\theta )
 (θ)的变化范围,防止更新步骤过大。

4、更新策略:使用梯度上升方法来更新策略参数\theta,即 \theta \leftarrow \theta + \alpha \nabla_\theta L(\theta),其中\alpha是学习率。

5、重复步骤:使用新的策略参数重复以上步骤,直到满足某些停止准则,比如策略性能不再提升或者已经达到了一定的迭代次数。

PPO算法的关键之处在于它通过限制策略更新的幅度,使得学习过程更加稳定。在每次更新时,概率比率r_t(\theta )被限制在[1-\epsilon, 1+\epsilon]范围内,防止由于单个数据点导致的极端策略更新,这有助于避免策略性能的急剧下降。同时,PPO允许在每次迭代中使用相同的数据多次进行策略更新,这提高了数据效率。

​​​​​​​
     

1、Policy Gradient(PG)算法

1.1、算法的数学概念

在PG算法中,Agent又被称为Actor,Actor对于一个特定的任务,都有自己的一个策略π,策略π通常用一个神经网络表示,其参数为θ。从一个特定的状态state出发,一直到任务的结束,被称为一个完整的eposide,在每一步,我们都能获得一个奖励r,一个完整的任务所获得的最终奖励被称为R。这样,一个有T个时刻的eposide,Actor不断与环境交互,形成如下的序列τ:

这样一个序列τ是不确定的,因为Actor在不同state下所采取的action可能是不同的,一个序列τ发生的概率为:

序列τ所获得的奖励为每个阶段所得到的奖励的和,称为R(τ)。因此,在Actor的策略为π的情况下,所能获得的期望奖励为:

而我们的期望是调整Actor的策略π,使得期望奖励最大化,于是有了策略梯度的方法,既然期望函数已经有了,只要使用梯度提升的方法更新我们的网络参数θ(即更新策略π)就好了,所以问题的重点变为了求参数的梯度。梯度的求解过程如下

上面的过程中,首先利用log函数求导的特点进行转化随后用N次采样的平均值来近似期望,最后,将pθ展开(1-Tn),将与θ无关的项去掉,即得到了最终的结果。

所以,一个PG方法的完整过程如下:

首先采集数据,然后基于前面得到的梯度提升的式子更新参数,随后再根据更新后的策略再采集数据,再更新参数,如此循环进行。

注意到图中的大红字only used once,因为在更新参数后,策略已经变了,而先前的数据是基于更新参数前的策略得到的。

1.2、Tip1:增加一个基线(baseline)

通过上面的介绍你可能发现了,PG方法在更新策略时,基本思想就是增加reward大的动作出现的概率,减小reward小的策略出现的概率

假设现在有一种情况,我们的reward在无论何时都是正的,对于没有采样到的动作,它的reward是0。因此,如果一个比较好的动作没有被采样到,而采样到的不好的动作得到了一个比较小的正reward,那么没有被采样到的好动作的出现概率会越来越小,这显然是不合适的,因此我们需要增加一个奖励的基线,让reward有正有负。
一般增加的基线是所获得奖励的平均值:

1.3、Tip2:增加折扣因子


这个很容易理解,就像买股票一样,未来的1块钱的价值要小于当前1块钱的价值,因此未来的1块钱变成现在的价值,需要进行一定的折扣

1.3、Tip3:使用优势函数

我们之前介绍的PG方法,对于同一个eposide中的所有数据,使用的奖励都是一样的,其实与st和at相关的。

这里我们使用的是优势函数,即Qπ(st,at) - Vπ(st)。其中Qπ(st,at)可以使用从当前状态开始到eposide结束的奖励折现和得到Vπ(st)可以通过一个critic来计算得到

2、PPO算法原理简介

接着

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值