【强化学习】Proximal Policy Optimization(PPO)

1 Proximal Policy Optimization(PPO)

将Policy Gradient(PG)从On-policy变为Off-policy,再加一些constraint(限制)就得到Proximal Policy Optimization(PPO)

1,1Policy Gradient(PG)

在这里插入图片描述

θ \theta θ为参数的网络就是策略 π ( θ ) \pi(\theta) π(θ)

在这里插入图片描述
输入:机器获得的外部信息(向量或矩阵形式)

在这里插入图片描述
输出:输出层各个神经元输出各个动作的概率
在这里插入图片描述

机器根据概率选择动作。

例子:

首先,network输入一个observation s 1 s_1 s1,然后输出一个action a 1 a_1 a1,比如:“right”,执行action后它会得到一个reward r 1 r_1 r1
在这里插入图片描述

接下来机器(actor)看到新的游戏画面 s 2 s_2 s2,actor再得到 s 2 s_2 s2后,执行动作“fire”,并杀死一只怪,于是得到 r 2 r_2 r2(5分)。
在这里插入图片描述
上述过程持续进行,直到机器人执行 a T a_T aT获得 r T r_T rT后死去或者把怪都清除完毕才结束。
整个过程称为一个episode
把整个游戏过程的奖励reward加起来,就得到total reward
R = ∑ t + 1 T r t R=\sum^T_{t+1}r_t R=t+1Trt

在这里插入图片描述

我们的目标就是最大化total reward( R R R)

以下是整个过程Actor(机器),Environment(游戏界面)的关系
在这里插入图片描述
我们把Env输出的 s s s和Actor执行的 a a a按顺序串起来,就得到一个Trajectory(轨迹)
在这里插入图片描述

每一个轨迹我们可以计算它发生的机率:
假设Actor的参数为 θ \theta θ,则轨迹 τ \tau τ的概率为:

在这里插入图片描述

s 1 s_1 s1发生的概率 × \times × s 1 s_1 s1条件下Actor执行 a 1 a_1 a1的概率 × \times × s 1 s_1 s1下执行 a 1 a_1 a1后得到 s 2 s_2 s2的概率…
在这里插入图片描述

其中, p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1st,at)由环境控制; p θ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ(atst)则有Actor里面的参数 θ \theta θ决定

以下则是整个过程Actor(机器),Environment(游戏界面)、reward(得分)的关系
在这里插入图片描述

Actor每执行一次动作就会得到一个Reward,将整个轨迹 τ \tau τ每次执行动作后得到的奖励累加起来就得到 R ( τ ) R(\tau) R(τ)
在这里插入图片描述

Actor通过update内部参数 θ \theta θ来获得最大 R ( τ ) R(\tau) R(τ)

实际上 R ( τ ) R(\tau) R(τ)不是一个确定的值,而是一个随机数。因为Actor输出的 a a a以及Env给出的 s s s都是随机的。所以我们只能计算它的期望值Expected Reward:
穷举所有的轨迹 τ \tau τ,计算 R ( τ ) R(\tau) R(τ)期望值
在这里插入图片描述
其中 ∑ τ p θ ( τ ) : E τ ∼ p θ ( τ ) \sum_{\tau}p_{\theta}(\tau):E_{\tau\sim p_{\theta}(\tau)} τpθ(τ):Eτpθ(τ)

表示从 p θ ( τ ) p_{\theta}(\tau) pθ(τ)这个分布中采样 τ \tau τ

计算Policy Gradient
在这里插入图片描述

由公式:
在这里插入图片描述

得到:

在这里插入图片描述

再由 ∑ τ p θ ( τ ) : E τ ∼ p θ ( τ ) \sum_{\tau}p_{\theta}(\tau):E_{\tau\sim p_{\theta}(\tau)} τpθ(τ):Eτpθ(τ)得到:

在这里插入图片描述

由于Expected的值无法算,故采样 N N N τ \tau τ,计算每个 τ \tau τ的对应的值,并加起来取平均。
在这里插入图片描述

从上文可以知道:
在这里插入图片描述

p θ ( τ ) p_{\theta}(\tau) pθ(τ)中只有 p θ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ(atst) θ \theta θ有关,且 l o g ∏ p θ ( a t ∣ s t ) = ∑ l o g p θ ( a t ∣ s t ) log^{\prod p_{\theta}(a_t|s_t)}=\sum log p_{\theta}(a_t|s_t) logpθ(atst)=logpθ(atst)故:
在这里插入图片描述

更新参数 θ \theta θ
1 让Actor与Env交互,得到一些trajectory τ \tau τ(左边所示)
2 将数据代入右边算出Gradient
3 更新模型参数 θ \theta θ
循环进行。
在这里插入图片描述

注意:收集的trajectory数据只用一次,用完之后就丢掉,才收集一些新的。

以上为理论部分,实际应该怎么实现呢?
我们可以把它跟分类的问题联系起来:
在这里插入图片描述

对于分类问题,目标函数可以为最小化交叉熵损失函数(最大化交叉熵损失函数的负数):
在这里插入图片描述
这个式子与PG不同之处在于PG有一个total reward R ( τ ) R(\tau) R(τ),故可以利用这个直接用tensorflow或pytorch等计算(最大化以下公式):
在这里插入图片描述

1.2 TIP

1.2.1 Tip1 Add a baseline

在这里插入图片描述

R ( τ ) R(\tau) R(τ)只能是正的,因此:
对于理想情况下,权重大的上升多,相反的,权重小的上升少:
在这里插入图片描述

由于Actor输出的 a , b , c a,b,c a,b,c是概率,故 a + b + c = 1 a+b+c=1 a+b+c=1,上升少的,在归一化后反而相对原来的下降了。

对于我们采用采样的方法,即部分动作可能没有被采样到:
在这里插入图片描述

由于a没有被采样到,又 a + b + c = 1 a+b+c=1 a+b+c=1,当b和c上升时,a就会下降。

因此,我们要使得Reward不总是正的(b):
在这里插入图片描述

1.2.2 Tip2 Assign Suitable Credit

整个场游戏得到的reward是正的,并不代表整个过程的动作都是好的,下图中 R R R是正的,但 ( s c , a 3 ) (s_c,a_3) (sc,a3)的reward是负的。还有一点是当前动作对过去没有影响,对未来以及当前有影响。
在这里插入图片描述

解决方法:对于不好动作,并不要用整场比赛得到的正的Reward作为它的权重,而是给他一个负的权重(该例子中,( s b , a 2 s_b,a_2 sb,a2)只与未来( s c , a 3 s_c,a_3 sc,a3)的-2奖励有关,而与 ( s a , a 1 ) (s_a,a_1) (sa,a1)+5奖励无关,因此它应该乘权重-2)。
在这里插入图片描述

也就是说,同一场游戏中,当前的action对过去没有影响,只对未来有影响。因此做以下改动:
将Reward改成当前时刻到结束这一时间段的Reward和:
在这里插入图片描述

当前的动作对越是未来的奖励影响越小,因此在 r r r加一个折扣因子 γ < 1 \gamma<1 γ<1
在这里插入图片描述

Advantage function:表示在 s t s_t st情况下,采用 a t a_t at比其他action好多少。
Estimated by ‘critic’(actor-critic中)
在这里插入图片描述

1.3 From on-policy to off-policy

Using the experience more than once
在这里插入图片描述

阿光自己下棋自己学是on-policy
阿光看着佐为下棋然后学习就是off-policy

在这里插入图片描述

on-policy → \rightarrow off-policy

on-policy与环境互动的policy以及学习的policy是同一个。
在这里插入图片描述
每次更新参数后,就得重新采集训练数据,这样是非常耗费时间的。
所以要将on-policy变为off-policy:
在这里插入图片描述
用另一个Policy π θ ′ \pi_{\theta}' πθ采集数据然后用于多次训练 π θ \pi_{\theta} πθ,这样效率更高。

那要怎么实现呢,这样要用到重要性采样(importance sampling)了:
在这里插入图片描述
在这里插入图片描述

如果我们不能从 p ( x ) p(x) p(x)采样,而只能从 q ( x ) q(x) q(x)采样,那就要进行以下修正:
在这里插入图片描述

重要性采样问题:
修正之后虽然两者期望值相同,但是它们的方差却有所差异。
在这里插入图片描述


在这里插入图片描述
得到
在这里插入图片描述

V a r x ∼ q [ f ( x ) p ( x ) q ( x ) ] = E x ∼ q [ ( f ( x ) p ( x ) q ( x ) ) 2 ] − ( E x ∼ q [ f ( x ) p ( x ) q ( x ) ] ) 2 = E x ∼ q p ( x ) q ( x ) [ f 2 ( x ) p ( x ) q ( x ) ] − ( E x ∼ q [ f 2 ( x ) p ( x ) q ( x ) ] ) 2 = ∫ q ( x ) p ( x ) q ( x ) [ f 2 ( x ) p ( x ) q ( x ) ] − ( E x ∼ q [ f 2 ( x ) p ( x ) q ( x ) ] ) 2 = E x ∼ q [ f 2 ( x ) p ( x ) q ( x ) ] − ( E x ∼ q [ f 2 ( x ) ] ) 2 Var_{x\sim q}[f(x)\frac{p(x)}{q(x)}]\\ =E_{x\sim q}[(f(x)\frac{p(x)}{q(x)})^2]-(E_{x\sim q}[f(x)\frac{p(x)}{q(x)}])^2\\ =E_{x\sim q}\frac{p(x)}{q(x)}[f^2(x)\frac{p(x)}{q(x)}]-(E_{x\sim q}[f^2(x)\frac{p(x)}{q(x)}])^2\\ =\int q(x)\frac{p(x)}{q(x)}[f^2(x)\frac{p(x)}{q(x)}]-(E_{x\sim q}[f^2(x)\frac{p(x)}{q(x)}])^2\\=E_{x\sim q}[f^2(x)\frac{p(x)}{q(x)}]-(E_{x\sim q}[f^2(x)])^2\\ Varxq[f(x)q(x)p(x)]=Exq[(f(x)q(x)p(x))2](Exq[f(x)q(x)p(x)])2=Exqq(x)p(x)[f2(x)q(x)p(x)](Exq[f2(x)q(x)p(x)])2=q(x)q(x)p(x)[f2(x)q(x)p(x)](Exq[f2(x)q(x)p(x)])2=Exq[f2(x)q(x)p(x)](Exq[f2(x)])2

p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)差别很大的化,方差与原来的差别也变大。

当采样的次数够多时,两者的方差才不会太大。
采样很少时:
在这里插入图片描述

采样很多次,可能采到左边的点:
左边的点 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)( f ( x ) f(x) f(x)的权重)很大,而左边的 f ( x ) f(x) f(x)是负的,因此这可以平衡掉右边正的值。

在这里插入图片描述

在这里插入图片描述

Gradient for update

在这里插入图片描述

s t s_t st来自 θ ′ \theta ' θ,故对 A A A做一些变换,由于 p θ ( s t ) p θ ′ ( s t ) \frac{p_{\theta}(s_t)}{p_{\theta '}(s_t)} pθ(st)pθ(st),差不多(其实是难算【狗头】),故可消掉。

在这里插入图片描述
在这里插入图片描述

得到目标函数的gradient为
在这里插入图片描述

则目标函数为 J θ ′ ( θ ′ ) J^{\theta '}(\theta ') Jθ(θ)表示使用 θ ′ \theta ' θ update θ \theta θ
在这里插入图片描述

现在我们已经把on-policy变为off-policy了。

从前面重要性采样的issue可知,如果 p θ p_{\theta} pθKaTeX parse error: Undefined control sequence: \p at position 1: \̲p̲_{\theta '}差太多时,效果会不好,故要add constraint,使用PPO

1.4 Add constraint

稳扎稳打,步步为营。
在这里插入图片描述

(与神经网络的正则化相似,KL散度类比范数)

PPO的前身——TRPO(KL作为限制条件)
在这里插入图片描述

注意: K L ( θ , θ ′ ) KL(\theta,\theta ') KL(θ,θ)不是参数上的距离,而是行为上的距离:给它们同一个state,它们输出的action之间差别。(因为参数变化与action变化可能不是一致)

PPO算法:
在这里插入图片描述

1.5 PPO2(想起了wgan)

在这里插入图片描述

c l i p ( a , b , c ) : a 小 于 b 则 a = b ; a 大 于 c 则 a = c clip(a,b,c):a小于b则a=b;a大于c则a=c clip(a,b,c)aba=b;aca=c

在这里插入图片描述
在这里插入图片描述

A A A是正的,我们希望 p θ p_{\theta} pθ越大越好,但当它超过 p θ k 的 1 + ε 倍 时 则 不 再 增 加 p_{\theta^k}的1+\varepsilon倍时则不再增加 pθk1+ε
A A A是负的,我们希望 p θ p_{\theta} pθ越小越好,但当它超过 p θ k 的 1 − ε 倍 时 则 不 再 减 少 p_{\theta^k}的1-\varepsilon倍时则不再减少 pθk1ε

PPO2在保证增大(减少)正(负)的A的权重的同时,限制 p θ p_{\theta} pθ p θ k p_{\theta^k} pθk的差异

李宏毅 强化学习课程

猜你喜欢

转载自blog.csdn.net/weixin_44378835/article/details/108761002