强化学习 Proximal Policy Optimization (PPO)

参考: 李宏毅老师课件

PPO = Policy Gradient 从 On-policy 到 Off-policy, 再加一些constraint

Policy Gradient#

Basic Conception#

  • Actor: 动作执行者(智能体)

  • Env: 环境

  • Reward Function: 奖励函数

  • Policy π : a network with parameter θ.

    Input: 当前的 Env.

    Output: actor 要采取的下一个 action 的分布.

  • Trajectory τ: 一系列的 Env 和 Action, {s1,a1,s2,a2,}
    img
    在参数为 θ 情况下, 发生τ的概率: pθ(τ)=p(s1)pθ(a1|s1)p(s2|s1,a1)pθ(a2|s2)

Optimization#

Object#

img
给定 τ, 可以计算 τ 的 reward, R(τ).

对于参数为 θ 的 Policy下, Trajectory τ 是采样得到的, 因此实际上需要计算的是 reward 的期望值Rθ. 我们希望 Rθ 越大越好.

Policy Gradient#

Reward 的期望:

(1)Rθ=τR(τ)pθ(τ)

θ 的梯度:

(2)Rθ=τR(τ)pθ(τ)=τR(τ)pθ(τ)pθ(τ)pθ(τ)分子分母同乘pθ(τ)=τR(τ)pθ(τ)logpθ(τ)=Eτpθ(τ)[R(τ)logpθ(τ)]1Nn=1NR(τn)logpθ(τn)=1Nn=1Nt=1TnR(τn)logpθ(atn|stn)

然后由 logpθ(τ)=pθ(τ)pθ(τ), 可得到第三行公式.
此处可延伸出一个公式:

(3)f(x)=f(x)logf(x)

τpθ(τ)f(τ)=Eτpθ(τ)[f(τ)], 可得第四行

通过采样的方式估计期望值, 采样 N 个 Trajectory, 既第五行公式

最后将 pθ(τ) 展开代入, 得第六行公式

Implementation#

最大化 Reward 的期望 Rθ, 由公式(2)中梯度的计算, 可以反推出目标函数在实现时定义如下:

(4)J(θ)=1Nn=1Nt=1TnR(τn)logpθ(atn|stn)

最大化 object 等价于最小化 loss:

(5)loss=1Nn=1Nt=1TnR(τn)logpθ(atn|stn)

其中, atn,stn 是在参数为 θ 的 policy 下采样得到的.

与交叉熵损失对比: 其实就是将采样得到的 atn 视作grand truth计算交叉熵, 区别在于针对不同的 Trajectory τn, 要多乘了一个 R(τn)

Tips#

Add a baseline#

img
R(τn) 可能总为正数, 这样在 training时, 相当于告诉 model, 不论时什么action 都要将它的概率提升.

理想情况下, 这样是没有问题的, 因为 Reward 即使总是正的, 也有大有小.

当时实际上, action 是采样得到的, 这会导致如果有的 action 没有被采样到, 它的概率相对于被采样到的 action 就会下降, 而这时, 并不能表示当前环境下采取这个 action 不好.

改进: 减去一个 baseline, b.

Assign Suitable Credit#

img
再来看一下目标函数:

(6)J(θ)=1Nn=1Nt=1TnR(τn)logpθ(atn|stn)

对于同一个 Trajectory τ 中, 针对每个状态 s 下, 执行 动作 a, 都有相同的 Reward 系数. 这是不合理的.
例如图的左边, 在 sb 执行 a2 不是一个好的选择, 他会导致接下来进入 sc, 并执行 a3, 得到 -2 分.
由此, 提出改进1.

改进1: 每个时刻的 reward 改为, 当前时刻到结束时刻的 reward 的总和

img
某时刻的 action, 经过越长时间, 它的影响力就越小. 也就是与该 action 间隔很久的 reward 与该 action 的关系很小. 由此提出改进2.

改进2: 加一个衰减系数.

最后, 将整个系数项称为 Advantage Function, Aθ(st,at).其含义为, 在某 state 下, at 相较于其他的 action, 有多好. (这个 A, 通常可以是用一个网络来预测的 ???)

最终, 得梯度公式:

(7)Rθ1Nn=1Nt=1TnAθ(st,at)logpθ(atn|stn)

On-policy Off-policy#

On-policy#

梯度计算公式:

(8)Rθ=Eτpθ(τ)[R(τ)logpθ(τ)]

目前为止的做法其实是一种 on-policy 的方法:

  • 每次更新梯度前, 都需要从 πθ 中采样 τ.
  • 参数更新后, 又需要用更新后的参数重新采样 τ.

目标是: 从另一个 policy, πθ 中采样数据, 用来训练 πθ. 这样就可以重复利用这些采样得到的数据.

Importance Sampling(重要性采样)#

x 服从 p 分布时, 计算 f(x) 期望 Exp[f(x)] 的做法: 一般是从 p 中采样一些 x, 带入 f(x) 求平均, 用这个值来估计所求期望.

现在, 假设无法从 p 中直接采样 x, 但可以从另一个分布 q 中采样 x. 可以对 Exp[f(x)] 做如下变形:

(9)Exp[f(x)]=f(x)p(x)dx=f(x)p(x)q(x)q(x)dx=Exq[f(x)p(x)q(x)]

这样, 我们就可以用 q 中采样的数据来估计期望值 Exp[f(x)]. 这就是 Importance Sampling.

Issue of Importance Sampling
理论上, 我们已经得出两个期望值是相等的:

(10)Exp[f(x)]=Exq[f(x)p(x)q(x)].

那么它们的方差是否相等呢? Varxp[f(x)]==Varxq[f(x)p(x)q(x)]?

由公式

(11)Var[x]=E[x2](E[x])2

可以得出:

(12)Varxp[f(x)]=Exp[f2(x)](Exp[f(x)])2Varxq[f(x)p(x)q(x)]=Exq[(f(x)p(x)q(x))2](Exq[f(x)p(x)q(x)])2=(f(x)p(x)q(x))2q(x)dx(Exp[f(x)])2=f2(x)p(x)q(x)p(x)dx(Exp[f(x)])2=Exp[f2(x)p(x)q(x)](Exp[f(x)])2

对比发现, 第一项中后者比前者多乘了一个 p(x)q(x), 也就是说当 pq 相差很多时, 它们的方差也会差很多.

这样就会出现一问题: 理论上, 无论 p,q 的分布是什么样的, 当我们从 pq 采样足够多次时, 是可以得到 Exp[f(x)]=Exq[f(x)p(x)q(x)] 的.
但是当 p,q 差距过大, 而我们采样的次数又不够多时, 因为它们之间的方差差距很大, 所以最后很可能导致期望差距很大.

一个直观的例子:
img
图中 p,q两个分布的差异很大.

当我们采样次数不够多, 导致没有采样到最左边那个样本时, 就会出现实际上 Exp[f(x)] 应是一个负值, 但我们用 Exq[f(x)p(x)q(x)] 计算出来的却是一个正值.

而当我们采样到最左边那个样本时, 因为此时 p(x)q(x) 的值将会非常大, 所以可以把 Exq[f(x)p(x)q(x)] 拉回负值.

Off-policy#

将 Importance Sampling 用在 policy gradient 中, 我们就可以得到:

(13)Rθ=Eτpθ(τ)[R(τ)logpθ(τ)]=Eτpθ(τ)[pθ(τ)pθ(τ)R(τ)logpθ(τ)]

这样, 我们就可以从 θ 中采样数据, 然后多次利用这些数据来更新 θ.

结合公式(7), 得

(14)Rθ=Eτpθ(τ)[pθ(τ)pθ(τ)R(τ)logpθ(τ)]=E(st,at)πθ[pθ(st,at)pθ(st,at)Aθ(st,at)logpθ(atn|stn)]由公式(7)得=E(st,at)πθ[pθ(at|st)pθ(st)pθ(at|st)pθ(st)Aθ(st,at)logpθ(atn|stn)]=E(st,at)πθ[pθ(at|st)pθ(at|st)Aθ(st,at)logpθ(atn|stn)]假设pθ(st)=pθ(st)

再由公式(3)得:

(15)Rθ=E(st,at)πθ[pθ(at|st)pθ(at|st)Aθ(st,at)]

反推目标函数:

(16)Jθ(θ)=E(st,at)πθ[pθ(at|st)pθ(at|st)Aθ(st,at)]

Add constraint#

目前为止, 我们利用 Importance Sampling 完成了 Policy Gradient 从 On-policy 到 Off-policy 的优化.

但是 Importance Sampling 在实际应用中有一个不得不考虑的限制, 就是我们无法保证能采样足够多的数据, 这时当两个分布 pθ,pθ差异过大时, 难以保证期望相等.

PPO做的事情, 简单说就是, 限制两个分布 pθ,pθ 不能差太多.

(17)JPPOθ(θ)=Jθ(θ)βKL(θ,θ)

注: 此处 KL 散度指的不是将两个模型的参数看作分布,拉近两个模型的参数的距离. 而是两个模型行为上的距离, 就是当两个模型输入同样的 state 时, 希望输出的 action 的分布尽可能像

Conclusion#

PPO algorithm#

img

PPO2#

PPO2: 简化 PPO 的计算.
img
首先, 我们将横坐标 x 设为 pθ(at|st)pθk(at|st), 则函数 y=xy=clip(x,1ϵ,1+ϵ) 的图像分别为图中的绿线和蓝线.

  • A>0 时, JPPO2θk(θ) 就是左图中红线, 我们要最大化目标函数, 也就希望 x 越大越好, 但是当超过 1+ϵ 后, 对目标函数就没有 benefit 了.
  • A<0 时, 同理, 如右图.

目的依旧是保证两个分布 pθ,pθk 差距不能过大.

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYrzAq4b' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片