概述
Guided Policy Search可以说是Sergey Levine的成名之作,因此需要重点精读一下,这篇文章因为涉及到Model-based RL的setting,所以公式超级多,尽量配点intuitive的总结,我说这篇论文不难,你信?????
可直接跳到文末看一句话总结paper的思想。
一、 GPS的基础知识
LQR基础知识
深度强化学习CS285 lec10-lec12 Model Based RL
GPS的理论知识在这两篇文章里介绍,关于Model-based的强化学习的,现在稍微回顾并深入一下。
1.1 MBRL的Model已知
1.1.1 确定的dynamics model
回忆一下,Model-based RL的dynamics model是确定的,问题定义如下:
a1,a2,...,aT=a1,a2,...,aTargmaxt=1∑Tr(st,at)s.tst+1=f(st,at)
u1,…,uT,x1,…,xTmint=1∑Tc(xt,ut) s.t. xt=f(xt−1,ut−1)一个以reward的形式定义,一个以cost的形式定义,其中cost的定义是optimal control中的传统定义,因此此处采用与paper相符合的第二种cost定义形式。
然后把约束写进目标,就变成了下面这种形式:
minu1,…,uTc(x1,u1)+c(f(x1,u1),u2)+⋯+c(f(f(…)…),uT)
于是LQR就是对确定的dynamics model就是一阶线性近似,对cost function进行二阶近似进行求解,如下:
u1,...,uTmint=1∑Tc(xt,ut)s.txt=f(xt−1,ut−1)f(xt,ut)=Ft[xtut]+ftc(xt,ut)=21[xtut]TCt[xtut]+[xtut]Tct
输入初始状态x1,通过Backward Pass得到控制律:
ut=Ktxt+kt,t=1,2,...,T
然后Forward Pass解出最优控制序列:
x2=f(x1,u1)u2=K2x2+k2x3=f(x2,u2)⋮uT=KTxT+kT
LQR致命的缺点就是假设了dynamics model即f(xt,ut)是线性的函数,cost function即c(xt,ut)是二次的函数,如果环境dynamics model或者cost funciton更加复杂,如stochastic dynamics model,就得用iLQR了!
1.1.2 随机的dynamics model
当dynamics model 是随机的,问题定义如下:
a1,...,aT=a1,...,aTargminEs′∼p(s′∣s,a)[t=1∑Tc(st,at)∣∣∣a1,...,aT]p(s1,s2,...,sT∣a1,...,aT)=p(s1)t=1∏Tp(st+1∣st,at)
比如iLQR利用高斯分布的形式,均值参数是线性函数来拟合环境更复杂的动态特性。
iLQR:f(xt,ut)=N(Ft[xtut]+ft,Σt)
iLQR的输入是一条人工初始化的轨迹x^t,u^t,其中每一个LQR的输入是新旧轨迹之间的差值xt−x^t,ut−u^t,经过Backward Pass知道控制律ut=Kt(xt−x^t)+kt+u^t,再通过Forward Pass知道一条较优轨迹xt,ut
对于这个控制律,还可以加一个line search的参数如下:
ut=Kt(xt−x^t)+αkt+u^t
进而继续用高斯分布的形式来表示iLQR的Controller,也即policy为:
N(Kt(xt−x^t)+αkt+u^t,σt)称为time-varying linear model
1.2 学习Model
LQR用在已知的Model是线性的,iLQR用在已知的model更为复杂的形式,但这个Model怎么学习呢?(这个dynamics model模型是p(s′∣s,a))
这个dynamics model常见的类型有:
- Gaussian process model :Data-efficient但train得慢,对捕捉非平滑的dynamics不灵敏
- Neural Network:泛化性能好,但需要大量数据即(s,a,s′)∈D
- Bayesian Linear Regression:可以给个prior,再拟合,上述两者的折中
从Divide and Conquer的角度去看这个dynamics model的话,学习的是一个f:S×A→S的映射,自然地,我们观测到的(s,a,s′)很难cover到整个state space,而且即使cover到了,state space的不同地方可能有完全不同的dynamics,难以用一个global模型去拟合整个映射,因此想掌握一个复杂的dynamics model有local models与global model之分。
通俗地理解,initial policy converge如πθ(a∣s)收敛到optimal policy如πθ∗(a∣s)的过程中,πθ(a∣s)与πθ∗(a∣s)探索到state space肯定是不一样的,因此在dynamics model的学习过程中也会遇到同样的问题,如果用很傻的policy去收集transition如(s,a,s′),那探索得到的dynamics model肯定是不完整的,难以cover到足够的最优policy的空间。
把人当agent,环境当dynamics model来做个比喻:小孩即initial policy收集的环境model是玩具、游戏、电竞这种熟悉的数据,基于这些数据训练的环境 model能预测大佬即optimal policy所处的环境如天下大事,预料之中?
所以训练一个完美的global model是很难的,需要解决数据的covariate shift的问题,因此从local model迭代做起!所以当没有环境model时,即Unknown Dynamics。最好的方法肯定是边看边学,即initial policy收集一些trajectories,对这些trajectories拟合一个local dynamics model,用其进行policy update,再用update policy收集一些trajectories,再拟合一个local dynamics model,如此下去通往optimal policy。
1.3 Unknown Dynamics
概括如下:
- Run controller (Policy) on robot to collect trajectories
- Fit dynamics model to collected trajectories
- Update policy with new dynamics model
然后下面开始细化具体步骤。
1.3.1 Run the controller (policy)
现在有一些初始的trajectories如{τ(i)}i=1N,然后用iLQR优化以下目标:
mint=1∑TE(xt,ut)[c(xt,ut)−H(ut∣xt)]就得到一个Controller或Policy即:
N(Kt(xt−x^t)+αkt+u^t,Qut,ut−1)
1.3.2 Fitting dynamics
利用上述Controller与环境真实的dynamics交互得到一些transition即(xt,ut,xt+1),跑一个Bayesian linear regression进行dynamics model的拟合:
p(xt+1∣xt,ut)=N(Atxt+Btut+c,σ)
1.3.3 Improve the controller
因为dynamics model是local的,所以当policy update利用这个local model进行iLQR时,就要得让新轨迹τ与旧轨迹τˉ之间在一定范围内接近。公式描述如下:
p(τ)=p(x1)t=1∏Tp(ut∣xt)p(xt+1∣xt,ut)p(ut∣xt)=N(Kt(xt−x^t)+kt+u^t,Σt)
优化问题变为:
p(τ)mint=1∑TEp(xt,ut)[c(xt,ut)]s.tDKL(p(τ)∣∣pˉ(τ))≤ϵ
p(τ)=p(x1)t=1∏Tp(ut∣xt)p(xt+1∣xt,ut)pˉ(τ)=p(x1)t=1∏Tpˉ(ut∣xt)p(xt+1∣xt,ut)
DKL(p(τ)∣∣pˉ(τ))=Ep(τ)[logpˉ(τ)p(τ)]=Ep(τ)[logp(τ)−logpˉ(τ)]=E(xt,ut)∼p(τ)[t=1∑T(logp(ut∣xt)−logpˉ(ut∣xt))]=t=1∑T[Ep(xt,ut)logp(ut∣xt)+Ep(xt,ut)[−logpˉ(ut∣xt)]]=t=1∑T[Ep(xt)Ep(ut∣xt)logp(ut∣xt)+Ep(xt,ut)[−logpˉ(ut∣xt)]]=t=1∑T[−Ep(xt)[H(p(ut∣xt))]+Ep(xt,ut)[−logpˉ(ut∣xt)]]=t=1∑TEp(xt)[H[p,pˉ]−H[p]]=t=1∑TEp(xt,ut)[−logpˉ(ut∣xt)−H[p(ut∣xt)]]
所以对这个优化问题使用拉格朗日变成无约束目标再优化其对偶问题:
p(τ)mint=1∑TEp(xt,ut)[c(xt,ut)]s.tDKL(p(τ)∣∣pˉ(τ))≤ϵ
原问题变为:
pminλmaxt=1∑TEp(xt,ut)[c(xt,ut)]+λ(DKL(p(τ)∣∣pˉ(τ))−ϵ)
对偶问题变为:
λmaxpmint=1∑TEp(xt,ut)[c(xt,ut)]+λ(DKL(p(τ)∣∣pˉ(τ))−ϵ)
然后固定λ优化内项:
pmint=1∑TEp(xt,ut)[c(xt,ut)−λlogpˉ(ut∣xt)−λH(p(ut∣xt))]−λϵ=pmint=1∑TEp(xt,ut)[λ1c(xt,ut)−logpˉ(ut∣xt)−H(p(ut∣xt))]−ϵ=pmint=1∑TEp(xt,ut)[cˉ(xt,ut)−H(p(ut∣xt))]−ϵ对这个Objective 跑一个iLQR,得到一个新的controller policy p∗(ut∣xt)
然后将p∗(ut∣xt)代入目标,优化外项λ:
λ←+α(DKL(p(τ)∣∣pˉ(τ))−ϵ)
1.4 小总结
如果上面公式看得迷糊,这里总结一下流程:
- 如果dynamics model已知,是确定性的话,根据初始状态,跑一下LQR就可以知道动作序列了(比如五子棋dynamics model直接人为写好了,离散而且好写)
- 如果dynamics model已知,是随机性的话,初始化一条轨迹,跑一下iLQR的Backward Pass就得到一个比较好的controller,即ut=Kt(xt−x^t)+kt+u^t,于是然后希望它有一些泛化性就变成一个高斯controller即N(Kt(xt−x^t)+kt,Qut,ut−1),使用这个controller跑一下iLQR的Forward Pass经历真实的dynamics从而得到一条新的轨迹,迭代下去就可以知道动作序列了~
- 如果dynamics model未知,随机收集一下transitions,然后用Bayesian linear regression去拟合一个local dynamics model,利用这个local dynamics model跑iLQR,得到高斯controller即N(Kt(xt−x^t)+kt,Qut,ut−1),用它跑一些transitions,然后fitting local dynamics model,继续iLQR,如此迭代下去,就可以得到比较好的policy了即动作序列。
二、Guided Policy Search

大家发现了没?GPS的基础知识都是传统方法呀!名为Trajectory Optimization,所以很复杂(不忍卒读)= =完全没有神经网络呀!它的dynamics model是由Bayesian linear regression得到的,它的controller(policy)是由iLQR得到的,神经网络呢!!!?因此,现在就引入一个global policy 或global controller,即图上的πθ(ut∣ot)即πθ(ut∣xt)
那么现在正式进入正题!
- 首先问:传统方法得到的controller即N(Kt(xt−x^t)+kt,Qut,ut−1)有什么问题?
答: 这丫需要先训练一个dynamics model,然后一个expert demonstration作为初始轨迹,然后从中得到一个time-varying linear Gaussian controller,因此该controller只能在这个demonstration附近有用,离这个controller比较远的情况就不知道了(所以迭代的时候才要求新controller离旧controller比较近呀!)所以泛化性能超级差!一个expert demonstration而已呀!
- Guided Policy Search有什么用?
答: 从expert demonstrations,用传统方法可以学出好多个controllers呀!于是就可以用监督学习的方式,将这些controller学习到的sub-optimal behavior且泛化差的专家知识,全部放到一个神经网络中!而不再是不同的初始轨迹状态,用不同的controller去完成,一个神经网络就足够了!
接下来看看流程!

notation稍微有点不一样。下面文字解释一下:
- 用iLQR的方法从expert demonstrations中弄出n个controllers即π1,...,πn
- 分别用这个n个controllers收集m个trajectories即τ1,...,τm
- 利用m个trajectories中的(s,a)最大似然监督学习,得到一个初始的网络policy即πθ∗
- 用π1,...,πn,πθ∗与环境交互收集一些trajectories的样本为S(与Buffer超级像了啦!)
- 进入迭代过程
- 从S中Sample一个子集Sk(与Off-Policy超级像了啦!)
- 终于是强化里面的Policy Gradient的Objective了,加了个Importance Sampling以及normalize the importance weights,得到一个新的policyπθk(论文中是用LBFGS的优化方法弄的)
- 用πθk跑一些samples加到样本集S中
- 对rˉ(xt,ut)=r(xt,ut)+logπθk(ut∣xt)这个跑一下iLQR得一个controller,跑一些adaptive samples出来
- 然后下面的就如图了
三、总结
Guided Policy Search的想法,很朴素!
一句话总结就是通过传统方法利用expert demonstrations弄一些泛化差的controllers出来,然后用expressive的模型去拟合这些controllers。
所以Guidance来自于由传统方法得到的“局部专家”
然后这思想被疯狂延伸,比如2016 NIPS的GAIL这篇Paper,利用拟合expert demonstrations的occupancy measure来指导Policy Update的过程!