强化学习入坑之路03

强化学习入坑之路03

强化学习概念回顾

正式进入之前我们回顾一下强化学习的三个基本概念:行为(actor)、环境(environment)、奖励(reward)
在这里插入图片描述
例如在电视游戏中,actor 做的事情就是去操控游戏的摇杆,environment 就是游戏的主机,reward function 采取某一行为时得到的分数。
而Policy 则可以理解为当给定外界条件时,我们进行的动作输出,一般写成 π π π。在上述场景中Policy可以理解为神经网络。
在这里插入图片描述
环境、行为的关系如上图所示,首先,environment 是一个function,游戏的主机也可以把它看作是一个 function。这个环境产出一个状态 s 1 s_1 s1,将此状态输入策略 π π π的神经网络中产生动作 a 1 a_1 a1,然后动作进一步引起环境的变化重复产生状态 s i s_i si a i a_i ai。所有的动作与环境的对连接起来就是一个Trajectory,写作:
Trajectory τ τ τ={s_1,a_1 ,s_2,a_2 ,⋯,s_t ,a_t}

而每走一个action都会有相应的回报,所有的回报加和就是total reward,可将其写作return。

策略梯度(Policy Gradient)

对于每一个策略 π \pi π,我们假设其中含有一个参数 θ \theta θ,策略中的输入所产生的对于输出都受参数 θ \theta θ影响,那么产生轨迹 τ τ τ的概率可以描述为:
p θ ( τ ) = p ( s 1 ) ∏ t = 1 T p θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) p_\theta(τ)=p(s_1) \prod_{t=1}^{T} p_\theta(a_t|s_t)p(s_{t+1}|s_t,a_t) pθ(τ)=p(s1)t=1Tpθ(atst)p(st+1st,at)
其中 p θ ( . ) p_\theta(.) pθ(.)为策略函数p(.)为状态转移函数。 p θ ( . ) p_\theta(.) pθ(.)就是agent行为的影响,而p(.)为环境的影响。

而强化学习中奖励与环境及行为的关系如下图所示:
在这里插入图片描述
reward是一个 function,给它 s 1 , a 1 s_1,a_1 s1a1,它告诉你得到 r 1 r_1 r1。给它 s 2 s_2 s2 a 2 a_2 a2,它告诉你得到 r 2 r_2 r2。 把所有的 τ τ τ 都加起来,我们就得到了 R ( τ ) R(\tau) R(τ) ,代表某一个 trajectory τ \tau τ 的 reward。在某一场游戏里面, 某一个 episode 里面,我们会得到 R。我们要做的事情就是调整 actor 内部的参数 θ \theta θ, 使得 R 的值越大越好。

然而每一步所得到的reward并不是一个标量,其表示形式如下所示:
R θ ‾ \overline{R_{\theta}} Rθ= ∑ τ R ( τ ) p θ ( τ ) = E τ ∼ p θ ( τ ) [ R ( τ ) ] \sum_{\tau}R(\tau)p_\theta(τ)=E_{\tau \sim p _\theta(\tau)}[R(\tau)] τR(τ)pθ(τ)=Eτpθ(τ)[R(τ)]

在这里插入图片描述
那么如何对奖励求梯度呢?我们用了梯度上升,对 R θ ‾ \overline{R_{\theta}} Rθ求相应的梯度,通过蓝框公式的转换,可将其转化为上图的最后形式。

在这里插入图片描述
如上图所示,然后我们就可以根据奖励函数的梯度进行 θ \theta θ的更新,正向奖励增大 θ \theta θ,负向奖励减小 θ \theta θ
在这里插入图片描述
在实现的时候,我们通常会发现由于奖励定义的范围不包含负数,所以求出的梯度也不会包含负数那么怎么办呢?一个方法就是设定一个baseline,这样当奖励小于b值时,我们所得到的梯度就是负的,就需要减少这一项的概率。
在这里插入图片描述
在实现时,由于全体奖励是固定的,可能不利于每一个动作的更新,因此可将奖励函数冲洗设定为上图的形式,这被称为Discounted Return(折扣回报)。

On-policy 与 Off-policy

在讲 PPO 之前,我们先讲一下 on-policy 和 off-policy 这两种 training 方法的区别。 在 reinforcement learning 里面,我们要 learn 的agent如果 跟和环境互动的 agent 是同一个的话, 这个叫做on-policy(同策略),反之,如果要 learn 的 agent 跟和环境互动的 agent 不是同一个的话, 那这个叫做off-policy(异策略)。

为什么我们会想要考虑 off-policy ?让我们来想想 policy gradient。Policy gradient 是 on-policy 的做法,因为在做 policy gradient 时,我们需要有一个 agent、一个 policy 和一个 actor。这个 actor 先去跟环境互动去搜集资料,搜集很多的 τ \tau τ,根据它搜集到的资料,会按照 policy gradient 的式子去 update policy 的参数。所以 policy gradient 是一个 on-policy 的 algorithm。
在这里插入图片描述
上面这个 update 的式子中的 E τ ∼ p θ ( τ ) E_{\tau \sim p_{\theta}(\tau)} Eτpθ(τ)
应该是你现在的 policy θ 所 sample 出来的 trajectory τ \tau τ做 expectation。一旦 update 了参数,从 θ \theta θ 变成 θ \theta θ
,这个时候再用之前sample出的data就不行了,因为这些data是 p θ ( x ) p_{\theta}(x) pθ(x)出来的,而现在 θ \theta θ 变成 θ \theta θ′。
所以 policy gradient 是一个会花很多时间来 sample data 的 algorithm,你会发现大多数时间都在 sample data,agent 去跟环境做互动以后,接下来就要 update 参数。你只能 update 参数一次。接下来你就要重新再去 collect data, 然后才能再次update 参数。
为了节省时间,所以我们要将 on-policy 变成 off-policy。 这样做就可以用另外一个 policy 及 actor θ \theta θ'去跟环境做互动。用θ ’ collect 到的 data 去训练 θ。这意味着说我们可以把θ′ collect 到的 data 用非常多次,我们可以执行 gradient ascent 好几次,我们可以 update 参数好几次, 都只要用同一笔 data 就好了。因为假设θ有能力学习另外一个 actor θ′的data,这样可以一次多sample一些数据来进行多次θ的更新。

在这里插入图片描述
具体做法如上图所示,这里有一个函数f(x),两个分布p(x)与q(x)假设我们不能对p(x)做积分的话,我们如果要求f(x)的期望,我们就需要在p(x)上sample出一些样本来对其求期望的近似,这就引出了另一个假设,若是我们不能在p(x)上采样呢?
这样的话,我们可以从q(x)上采样,通过p(x)和q(x)上的装换关系来求期望。
在这里插入图片描述
上图是f(x)期望和方差的转换公式,方差最后可以转换为: V a r x ∼ q [ f ( x ) p ( x ) q ( x ) ] Var_{x \sim q}[f(x) \frac{p(x)}{q(x)}] Varxq[f(x)q(x)p(x)]= E x / s i m p [ f ( x ) 2 p ( x ) q ( x ) − ( E x ∼ p [ f ( x ) ] 2 ) ] E_{x /sim p}[f(x)^2\frac{p(x)}{q(x)}-(E_{x \sim p}[f(x)]^2)] Ex/simp[f(x)2q(x)p(x)(Exp[f(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)差距不大呢?
在这里插入图片描述
现在我们不用 θ \theta θ去跟环境做互动,假设有另外一个 policy θ \theta θ',它就是另外一个actor。它的工作是他要去做demonstration,θ ′的工作是要去示范给\thetaθ 看。它去跟环境做互动,告诉θ 说,它跟环境做互动会发生什么事。然后,借此来训练θ。我们要训练的是θ ,θ′只是负责做 demo,负责跟环境做互动。我们现在的 τ \tau τ 是从 θ ′ \theta' θsample 出来的,是拿 θ ′ \theta' θ去跟环境做互动。所以 sample 出来的 τ \tau τ 是从 θ ′ \theta' θsample 出来的,这两个distribution 不一样。但没有关系,假设你本来是从 p 做 sample,但你发现你不能够从 p 做sample,所以我们不拿 θ \theta θ 去跟环境做互动。你可以把 p 换 q,然后在后面这边补上一个 importance weight。现在的状况就是一样,把 θ \theta θ 换成 θ ′ \theta' θ 后,要补上一个 importance weight p θ ( τ ) p θ ′ ( τ ) \frac{p_{\theta}(\tau)}{p_{\theta^{\prime}}(\tau)} pθ(τ)pθ(τ) 。这个 importance weight 就是某一个 trajectory τ \tau τ θ \theta θ 算出来的概率除以这个 trajectory τ \tau τ,用 θ ′ \theta' θ 算出来的概率。这一项是很重要的,因为今天你要 learn 的是 actor θ \theta θ θ ′ \theta' θ 是不太一样的。 θ ′ \theta' θ 会见到的情形跟 θ 见到的情形不见得是一样的,所以中间要做一个修正的项。
在这里插入图片描述
我们在做梯度更新时,首先要做的就是求价值函数的梯度,我们先对A式进行转换,将参数从 θ \theta θ换到 θ ′ \theta' θ,之后importance weight在 p θ ( x ) p θ ′ ( x ) \frac{p_{\theta}(x)}{p_{\theta'}(x)} pθ(x)pθ(x)差距不大的情况下可忽略(这个下面解释),最后我们取到目标函数就是 J θ ′ ( θ ) J^{\theta'}(\theta) Jθ(θ)

PPO

在这里插入图片描述
我们可以把 on-policy 换成 off-policy,但 importance sampling 有一个 issue,如果 p θ ( a t ∣ s t ) p_{\theta}\left(a_{t} | s_{t}\right) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}\left(a_{t} | s_{t}\right) pθ(atst)差太多的话,这两个 distribution 差太多的话,importance sampling 的结果就会不好。怎么避免它差太多呢?这个就是 Proximal Policy Optimization (PPO) 在做的事情。
PPO 实际上做的事情就是这样,在 off-policy 的方法里要 optimize 的是 J θ ′ ( θ ) J^{\theta^{\prime}}(\theta) Jθ(θ)。但是这个 objective function 又牵涉到 importance sampling。在做 importance sampling 的时候, p θ ( a t ∣ s t ) p_{\theta}\left(a_{t} | s_{t}\right) pθ(atst)不能跟 p θ ′ ( a t ∣ s t ) p_{\theta'}\left(a_{t} | s_{t}\right) pθ(atst)差太多。你做 demonstration 的 model 不能够跟真正的 model 差太多,差太多的话 importance sampling 的结果就会不好。我们在 training 的时候,多加一个 constrain。这个 constrain 是 θ \theta θ θ ′ \theta' θoutput 的 action 的 KL divergence,简单来说,这一项的意思就是要衡量说 θ \theta θ θ ′ \theta' θ有多像。

然后我们希望在 training 的过程中,learn 出来的 θ \theta θ θ ′ \theta' θ越像越好。因为如果 θ \theta θ θ ′ \theta' θ不像的话,最后的结果就会不好。所以在 PPO 里面有两个式子,一方面是 optimize 本来要 optimize 的东西,但再加一个 constrain。这个 constrain 就好像那个 regularization 的 term 一样,在做 machine learning 的时候不是有 L1/L2 的 regularization。这一项也很像 regularization,这样 regularization 做的事情就是希望最后 learn 出来的 θ \theta θ不要跟 θ ′ \theta' θ太不一样。

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页