Reinforcement Learning - 策略梯度和近端策略优化(PPO)

策略梯度(Policy Gradient)

在这里插入图片描述

在 reinforcement learning 中有 3 个components,actor,environment,reward function。
举例子说明
让机器玩 video game 时,

  • actor 做的事情就是去操控游戏的摇杆, 比如说向左、向右、开火等操作;
  • environment 就是游戏的主机, 负责控制游戏的画面负责控制说,怪物要怎么移动, 你现在要看到什么画面等等;
  • reward function 就是当你做什么事情,发生什么状况的时候,你可以得到多少分数, 比如说杀一只怪兽得到 20 分等等

在 reinforcement learning 里面,environment 跟 reward function 不是你可以控制的,environment 跟 reward function 是在开始学习之前,就已经事先给定的。你唯一能做的事情是调整 actor 里面的 policy(policy 决定了 actor 的行为),使得 actor 可以得到最大的 reward。

  • Policy 一般写成 π \pi π。假设你是用 deep learning 的技术来做 reinforcement learning 的话,policy 就是一个 network。Network 里面就有一堆参数, 我们用 θ \theta θ 来代表 π \pi π 的参数。
  • Network 的 input 就是现在 machine 看到的东西(observation),如果让 machine 打电玩的话,machine 看到的东西就是游戏的画面.
  • Output 的就是机器要采取什么样的行为(action)。

一场游戏叫做一个 episode(回合) 或者 trial(试验)。把这个游戏里面,所有得到的 reward 都总合起来,就是 total reward,我们称其为return(回报),用 R 来表示它。Actor 要想办法去 maximize 它可以得到的 reward。
在一场游戏里面,我们把 environment 输出的 s s s 跟 actor 输出的行为 a a a合并为一个序列,叫做Trajectory。
T r a j e c t o r y   τ = s 1 , a 1 , s 2 , a 2 . . . s t , a t Trajectory\ \tau={s_1,a_1,s_2,a_2...s_t,a_t} Trajectory τ=s1,a1,s2,a2...st,at
θ \theta θ给定后,我们可以计算每一个 τ \tau τ出现的概率。
P θ ( τ ) = P ( s 1 ) P ( a 1 ∣ s 1 ) P ( s 2 ∣ a 1 , s 1 ) P ( a 2 ∣ s 2 ) P ( s 3 ∣ s 2 , a 2 ) . . . . = p ( s 1 ) ∏ t = 1 T P θ ( a t ∣ s t ) P ( s t + 1 ∣ s t , a t ) P_{\theta}(\tau)=P(s_1)P(a_1|s_1)P(s_2|a_1,s_1)P(a_2|s_2)P(s_3|s_2,a_2).... \\=p(s_1)\prod_{t=1}^T P_{\theta}(a_t|s_t)P(s_{t+1}|s_t,a_t) Pθ(τ)=P(s1)P(a1s1)P(s2a1,s1)P(a2s2)P(s3s2,a2)....=p(s1)t=1TPθ(atst)P(st+1st,at)
由上式可以得知, s t s_t st只取决于 s t − 1 和 a t − 1 s_{t-1}和a_{t-1} st1at1,而 a t a_t at只取决于 s t s_t st
同时,每个 τ \tau τ都会带来一定的reward,由于 τ \tau τ的随机性,reward也是随机变量,因此我们需要计算他的期望值。因此在 θ \theta θ确定的情况下,我们对reward求期望。

在这里插入图片描述
而为了计算这个期望值,我们需要对 θ \theta θ不变的情况下,穷举出 τ \tau τ的情况和概率。

1.1、推导策略梯度

在得出关于 θ \theta θ的reward函数之后,我们对 θ \theta θ求梯度,去求解最大的reward。
在这里插入图片描述
首先,我们需要知道公式: ∇ f ( x ) = f ( x ) ∇ l o g f ( x ) ∇f(x)=f(x)∇logf(x) f(x)=f(x)logf(x)
由此我们得到: ∇ P θ ( τ ) = P θ ( t a u ) ∇ log ⁡ P θ \nabla P_{\theta}(\tau)=P_{\theta}(tau)∇\log{P_{\theta}} Pθ(τ)=Pθ(tau)logPθ
P θ ( τ ) P_{\theta}(\tau) Pθ(τ)里面有两种因式, P θ ( a t ∣ s t ) P_{\theta}(a_t|s_t) Pθ(atst) P θ ( a t + 1 ∣ a t , s t ) P_{\theta}(a_{t+1}|a_t,s_t) Pθ(at+1at,st)。而 P θ ( a t + 1 ∣ a t , s t ) P_{\theta}(a_{t+1}|a_t,s_t) Pθ(at+1at,st)是由环境决定的从而与 θ \theta θ无关,因此 ∇ log ⁡ P θ ( a t + 1 ∣ a t , s t ) = 0 \nabla\log P_{\theta}(a_{t+1}|a_t,s_t)=0 logPθ(at+1at,st)=0.
在这里插入图片描述

1.2、Tips

1.2.1、first tip

在这里插入图片描述
如果 given state s 采取 action a 会给你整场游戏正面的 reward,就要增加它的概率。如果 state s 执行 action a,整场游戏得到负的 reward,就要减少这一项的概率。
但在很多游戏里面, r e w a r d ≥ 0 reward \geq 0 reward0。举一个例子:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

假设你在某一个 state 有 3 个 action a/b/c可以执行。根据这个式子,你要把这 3 项的概率, log probability 都拉高。 但是它们前面 weight 的这个 R 是不一样的。 R 是有大有小的,weight 小的,它上升的就少,weight 多的,它上升的就大一点。 因为这个 log probability,它是一个概率,所以action a、b、c 的和要是 0。 所以上升少的,在做完 normalize 以后, 它其实就是下降的,上升的多的,才会上升。但是这是一个理想状况。实际上,在真正的学习过程中,某些action并没有被sample到,导致其他action的概率上升而未被sample的action下降。但是这并不代表这些action不会带来正reward。因此我们reward减掉一项b,叫做baseline。
为什么这么做?
所以如果得到的 total reward R ( τ n ) R(\tau^n) R(τn)大于 b 的话,就让它的概率上升。如果这个 total reward 小于 b,就算它是正的,正的很小也是不好的,你就要让这一项的概率下降。
在这里插入图片描述

我们把 R − b R-b Rb称为advantage function,用 A A A来代表。Advantage function 的意义就是,假设我们在某一个 s t a t e s t state s_t statest 执行某一个 a c t i o n a t action a_t actionat ​,相较于其他可能的 action,它有多好。它在意的不是一个绝对的好,而是相对的好,即相对优势(relative advantage)。因为会减掉一个 b,减掉一个 baseline, 所以这个东西是相对的好,不是绝对的好。 A θ ( s t , a t ) A^{\theta}\left(s_{t}, a_{t}\right) Aθ(st,at) 通常可以是由一个 network estimate 出来的,这个 network 叫做 critic。

1.2.2、second tip

第二个tip:给每个action合适的credit。
在这里插入图片描述
在一场游戏种,最好的 R ( τ n ) R(\tau^n) R(τn)得到提升并不代表每个行为都是正确的,同理 R ( τ n ) R(\tau^n) R(τn)的下降也不代表每个行为都是错的。所以我们希望可以给每一个不同的 action 前面都乘上不同的 weight。每一个 action 的不同 weight, 它反映了每一个 action 到底是好还是不好。
在这里插入图片描述
在这里插入图片描述
以上面两个图为例,第一个图的+3并不代表 s t a t e s b state s_b statesb执行 a 2 a_2 a2是好的,主要是由于 s a s_a sa a 1 a_1 a1 R R R由+3变为-7,也是由于 s a s_a sa的action导致的,可能与 s b s_b sb的action无关。所以 s t a t e s b state s_b statesb执行 a 2 a_2 a2可能只是会导致-2而与-5无关。
但是假设我们今天 sample 到这项的次数够多,把所有发生这件事情的情况的分数通通都集合起来, 那可能不是一个问题。但现在的问题就是,我们 sample 的次数是不够多的。在 sample 的次数不够多的情况下,你要给每一个 state 跟 action pair 合理的 credit,你要让大家知道它合理的 contribution。怎么给它一个合理的 contribution 呢? 一个做法是计算这个 pair 的 reward 的时候,不把整场游戏得到的 reward 全部加起来,只计算从这一个 action 执行以后所得到的 reward。
在这里插入图片描述
再进一步,我们把未来的 reward 做一个 discount,由此得到的回报被称为 Discounted Return(折扣回报)。
在这里插入图片描述

1.2、计算策略梯度

在这里插入图片描述
我们前面提到policy function其实就是neural network(这也是DRL最大特征)。所以这个梯度计算我们完全可以利用监督学习的network去理解。

1.2.1、监督式学习

在这里插入图片描述

在实际应用中,我们希望网络的输出尽可能逼近实际情况我们采取交叉熵(Cross Entropy)去评价两个概率分布的差距。

1.2.2、policy Gradient

在这里插入图片描述
policy function预测每个状态下行动的概率。我们将网络的输出和实际动作求交叉熵(这里注意:和监督学习不同,这里没有标签,所以使用实际动作)。为了让网络往正确的方向更新,这里需要乘以一个奖励回报 G t G_t Gt。这个奖励回报相当于对真实action的评价, G t G_t Gt越大,权重就越大,优化力度更大一些。
类比监督式学习的loss,policy gradient其实没有本质不同,都是网络输出和实际需要的概率分布差距。而优化方向就是减小这个差距。

1.2.3、整个流程

在这里插入图片描述
上图是 REINFORCE 的流程图。首先我们需要一个 policy model 来输出动作概率,输出动作概率后,我们用 sample 函数去得到一个具体的动作,然后跟环境交互过后,我们可以得到一整个 episode 的数据。拿到 episode 数据之后,我再去执行一下 learn() 函数,在 learn() 函数里面,我就可以拿这些数据去构造 loss function,扔给这个优化器去优化,去更新我的 policy model。

蒙特卡洛(MC)和时序差分

在这里插入图片描述

2、PPO(近端策略优化)

on-policy 和 off-policy 这两种 training 方法的区别。

  • 如果要 learn 的 agent 跟和环境互动的 agent 是同一个的话, 这个叫做on-policy(同策略)。
  • 如果要 learn 的 agent 跟和环境互动的 agent 不是同一个的话, 那这个叫做off-policy(异策略)。
    为什么我们会想要考虑 off-policy ?让我们来想想 policy gradient。Policy gradient 是 on-policy 的做法,因为在做 policy gradient 时, actor 先去跟环境互动去搜集资料,搜集很多的 τ \tau τ,根据它搜集到的资料,会按照 policy gradient 的式子去 update policy 的参数。所以 policy gradient 是一个 on-policy 的 algorithm。但是这种方法需要每次重新collect数据,所以我们尝试使用另外一个policy和actor θ ′ \theta^\prime θ去sample数据,那么 θ \theta θ可以update多次。

2.1、importance sampling

如何实现上诉的off-policy过程呢?
假设我有一个function f(x) ,我无法对其进行积分,但是现在需要计算f(x)的期望。一般方法是sample data,然后把data代入到f(x)中,取均值。
如果我们无法sample data呢?但我们有distribution q 去sample,所以我们可以应用下面这个式子:
在这里插入图片描述
我们去q中sample x,然去计算 f ( x ) p ( x ) q ( x ) f(x)\frac {p(x)}{q(x)} f(x)q(x)p(x)的期望值。
因此,我们可以使用importance sampling把on-policy的问题变为了off-policy的问题。
在这里插入图片描述
做 policy gradient 的时候,也是同样。
在这里插入图片描述
注意图片的红色斜杠,这里我们假设 p θ ( s t ) = p θ ′ ( s t ) p_{\theta}(s_t)=p_{\theta^\prime}(s_t) pθ(st)=pθ(st)。由于参数 θ \theta θ和参数 θ ′ \theta^\prime θ分别和环境互动时,同一个 s t s_t st出现的概率无法计算,所以选择相同作为处理方法。
但是 p θ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ(atst)很好算。policy function 就是一个network,你就把 s t s_t st输入网络中去,网络就会输出 a t a_t at的概率即 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst)
其中 j θ ′ ( θ ) j^{\theta^\prime}(\theta) jθ(θ)是反推出来的原函数。

2.1.1、issue of importance sampling

但 importance sampling 有一个 issue,虽然理论上可以换成其他任何分布,但是如果 p θ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta^\prime}(a_t|s_t) pθ(atst)差太多的话,这两个 distribution 差太多的话,importance sampling 的结果就会不好。
p是原分布,q是另一个分布。
在这里插入图片描述
上式可以看出mean相同,不代表variance相同。根据上图推导式, p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)的值过大,variance就会相差很大。这样会导致的结果是,一旦sample的数据不够多,会导致非常大的差距,实操与理论不符合。
举个例子。
在这里插入图片描述
上图中,先sample q(x),如果你的sample次数不够多,那么大多数数据在右侧而q(x)为正数,所以计算出等式右侧是正数。同理,等式左侧是负数。但是理论上等式左右两侧都是负数。
所以PPO就是避免两个distribution差太多。

2.2、Proximal Policy Optimization

PPO的出现是为了避免 p θ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta^\prime}(a_t|s_t) pθ(atst)差太多,但不是 θ \theta θ θ ′ \theta^\prime θ差太多,因为刚刚的推导式中是参数 θ \theta θ下的network计算出的概率。
在这里插入图片描述
TRPO(Trust Region Policy Optimization)是PPO的前身,计算上和代码实现上,PPO会简单许多。
Q:KL divergence 到底指的是什么?
A:虽然KL的参数是 θ \theta θ θ ′ \theta^\prime θ,但是实际上他计算的是对应 θ \theta θ下action的距离。这也是PPO的目的。
最终PPO的算法如下
在这里插入图片描述

2.2.1、PPO-Penalty

在这里插入图片描述
在 PPO 的 paper 里面还有一个 adaptive KL divergence。 β \beta β 要设多少呢?这里有个动态调整 β \beta β的方法。

  • 在这个方法里面呢,你先设一个 KL divergence,你可以接受的最大值。然后假设你发现说你 optimize 完这个式子以后,KL divergence 的项太大,那就代表说后面这个 penalize 的 term 没有发挥作用,那就把 β \beta β 调大。
  • 那另外你定一个 KL divergence 的最小值。如果发现 optimize 完上面这个式子以后,KL divergence 比最小值还要小,那代表后面这一项的效果太强了。所以减少$ \beta$。

2.2.1、PPO-Clip

因为这个式子想要做的事情就是希望 p θ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta^\prime}(a_t|s_t) pθ(atst),也就是你拿来做 demonstration 的 model 跟你实际上 learn 的 model,在 optimize 以后不要差距太大。
在这里插入图片描述
第二项前面有个 clip function,他的作用是:
在括号里面有 3 项,如果第一项小于第二项的话,那就 output 1 − ε 1-\varepsilon 1ε 。第一项如果大于第三项的话,那就output 1 + ε 1+\varepsilon 1+ε
在这里插入图片描述
解释:
当A>0时,也就是某一个 state-action 的 pair 是好的,那我们希望增加这个 state-action pair 的概率。 p θ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ(atst)会越大越好,但它跟 p θ k ( a t ∣ s t ) p_{\theta^k}(a_t|s_t) pθk(atst)的比值不可以超过 1 + ε 1+\varepsilon 1+ε。当 p θ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ(atst)被train到 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) > 1 + ε \frac{p_{\theta}(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} > 1+\varepsilon pθk(atst)pθ(atst)>1+ε时,就停止。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值