【RLchina第四讲】Model-Based Reinforcement Learning
文章目录
- 基于模型的强化学习
- 无模型RL V.S. 基于模型的RL
- 基于模型的强化学习:黑盒模型和白盒模型
- 从Dyna算法介绍基于模型的强化学习
- 随机打靶算法:RS,PETS,POPLIN
- Random Shooting(RS)
- PETS:Probabilistic Ensembles with Trajectory Sampling
- POPLIN
- 理论边界分析:SLBO,MBPO & BMPO
- 值差异界限
- 基于模型的策略优化
- 通过路径反向传播:SVG and MAAC
- 确定性策略梯度
- 随机性策略值函数梯度
深度强化学习有一个很大的不足点,它在数据采样效率上面是非常低的。
在机器学习里面的采样效率说的是:如果采用某个训练集,训练集的大小和模型的最终性能是有关系的,如果想达到某个性能的话,就需要多大量的训练数据。所以说不同的机器学习模型,或者说机器学习算法它需要多大量的数据其实是一个衡量这个模型好不好的一个关键指标。
由于强化学习本身就是以一种试错型的方式进行学习的,这个方式的学习算法就导致深度强化学习具有比较低的采样效率。因为如果智能体采样出来的新的数据不是特别能够帮助更新你的Q-Value
,或者是更新你的Policy
,那么这个采样对于整个Agent
来说是利用率非常低的。
基于模型的强化学习
所以在17
、18
年开始就有一个新的方向,Model-Based RL
。Model-Based
在90
年代初其实就有学者对其进行过研究。像Q-Planning
、Dyna-Q
都是最早期的Model-Based RL
。Model
这个概念在强化学习里面其实是比较特殊的,在平时说训练监督学习、无监督学习等算法中model
就是预测数据模型本身,而在强化学习中,最终的输出是通过策略π\piπ实现的,但是我们从来不会把ploicy
π\piπ称之为model
。我们是把环境称之为model
。所以在强化的算法或者论文中,我们一般称之为环境的模型,如果是策略本身,它就称之为policy
。
MBRL
基本的套路就是我们依据经验数据训练一个model
,然后基于这个model
我们就可以在所学的这个model
上面进行进一步的学习,比如像生成一些数据也好,还是传递一些梯度也好,去训练policy
。通过这种方式我们就不必与真实的环境做交互,从而获得性能的提升。而当policy
π\piπ发生了改变的话,那么它和环境交互出来的data
的分布本身也会发生改变。
通常来说环境提供两个部分:
state dynamic
:p(s′∣s,a)p(s^{\prime}|s,a)p(s′∣s,a)。Reward function
:r(s,a)r(s,a)r(s,a)。这个奖励可以是一个数值,也可以是一个采样出来的分布。
当给定某个具体的policy
π(a∣s)\pi(a \mid s)π(a∣s),和真实环境进行交互。环境进行上述两个条件概率分布计算p(s′,r∣s,a)p\left(s^{\prime}, r \mid s, a\right)p(s′,r∣s,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′,r∣s,a)。此时交互出来的数据是一个仿真数据simulated data
。基于模拟数据,我们可以用无模型强化学习算法MFRL
来进行学习:
通过这种方式,我们就绕开了与环境进行直接交互所带来的一些问题、弊端。
无模型RL V.S. 基于模型的RL
- Model-based RL
1. 一旦模型被学习到了,之后就可以用On-Policy
的方式进行学习,可以一直无限次进行交互,能够避免Off-Policy
带来的一些问题。2. 当然最大的好处还是极大地减少与真实环境的交互,像Batch RL
和Offline RL
中就经常会采用到MBRL
中的一些方法。3. 与MFRL
相比具有较高的采样效率。4. 由于模型具有误差,那么会产生模型的累计误差。
- Model-free RL
1. 无模型强化学习最大的好处就在于它拥有最好的效果,因为所有的数据都是真实的。2. 有时候会显现出数据的不稳定性,因为数据本身的采样并不是基于某个期望下进行的,而是随着策略π\piπ改变而改变的。3. 缺陷就在于较低的采样效率,并且需要超大的算力平台。
基于模型的强化学习:黑盒模型和白盒模型
所谓的黑盒模型说的是,训练的模型只是用来采样数据。它里面到底是如何去计算state
和reward
,我们并不关心。我们只将其看作一个产生无穷无尽的训练数据的黑盒。然后我们产生完数据之后都是用model-free
的方法来训练policy
。像Dyna-Q
,MPC
、和MBPO
这样一些经典的算法都是Blackbox
的。
另外一类算法是白盒模型,白盒模型相比于黑盒模型,他的区别在于state dynamic
:pϕ(s′∣s,a)p_{\phi}(s^{\prime}|s,a)pϕ(s′∣s,a)已知。假设当前policy
的参数是θ\thetaθ:πθ\pi_{\theta}πθ。我们可以直接优化state
sss的value
值,对于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ϕ(s′∣s,a)的输出,这个时候用链式法则就可以进一步对aaa求导,aaa此时又是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)}∂s′∂V(s′)∂a∂s′∂θ∂a∣∣∣∣s′∼fϕ(s,a)
所以一旦把这个盒子打开,变成了一个白盒的话,我们就可以使用概率密度和梯度两种信息来进行学习。白盒模型也可以像黑盒模型一样去sample
更多的data
。这些工作有MAAC
,SVG
,PILCO
等等这些算法。
从Dyna算法介绍基于模型的强化学习
学model
的时候通常会采用supervised learning
一类的算法进行学习。另外一类是通过计算状态转移分布pϕ(s′∣s,a)p_{\phi}(s^{\prime}|s,a)pϕ(s′∣s,a)来实现的。如果我们学一个模型,然后构造(construct value function
)的话,可能会带来两方面的误差,第一个是模型本身带来的误差,另外一个是value function
带来的误差。
- Q-Planning:
首先通过随机的智能体采样得到数据,然后学一个model
:p^(s′,r∣s,a)\hat{p}\left(s^{\prime}, r \mid s, a\right)p^(s′,r∣s,a)。之后要做的是:
选择一个状态SSS和一个动作AAA,然后将其送入sample model
中去,去获得下一个奖励reward
和下一个状态S′S^{\prime}S′。这样通过SSS和AAA就构建了一个四元<S,A,R,S′><S,A,R,S^{\prime}><S,A,R,S′>。有了这样一个四元组之后,我们就可以去做Q-Learning
。
- Dyna:
Dyna-Q
中还可以通过实际环境中获得的经验做学习。
拿到一个状态SSS,然后依据QQQ函数探索得到一个动作AAA。有了这个采样到的动作之后,我们将其在真实环境中执行,得到真实的奖励RRR和真实的下一个状态S′S^{\prime}S′。这样也能获得一个四元组,之后就可以依据更新公式对QQQ函数进行进一步的更新。之后在假定模型是确定行环境的时候,我们直接就可以依据数据训练ModelModelModel了。
之后重复nnn步,从之前的观测状态SSS中随机选择一个,之后从动作AAA中随机选择一个,依据模型Model(S,A)Model(S,A)Model(S,A)计算得到奖励和下一个状态,再做一步QQQ更新。所以在Dyna-Q
中做的是1
步的MFRL
和nnn步的MFRL
。但是每次模型只往前推进一步。
基于模型的强化学习有几个很重要的问题:
- 基于所学的这样一个非完美模型能不能改进我们的数据效率呢?
- 基于深度学习所训练的环境模型肯定不是那么准确的,这个时候我们还能不能去相信我们的模型呢?如何去相信模型采样所得到的数据呢?
- 如何使用我们的模型,从而获得更好的策略呢?
随机打靶算法: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′,r∣s,a),对于每个状态前state
sss,和一个候选(candidate
)动作aaa。可以构建一个长度为TTT的action sequence
:
[a,a1,a2,…,aT]\left[a,a_{1}, a_{2}, \ldots, a_{T}\right][a,a1,a2,…,aT]
有了状态和所有的动作序列之后,就可以和环境进行交互,产生相应的episode
:
{[s1(k),a1,r1(k),s2(k),a2,r2(k),…,sT(k),aT,rT(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
基于上述采样样本,我们可以估计QQQ值函数并得到策略π(s)\pi(s)π(s):
Q^(s,a)=1N∑k=1N∑t=0Tγtrt(k)π(s)=argmaxaQ^(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=1∑Nt=0∑Tγtrt(k)π(s)=argamaxQ^(s,a)
这个时候我们根本就没学习,有了一个模型之后,之后模拟计算,走到终局或者指定的TTT步,看看哪个候选动作aaa能够获得较大的收益,就选哪个。当智能体走到了真正的s1s_{1}s1之后再做一遍这个操作。这个也叫做MPC
。
Random Shooting(RS)
在RS
算法中,action sequence
是随机采样得到的,它有一些好处,第一个好处就是这个action sequence
它可以非常简单得到。它甚至不管你的state
是啥,先可以把动作序列给做出来。在这个过程中是不做学习的,没有梯度的计算。它也不太需要去考虑task
到底有多长这样。
同样这种做法带来的坏处也很明显,像variance
就很大,因为搜索的空间很大,而只采样了一条。一种可行的办法就是说,我们把每个action
不看它state
的情况下,整体来看它到底能带来更大的value
还是更低的value
。给它做成像一个二分类一样的东西,叫cross entropy method
。就是对action
做一些简单的分堆,采样的时候就期望去采样得到高reward
或者高value
的action
。这种方法与完全随机采样相比是能够获得更好的reward
的。
PETS:Probabilistic Ensembles with Trajectory Sampling
在2018
年的NIPS
上面发表了一篇RS
类算法的文章PETS
。它拿一系列可训练的高斯模型做了一个ensemble
。
lossp(θ)=−∑n=1Nlogf~θ(sn+1∣sn,an)\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=1∑Nlogfθ(sn+1∣sn,an)
每一个高斯模型去采样下一个state
的时候,他就是去follow
一个mean
和一个variance matrix
。做一个Gaussian NN
:
f~=Pr(st+1∣st,at)=N(μθ(st,at),Σθ(st,at))\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+1∣st,at)=N(μθ(st,at),Σθ(st,at))
本身的μθ\mu_{\theta}μθ和Σθ\Sigma_{\theta}Σθ都是用θ\thetaθ参数化的神经网络。当给定当前st,ats_{t}, a_{t}st,at,我就可以确定性地去计算到μ\muμ和Σ\SigmaΣ,基于这个μ\muμ和Σ\SigmaΣ我就可以采样接下来的这个st+1s_{t+1}st+1。
从上述论述我们可以看到每个模型都是一个Gaussian NN
,我们有NNN个高斯做了一个Ensemble
操作。这里其实是通过集成学习降低模型的variance
,这里的variance
并不是Σ\SigmaΣ,而是一些没有见过的数据导致的泛化性能的variance
。
当我们有了NNN个高斯的概率模型之后,我们就可以用这NNN个概率模型去做trajectory sampling
(TS)。这里所采样的trajectory sampling
的方法其实是比较特殊的。因为我们有NNN个高斯模型,所以我们可以直接采样出来一个高斯模型,走一步,得到一个新的高斯分布,在这个高斯分布里面,我们再采样一个新的state
,接下来我们又要走下一步,走下一步的时候,我们又从这NNN个高斯模型里面去采样,这样就能够实现trajectory
的前向传播。基于这NNN个高斯模型,我们就可以去做planning
。在每一个time step
上,MPC
算法通过采样去计算多个最优动作序列,之后采用第一个action
,然后重复上述的规划任务。这样的一种算法就称作Planning via Model Predictive Control
。
这里采样获取动作的时候,采用的是CEM
的方式来获取相对来说比较好的action
。然后对每个动作序列去做一个评估,之后更新CEM
。但是最终对于环境的执行来说,是执行最好的动作序列at:t+T∗a^{*}_{t:t+T}at:t+T∗中的第一个action
。采样得到的数据重新加入到数据集中去。
POPLIN
POPLIN
是policy planning
的一个简称,PETS
这个算法采样的方式是最简单的CEM
方法,它没有关注当前的state
是啥,就随机给action
。POLIN
算法中就用一个policy
去采样,也就是说在POPLIN
中需要保留一个policy
用来在给定当前仿真状态的时候采样一个动作。使得其在当前的状态下能够采样出来更好的action
。给定一个状态,拿策略进行采样,得到的期望奖励可以表达为以下形式:
R(si,ai)=E[∑t=ii+τr(st,at)]\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=i∑i+τr(st,at)]
其中st+1∼fϕ(st+1∣st,at)s_{t+1} \sim f_{\phi}\left(s_{t+1} \mid s_{t}, a_{t}\right)st+1∼fϕ(st+1∣st,at),这个时候如果在动作层面去增加一些噪声的话,可以表示为:R(si,δi)=E[∑t=ii+τr(st,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(si,ωi)=E[∑t=ii+τr(st,πθ+ωt(st))]\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π,M⋆≥Vπ,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
需要一些实际的要求与假设:
R1
:数据是从一个参考策略πref\pi_{ref}πref中得到的,从πref\pi_{ref}πref采样得到的数据中学习到的策略π\piπ,与πref\pi_{ref}πref的差距不要太大。
Vπ,M⋆≥Vπ,M^−Dπref,δ(M^,π),∀πs.t. d(π,πref)≤δ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 \deltaVπ,M⋆≥Vπ,M−Dπref,δ(M,π),∀π s.t. d(π,πref)≤δ
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=M⋆⟹Dπref (M,π)=0,∀π,πref
R3
:Dπref (M^,π)D_{\pi_{\text {ref }}}(\widehat{M}, \pi)Dπref (M,π)需要满足一个形式,参考策略πref\pi_{ref}πref与真实环境交互采样出来的trajector
τ\tauτ,所构建出来的函数再取期望:Eτ∼πref,M⋆[f(M^,π,τ)]\underset{\tau \sim \pi_{\mathrm{ref}}, M^{\star}}{\mathbb{E}}[f(\widehat{M}, \pi, \tau)]τ∼πref,M⋆E[f(M,π,τ)],比如说我们可以定义为,所学模型的预测值与真实环境的值做L1
距离:
e.g. Dπref (M^,π)=L⋅ES0,…,St,∼πref ,M⋆[∥M^(St)−St+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,π)=L⋅ES0,…,St,∼πref ,M⋆[∥∥∥M(St)−St+1∥∥∥]
其中LLL为普希茨常数,表示神经网络上梯度最大的那个常数。
有了上述三个条件之后,就可以去做一个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,M⋆≤Vπ1,M⋆≤⋯≤VπT,M⋆
Proof:
因为DDD和ddd满足R1
,所以有:
Vπk+1,M⋆≥Vπk+1,Mk+1−Dπk(Mk+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,M⋆≥Vπk+1,Mk+1−Dπk(Mk+1,πk+1)
通过Algorithm 1
可知,πk+1\pi_{k+1}πk+1和Mk+1M_{k+1}Mk+1是最优方程得到的,所以我们有(最后一个等式基于R2
):
Vπk+1,Mk+1−Dπk(Mk+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+1−Dπk(Mk+1,πk+1)≥Vπk,M⋆−Dπk(M⋆,πk)=Vπk,M⋆
这里有两个非常强的假设:1. 能够取到这个argmax
;2. 神经网络找到的Mk+1M_{k+1}Mk+1能够拟合到最优的M∗M^{*}M∗。
有了上述的理论分析之后,就能够去导出SLBO
(Stochastic Lower Bound Optimization
):
上述算法2
模型的loss
为:
Lϕ(H)((st:t+h,at:t+h);ϕ)=1H∑i=1H∥(s^t+i−s^t+i−1)−(st+i−st+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=1∑H∥(s^t+i−s^t+i−1)−(st+i−st+i−1)∥2
模型和策略的优化目标为:
maxϕ,θVπθ,sg(M^ϕ)−λ(st:t+h,at:t+h)∼πk,M⋆E[Lϕ(H)((st:t+h,at: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,M⋆E[Lϕ(H)((st:t+h,at:t+h);ϕ)]
SLBO
提供了一种策略如何学习才能够获得性能单调递增的思路。但是这里有个很强的假设就是model
能够拟合到最优真实模型。
基于模型的策略优化
两个环境模型所带来的误差有两部分组成,一个是转移模型所带来的ϵm\epsilon_{m}ϵm,一个是策略带来的ϵπ\epsilon_{\pi}ϵπ:
η[π]≥η^[π]−[2γrmax(ϵm+2ϵπ)(1−γ)2+4rmaxϵπ(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
很像,以差异的方式显示出来。
ϵπ=maxsDTV(π∥πD)\epsilon_{\pi}=\max _{s} D_{T V}\left(\pi \| \pi_{D}\right)ϵπ=maxsDTV(π∥πD),收集数据的πD\pi_{D}πD和当前需要学习的π\piπ产生total variation distance
。total variation distance
可以在空间中满足三角不等式,所以经常会被用到。KL
散度就不满足,所以强化学习中常用total variation
。ϵπ\epsilon_{\pi}ϵπ也被叫做policy shift
,意思是说policy
进行相应的改变之后,它和收集数据的那个policy
其实已经差距比较大了,以至于现在是在有偏的数据上进一步在训练我们当前的policy
,这个值尽量越小越好。在SLBO
里面用的是KL
散度做的bound
。
第二个是model
的差距:ϵm=maxtEs∼πD,t[DTV(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′,r∣s,a)∥pθ(s′,r∣s,a))]。
如果模型不准的话,只能往后推演kkk步。我们把这个叫做ηbranch\eta^{branch}ηbranch
η[π]≥ηbranch [π]−2rmax[γk+1ϵπ(1−γ)2+γk+2(1−γ)ϵπ+k1−γ(ϵ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
,与真实policy
的bound
如上所示。后面的这一项中有三小项,前面两个与ϵπ\epsilon_{\pi}ϵπ有关,前面两小项与γ\gammaγ有关,kkk越大整体值越小。第三项与kkk成线性关系。想要max住后面这一项的话,对后面的求导,发现kkk等于0的效果是最好的,也就是说不要去使用model是最好的,这是一个悲观的推导。但是有值得注意的地方:
ϵm=maxtEs∼πD,t[DTV(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′,r∣s,a)∥pθ(s′,r∣s,a))]
ϵm\epsilon_{m}ϵm是在之前收集数据的策略πD\pi_{D}πD上求期望的,如果说ϵm\epsilon_{m}ϵm转换一下,变成使用当前策略πt\pi_{t}πt去采样数据:
ϵ^m′(ϵπ)≈ϵm+ϵπdϵm′dϵπϵm′=maxtEs∼πt[DTV(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′,r∣s,a)∥pθ(s′,r∣s,a))]
就可以推出新的bound
:
η[π]≥ηbranch [π]−2rmax[γk+1ϵπ(1−γ)2+γkϵπ(1−γ)+k1−γ(ϵ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′足够小,kkk就能大于0
。这就使得需要使用模型去做rollout
。
最终的算法如下:
通过路径反向传播:SVG and MAAC
这里我们介绍白盒模型,我们把模型打开,看到里面梯度的传递方式,我们就可以直接对于当前policy
的参数求导,期望能够maxmize
我们未来value
的值。
与环境交互的过程中就像RNN
一样,只要构建了能够反向求导的模型,我们就可以打穿整条trajectory
把梯度求下来。
确定性策略梯度
在DDPG
里面,策略是可以用在连续动作空间中的。critic
模块对状态-动作的估计可以表示为如下形式:
Qw(s,a)≃Qπ(s,a)L(w)=Es∼ρπ,a∼πθ[(Qw(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]
上述公式中的aaa就是给定状态sss之后的输出:a=πθ(a)a=\pi_{\theta}(a)a=πθ(a)。QQQ函数训练好之后,就可以从当前的某一个状态sss出发,对目标函数J(πθ)J\left(\pi_{\theta}\right)J(πθ)求导,因为要最大化QQQ值,所以直接对aaa求导,但aaa又正好等于πθ(s)\pi_{\theta}(s)πθ(s),以至于我们可以把导数求下去:
J(πθ)=Es∼ρπ[Qπ(s,a)]∇θJ(πθ)=Es∼ρπ[∇θπθ(s)∇aQπ(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)]
这样在状态sss下,想要出什么样的aaa能够使得QQQ值最大。这就是链式法则去优化策略参数的一种方式。
随机性策略值函数梯度
- 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),当然在这个状态转移函数中我们可以去加一些噪声,这样就使得一个确定行的状态转移变成了一个随机的输出。
通过一些链式法则,对值函数求导,用下标表示求导函数,比如gx≜∂g(x,y)/∂xg_{x} \triangleq \partial g(x, y) / \partial xgx≜∂g(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),所以我们对sss进行求导。首先是奖励r(s,a)r(\mathbf{s}, \mathbf{a})r(s,a)对sss进行求导,再一个因为rrr中的aaa也是sss的函数,所以rrr先对aaa求导,然后aaa再对sss求导。同理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)同样需要对sss求导,然后还要对aaa求导,得到如下结果:
Vs=rs+raπs+γVs′′(fs+faπ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)
相应的VVV也可以对策略的参数θ\thetaθ进行求导:
Vθ=raπθ+γVs′′faπθ+γ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πθ+γVs′′faπθ+γ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(y∣x)=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 ξ∼ρ(⋅)
Ep(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 \xiEp(y∣x)g(y)=∫g(f(x,ξ))ρ(ξ)dξ
∇xEp(y∣x)g(y)=Eρ(ξ)gyfx≈1M∑i=1Mgyfx∣ξ=ξ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(y∣x)g(y)=Eρ(ξ)gyfx≈M1i=1∑Mgyfx∣∣∣∣∣ξ=ξ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,η;θ),ξ))]]
Vs=Eρ(η)[rs+raπs+γEρ(ξ)Vs′′(fs+faπ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ρ(η)[raπθ+γEρ(ξ)[Vs′′faπθ+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ρ(ξ)[Vs′′faπθ+Vθ′]]
这就是SVG
,在状态sss下直接对θ\thetaθ进行求导使得值函数变大。SVG(∞)SVG(\infty)SVG(∞)对整个轨迹进行求导更新:
- Model-Augmented Actor Critic: Backpropagation through paths
这篇文章的整个思路是和SVG
非常像的,
Jπ(θ)=E[∑t=0H−1γtr(st)+γHQ^(sH,aH)]st+1∼f^(st,at)at∼πθ(st)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=0∑H−1γtr(st)+γHQ^(sH,aH)]st+1∼f^(st,at)at∼πθ(st)
策略参数为θ\thetaθ,而整个的优化目标也为Jπ(θ)J_{\pi}(\boldsymbol{\theta})Jπ(θ)。往后看HHH步,然后拿一个critic
截住。这样就能对参数θ\thetaθ去做更新。
【RLchina第四讲】Model-Based Reinforcement Learning相关推荐
- 机器学习基石第四讲:feasibility of learning
博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完成机器学习基石的第四节,这一节讨论机器学习的可行性,用到了Hoeffding' ...
- 18 Issues in Current Deep Reinforcement Learning from ZhiHu
深度强化学习的18个关键问题 from: https://zhuanlan.zhihu.com/p/32153603 85 人赞了该文章 深度强化学习的问题在哪里?未来怎么走?哪些方面可以突破? 这两 ...
- 2021 牛津大学:Recent Advances in Reinforcement Learning in Finance
Recent Advances in Reinforcement Learning in Finance 1 本文概述 本文是牛津大学2021年对 深度强化学习在金融领域内各种决策的应用 的综述文章. ...
- 【论文阅读】2021年牛津大学的 Survey:Recent Advances in Reinforcement Learning in Finance
1 本文概述 本文是牛津大学2021年对 深度强化学习在金融领域内各种决策的应用 的综述文章.文章分为四个部分,第一部分是整体介绍:第二部分详细介绍了强化学习的基础知识,包括马尔科夫决策过程的定义.基 ...
- 论文翻译 —— Episodic reinforcement learning with associative memory
标题:Episodic reinforcement learning with associative memory 文章链接:Episodic reinforcement learning with ...
- REINFORCEMENT LEARNING USING QUANTUM BOLTZMANN MACHINES利用量子波兹曼机进行强化学习
REINFORCEMENT LEARNING USING QUANTUM BOLTZMANN MACHINES 利用量子波兹曼机进行强化学习 Abstract. We investigate whet ...
- 【李宏毅2020 ML/DL】P107-109 Deep Reinforcement Learning | Scratching the surface
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 关于强化学习,我专门花半年时间学习实践过,因此这里笔记只记录李老师的 outline .我的强化学习资源仓库: ...
- 基于深度强化学习的车道线检测和定位(Deep reinforcement learning based lane detection and localization) 论文解读+代码复现
之前读过这篇论文,导师说要复现,这里记录一下.废话不多说,再重读一下论文. 注:非一字一句翻译.个人理解,一定偏颇. 基于深度强化学习的车道检测和定位 官方源码下载:https://github.co ...
- 小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks.
小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks 文章目录 小样本论文笔记5:Mod ...
- 【论文 CCF C】An Adaptive Box-Normalization Stock Index Trading Strategy Based on Reinforcement Learning
论文题目:An Adaptive Box-Normalization Stock Index Trading Strategy Based on Reinforcement Learning 论文链接 ...
最新文章
- cygwin nginx php mysql_Windows 下 Nginx + PHP5 的安装与配置
- Thread Group(线程组)
- 如何系统地理解「交易平台」?
- View的绘制-draw流程详解
- python实现文件下载的方法总结
- 反射java_Java反射原理
- 1736: 反射-含某个字符的子串的查找
- 天池 在线编程 音乐组合
- STM32那点事(2)_时钟树(中)
- CYQ.IISLogViewer 一款IIS 日志分析工具 V1.0 发布[提供源码]
- 只做两个龅牙门牙_孔子画像中的门牙格外突出,画师为何不给圣人开美颜?...
- php获取csv文件乱码,php使用fgetcsv读取csv文件乱码解决方法
- ISSCC 2017论文导读 Session 14: A 28nm SoC with a 1.2GHz Prediction Sparse Deep-Neural-Network Engine
- Shiro完整教程, 附带各种配置
- 树莓派系列(十五):使用英特尔神经计算棒2(NCS2)
- 江南大学计算机拟录取名单,江南大学2018年法律硕士拟录取名单公示
- 无边无际的虚拟城市来了!能走能飞的Demo,一火再火的“波函数坍缩”开源算法...
- ubuntu 使用代理服务器 squid
- 天涯网友免责声明的各种版本收集
- B2B2C开源系统众筹项目启动(以ShopsN开源核心为版权基础)
热门文章
- 删除分卷php逻辑,Linux LVM(逻辑卷管理)删除详解
- 游戏开发之深拷贝与浅拷贝(C++基础)
- Kubernetes详解(二十五)——Deployment控制器扩容
- L2TP详解(三)——NAS-Initiated 场景下隧道和会话建立过程
- 对n个数进行排序(正序或者倒序)--06 年华科计算机保研机试真题
- Cisco 2960密码恢复
- Debian安装autoconf
- python3.4 or 3.x xlwt replaced with xlwt-future
- php数据库之mysql (where 、order By 、 Update)
- 基于QT4.8.3的手机操作系统,已完成QML语言的加入