- 论文题目:Deep Reinforcement Learning in a Handful of Trials using Probabilistic Dynamics Models
所解决的问题?
基于模型的强化学习算法由于要使用一个深度神经网络去学习一个环境model
,而纯神经网络这种大参数的近似函数求解会带来很多缺陷,比如说计算开销,对于环境的不确定性无法很好的表征,由于参数量比较大,其求解相对来说也并不会很容易。
作者通过一个不确定的动态模型(uncertainty-aware dynamics models
)来处理环境的不确定性,使得其能够相对来说不需要很大的神经网络来处理环境的不确定性。所提出的算法就是基于轨迹采样的概率集成算法,英文描述为probabilistic ensembles with trajectory sampling
,简写为PETS
。通过采样的不确定性来处理环境的动态模型的这样一种特性。
背景
无模型强化学习算法最大的弊端就是采样昂贵,这就限制了其很大一部分应用都处于仿真领域,当然也存在一些极少数的例外,像2009
年提出来的Policy search for motor primitives in robotics
和2016
年提出来的End-to-end training of deep visuomotor policies
。
很显然,由于模型采样成本极高,因此学一个模型就变得顺理成章,由此衍生出了一系列基于模型的强化学习文章。通过与所学的模型交互从而减少采样的复杂性。更细致地来说,是通过在所学模型中对未来发生的事情进行想象,专业术语叫做规划,planning
。
基于模型的强化学习还有一个好处在于,它可以做到奖励独立,因为学的是状态转移。所以如果是在相同的环境中,而任务不同的话,他的泛化能力是非常强的。比如说,对于同一个机器人,对于某个特定的任务,奖励函数固定,而换了一个任务的话,奖励函数就改变了。这个时候如果还需要与环境进行交互采样的话,效率就未免太低了。
因此从上述论述中不难发现,在基于模型的强化学习算法中,如何学一个模型是至关重要的,也就是说所构建模型的表征能力往往能决定基于模型的强化学习算法在最终性能上的表现。
高斯过程对于model
的不确定性表征具有极强的学习能力,而神经网络能够处理大规模高维的数据,但是对于少量数据容易过拟合。高斯函数也有弊端,就是基准分布是一个平滑的高斯核,而神经网络能够表达更复杂的函数近似。作者将二者结合,在基准控制任务中取得了SOTA
的结果。
所采用的方法?
大体思路
如上图所示,Model
是多个概率动态模型(上图中是两个),每一个动态模型都能够很好地去表征环境的不确定性。有了模型之后就可以往前进行轨迹采样(trajectory sampling
)。规划的时候用MPC
算法即可,计算出一个最优的动作序列,然后只采用这个最优序列的第一个动作,然后不断地进行规划。
PETS
能够处理的不确定性是两种:1. aleatoric
:系统本身所带来的不确定性。2. epistemic
:由于数据限制所带来的不确定性。
具体方法
对于一个概率动态模型来说,下一个状态的条件分布可以表示为:
f θ ( s t + 1 ∣ s t , a t ) = Pr ( s t + 1 ∣ s t , a t ; θ ) f_{\boldsymbol{\theta}}\left(s_{t+1} \mid s_{t}, \boldsymbol{a}_{t}\right)=\operatorname{Pr}\left(s_{t+1} \mid s_{t}, \boldsymbol{a}_{t} ; \boldsymbol{\theta}\right) fθ(st+1∣st,at)=Pr(st+1∣st,at;θ)
因此如果学到了动态模型(dynamics model
f
~
\widetilde{f}
f
)的话,我们就通过给定候选动作序列去预测出一个状态轨迹的分布,再计算候所有选动作序列上的期望奖励就可以选出最优的动作序列。
- 概率神经网络(
P
P
P):输出的神经元参数化为一个概率分布函数,用于处理
aleatoric uncertainty
,也就是环境模型本身带来的不确定性。其loss
函数定义为:
loss P ( θ ) = − ∑ n = 1 N log f ~ θ ( s n + 1 ∣ s n , a n ) \operatorname{loss}_{\mathrm{P}}(\boldsymbol{\theta})=-\sum_{n=1}^{N} \log \widetilde{f}_{\boldsymbol{\theta}}\left(\boldsymbol{s}_{n+1} \mid \boldsymbol{s}_{n}, \boldsymbol{a}_{n}\right) lossP(θ)=−n=1∑Nlogf θ(sn+1∣sn,an)
举个具体的例子,输入是 s n s_{n} sn和 a n a_{n} an,输出是一个参数化的高斯分布:
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+1∣st,at)=N(μθ(st,at),Σθ(st,at))
此时的loss
函数可以表示为:
loss Gauss ( θ ) = ∑ n = 1 N [ μ θ ( s n , a n ) − s n + 1 ] ⊤ Σ θ − 1 ( s n , a n ) [ μ θ ( s n , a n ) − s n + 1 ] + log det Σ θ ( s n , a n ) \operatorname{loss}_{\text {Gauss }}(\boldsymbol{\theta})=\sum_{n=1}^{N}\left[\mu_{\boldsymbol{\theta}}\left(\boldsymbol{s}_{n}, \boldsymbol{a}_{n}\right)-\boldsymbol{s}_{n+1}\right]^{\top} \boldsymbol{\Sigma}_{\boldsymbol{\theta}}^{-1}\left(\boldsymbol{s}_{n}, \boldsymbol{a}_{n}\right)\left[\mu_{\boldsymbol{\theta}}\left(\boldsymbol{s}_{n}, \boldsymbol{a}_{n}\right)-\boldsymbol{s}_{n+1}\right]+\log \operatorname{det} \boldsymbol{\Sigma}_{\boldsymbol{\theta}}\left(\boldsymbol{s}_{n}, \boldsymbol{a}_{n}\right) lossGauss (θ)=n=1∑N[μθ(sn,an)−sn+1]⊤Σθ−1(sn,an)[μθ(sn,an)−sn+1]+logdetΣθ(sn,an)
方差的输出可能为任意值,就可能产生非负的输出,导致后期的规划终端,因此做的时候常常会对其取个log
,这样还是会有可能使得其坍缩为零,或者趋向于无穷大。作者在实验中发现,对其设置边界效果较好:
o g v a r = m a x _ l o g v a r − t f . n n . s o f t p l u s ( m a x _ l o g v a r − l o g v a r ) l o g v a r = m i n _ l o g v a r + t f . n n . s o f t p l u s ( l o g v a r − m i n _ l o g v a r ) v a r = t f . e x p ( l o g v a r ogvar = max\_logvar - tf.nn.softplus (max\_logvar - logvar)\\ logvar = min\_logvar + tf.nn.softplus (logvar - min\_logvar)\\ var = tf.exp(logvar ogvar=max_logvar−tf.nn.softplus(max_logvar−logvar)logvar=min_logvar+tf.nn.softplus(logvar−min_logvar)var=tf.exp(logvar
-
集成( P E PE PE):定义 B B B个
bootstrap models
,预测的概率分布可以表示为 f ~ θ = 1 B ∑ b = 1 B f ~ θ b \widetilde{f}_{\boldsymbol{\theta}}=\frac{1}{B} \sum_{b=1}^{B} \tilde{f}_{\boldsymbol{\theta}_{b}} f θ=B1∑b=1Bf~θb。 -
基于所学模型进行规划和控制:一旦模型 f ~ θ \widetilde{f}_{\boldsymbol{\theta}} f θ学好之后,我们就可以利用它,在给定候选策略 a t : t + T ≐ { a t , … , a t + T } \boldsymbol{a}_{t: t+T} \doteq\left\{\boldsymbol{a}_{t}, \ldots, \boldsymbol{a}_{t+T}\right\} at:t+T≐{at,…,at+T}的情况下来去预测未来。基于
MPC
算法选择最优的动作 arg max a t : t + T ∑ τ = t t + T E f ~ [ r ( s τ , a τ ) \arg \max _{\boldsymbol{a}_{t: t+T}} \sum_{\tau=t}^{t+T} \mathbb{E}_{\widetilde{f}}\left[r\left(\boldsymbol{s}_{\tau}, \boldsymbol{a}_{\tau}\right)\right. argmaxat:t+T∑τ=tt+TEf [r(sτ,aτ)。常用sampling shooting method
来实现计算最优的动作序列,但是作者用CEM
方法采样动作。
整体算法可表示为:
代码实现
- tensorflow实现:https://github.com/kchua/handful-of-trials
- pytorch实现:https://github.com/quanvuong/handful-of-trials-pytorch