强化学习Proximal Policy Optimization(PPO)算法详解

强烈建议自己拿着笔在草稿纸上划拉划拉,公式推导很简单的!!!

一、准备知识

1.1、on-policy VS off-policy

  1. On-policy:智能体agent(actor)学习并且和环境发生互动。
  2. Off-policy:一个智能体agent(actor) A 1 A1 A1看另外一个智能体 A 2 A2 A2和环境互动,然后 A 1 A1 A1使用 A 2 A2 A2和环境互动的数据来进行学习

例子1:打篮球。 你自己亲自去打就是On-policy,如果把投球的姿势看作一个你要学习的动作, 你发现动作 a 1 a_{1} a1可以投进三分球,得到三分就是奖励;动作 a 2 a_{2} a2投不进三分球,得到的奖励是0.那么下次你就会主动增加使用动作 a 1 a_{1} a1投球的概率。
假如你在球场上看别的篮球大神玩篮球,你记住了大神投三分的动作,这就是off-policy。你从别人那里学到了什么样投球动作可以增大投进球的概率。

1.2、重要采样(Importance Sampling)

这个采样方法是用来实现如何使用别的agent和环境互动的数据来更新当前agent的关键。

在这里我们需要使用两个分布函数来描述两个不同的agent。

Question 1:为什么要使用分布来描述智能体?
答: 我们知道,智能体的选择什么样的动作是有一定的概率分布的,按照概率来选择动作,如果全部的动作构成的动作空间是离散的,那么把可以各个动作的对应的概率列举出来。如果是动作是连续的,那就需要一个密度函数。

下面的简单推导可以实现从一个分布到另外一个分布来计算一个期望值,至于为什么算期望,是因为,我们的强化学习算法里面的优化目标就是极大化奖励的期望。
E x ∼ p ( x ) [ f ( x ) ] = ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q ( x ) [ f ( x ) p ( x ) q ( x ) ] (1) E_{x\sim p(x)}[f(x)] = \int f(x)p(x)dx\\=\int f(x)\frac{p(x)}{q(x)}q(x)dx=E_{x\sim q(x)}[f(x)\frac{p(x)}{q(x)}]\tag{1} Exp(x)[f(x)]=f(x)p(x)dx=f(x)q(x)p(x)q(x)dx=Exq(x)[f(x)q(x)p(x)](1)

注: 上面的积分号可以转化为求和号,连续的使用积分符号,离散的使用求和号。

解释: 上面的公式推导需要使用期望的计算公式,如何随机变量 x x x的概率密度是 p ( x ) p(x) p(x),且积分 ∫ x p ( x ) d x \int xp(x)dx xp(x)dx收敛,那么这个积分值就是随机变量的数学期望。
公式(1)第一个等号是使用了期望的计算公式,第二个等号的计算是在被积函数上乘上 q ( x ) q(x) q(x),然后再除以 q ( x ) q(x) q(x).第三个等号的成立是还是使用了期望的计算公式。

关于Importance Sampling的一些理解:假如,上面公式里面的分布 q ( x ) q(x) q(x)是一个十分强大的agent(actor)在和环境互动时采取动作的密度函数,那么我们从 q ( x ) q(x) q(x)这个采样出来的数据也是十分强大的,那么让agent跟着这个数据进行学习,理论上可以让比较弱的agent学习的更好。但是两个分布差的很多,也是不行的,比如你要我学习马云的成功经验,我觉得无论我怎么学,也不可能像马云那样成功的。

Question 2:如果 p ( x ) p(x) p(x) q ( x ) q(x) q(x)相差很多,会导致怎么样的结局?
答: 会造成训练过程变得很不稳定,优化的目标函数会方差很大。
从公式(1)我们可以看到虽然两个分布的 期望一样,但是他们的方差还是有差别的。

下面开始计算方差,我们知道一组数据的期望一样,但是方差可能千差万别。
由公式(1)可知:期望一样
E x ∼ p ( x ) [ f ( x ) ] = E x ∼ q ( x ) [ f ( x ) p ( x ) q ( x ) ] (2) E_{x\sim p(x)}[f(x)] = E_{x\sim q(x)}[f(x)\frac{p(x)}{q(x)}]\tag{2} Exp(x)[f(x)]=Exq(x)[f(x)q(x)p(x)](2)

但是下面的两个方差却和 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)有很大的关系。
由方差的计算公式,得:
V a r x ∼ p ( x ) [ f ( x ) ] = E x ∼ p ( x ) [ f ( x ) 2 ] − E x ∼ p ( x ) 2 [ f ( x ) ] (3) Var_{x\sim p(x)}[f(x)] = E_{x\sim p(x)}[f(x)^{2}] - E_{x\sim p(x)}^{2}[f(x)]\tag{3} Varxp(x)[f(x)]=Exp(x)[f(x)2]Exp(x)2[f(x)](3)
V a r x ∼ q ( x ) [ f ( x ) p ( x ) q ( x ) ] = E x ∼ p ( x ) [ f ( x ) 2 ( p ( x ) q ( x ) ) 2 ] − E x ∼ q ( x ) 2 [ f ( x ) p ( x ) q ( x ) ) ] (4) Var_{x\sim q(x)}[f(x)\frac{p(x)}{q(x)}] = \\E_{x\sim p(x)}[f(x)^{2}(\frac{p(x)}{q(x)})^{2}] - E_{x\sim q(x)}^{2}[f(x)\frac{p(x)}{q(x)})]\tag{4} Varxq(x)[f(x)q(x)p(x)]=Exp(x)[f(x)2(q(x)p(x))2]Exq(x)2[f(x)q(x)p(x))](4)

我们可以对公式(4)再进行化简
E x ∼ q ( x ) [ f ( x ) 2 ( p ( x ) q ( x ) ) 2 ] = ∫ f ( x ) 2 ( p ( x ) q ( x ) ) 2 q ( x ) d x = ∫ f ( x ) 2 p ( x ) q ( x ) p ( x ) d x = E x ∼ p ( x ) [ f ( x ) 2 p ( x ) q ( x ) ] (5) E_{x\sim q(x)}[f(x)^{2}(\frac{p(x)}{q(x)})^{2}] = \int f(x)^{2}(\frac{p(x)}{q(x)})^{2}q(x)dx\\=\int f(x)^{2}\frac{p(x)}{q(x)}p(x)dx=E_{x\sim p(x)}[f(x)^{2}\frac{p(x)}{q(x)}]\tag{5} Exq(x)[f(x)2(q(x)p(x))2]=f(x)2(q(x)p(x))2q(x)dx=f(x)2q(x)p(x)p(x)dx=Exp(x)[f(x)2q(x)p(x)](5)

注: 公式(5)是对公式(4)等号右边的第一部分的化简和转化。

公式(5)的解释: 公式(4)仅仅是使用了方差的计算公式。关键是公式(5)的由随机变量 x x x 服从分布 q ( x ) q(x) q(x) 的期望转化为求服从分布 p ( x ) p(x) p(x)的期望。公式(5)的第一个等号成立是因为这个是期望的计算公式,第二个等号成立是先将被积函数整理一下,首先约掉一个 q ( x ) q(x) q(x),然后将被积函数内的 p ( x ) p(x) p(x)提取出来一个。对于第三个等号依然是使用了期望的计算公式。

由公式(2)可以知道公式(3)和(4)计算的方差的差别是 E x ∼ p ( x ) [ f ( x ) 2 p ( x ) q ( x ) ] E_{x\sim p(x)}[f(x)^{2}\frac{p(x)}{q(x)}] Exp(x)[f(x)2q(x)p(x)] E x ∼ p ( x ) [ f ( x ) 2 ] E_{x\sim p(x)}[f(x)^{2}] Exp(x)[f(x)2]之间的差别,两个公式(3)和(4)减号后面的是一样的

因此我们说如果两个分布差别太大,就会造成方差增大,因为实际的训练过程中我们不可能计算所有的情况,还要使用采样的方法逼近期望值,大的反差会使得采样的样本的分布不均,从而训练不稳定。

例子2:看下图,图片来自李宏毅老师的强化学习课程。侵删
在这里插入图片描述
解释:
如果我们按照公式
E x ∼ p ( x ) [ f ( x ) ] = ∫ f ( x ) p ( x ) d x E_{x\sim p(x)}[f(x)] = \int f(x)p(x)dx Exp(x)[f(x)]=f(x)p(x)dx
计算随机变量函数 f ( x ) f(x) f(x)的期望值的话,我们看 p ( x ) p(x) p(x)的概率密度函数可以知道,计算出来的期望一定是负数。

而如果我们使用
E x ∼ q ( x ) [ f ( x ) p ( x ) q ( x ) ] = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x E_{x\sim q(x)}[f(x)\frac{p(x)}{q(x)}] = \int f(x)\frac{p(x)}{q(x)}q(x)dx Exq(x)[f(x)q(x)p(x)]=f(x)q(x)p(x)q(x)dx
计算期望的话,因为我们要从分布函数 q ( x ) q(x) q(x) 而不是 p ( x ) p(x) p(x) 进行采样,我们看到,我们从图中可以看到 f ( x ) f(x) f(x) 的值是正值且较大的时候,概率密度函数 q ( x ) q(x) q(x) 也是较大,因此使用我们使用采样的方法进行近似计算的话,有可能会出现正值。

1.3 KL散度

1.3.1 KL散度的作用

作用:是用来描述两个概率分布之间的差异性度量。

说到这里,你大致应该知道KL散度为啥要使用在强化学习算法PPO算法这里了吧,上面我们说到不能是两个概率分布的密度函数 p ( x ) p(x) p(x) q ( x ) q(x) q(x) 有较大的差别,否则就会造成模型训练的不稳定性。

1.3.2 KL散度的计算公式

  1. 对于离散型的
    P ( x ) , Q ( x ) P(x),Q(x) P(x),Q(x) 是关于随机 x x x 的概率分布函数,那么计算公式如下
    D K L ( P ∣ ∣ Q ) = ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) − P ( x i ) l o g ( Q ( x i ) ) (6) D_{KL}(P||Q) = \sum_{i = 1}^{n}P(x_{i})log(P(x_{i}))-P(x_{i})log(Q(x_{i}))\tag{6} DKL(PQ)=i=1nP(xi)log(P(xi))P(xi)log(Q(xi))(6)

  2. 对于连续型的计算公式为:
    D K L ( P ∣ ∣ Q ) = ∫ p ( x ) l o g p ( x ) − p ( x ) l o g q ( x ) d x (7) D_{KL}(P||Q) = \int p(x)logp(x)-p(x)logq(x)dx\tag{7} DKL(PQ)=p(x)logp(x)p(x)logq(x)dx(7)
    其中 p ( x ) 和 q ( x ) p(x)和q(x) p(x)q(x)分别为对应的两个概率密度函数。

1.3.3 KL散度的性质

  1. 非负性

要证: D K L ( P ∣ ∣ Q ) = ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) − P ( x i ) l o g ( Q ( x i ) ) = ∑ i = 1 n P ( x i ) l o g P ( x i ) Q ( x i ) > = 0 D_{KL}(P||Q) = \sum_{i = 1}^{n}P(x_{i})log(P(x_{i}))-P(x_{i})log(Q(x_{i}))\\=\sum_{i=1}^{n}P(x_{i})log\frac{P(x_{i})}{Q(x_{i})}\\>=0 DKL(PQ)=i=1nP(xi)log(P(xi))P(xi)log(Q(xi))=i=1nP(xi)logQ(xi)P(xi)>=0
也即证:
∑ i = 1 n P ( x i ) l o g Q ( x i ) P ( x i ) < = 0 \sum_{i=1}^{n}P(x_{i})log\frac{Q(x_{i})}{P(x_{i})}<=0 i=1nP(xi)logP(xi)Q(xi)<=0
又因为 l n x < = x − 1 lnx<=x-1 lnx<=x1,当且仅当 x = 1 x=1 x=1 等号才成立
所以有 ∑ i = 1 n P ( x i ) l o g Q ( x i ) P ( x i ) < = ∑ i = 1 n P ( x i ) ( Q ( x i ) P ( x i ) − 1 ) = ∑ i = 1 n Q ( x i ) − P ( x i ) = ∑ i = 1 n Q ( x i ) − ∑ i = 1 n P ( x i ) = 1 − 1 = 0 \sum_{i=1}^{n}P(x_{i})log\frac{Q(x_{i})}{P(x_{i})}\\<=\sum_{i=1}^{n}P(x_{i})(\frac{Q(x_{i})}{P(x_{i})}-1)\\=\sum_{i=1}^{n}Q(x_{i})-P(x_{i})\\=\sum_{i=1}^{n}Q(x_{i})-\sum_{i=1}^{n}P(x_{i})\\=1-1\\=0 i=1nP(xi)logP(xi)Q(xi)<=i=1nP(xi)(P(xi)Q(xi)1)=i=1nQ(xi)P(xi)=i=1nQ(xi)i=1nP(xi)=11=0

得证!!!

1.4、惩罚函数法求解约束规划

其实这一节里面有一点优化方法里面的使用惩罚函数的方法求解约束规划的思想。不是数学学院的学术或者没有相关的优化方法的学习经历的话,可能会比较难于理解这里的思想。

我们来举个简单的等式约束来解释惩罚函数的思想。
栗子:
m i n f ( x ) min f(x) minf(x)
s . t .     h j ( x ) = 0 , j = 1 , . . . , l s.t.\ \ \ h_{j}(x)=0,j = 1,...,l s.t.   hj(x)=0,j=1,...,l

求解带约束的规划的优化问题是一件很不容易的事情,于是我们定义一个新的目标函数将约束规划转化为无约束规划问题。
于是:
L = f ( x ) + M ∗ ∑ i = 1 l h j 2 ( x ) L = f(x)+M*\sum_{i=1}^{l}h_{j}^{2}(x) L=f(x)+Mi=1lhj2(x)
那么我们为啥要定义这样一个目标函数呢?

解释:观察上面的等式约束规划,我们需要在满足条件的情况下,求出f(x)的极小值,如果我们将常数 M M M 设置为一个非常大非常大的数,如果 h j ( x ) h_{j}(x) hj(x)有一个不接近的0的话,那么总体的目标函数值 L L L就会变得非常大,但是我们是要极小化目标函数,这么我们想要做的是相反的,那么使用优化方法进行优化的时候,就会由于 M M M的值太大,从而让各个条件 h j ( x ) h_{j}(x) hj(x)极其的接近0,这样我们就可以求出一个差不多的近似解。

二、算法推导

2.1、如何从策略梯度过渡到PPO算法

PPO算法是策略梯度一种变形
策略梯度中,我们 理论上 要极大化的目标函数是
R θ ˉ = E τ ∼ p θ ( τ ) [ R ( τ ) ] = ∫ R ( τ ) p ( τ ∣ θ ) d τ (8) \bar{R_{\theta }} = E_{\tau \sim p_{\theta (\tau )}}[R(\tau )]\\=\int R(\tau )p(\tau |\theta )d\tau\tag{8} Rθˉ=Eτpθ(τ)[R(τ)]=R(τ)p(τθ)dτ(8)
公式(8)中各个数学符号的含义: R ( τ ) R(\tau ) R(τ)表示agent(actor)和环境互动一个episode τ = { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . , s T τ , a T τ , r T τ , } \tau = \{s_{1},a_{1},r_{1},s_{2},a_{2},r_{2},...,s_{T_{\tau }},a_{T_{\tau }},r_{T_{\tau }},\} τ={s1,a1,r1,s2,a2,r2,...,sTτ,aTτ,rTτ,}所获得的累积的奖励;一般有 R ( τ ) = ∑ t = 1 T τ r t R(\tau ) = \sum_{t=1}^{T_{\tau }}r_{t} R(τ)=t=1Tτrt, p ( τ ∣ θ ) p(\tau |\theta ) p(τθ)表示一个episode τ \tau τ 在给定agent(actor)参数 θ \theta θ时,一个episode出现的概率大小。

注:上述的公式(8)只是策略梯度理论上要极大化的目标函数,我们对所有episode τ \tau τ 进行按照概率积分,但是有这么一个问题,就是计算机无法处理无穷多或者是连续的情况,因此我们下面开始反推策略梯度的在实际操作里面的目标函数。

下面开始策略梯度实际操作时的目标函数:
我们从导数开始推导:
▽ R θ ˉ = ∫ R ( τ ) ∗ ▽ p ( τ ∣ θ ) d τ = ∫ R ( τ ) ∗ p ( τ ∣ θ ) ▽ p ( τ ∣ θ ) p ( τ ∣ θ ) d τ = ∫ R ( τ ) ∗ p ( τ ∣ θ ) ▽ l o g p ( τ ∣ θ ) d τ = E τ ∼ p θ ( τ ) [ R ( τ ) ▽ l o g p ( τ ∣ θ ) ] (9) \bigtriangledown \bar{R_{\theta }} = \int R(\tau)*\bigtriangledown p(\tau|\theta )d\tau\\=\int R(\tau)* p(\tau|\theta )\frac{\bigtriangledown p(\tau|\theta )}{p(\tau|\theta )}d\tau \\= \int R(\tau)* p(\tau|\theta )\bigtriangledown logp(\tau|\theta )d\tau\\=E_{\tau \sim p_{\theta }(\tau )}[R(\tau )\bigtriangledown logp(\tau|\theta )]\tag{9} Rθˉ=R(τ)p(τθ)dτ=R(τ)p(τθ)p(τθ)p(τθ)dτ=R(τ)p(τθ)logp(τθ)dτ=Eτpθ(τ)[R(τ)logp(τθ)](9)
这里的符号的含义和上面的一样,不再解释。

公式解释:第一个等号就是求导和积分交换次序,直接将求导运算拿到积分号里面进行运算;第二个等号的成立是因为在被积函数的分子和分母同时乘上 p ( τ ∣ θ ) p(\tau|\theta ) p(τθ), 第三个等号的成立是使用了公式 ▽ l o g f ( x ) = ▽ f ( x ) f ( x ) \bigtriangledown logf(x)=\frac{\bigtriangledown f(x)}{f(x)} logf(x)=f(x)f(x),将该公式带入就可以得到;第四个等号的成立就是使用了期望的计算公式。很简单吧,记得把这些公式在草稿纸上划拉一下,自己推导一遍。

我们使用重要性采样(importance sampling)方法On-policy变为Off-policy.
▽ R θ ˉ = ∫ R ( τ ) ∗ p ( τ ∣ θ ) ▽ l o g p ( τ ∣ θ ) d τ = ∫ R ( τ ) ∗ p ( τ ∣ θ ) q ( τ ∣ θ ′ ) ∗ ▽ l o g p ( τ ∣ θ ) ∗ q ( τ ∣ θ ′ ) d τ = E τ ∼ q θ ′ ( τ ) [ R ( τ ) ∗ p ( τ ∣ θ ) q ( τ ∣ θ ′ ) ∗ ▽ l o g p ( τ ∣ θ ) ] (10) \bigtriangledown \bar{R_{\theta }}= \int R(\tau)* p(\tau|\theta )\bigtriangledown logp(\tau|\theta )d\tau\\=\int R(\tau )*\frac{p(\tau|\theta )}{q(\tau |{\theta }')}*\bigtriangledown logp(\tau|\theta )*q(\tau |{\theta }') d\tau\\=E_{\tau \sim q_{{\theta }'}(\tau )}[R(\tau )*\frac{p(\tau|\theta )}{q(\tau |{\theta }')}*\bigtriangledown logp(\tau|\theta )]\tag{10} Rθˉ=R(τ)p(τθ)logp(τθ)dτ=R(τ)q(τθ)p(τθ)logp(τθ)q(τθ)dτ=Eτqθ(τ)[R(τ)q(τθ)p(τθ)logp(τθ)](10)
各个数学符号的含义:这里仅解释 q ( τ ∣ θ ′ ) q(\tau |{\theta }') q(τθ),我们知道如果需要让当前的agent(actor)学习另外一个agent的行为的话,此时就需要两个agent的分布,这里的 q ( τ ∣ θ ′ ) q(\tau |{\theta }') q(τθ)就是需要起到示范作用的agent,需要从这个agent里面收集数据。

下面我们仅仅关注公式(9)第三个等号。
▽ R θ ˉ = ∫ R ( τ ) ∗ p ( τ ∣ θ ) ▽ l o g p ( τ ∣ θ ) d τ \bigtriangledown \bar{R_{\theta }} = \int R(\tau)* p(\tau|\theta )\bigtriangledown logp(\tau|\theta )d\tau Rθˉ=R(τ)p(τθ)logp(τθ)dτ

我们知道,对于连续和无穷多的情况,计算机是无法处理的,因此我们需要使用采集数据进行数值逼近,也就是约等于某个值。
继续上面的公式推导:
▽ R θ ˉ = ∫ R ( τ ) ∗ p ( τ ∣ θ ) ▽ l o g p ( τ ∣ θ ) d τ ≈ 1 N ∑ n = 1 N R ( τ n ) ▽ l o g p ( τ n ∣ θ ) (11) \bigtriangledown \bar{R_{\theta }} = \int R(\tau)* p(\tau|\theta )\bigtriangledown logp(\tau|\theta )d\tau\\\approx \frac{1}{N}\sum_{n=1}^{N}R(\tau_{n} )\bigtriangledown logp(\tau_{n}|\theta )\tag{11} Rθˉ=R(τ)p(τθ)logp(τθ)dτN1n=1NR(τn)logp(τnθ)(11)

根据公式(10)就可以反推出策略梯度的目标函数是:
R θ ˉ = 1 N ∑ n = 1 N R ( τ n ) l o g p ( τ n ∣ θ ) (12) \bar{R_{\theta }} = \frac{1}{N}\sum_{n=1}^{N}R(\tau_{n} )logp(\tau_{n}|\theta )\tag{12} Rθˉ=N1n=1NR(τn)logp(τnθ)(12)

上面的公式(11)就是实际操作过程中的策略梯度的需要极大化的目标函数。

问题来了,那么我们如何从策略梯度过渡到PPO算法呢?
从上面的策略梯度的推导过程来看,我们主要是从导数的计算的推导到目标函数的。
最终将公式(10)整理出来之后,是下面的公式
▽ R θ ˉ = ∫ R ( τ ) ∗ p ( τ ∣ θ ) ▽ l o g p ( τ ∣ θ ) d τ ≈ 1 N ∑ n = 1 N R ( τ n ) ▽ l o g p ( τ n ∣ θ ) = 1 N ∑ n = 1 N ∑ t = 1 T n ( ∑ t ′ = t T n γ t ′ − t r t ′ n − b ) ▽ l o g p θ ( a t n ∣ s t n ) (13) \bigtriangledown \bar{R_{\theta }} = \int R(\tau)* p(\tau|\theta )\bigtriangledown logp(\tau|\theta )d\tau\\\approx \frac{1}{N}\sum_{n=1}^{N}R(\tau_{n} )\bigtriangledown logp(\tau_{n}|\theta )\\=\frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_{n}}(\sum_{{t}'=t}^{T_{n}}\gamma ^{{t}'-t}r_{{t}'}^{n}-b)\bigtriangledown logp_{\theta }(a_{t}^{n}|s_{t}^{n})\tag{13} Rθˉ=R(τ)p(τθ)logp(τθ)dτN1n=1NR(τn)logp(τnθ)=N1n=1Nt=1Tn(t=tTnγttrtnb)logpθ(atnstn)(13)
上面这个公式的具体推导可以看看我的策略梯度算法详解
接着:
我们取 A θ ( s t , a t ) = ∑ t ′ = t T n γ t ′ − t r t ′ n − b (14) A^{\theta }(s_{t},a_{t}) = \sum_{{t}'=t}^{T_{n}}\gamma ^{{t}'-t}r_{{t}'}^{n}-b\tag{14} Aθ(st,at)=t=tTnγttrtnb(14)
将(14)带入(13)我们可以得到
▽ R θ ˉ = E ( s t , a t ) ∼ π θ [ A θ ( s t , a t ) ▽ l o g p θ ( a t n ∣ s t n ) ] (15) \bigtriangledown \bar{R_{\theta }}= E_{(s_{t},a_{t})\sim \pi _{\theta }}[A^{\theta }(s_{t},a_{t})\bigtriangledown logp_{\theta }(a_{t}^{n}|s_{t}^{n})]\tag{15} Rθˉ=E(st,at)πθ[Aθ(st,at)logpθ(atnstn)](15)
公式(15)的符号解释: A θ ( s t , a t ) A^{\theta }(s_{t},a_{t}) Aθ(st,at)是可以是一个神经网络,用来估计当前时刻状态动作对 ( s t , a t ) (s_{t},a_{t}) (st,at)的好坏。比如公式(14)这样,我们是使用一个神经网络来代替

注:公式(15)来自李宏毅老师的强化学习课程,这个公式他也没有给出比较详细的推导过程,我自己根据策略梯度的算法,只能推导出一个大概,自从接触AI算法以来,就感觉这些算法的过程是极其的不严格,有些公式还要给出强行的解释。

下面使用重要性采样将公式(15)转化
▽ R θ ˉ = ∑ ( s t , a t ) ∼ π θ A θ ( s t , a t ) ▽ l o g p θ ( a t n ∣ s t n ) ∗ p θ ( s t , a t ) = ∑ ( s t , a t ) ∼ π θ A θ ( s t , a t ) ▽ l o g p θ ( a t n ∣ s t n ) ∗ p θ ′ ( s t , a t ) p θ ( s t , a t ) p θ ′ ( s t , a t ) = E ( s t , a t ) ∼ π θ ′ [ A θ ′ ( s t , a t ) ▽ l o g p θ ( a t n ∣ s t n ) p θ ( s t , a t ) p θ ′ ( s t , a t ) ] (16) \bigtriangledown \bar{R_{\theta }}= \sum_{(s_{t},a_{t})\sim \pi _{\theta }}A^{\theta }(s_{t},a_{t})\bigtriangledown logp_{\theta }(a_{t}^{n}|s_{t}^{n})*p_{\theta}(s_{t},a_{t})\\=\sum_{(s_{t},a_{t})\sim \pi _{\theta }}A^{\theta }(s_{t},a_{t})\bigtriangledown logp_{\theta }(a_{t}^{n}|s_{t}^{n})*p_{{\theta }'}(s_{t},a_{t})\frac{p_{\theta}(s_{t},a_{t})}{p_{{\theta }'}(s_{t},a_{t})}\\=E_{(s_{t},a_{t})\sim \pi _{{\theta}' }}[A^{{\theta}' }(s_{t},a_{t})\bigtriangledown logp_{\theta }(a_{t}^{n}|s_{t}^{n})\frac{p_{\theta}(s_{t},a_{t})}{p_{{\theta }'}(s_{t},a_{t})}]\tag{16} Rθˉ=(st,at)πθAθ(st,at)logpθ(atnstn)pθ(st,at)=(st,at)πθAθ(st,at)logpθ(atnstn)pθ(st,at)pθ(st,at)pθ(st,at)=E(st,at)πθ[Aθ(st,at)logpθ(atnstn)pθ(st,at)pθ(st,at)](16)
公式(16)的解释:第一个等号的成立就是根据公式(15)然后按照期望的计算方法展开的,这个等号是很显然的,也说过很多次了。第二个等号就是在分子和分母同时乘上 p θ ′ ( s t , a t ) p_{{\theta }'}(s_{t},a_{t}) pθ(st,at),第三个等号的成立还是使用期望的计算公式,是不是公式推导很简单???第三个等号后面是 A θ ′ ( s t , a t ) A^{{\theta}' }(s_{t},a_{t}) Aθ(st,at),而不是 A θ ( s t , a t ) A^{\theta}(s_{t},a_{t}) Aθ(st,at).这是因为和环境互动的是 π θ ′ \pi_{{\theta}'} πθ,而不是 π θ \pi_{\theta} πθ
当使用重要采样换成别的别的分布进行计算时,和环境互动从而获得奖励的并不是当前需要被更新的agent,而是起到示范作用的agent。
例子:打篮球
菜鸡A想学打篮球,但是自己不会,于是A取篮球场看大神B玩篮球。这时,大神B突然一个很帅的动作投进了一个三分球。这里“三分”就是大神B和环境互动获得的奖励,菜鸡A记住了B是怎么打篮球的,于是取拿着篮球去了篮球场,回忆着大神B是如何打篮球的,开始了自己的学习之路。

我们对公式(16)继续进行推导
▽ R θ ˉ = E ( s t , a t ) ∼ π θ ′ [ A θ ′ ( s t , a t ) ▽ l o g p θ ( a t n ∣ s t n ) p θ ( s t , a t ) p θ ′ ( s t , a t ) ] = E ( s t , a t ) ∼ π θ ′ [ A θ ′ ( s t , a t ) ▽ l o g p θ ( a t n ∣ s t n ) p θ ( a t ∣ s t ) p θ ( s t ) p θ ′ ( a t ∣ s t ) p θ ′ ( s t ) ] ≈ E ( s t , a t ) ∼ π θ ′ [ A θ ′ ( s t , a t ) ▽ l o g p θ ( a t n ∣ s t n ) p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) ] = E ( s t , a t ) ∼ π θ ′ [ A θ ′ ( s t , a t ) ▽ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) ] (17) \bigtriangledown \bar{R_{\theta }}=E_{(s_{t},a_{t})\sim \pi _{{\theta}' }}[A^{{\theta}' }(s_{t},a_{t})\bigtriangledown logp_{\theta }(a_{t}^{n}|s_{t}^{n})\frac{p_{\theta}(s_{t},a_{t})}{p_{{\theta }'}(s_{t},a_{t})}]\\=E_{(s_{t},a_{t})\sim \pi _{{\theta}' }}[A^{{\theta}' }(s_{t},a_{t})\bigtriangledown logp_{\theta }(a_{t}^{n}|s_{t}^{n})\frac{p_{\theta}(a_{t}|s_{t})p_{\theta }(s_{t})}{p_{{\theta }'}(a_{t}|s_{t})p_{{\theta }'}(s_{t})}]\\\approx E_{(s_{t},a_{t})\sim \pi _{{\theta}' }}[A^{{\theta}' }(s_{t},a_{t})\bigtriangledown logp_{\theta }(a_{t}^{n}|s_{t}^{n})\frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})}]\\=E_{(s_{t},a_{t})\sim \pi _{{\theta}' }}[A^{{\theta}' }(s_{t},a_{t})\frac{\bigtriangledown p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})}]\tag{17} Rθˉ=E(st,at)πθ[Aθ(st,at)logpθ(atnstn)pθ(st,at)pθ(st,at)]=E(st,at)πθ[Aθ(st,at)logpθ(atnstn)pθ(atst)pθ(st)pθ(atst)pθ(st)]E(st,at)πθ[Aθ(st,at)logpθ(atnstn)pθ(atst)pθ(atst)]=E(st,at)πθ[Aθ(st,at)pθ(atst)pθ(atst)](17)

公式(17)的解释:第一个等号的成立我们在公式(16)的解释种已经给出了;第二个等号我们需要使用链式法则将联合概率分布展开,也就是分别将 p θ ( s t , a t ) = p θ ( a t ∣ s t ) p θ ( s t ) p_{\theta}(s_{t},a_{t}) = p_{\theta}(a_{t}|s_{t})p_{\theta }(s_{t}) pθ(st,at)=pθ(atst)pθ(st) p θ ′ ( s t , a t ) = p θ ′ ( a t ∣ s t ) p θ ′ ( s t ) p_{{\theta}'}(s_{t},a_{t}) = p_{{\theta}'}(a_{t}|s_{t})p_{{\theta}' }(s_{t}) pθ(st,at)=pθ(atst)pθ(st)分别代入第一个等号后面的分子分母即可。至于第二个约等于 ≈ \approx 号的成立是因为 p θ ( s t ) p_{\theta }(s_{t}) pθ(st) p θ ′ ( s t ) p_{{\theta}' }(s_{t}) pθ(st)我们默认这两个是无法计算的,或者由于环境的随机很大,我们将两者的比值默认为1.比如我们生活的真实环境中,我们无论在生活中做出什么样的动作,都是无法改变坏境的变化的。第四个等号的成立我们利用了复合函数求导和对数函数求导,将等式 ▽ p θ ( a t ∣ s t ) = p θ ( a t ∣ s t ) ▽ l o g p θ ( a t n ∣ s t n ) \bigtriangledown p_{\theta}(a_{t}|s_{t})=p_{\theta}(a_{t}|s_{t})\bigtriangledown logp_{\theta }(a_{t}^{n}|s_{t}^{n}) pθ(atst)=pθ(atst)logpθ(atnstn)带入就可以得到最后一行的公式。

于是,最重要的一部分来了,我们来反推出目标函数,前面我们根据策略梯度的导数推导出了策略梯度的目标函数,接着我们也可以根据公式(17)反推目标函数:
R θ ˉ = E ( s t , a t ) ∼ π θ ′ [ A θ ′ ( s t , a t ) p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) ] (18) \bar{R_{\theta }} = E_{(s_{t},a_{t})\sim \pi _{{\theta}' }}[A^{{\theta}' }(s_{t},a_{t})\frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})}]\tag{18} Rθˉ=E(st,at)πθ[Aθ(st,at)pθ(atst)pθ(atst)](18)

2.2、KL散度的妙用

前面我说过,如果 p θ ( a t ∣ s t ) p_{\theta}(a_{t}|s_{t}) pθ(atst) p θ ′ ( a t ∣ s t ) p_{{\theta }'}(a_{t}|s_{t}) pθ(atst)相差太大的话,就会导致方差变大,从而模型的训练将变得极其的不稳定。
于是公式(18)所示的目标函数转化为强化学习PPO算法的目标函数就是如下:
注意,我们是需要极大化奖励目标函数的。
R θ ˉ = E ( s t , a t ) ∼ π θ ′ [ A θ ′ ( s t , a t ) p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) ] − β ∗ K L ( p θ ( a t ∣ s t ) , p θ ′ ( a t ∣ s t ) ) (19) \bar{R_{\theta }} = E_{(s_{t},a_{t})\sim \pi _{{\theta}' }}[A^{{\theta}' }(s_{t},a_{t})\frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})}]-\beta *KL(p_{\theta}(a_{t}|s_{t}),p_{{\theta }'}(a_{t}|s_{t}))\tag{19} Rθˉ=E(st,at)πθ[Aθ(st,at)pθ(atst)pθ(atst)]βKL(pθ(atst),pθ(atst))(19)

**注:**原论文里面这里的KL散度也是期望,但是实际操作可能并不是这样。

公式(19)解释:我们知道,我们是希望模型可以获得更多的奖励的,前面我们介绍过,KL散度描述两个概率分布之间的差异,而且恒不小于0,如果两个数据差别越大,KL散度的数值就越大,否则如果越接近,KL散度的值就会越小。为了模型的稳定性,我们不能让这两个分布相差过大,于是我们减去这两个分布的KL散度值的一个 β ( > 0 ) \beta(>0) β(>0)倍,又由于KL散度值恒不小于0,我们极大化奖励期望的时候,会让 p θ ( a t ∣ s t ) p_{\theta}(a_{t}|s_{t}) pθ(atst) p θ ′ ( a t ∣ s t ) p_{{\theta }'}(a_{t}|s_{t}) pθ(atst)这两个分布在KL散度标准下的差别没有那么大,如果很大,那么奖励就会变小,这和模型需要极大化奖励是违背的,因为一旦这两个分布的差别太大,就会造成获得的奖励变得非常小。

2.3、TRPO

TRPO算法是一个约束规划算法
目标函数以及其约束条件如下
R θ ˉ = E ( s t , a t ) ∼ π θ ′ [ A θ ′ ( s t , a t ) p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) ] \bar{R_{\theta }} = E_{(s_{t},a_{t})\sim \pi _{{\theta}' }}[A^{{\theta}' }(s_{t},a_{t})\frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})}] Rθˉ=E(st,at)πθ[Aθ(st,at)pθ(atst)pθ(atst)]
s . t .     K L ( p θ ( a t ∣ s t ) , p θ ′ ( a t ∣ s t ) ) < δ s.t. \ \ \ KL(p_{\theta}(a_{t}|s_{t}),p_{{\theta }'}(a_{t}|s_{t}))<\delta s.t.   KL(pθ(atst),pθ(atst))<δ

可以看到,TRPO和PPO利用惩罚函数的方法其实是可以转化的,不再解释。PPO相较于TRPO更加容易操作一点,这两个算法的表现差别不大。

2.4、实际操作中的目标函数

前面以及多了很多次了,计算机无法处理连续和无穷多这种情况。因此我们需要使用采样的方法来逼近公式(19)所示的目标函数。于是就有
R θ ˉ = ∑ ( s t , a t ) A θ ′ ( s t , a t ) p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) − β ∗ K L ( p θ ( a t ∣ s t ) , p θ ′ ( a t ∣ s t ) ) (20) \bar{R_{\theta }}=\sum_{(s_{t},a_{t})}A^{{\theta}' }(s_{t},a_{t})\frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})}-\beta *KL(p_{\theta}(a_{t}|s_{t}),p_{{\theta }'}(a_{t}|s_{t}))\tag{20} Rθˉ=(st,at)Aθ(st,at)pθ(atst)pθ(atst)βKL(pθ(atst),pθ(atst))(20)

2.5、PPO2算法

只是目标函数发生了变化而已
R θ ˉ = ∑ ( s t , a t ) m i n ( A θ ′ ( s t , a t ) p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) , A θ ′ ( s t , a t ) ∗ c l i p ( p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) , 1 − ε , 1 + ε ) ) (21) \bar{R_{\theta }}=\sum_{(s_{t},a_{t})}min(A^{{\theta}' }(s_{t},a_{t})\frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})},A^{{\theta}' }(s_{t},a_{t})*clip(\frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})},1-\varepsilon ,1+\varepsilon ))\tag{21} Rθˉ=(st,at)min(Aθ(st,at)pθ(atst)pθ(atst),Aθ(st,at)clip(pθ(atst)pθ(atst),1ε,1+ε))(21)

公式(21)的解释:这个目标函数只是看着比较复杂而已, c l i p ( p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) , 1 − ε , 1 + ε ) clip(\frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})},1-\varepsilon ,1+\varepsilon ) clip(pθ(atst)pθ(atst),1ε,1+ε)是表示当 p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) \frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})} pθ(atst)pθ(atst)的比值大于$1+\varepsilon $,我们就取为 1 + ε 1+\varepsilon 1+ε,那么在经过min函数的作用,就会选择公式里面的后者,如果 p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) \frac{p_{\theta}(a_{t}|s_{t})}{p_{{\theta }'}(a_{t}|s_{t})} pθ(atst)pθ(atst)的值小于 1 − ε 1-\varepsilon 1ε,那么就会取为 1 − ε 1-\varepsilon 1ε,经过min函数之后,就会选择min还是里面的前者,从而这样来保证两个分布的差别不会很大。

  • 34
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值