详解近端策略优化

Posted 行者AI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解近端策略优化相关的知识,希望对你有一定的参考价值。

本文首发于行者AI

引言

上一篇文章我们详细介绍了策略梯度算法(PG),ppo其实就是策略梯度的一种变形。首先介绍一下同策略(on-policy)与异策略(off-policy)的区别。

在强化学习里面,我们需要学习的其实就是一个智能体。如果要学习的智能体跟和环境互动的智能体是同一个的话,称之为同策略。如果要学习的智能体跟和环境互动的智能体不是同一个的话,称之为异策略。那么先给童鞋们提出一个问题,ppo算法是同策略还是异策略?

1. 同策略的不足之处

首先我们回顾一下PG的期望奖励值,公式如下。
∇ R ˉ θ = E τ ∼ p θ ( τ ) [ R ( τ ) ∇ log ⁡ p θ ( τ ) ] \\beginaligned \\nabla \\barR_\\theta &=E_\\tau \\sim p_\\theta(\\tau)\\left[R(\\tau) \\nabla \\log p_\\theta(\\tau)\\right] \\endaligned Rˉθ=Eτpθ(τ)[R(τ)logpθ(τ)]
上面更新的公式中的 E τ ∼ p θ ( τ ) E_\\tau \\sim p_\\theta(\\tau) Eτpθ(τ)是在策略 π θ \\pi_\\theta πθ的情况下, 所采样出来的轨迹 τ \\tau τ做期望。但是如果更新了参数,从 θ \\theta θ变成 θ ′ \\theta^\\prime θ,概率 p θ ( τ ) p_\\theta(\\tau) pθ(τ)就不对了,之前采样出来的数据就不能用了。所以PG会花很多时间去采样数据,可以说大多数时间都在采样数据,智能体去跟环境做互动以后,接下来就要更新参数,只能用这些数据更新参数一次。接下来就要重新再去收集数据,才能再次更新参数。

2. 改进同策略的思路

策略梯度是同策略的算法,所以非常耗费时间,那么一个可能的改进思路是将同策略变成异策略。简单的思路就是用另外一个策略 π θ ′ \\pi_\\theta^\\prime πθ, 另外一个演员 θ ′ \\theta^\\prime θ去跟环境做互动。用 θ ′ \\theta^\\prime θ收集到的数据去训练 θ \\theta θ。假设我们可以用 θ ′ \\theta^\\prime θ收集到的数据去训练 θ \\theta θ,意味着说我们可以把 θ ′ \\theta^\\prime θ收集到的数据用很多次,也就是可以执行梯度上升好几次,更新参数好几次,这都只要用同一笔数据就可以实现。因为假设 θ \\theta θ有能力学习另外一 个演员 θ ′ \\theta^\\prime θ所采样出来的数据的话,那 θ ′ \\theta^\\prime θ就只要采样一次,也许采样多一点的数据,让 θ \\theta θ去更新很多次, 这样就会比较有效率。

3. 同策略到异策略的具体实现

那么问题来了, 我们怎么找到这样的一个演员 θ ′ \\theta^\\prime θ,使其收集到的数据可以用于训练 θ \\theta θ,且他们之间的差异可以被忽略不计呢?

首先我们先介绍一个名词,重要性采样(importance sampling)。 假设有一个函数 f ( x ) f(x) f(x) x x x需要从分布 p p p中采样。我们应该如何怎么计算 f ( x ) f(x) f(x)的期望值呢?假设分布 p p p不能做积分,那么我们可以从分布 p p p尽可能多采样更多的 x i x^i xi。这样就会得到更多的 f ( x ) f(x) f(x),取它的平均值就可以近似 f ( x ) f(x) f(x)的期望值。

现在另外一个问题也来了,假设我们不能在分布 p p p中采样数据,只能从另外一个分布 q q q中去采样数据, q q q可以是任何分布。我们从 q q q中采样 x i x^i xi的话就不能直接套下面的式子。
E x ∼ p [ f ( x ) ] ≈ 1 N ∑ i = 1 N f ( x i ) E_x \\sim p[f(x)] \\approx \\frac1N \\sum_i=1^N f\\left(x^i\\right) Exp[f(x)]N1i=1Nf(xi)
因为上式是假设 x x x都是从 p p p采样出来的。如果我们想要在 q q q中采样的情况下带入上式,就需要做些变换。期望值 E x ∼ p [ f ( x ) ] E_x \\sim p[f(x)] Exp[f(x)]的另一种写法是 ∫ f ( x ) p ( x ) d x \\int f(x) p(x) d x f(x)p(x)dx,不知道的童鞋可以补习一下万能的学科–数学,对其进行变换,如下式所示,
∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \\int f(x) p(x) d x=\\int f(x) \\fracp(x)q(x) q(x) d x=E_x \\sim q\\left[f(x) \\fracp(x)q(x)\\right] f(x)p(x)dx=f(x)q(x)p(x)q(x)dx=Exq[f(x)q(x)p(x)]
整理得下式,
E x ∼ p [ f ( x ) ] = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_x \\sim p[f(x)]=E_x \\sim q\\left[f(x) \\fracp(x)q(x)\\right] Exp[f(x)]=Exq[f(x)q(x)p(x)]
这样就可以对分布 q q q中采样的 x x x取期望值。具体来说,我们从 q q q中采样 x x x,再去计算 f ( x ) p ( x ) q ( x ) f(x) \\fracp(x)q(x) f(x)q(x)p(x),最后取期望值。所以就算我们不能从 p p p里面去采样数据,只要能够从 q q q里面去采样数据,代入上式,就可以计算从分布 p p p采样 x x x代入 f ( x ) f(x) f(x)以后所算出来的期望值。

这边是从 q q q做采样,所以我们从 q q q里采样出来的每一笔数据,需要乘上一个重要性权重(importance weight) p ( x ) q ( x ) \\fracp(x)q(x) q(x)p(x)来修正这两个分布的差异。 q ( x ) q(x) q(x)可以是任何分布。重要性采样有一些问题。虽然我们可以把 p p p换成任何的 q q q。但是在实现上, p p p和不强化学习笔记:PPO 近端策略优化(Proximal Policy Optimization)

ChatGPT强化学习大杀器——近端策略优化(PPO)

近端策略优化深度强化学习算法

近端策略优化算法(Proximal Policy Optimization Algorithms, PPO)

Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始

网线电气性能标准测试项目详解