【RLchina第四讲】Model-Based Reinforcement Learning


  深度强化学习有一个很大的不足点,它在数据采样效率上面是非常低的。

在机器学习里面的采样效率说的是:如果采用某个训练集,训练集的大小和模型的最终性能是有关系的,如果想达到某个性能的话,就需要多大量的训练数据。所以说不同的机器学习模型,或者说机器学习算法它需要多大量的数据其实是一个衡量这个模型好不好的一个关键指标。

  由于强化学习本身就是以一种试错型的方式进行学习的,这个方式的学习算法就导致深度强化学习具有比较低的采样效率。因为如果智能体采样出来的新的数据不是特别能够帮助更新你的Q-Value,或者是更新你的Policy,那么这个采样对于整个Agent来说是利用率非常低的。

基于模型的强化学习

  所以在1718年开始就有一个新的方向,Model-Based RLModel-Based90年代初其实就有学者对其进行过研究。像Q-PlanningDyna-Q都是最早期的Model-Based RLModel这个概念在强化学习里面其实是比较特殊的,在平时说训练监督学习、无监督学习等算法中model就是预测数据模型本身,而在强化学习中,最终的输出是通过策略 π \pi π实现的,但是我们从来不会把ploicy π \pi π称之为model。我们是把环境称之为model。所以在强化的算法或者论文中,我们一般称之为环境的模型,如果是策略本身,它就称之为policy

  MBRL基本的套路就是我们依据经验数据训练一个model,然后基于这个model我们就可以在所学的这个model上面进行进一步的学习,比如像生成一些数据也好,还是传递一些梯度也好,去训练policy。通过这种方式我们就不必与真实的环境做交互,从而获得性能的提升。而当policy π \pi π发生了改变的话,那么它和环境交互出来的data的分布本身也会发生改变。

  通常来说环境提供两个部分:

  1. state dynamic p ( s ′ ∣ s , a ) p(s^{\prime}|s,a) p(ss,a)
  2. Reward function r ( s , a ) r(s,a) r(s,a)。这个奖励可以是一个数值,也可以是一个采样出来的分布。

  当给定某个具体的policy π ( a ∣ s ) \pi(a \mid s) π(as),和真实环境进行交互。环境进行上述两个条件概率分布计算 p ( s ′ , r ∣ s , a ) p\left(s^{\prime}, r \mid s, a\right) p(s,rs,a),去得到交互出来的数据 { ( s , a , r , s ′ ) } \left\{\left(s, a, r, s^{\prime}\right)\right\} {(s,a,r,s)}

  然后基于这个交互出来的数据去训练我的Q值函数。如果是基于模型的强化学习的话,那么我们需要学一个world model p ^ ( s ′ , r ∣ s , a ) \hat{p}\left(s^{\prime}, r \mid s, a\right) p^(s,rs,a)。此时交互出来的数据是一个仿真数据simulated data。基于模拟数据,我们可以用无模型强化学习算法MFRL来进行学习:

  通过这种方式,我们就绕开了与环境进行直接交互所带来的一些问题、弊端。

无模型RL V.S. 基于模型的RL

  • Model-based RL

  1. 一旦模型被学习到了,之后就可以用On-Policy的方式进行学习,可以一直无限次进行交互,能够避免Off-Policy带来的一些问题。2. 当然最大的好处还是极大地减少与真实环境的交互,像Batch RLOffline RL中就经常会采用到MBRL中的一些方法。3. 与MFRL相比具有较高的采样效率。4. 由于模型具有误差,那么会产生模型的累计误差。

  • Model-free RL

  1. 无模型强化学习最大的好处就在于它拥有最好的效果,因为所有的数据都是真实的。2. 有时候会显现出数据的不稳定性,因为数据本身的采样并不是基于某个期望下进行的,而是随着策略 π \pi π改变而改变的。3. 缺陷就在于较低的采样效率,并且需要超大的算力平台。

基于模型的强化学习:黑盒模型和白盒模型

  所谓的黑盒模型说的是,训练的模型只是用来采样数据。它里面到底是如何去计算statereward,我们并不关心。我们只将其看作一个产生无穷无尽的训练数据的黑盒。然后我们产生完数据之后都是用model-free的方法来训练policy。像Dyna-QMPC、和MBPO这样一些经典的算法都是Blackbox的。

  另外一类算法是白盒模型,白盒模型相比于黑盒模型,他的区别在于state dynamic p ϕ ( s ′ ∣ s , a ) p_{\phi}(s^{\prime}|s,a) pϕ(ss,a)已知。假设当前policy的参数是 θ \theta θ π θ \pi_{\theta} πθ。我们可以直接优化state s s svalue值,对于state s ′ s^{\prime} s求导(不是对于 V ( s ′ ) V(s^{\prime}) V(s)的参数求导)。为什么可以对 s ′ s^{\prime} s求导呢?因为 s ′ s^{\prime} s可以看作 p ϕ ( s ′ ∣ s , a ) p_{\phi}(s^{\prime}|s,a) pϕ(ss,a)的输出,这个时候用链式法则就可以进一步对 a a a求导, a a a此时又是policy π θ \pi_{\theta} πθ的输出了,于是我们又可以在policy上面再通过链式法则对 θ \theta θ进行求导:

∂ V ( s ′ ) ∂ s ′ ∂ s ′ ∂ a ∂ a ∂ θ ∣ s ′ ∼ f ϕ ( s , a ) \left.\frac{\partial V\left(s^{\prime}\right)}{\partial s^{\prime}} \frac{\partial s^{\prime}}{\partial a} \frac{\partial a}{\partial \theta}\right|_{s^{\prime} \sim f_{\phi}(s, a)} sV(s)asθasfϕ(s,a)

  所以一旦把这个盒子打开,变成了一个白盒的话,我们就可以使用概率密度梯度两种信息来进行学习。白盒模型也可以像黑盒模型一样去sample更多的data。这些工作有MAACSVGPILCO等等这些算法。

从Dyna算法介绍基于模型的强化学习

  学model的时候通常会采用supervised learning一类的算法进行学习。另外一类是通过计算状态转移分布 p ϕ ( s ′ ∣ s , a ) p_{\phi}(s^{\prime}|s,a) pϕ(ss,a)来实现的。如果我们学一个模型,然后构造(construct value function)的话,可能会带来两方面的误差,第一个是模型本身带来的误差,另外一个是value function带来的误差。

  1. Q-Planning

  首先通过随机的智能体采样得到数据,然后学一个model p ^ ( s ′ , r ∣ s , a ) \hat{p}\left(s^{\prime}, r \mid s, a\right) p^(s,rs,a)。之后要做的是:

  选择一个状态 S S S和一个动作 A A A,然后将其送入sample model中去,去获得下一个奖励reward和下一个状态 S ′ S^{\prime} S。这样通过 S S S A A A就构建了一个四元 < S , A , R , S ′ > <S,A,R,S^{\prime}> <S,A,R,S>。有了这样一个四元组之后,我们就可以去做Q-Learning

  1. Dyna

  Dyna-Q中还可以通过实际环境中获得的经验做学习。

  拿到一个状态 S S S,然后依据 Q Q Q函数探索得到一个动作 A A A。有了这个采样到的动作之后,我们将其在真实环境中执行,得到真实的奖励 R R R和真实的下一个状态 S ′ S^{\prime} S。这样也能获得一个四元组,之后就可以依据更新公式对 Q Q Q函数进行进一步的更新。之后在假定模型是确定行环境的时候,我们直接就可以依据数据训练 M o d e l Model Model了。

  之后重复 n n n步,从之前的观测状态 S S S中随机选择一个,之后从动作 A A A中随机选择一个,依据模型 M o d e l ( S , A ) Model(S,A) Model(S,A)计算得到奖励和下一个状态,再做一步 Q Q Q更新。所以在Dyna-Q中做的是1步的MFRL n n n步的MFRL但是每次模型只往前推进一步

基于模型的强化学习有几个很重要的问题

  1. 基于所学的这样一个非完美模型能不能改进我们的数据效率呢?
  2. 基于深度学习所训练的环境模型肯定不是那么准确的,这个时候我们还能不能去相信我们的模型呢?如何去相信模型采样所得到的数据呢?
  3. 如何使用我们的模型,从而获得更好的策略呢?

随机打靶算法:RS,PETS,POPLIN

  在有了模型之后,能不能在近乎不学习policy的情况下能够去获得比较高的性能。因为我们有模型,这样我们就能从模型中直接进行搜索,得到最好的action

  有了model之后,通过做任何形式的action,模型都会给予反馈,告诉你当前这个决策好不好。shooting method说的就是给定当模型 p ( s ′ , r ∣ s , a ) p\left(s^{\prime}, r \mid s, a\right) p(s,rs,a),对于每个状态前state s s s,和一个候选(candidate)动作 a a a。可以构建一个长度为 T T Taction sequence

[ a , a 1 , a 2 , … , a T ] \left[a,a_{1}, a_{2}, \ldots, a_{T}\right] [a,a1,a2,,aT]

  有了状态和所有的动作序列之后,就可以和环境进行交互,产生相应的episode

{ [ s 1 ( k ) , a 1 , r 1 ( k ) , s 2 ( k ) , a 2 , r 2 ( k ) , … , s T ( k ) , a T , r T ( k ) ] } k = 1 , … , N \left\{\left[s_{1}^{(k)}, a_{1}, r_{1}^{(k)}, s_{2}^{(k)}, a_{2}, r_{2}^{(k)}, \ldots, s_{T}^{(k)}, a_{T}, r_{T}^{(k)}\right]\right\}_{k=1, \ldots, N} {[s1(k),a1,r1(k),s2(k),a2,r2(k),,sT(k),aT,rT(k)]}k=1,,N

  基于上述采样样本,我们可以估计 Q Q Q值函数并得到策略 π ( s ) \pi(s) π(s)

Q ^ ( s , a ) = 1 N ∑ k = 1 N ∑ t = 0 T γ t r t ( k ) π ( s ) = arg ⁡ max ⁡ a Q ^ ( s , a ) \hat{Q}(s, a)=\frac{1}{N} \sum_{k=1}^{N} \sum_{t=0}^{T} \gamma^{t} r_{t}^{(k)} \quad \pi(s)=\arg \max _{a} \hat{Q}(s, a) Q^(s,a)=N1k=1Nt=0Tγtrt(k)π(s)=argamaxQ^(s,a)

  这个时候我们根本就没学习,有了一个模型之后,之后模拟计算,走到终局或者指定的 T T T步,看看哪个候选动作 a a a能够获得较大的收益,就选哪个。当智能体走到了真正的 s 1 s_{1} s1之后再做一遍这个操作。这个也叫做MPC

Random Shooting(RS)

  在RS算法中,action sequence是随机采样得到的,它有一些好处,第一个好处就是这个action sequence它可以非常简单得到。它甚至不管你的state是啥,先可以把动作序列给做出来。在这个过程中是不做学习的,没有梯度的计算。它也不太需要去考虑task到底有多长这样。

  同样这种做法带来的坏处也很明显,像variance就很大,因为搜索的空间很大,而只采样了一条。一种可行的办法就是说,我们把每个action不看它state的情况下,整体来看它到底能带来更大的value还是更低的value。给它做成像一个二分类一样的东西,叫cross entropy method。就是对action做一些简单的分堆,采样的时候就期望去采样得到高reward或者高valueaction。这种方法与完全随机采样相比是能够获得更好的reward的。

PETS:Probabilistic Ensembles with Trajectory Sampling

  在2018年的NIPS上面发表了一篇RS类算法的文章PETS。它拿一系列可训练的高斯模型做了一个ensemble

lossp ⁡ ( θ ) = − ∑ n = 1 N log ⁡ f ~ θ ( s n + 1 ∣ s n , a n ) \operatorname{lossp}(\boldsymbol{\theta})=-\sum_{n=1}^{N} \log \widetilde{f}_{\theta}\left(\boldsymbol{s}_{n+1} \mid \boldsymbol{s}_{n}, \boldsymbol{a}_{n}\right) lossp(θ)=n=1Nlogf θ(sn+1sn,an)

  每一个高斯模型去采样下一个state的时候,他就是去follow一个mean和一个variance matrix。做一个Gaussian NN

f ~ = Pr ⁡ ( s t + 1 ∣ s t , a t ) = N ( μ θ ( s t , a t ) , Σ θ ( s t , a t ) ) \tilde{f}=\operatorname{Pr}\left(s_{t+1} \mid s_{t}, a_{t}\right)=\mathcal{N}\left(\mu_{\theta}\left(s_{t}, a_{t}\right), \Sigma_{\theta}\left(s_{t}, a_{t}\right)\right) f~=Pr(st+1st,at)=N(μθ(st,at),Σθ(st,at))

  本身的 μ θ \mu_{\theta} μθ Σ θ \Sigma_{\theta} Σθ都是用 θ \theta θ参数化的神经网络。当给定当前 s t , a t s_{t}, a_{t} st,at,我就可以确定性地去计算到 μ \mu μ Σ \Sigma Σ,基于这个 μ \mu μ Σ \Sigma Σ我就可以采样接下来的这个 s t + 1 s_{t+1} st+1

  从上述论述我们可以看到每个模型都是一个Gaussian NN,我们有 N N N个高斯做了一个Ensemble操作。这里其实是通过集成学习降低模型的variance,这里的variance并不是 Σ \Sigma Σ,而是一些没有见过的数据导致的泛化性能的variance

  当我们有了 N N N个高斯的概率模型之后,我们就可以用这 N N N个概率模型去做trajectory sampling(TS)。这里所采样的trajectory sampling的方法其实是比较特殊的。因为我们有 N N N个高斯模型,所以我们可以直接采样出来一个高斯模型,走一步,得到一个新的高斯分布,在这个高斯分布里面,我们再采样一个新的state,接下来我们又要走下一步,走下一步的时候,我们又从这 N N N个高斯模型里面去采样,这样就能够实现trajectory的前向传播。基于这 N N N个高斯模型,我们就可以去做planning。在每一个time step上,MPC算法通过采样去计算多个最优动作序列,之后采用第一个action,然后重复上述的规划任务。这样的一种算法就称作Planning via Model Predictive Control

  这里采样获取动作的时候,采用的是CEM的方式来获取相对来说比较好的action。然后对每个动作序列去做一个评估,之后更新CEM。但是最终对于环境的执行来说,是执行最好的动作序列 a t : t + T ∗ a^{*}_{t:t+T} at:t+T中的第一个action。采样得到的数据重新加入到数据集中去。

POPLIN

  POPLINpolicy planning的一个简称,PETS这个算法采样的方式是最简单的CEM方法,它没有关注当前的state是啥,就随机给actionPOLIN算法中就用一个policy去采样,也就是说在POPLIN中需要保留一个policy用来在给定当前仿真状态的时候采样一个动作。使得其在当前的状态下能够采样出来更好的action。给定一个状态,拿策略进行采样,得到的期望奖励可以表达为以下形式:

R ( s i , a i ) = E [ ∑ t = i i + τ r ( s t , a t ) ] \mathcal{R}\left(s_{i}, \mathbf{a}_{i}\right)=\mathbb{E}\left[\sum_{t=i}^{i+\tau} r\left(s_{t}, a_{t}\right)\right] R(si,ai)=E[t=ii+τr(st,at)]

  其中 s t + 1 ∼ f ϕ ( s t + 1 ∣ s t , a t ) s_{t+1} \sim f_{\phi}\left(s_{t+1} \mid s_{t}, a_{t}\right) st+1fϕ(st+1st,at),这个时候如果在动作层面去增加一些噪声的话,可以表示为: R ( s i , δ i ) = E [ ∑ t = i i + τ r ( s t , a ^ t + δ t ) ] \mathcal{R}\left(s_{i}, \boldsymbol{\delta}_{i}\right)=\mathbb{E}\left[\sum_{t=i}^{i+\tau} r\left(s_{t}, \hat{a}_{t}+\delta_{t}\right)\right] R(si,δi)=E[t=ii+τr(st,a^t+δt)]。如果直接在策略 π \pi π的参数层面增加噪声的话,可以表示为: R ( s i , ω i ) = E [ ∑ t = i i + τ r ( s t , π θ + ω t ( s t ) ) ] \mathcal{R}\left(s_{i}, \boldsymbol{\omega}_{i}\right)=\mathbb{E}\left[\sum_{t=i}^{i+\tau} r\left(s_{t}, \pi_{\theta+\omega_{t}}\left(s_{t}\right)\right)\right] R(si,ωi)=E[t=ii+τr(st,πθ+ωt(st))]

理论边界分析:SLBO,MBPO & BMPO

  从理论层面去思考一下模型到底有多准,以至于它最终训练出来的policy和真实的policy能有多接近。这就会决定如何来使用这样一个模型。模型如果不准的话,原则上我们就少用它,少用它的话,我们的采样效率就不高。模型不准的情况下又多用它的话,最终的性能就会很低,因为引入了一些noise

值差异界限

V π , M ⋆ ≥ V π , M ^ − D ( M ^ , π ) V^{\pi, M^{\star}} \geq V^{\pi, \widehat{M}}-D(\widehat{M}, \pi) Vπ,MVπ,M D(M ,π)

  策略 π \pi π与环境进行交互的过程中会得到策略值函数 V π V^{\pi} Vπ,如果是与真实的环境进行交互的话,我们把这个值函数定义为 V π , M ⋆ V^{\pi, M^{\star}} Vπ,M,其中的 M ⋆ M^{\star} M表示真实的环境。如果策略 π \pi π是与所学环境模型 M ^ \widehat{M} M 获得的值函数的话,我们将这个价值定义为 V π , M ^ V^{\pi, \widehat{M}} Vπ,M 。这个bound的差异(discrepancy),就在于策略 π \pi π与所学模型 M ^ \widehat{M} M 所带来的对值函数的影响,把这个影响定义为 D ( M ^ , π ) D(\widehat{M}, \pi) D(M ,π)

  这个bound需要一些实际的要求与假设:

  1. R1:数据是从一个参考策略 π r e f \pi_{ref} πref中得到的,从 π r e f \pi_{ref} πref采样得到的数据中学习到的策略 π \pi π,与 π r e f \pi_{ref} πref的差距不要太大。

V π , M ⋆ ≥ V π , M ^ − D π r e f , δ ( M ^ , π ) , ∀ π  s.t.  d ( π , π r e f ) ≤ δ V^{\pi, M^{\star}} \geq V^{\pi, \widehat{M}}-D_{\pi_{\mathrm{ref}}, \delta}(\widehat{M}, \pi), \quad \forall \pi \text { s.t. } d\left(\pi, \pi_{\mathrm{ref}}\right) \leq \delta Vπ,MVπ,M Dπref,δ(M ,π),π s.t. d(π,πref)δ

  1. R2:第二个是一个很强的假设,假设 M ^ \widehat{M} M 能够取到 M ⋆ M^{\star} M。如果能够做到与真实环境一样的话,值函数之间的差异应该为0,这一点很容易理解。

M ^ = M ⋆ ⟹ D π ref  ( M ^ , π ) = 0 , ∀ π , π ref  \widehat{M}=M^{\star} \Longrightarrow D_{\pi_{\text {ref }}}(\widehat{M}, \pi)=0, \quad \forall \pi, \pi_{\text {ref }} M =MDπref (M ,π)=0,π,πref 

  1. R3 D π ref  ( M ^ , π ) D_{\pi_{\text {ref }}}(\widehat{M}, \pi) Dπref (M ,π)需要满足一个形式,参考策略 π r e f \pi_{ref} πref与真实环境交互采样出来的trajector τ \tau τ,所构建出来的函数再取期望: E τ ∼ π r e f , M ⋆ [ f ( M ^ , π , τ ) ] \underset{\tau \sim \pi_{\mathrm{ref}}, M^{\star}}{\mathbb{E}}[f(\widehat{M}, \pi, \tau)] τπref,ME[f(M ,π,τ)],比如说我们可以定义为,所学模型的预测值与真实环境的值做L1距离:

 e.g.  D π ref  ( M ^ , π ) = L ⋅ E ⁡ S 0 , … , S t , ∼ π ref  , M ⋆ [ ∥ M ^ ( S t ) − S t + 1 ∥ ] \text { e.g. } D_{\pi_{\text {ref }}}(\widehat{M}, \pi)=L \cdot \operatorname{E}_{S_{0}, \ldots, S_{t}, \sim \pi_{\text {ref }}, M^{\star}}\left[\left\|\widehat{M}\left(S_{t}\right)-S_{t+1}\right\|\right]  e.g. Dπref (M ,π)=LES0,,St,πref ,M[M (St)St+1]

  其中 L L L为普希茨常数,表示神经网络上梯度最大的那个常数。

  有了上述三个条件之后,就可以去做一个meta algorithm

  这里的meta algorithm说的是训练模型是一个algorithm,训练policy是一个algorithm,从meta层面上理解就是元算法。

  因为trpo算法的约束与上述优化目标的约束一样,所以在训练策略的时候,直接拿trpo训练即可。策略训练完了之后,就可以拿到数据去训练模型。通过这种方式,让策略和模型相互迭代更新。通过这种方式,能够拿到策略所需要的环境模型。

  这个时候就会有一个理论的收敛证明:

Theorem:基于Algorithm 1,产生得到的策略 π 0 , ⋯   , π T \pi_{0},\cdots,\pi_{T} π0,,πT对于如下值函数单调上升:

V π 0 , M ⋆ ≤ V π 1 , M ⋆ ≤ ⋯ ≤ V π T , M ⋆ V^{\pi_{0}, M^{\star}} \leq V^{\pi_{1}, M^{\star}} \leq \cdots \leq V^{\pi_{T}, M^{\star}} Vπ0,MVπ1,MVπT,M

Proof

  因为 D D D d d d满足R1,所以有:

V π k + 1 , M ⋆ ≥ V π k + 1 , M k + 1 − D π k ( M k + 1 , π k + 1 ) V^{\pi_{k+1}, M^{\star}} \geq V^{\pi_{k+1}, M_{k+1}}-D_{\pi_{k}}\left(M_{k+1}, \pi_{k+1}\right) Vπk+1,MVπk+1,Mk+1Dπk(Mk+1,πk+1)

  通过Algorithm 1可知, π k + 1 \pi_{k+1} πk+1 M k + 1 M_{k+1} Mk+1是最优方程得到的,所以我们有(最后一个等式基于R2):

V π k + 1 , M k + 1 − D π k ( M k + 1 , π k + 1 ) ≥ V π k , M ⋆ − D π k ( M ⋆ , π k ) = V π k , M ⋆ V^{\pi_{k+1}, M_{k+1}}-D_{\pi_{k}}\left(M_{k+1}, \pi_{k+1}\right) \geq V^{\pi_{k}, M^{\star}}-D_{\pi_{k}}\left(M^{\star}, \pi_{k}\right)=V^{\pi_{k}, M^{\star}} Vπk+1,Mk+1Dπk(Mk+1,πk+1)Vπk,MDπk(M,πk)=Vπk,M

  这里有两个非常强的假设:1. 能够取到这个argmax;2. 神经网络找到的 M k + 1 M_{k+1} Mk+1能够拟合到最优的 M ∗ M^{*} M

  有了上述的理论分析之后,就能够去导出SLBO(Stochastic Lower Bound Optimization):

  上述算法2模型的loss为:

L ϕ ( H ) ( ( s t : t + h , a t : t + h ) ; ϕ ) = 1 H ∑ i = 1 H ∥ ( s ^ t + i − s ^ t + i − 1 ) − ( s t + i − s t + i − 1 ) ∥ 2 \mathcal{L}_{\phi}^{(H)}\left(\left(s_{t: t+h}, a_{t: t+h}\right) ; \phi\right)=\frac{1}{H} \sum_{i=1}^{H}\left\|\left(\hat{s}_{t+i}-\hat{s}_{t+i-1}\right)-\left(s_{t+i}-s_{t+i-1}\right)\right\|_{2} Lϕ(H)((st:t+h,at:t+h);ϕ)=H1i=1H(s^t+is^t+i1)(st+ist+i1)2

  模型和策略的优化目标为:

max ⁡ ϕ , θ V π θ , sg ⁡ ( M ^ ϕ ) − λ ( s t : t + h , a t : t + h ) ∼ π k , M ⋆ E [ L ϕ ( H ) ( ( s t : t + h , a t : t + h ) ; ϕ ) ] \max _{\phi, \theta} V^{\pi_{\theta}, \operatorname{sg}\left(\widehat{M}_{\phi}\right)}-\lambda_{\left(s_{t: t+h}, a_{t: t+h}\right) \sim \pi_{k}, M^{\star}} \mathbb{E}\left[\mathcal{L}_{\phi}^{(H)}\left(\left(s_{t: t+h}, a_{t: t+h}\right) ; \phi\right)\right] ϕ,θmaxVπθ,sg(M ϕ)λ(st:t+h,at:t+h)πk,ME[Lϕ(H)((st:t+h,at:t+h);ϕ)]

  SLBO提供了一种策略如何学习才能够获得性能单调递增的思路。但是这里有个很强的假设就是model能够拟合到最优真实模型。

基于模型的策略优化

  两个环境模型所带来的误差有两部分组成,一个是转移模型所带来的 ϵ m \epsilon_{m} ϵm,一个是策略带来的 ϵ π \epsilon_{\pi} ϵπ

η [ π ] ≥ η ^ [ π ] − [ 2 γ r max ⁡ ( ϵ m + 2 ϵ π ) ( 1 − γ ) 2 + 4 r max ⁡ ϵ π ( 1 − γ ) ] ⏟ C ( ϵ m , ϵ π ) \eta[\pi] \geq \hat{\eta}[\pi]-\underbrace{\left[\frac{2 \gamma r_{\max }\left(\epsilon_{m}+2 \epsilon_{\pi}\right)}{(1-\gamma)^{2}}+\frac{4 r_{\max } \epsilon_{\pi}}{(1-\gamma)}\right]}_{C\left(\epsilon_{m}, \epsilon_{\pi}\right)} η[π]η^[π]C(ϵm,ϵπ) [(1γ)22γrmax(ϵm+2ϵπ)+(1γ)4rmaxϵπ]

  这里的 η \eta η看作SLBO中的value即可。后面的与SLBO很像,以差异的方式显示出来。

   ϵ π = max ⁡ s D T V ( π ∥ π D ) \epsilon_{\pi}=\max _{s} D_{T V}\left(\pi \| \pi_{D}\right) ϵπ=maxsDTV(ππD),收集数据的 π D \pi_{D} πD和当前需要学习的 π \pi π产生total variation distancetotal variation distance可以在空间中满足三角不等式,所以经常会被用到。KL散度就不满足,所以强化学习中常用total variation ϵ π \epsilon_{\pi} ϵπ也被叫做policy shift,意思是说policy进行相应的改变之后,它和收集数据的那个policy其实已经差距比较大了,以至于现在是在有偏的数据上进一步在训练我们当前的policy,这个值尽量越小越好。在SLBO里面用的是KL散度做的bound

  第二个是model的差距: ϵ m = max ⁡ t E s ∼ π D , t [ D T V ( p ( s ′ , r ∣ s , a ) ∥ p θ ( s ′ , r ∣ s , a ) ) ] \epsilon_{m}=\max _{t} \mathbb{E}_{s \sim \pi_{D, t}}\left[D_{T V}\left(p\left(s^{\prime}, r \mid s, a\right) \| p_{\theta}\left(s^{\prime}, r \mid s, a\right)\right)\right] ϵm=maxtEsπD,t[DTV(p(s,rs,a)pθ(s,rs,a))]

  如果模型不准的话,只能往后推演 k k k步。我们把这个叫做 η b r a n c h \eta^{branch} ηbranch

η [ π ] ≥ η branch  [ π ] − 2 r max ⁡ [ γ k + 1 ϵ π ( 1 − γ ) 2 + γ k + 2 ( 1 − γ ) ϵ π + k 1 − γ ( ϵ m + 2 ϵ π ) ] \eta[\pi] \geq \eta^{\text {branch }}[\pi]-2 r_{\max }\left[\frac{\gamma^{k+1} \epsilon_{\pi}}{(1-\gamma)^{2}}+\frac{\gamma^{k}+2}{(1-\gamma)} \epsilon_{\pi}+\frac{k}{1-\gamma}\left(\epsilon_{m}+2 \epsilon_{\pi}\right)\right] η[π]ηbranch [π]2rmax[(1γ)2γk+1ϵπ+(1γ)γk+2ϵπ+1γk(ϵm+2ϵπ)]

  在branch上采样k步得到的数据拿来训练policy,与真实policybound如上所示。后面的这一项中有三小项,前面两个与 ϵ π \epsilon_{\pi} ϵπ有关,前面两小项与 γ \gamma γ有关, k k k越大整体值越小。第三项与 k k k成线性关系。想要max住后面这一项的话,对后面的求导,发现 k k k等于0的效果是最好的,也就是说不要去使用model是最好的,这是一个悲观的推导。但是有值得注意的地方:

ϵ m = max ⁡ t E s ∼ π D , t [ D T V ( p ( s ′ , r ∣ s , a ) ∥ p θ ( s ′ , r ∣ s , a ) ) ] \epsilon_{m}=\max _{t} \mathbb{E}_{s \sim \pi_{D, t}}\left[D_{T V}\left(p\left(s^{\prime}, r \mid s, a\right) \| p_{\theta}\left(s^{\prime}, r \mid s, a\right)\right)\right] ϵm=tmaxEsπD,t[DTV(p(s,rs,a)pθ(s,rs,a))]

   ϵ m \epsilon_{m} ϵm是在之前收集数据的策略 π D \pi_{D} πD上求期望的,如果说 ϵ m \epsilon_{m} ϵm转换一下,变成使用当前策略 π t \pi_{t} πt去采样数据:

ϵ ^ m ′ ( ϵ π ) ≈ ϵ m + ϵ π d ϵ m ′ d ϵ π ϵ m ′ = max ⁡ t E s ∼ π t [ D T V ( p ( s ′ , r ∣ s , a ) ∥ p θ ( s ′ , r ∣ s , a ) ) ] \hat{\epsilon}_{m^{\prime}}\left(\epsilon_{\pi}\right) \approx \epsilon_{m}+\epsilon_{\pi} \frac{\mathrm{d} \epsilon_{m^{\prime}}}{\mathrm{d} \epsilon_{\pi}} \quad \epsilon_{m^{\prime}}=\max _{t} \mathbb{E}_{s \sim \pi_{t}}\left[D_{T V}\left(p\left(s^{\prime}, r \mid s, a\right) \| p_{\theta}\left(s^{\prime}, r \mid s, a\right)\right)\right] ϵ^m(ϵπ)ϵm+ϵπdϵπdϵmϵm=tmaxEsπt[DTV(p(s,rs,a)pθ(s,rs,a))]

  就可以推出新的bound

η [ π ] ≥ η branch  [ π ] − 2 r max ⁡ [ γ k + 1 ϵ π ( 1 − γ ) 2 + γ k ϵ π ( 1 − γ ) + k 1 − γ ( ϵ m ′ ) ] \eta[\pi] \geq \eta^{\text {branch }}[\pi]-2 r_{\max }\left[\frac{\gamma^{k+1} \epsilon_{\pi}}{(1-\gamma)^{2}}+\frac{\gamma^{k} \epsilon_{\pi}}{(1-\gamma)}+\frac{k}{1-\gamma}\left(\epsilon_{m^{\prime}}\right)\right] η[π]ηbranch [π]2rmax[(1γ)2γk+1ϵπ+(1γ)γkϵπ+1γk(ϵm)]

  如果模型变化的速度,与policy shift变化的速度比例: d ϵ m ′ d ϵ π \frac{\mathrm{d} \epsilon_{m^{\prime}}}{\mathrm{d} \epsilon_{\pi}} dϵπdϵm足够小, k k k就能大于0。这就使得需要使用模型去做rollout

  最终的算法如下:

通过路径反向传播:SVG and MAAC

  这里我们介绍白盒模型,我们把模型打开,看到里面梯度的传递方式,我们就可以直接对于当前policy的参数求导,期望能够maxmize我们未来value的值。

  与环境交互的过程中就像RNN一样,只要构建了能够反向求导的模型,我们就可以打穿整条trajectory把梯度求下来。

确定性策略梯度

  在DDPG里面,策略是可以用在连续动作空间中的。critic模块对状态-动作的估计可以表示为如下形式:

Q w ( s , a ) ≃ Q π ( s , a ) L ( w ) = E s ∼ ρ π , a ∼ π θ [ ( Q w ( s , a ) − Q π ( s , a ) ) 2 ] \begin{array}{c} Q^{w}(s, a) \simeq Q^{\pi}(s, a) \\ L(w)=\mathbb{E}_{s \sim \rho^{\pi}, a \sim \pi_{\theta}}\left[\left(Q^{w}(s, a)-Q^{\pi}(s, a)\right)^{2}\right] \end{array} Qw(s,a)Qπ(s,a)L(w)=Esρπ,aπθ[(Qw(s,a)Qπ(s,a))2]

  上述公式中的 a a a就是给定状态 s s s之后的输出: a = π θ ( a ) a=\pi_{\theta}(a) a=πθ(a) Q Q Q函数训练好之后,就可以从当前的某一个状态 s s s出发,对目标函数 J ( π θ ) J\left(\pi_{\theta}\right) J(πθ)求导,因为要最大化 Q Q Q值,所以直接对 a a a求导,但 a a a又正好等于 π θ ( s ) \pi_{\theta}(s) πθ(s),以至于我们可以把导数求下去:

J ( π θ ) = E s ∼ ρ π [ Q π ( s , a ) ] ∇ θ J ( π θ ) = E s ∼ ρ π [ ∇ θ π θ ( s ) ∇ a Q π ( s , a ) ∣ a = π θ ( s ) ] \begin{array}{c} J\left(\pi_{\theta}\right)=\mathbb{E}_{s \sim \rho^{\pi}}\left[Q^{\pi}(s, a)\right] \\ \nabla_{\theta} J\left(\pi_{\theta}\right)=\mathbb{E}_{s \sim \rho^{\pi}}\left[\left.\nabla_{\theta} \pi_{\theta}(s) \nabla_{a} Q^{\pi}(s, a)\right|_{a=\pi_{\theta}(s)}\right] \end{array} J(πθ)=Esρπ[Qπ(s,a)]θJ(πθ)=Esρπ[θπθ(s)aQπ(s,a)a=πθ(s)]

  这样在状态 s s s下,想要出什么样的 a a a能够使得 Q Q Q值最大。这就是链式法则去优化策略参数的一种方式。

随机性策略值函数梯度

  • Learning Continuous Control Policies by Stochastic Value Gradients

  若环境和策略都是随机的(stochastic)的话,我们就可以用重参数化的方法(reparameterization):

  通常的策略可以用一个从状态到动作的函数表示: a = π ( s ; θ ) \mathbf{a}=\pi(\mathbf{s} ; \theta) a=π(s;θ)。状态转移也是用一个函数表示,输入当前状态和动作,预测下一个状态: s ′ = f ( s , a ) \mathbf{s}^{\prime}=\mathbf{f}(\mathbf{s}, \mathbf{a}) s=f(s,a),当然在这个状态转移函数中我们可以去加一些噪声,这样就使得一个确定行的状态转移变成了一个随机的输出。

  通过一些链式法则,对值函数求导,用下标表示求导函数,比如 g x ≜ ∂ g ( x , y ) / ∂ x g_{x} \triangleq \partial g(x, y) / \partial x gxg(x,y)/x这样。值函数可以表示为即时奖励和对未来值函数的预期值:

V ( s ) = r ( s , a ) + γ V ′ ( f ( s , a ) ) V(\mathbf{s})=r(\mathbf{s}, \mathbf{a})+\gamma V^{\prime}(\mathbf{f}(\mathbf{s}, \mathbf{a})) V(s)=r(s,a)+γV(f(s,a))

  因为我们想要最大化 V ( s ) V(\mathbf{s}) V(s),所以我们对 s s s进行求导。首先是奖励 r ( s , a ) r(\mathbf{s}, \mathbf{a}) r(s,a) s s s进行求导,再一个因为 r r r中的 a a a也是 s s s的函数,所以 r r r先对 a a a求导,然后 a a a再对 s s s求导。同理 V ′ ( f ( s , a ) ) V^{\prime}(\mathbf{f}(\mathbf{s}, \mathbf{a})) V(f(s,a))需要对 s ′ s^{\prime} s求导,里面 f ( s , a ) \mathbf{f}(\mathbf{s}, \mathbf{a}) f(s,a)同样需要对 s s s求导,然后还要对 a a a求导,得到如下结果:

V s = r s + r a π s + γ V s ′ ′ ( f s + f a π s ) V_{\mathrm{s}}=r_{\mathrm{s}}+r_{\mathrm{a}} \pi_{\mathrm{s}}+\gamma V_{\mathrm{s}^{\prime}}^{\prime}\left(\mathrm{f}_{\mathrm{s}}+\mathrm{f}_{\mathrm{a}} \pi_{\mathrm{s}}\right) Vs=rs+raπs+γVs(fs+faπs)

  相应的 V V V也可以对策略的参数 θ \theta θ进行求导:

V θ = r a π θ + γ V s ′ ′ f a π θ + γ V θ ′ V_{\theta}=r_{\mathbf{a}} \pi_{\theta}+\gamma V_{\mathbf{s}^{\prime}}^{\prime} \mathbf{f}_{\mathbf{a}} \pi_{\theta}+\gamma V_{\theta}^{\prime} Vθ=raπθ+γVsfaπθ+γVθ

  通过这种方式就可以把随机采样出来的一个轨迹直接求导往前传,通过重参数化的方法来做到这一点。本来是一个条件分布:

p ( y ∣ x ) = N ( y ∣ μ ( x ) , σ 2 ( x ) ) p(y \mid x)=\mathcal{N}\left(y \mid \mu(x), \sigma^{2}(x)\right) p(yx)=N(yμ(x),σ2(x))

  但是我们因为加入了一些高斯白噪声,我们可以把一个高斯变成一个均值,加上方差乘上一个白噪声:

y = μ ( x ) + σ ( x ) ξ ,  where  ξ ∼ N ( 0 , 1 ) y=\mu(x)+\sigma(x) \xi, \text { where } \xi \sim \mathcal{N}(0,1) y=μ(x)+σ(x)ξ, where ξN(0,1)

  这里的 μ \mu μ σ \sigma σ都是完全确定性的函数,我们只是加入了一个白噪声,让其像一个高斯分布而已。同样的方式可以在状态转移函数和策略上都加入相应的噪声,这样所有的模块都是确定性的,就能将导数进行传递了。

y = f ( x , ξ ) ,  where  ξ ∼ ρ ( ⋅ ) \mathbf{y}=\mathbf{f}(\mathbf{x}, \xi), \text { where } \xi \sim \rho(\cdot) y=f(x,ξ), where ξρ()

E p ( y ∣ x ) g ( y ) = ∫ g ( f ( x , ξ ) ) ρ ( ξ ) d ξ \mathbb{E}_{p(\mathbf{y} \mid \mathbf{x})} \mathbf{g}(\mathbf{y})=\int \mathbf{g}(\mathbf{f}(\mathbf{x}, \xi)) \rho(\xi) d \xi Ep(yx)g(y)=g(f(x,ξ))ρ(ξ)dξ

∇ x E p ( y ∣ x ) g ( y ) = E ρ ( ξ ) g y f x ≈ 1 M ∑ i = 1 M g y f x ∣ ξ = ξ i \nabla_{\mathbf{x}} \mathbb{E}_{p(\mathbf{y} \mid \mathbf{x})} \mathbf{g}(\mathbf{y})=\left.\mathbb{E}_{\rho(\xi)} \mathbf{g}_{\mathbf{y}} \mathbf{f}_{\mathbf{x}} \approx \frac{1}{M} \sum_{i=1}^{M} \mathbf{g}_{\mathbf{y}} \mathbf{f}_{\mathbf{x}}\right|_{\xi=\xi_{i}} xEp(yx)g(y)=Eρ(ξ)gyfxM1i=1Mgyfxξ=ξi

  对于随机环境下求梯度的方式可以表示为:

a = π ( s , η ; θ ) s ′ = f ( s , a , ξ ) η ∼ ρ ( η )  and  ξ ∼ ρ ( ξ ) \mathbf{a}=\pi(\mathbf{s}, \eta ; \theta) \quad \mathbf{s}^{\prime}=\mathbf{f}(\mathbf{s}, \mathbf{a}, \xi) \quad \eta \sim \rho(\eta) \text { and } \xi \sim \rho(\xi) a=π(s,η;θ)s=f(s,a,ξ)ηρ(η) and ξρ(ξ)

   η \eta η是在策略上的白噪声, ξ \xi ξ是在状态转移函数上的白噪声。有了这两个模块之后,奖励模块、策略模块、状态转移模块全部都是确定性的,这就使得我们可以直接求导求下去:

V ( s ) = E ρ ( η ) [ r ( s , π ( s , η ; θ ) ) + γ E ρ ( ξ ) [ V ′ ( f ( s , π ( s , η ; θ ) , ξ ) ) ] ] V(\mathbf{s})=\mathbb{E}_{\rho(\eta)}\left[r(\mathbf{s}, \pi(\mathbf{s}, \eta ; \theta))+\gamma \mathbb{E}_{\rho(\xi)}\left[V^{\prime}(f(\mathbf{s}, \pi(\mathbf{s}, \eta ; \theta), \xi))\right]\right] V(s)=Eρ(η)[r(s,π(s,η;θ))+γEρ(ξ)[V(f(s,π(s,η;θ),ξ))]]

V s = E ρ ( η ) [ r s + r a π s + γ E ρ ( ξ ) V s ′ ′ ( f s + f a π s ) ] V_{\mathbf{s}}=\mathbb{E}_{\rho(\eta)}\left[r_{\mathbf{s}}+r_{\mathbf{a}} \pi_{\mathbf{s}}+\gamma \mathbb{E}_{\rho(\xi)} V_{\mathbf{s}^{\prime}}^{\prime}\left(\mathbf{f}_{\mathbf{s}}+\mathbf{f}_{\mathbf{a}} \pi_{\mathbf{s}}\right)\right] Vs=Eρ(η)[rs+raπs+γEρ(ξ)Vs(fs+faπs)]

V θ = E ρ ( η ) [ r a π θ + γ E ρ ( ξ ) [ V s ′ ′ f a π θ + V θ ′ ] ] V_{\theta}=\mathbb{E}_{\rho(\eta)}\left[r_{\mathbf{a}} \pi_{\theta}+\gamma \mathbb{E}_{\rho(\xi)}\left[V_{\mathbf{s}^{\prime}}^{\prime} \mathbf{f}_{\mathbf{a}} \pi_{\theta}+V_{\theta}^{\prime}\right]\right] Vθ=Eρ(η)[raπθ+γEρ(ξ)[Vsfaπθ+Vθ]]

  这就是SVG,在状态 s s s下直接对 θ \theta θ进行求导使得值函数变大。 S V G ( ∞ ) SVG(\infty) SVG()对整个轨迹进行求导更新:

  • Model-Augmented Actor Critic: Backpropagation through paths

  这篇文章的整个思路是和SVG非常像的,

J π ( θ ) = E [ ∑ t = 0 H − 1 γ t r ( s t ) + γ H Q ^ ( s H , a H ) ] s t + 1 ∼ f ^ ( s t , a t ) a t ∼ π θ ( s t ) J_{\pi}(\boldsymbol{\theta})=\mathbb{E}\left[\sum_{t=0}^{H-1} \gamma^{t} r\left(s_{t}\right)+\gamma^{H} \hat{Q}\left(s_{H}, a_{H}\right)\right] \begin{array}{c} s_{t+1} \sim \hat{f}\left(s_{t}, a_{t}\right) \\ a_{t} \sim \pi_{\boldsymbol{\theta}}\left(s_{t}\right) \end{array} Jπ(θ)=E[t=0H1γtr(st)+γHQ^(sH,aH)]st+1f^(st,at)atπθ(st)

  策略参数为 θ \theta θ,而整个的优化目标也为 J π ( θ ) J_{\pi}(\boldsymbol{\theta}) Jπ(θ)。往后看 H H H步,然后拿一个critic截住。这样就能对参数 θ \theta θ去做更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值