12、基于模型的策略学习(Model-based policy learning)

主要要点:

  1. 梳理之前关于model-based强化学习的几个迭代版本

  2. 探索如何学习基于模型强化学习的全局策略,局部策略。

  3. 探索将全局和局部策略结合起来的算法,包括GPS(Guided Policy Search)与Policy distillation。

1. 基于模型的强化学习的几个迭代版本

首先回顾下之前所提到的model-based RL的几个版本。

1.1 V0.5版

V0.5版是最原始的版本,他首先运行某种基本策略(如随机策略)来收集样本数据,然后通过最小化MSE的方法来学习模型动态函数​,最后根据习得的​进行未来的动作规划。 原始流程如下:
image.png

1.2 V1.0版

上个版本由于出现分布不匹配 (distribution mismatch) 问题:我们的训练数据分布和实际遇到的情况不匹配。为了解决这个问题,我们跟之前模仿学习相似,收集更多我们更关心的“实际分布”下的数据。因此我们的 v1.0 版基于模型的增强学习算法如下:

image.png

前三步与 v0.5 版无异,而 v1.0 版增加了第四步,收集新数据加入样本中并重新学习模型动态,希望藉此消除分布不匹配的问题。这个算法和 DAgger 不同,因为 DAgger 是为了适应策略的改进,而这里只是一些独立的强化学习步骤。

1.3 V1.5版本

基于V1.0的版本,我们还可以对算法进行一些改进。改进是基于考虑如果我们犯了一个错误如何纠正,因为即便我们的模型只有些许错误,我们在每个时刻尝试进行一些补偿,那么最后这些补偿加起来会成为很严重的错误。 基于模型的增强学习 v1.5 版跟上一篇中的稳健算法类似,进行一些 MPC。如果我们发现根据我们的规划走,这个车却向左偏了,当误差到一定程度时,我们就可以重新进行规划,希望这个重新规划的方法可以补偿。算法如下:
image.png

也就是说,每次我们仅执行整个计划序列中的第一步,然后走一步后对整个问题进行重新规划。重新规划路径有助于解决模型误差问题。第三步规划做得越频繁,每一次规划需要达到的精度越低,可以容忍更差的模型和更糟糕的规划方法。相对更简单的规划方法也可以起到作用,如可以接受更短的时长(也就是更加短视地规划问题),甚至一些随机采样的方法经常也可以做得很好。Tassa et al. (2012) 的演示中就说明了即便模型很离谱,MPC 也在倾向于做一些正确的事情。

1.4 V2.0 版本

在 v1.5 版本中,最难的一点是做规划。越精密的模型和方法,计划未来行动的代价越大,使得在线学习越困难。而 Guo et al. (2014) 使用模仿学习训练策略,则能更好地实现在线进行游戏。 MPC 方法可能很好,但是计算代价有可能会很大。我们之前的想法是构造一个策略函数​来得到具体的行动。为了得到策略函数,我们可以写出计算图来表明策略函数​如何影响收益,从而我们将梯度进行反向传播。

image.png

这个做法对确定性策略非常容易,也能拓展到随机策略。基于这种想法吗,我们有了基于模型的增强学习算法 v2.0 版:

image.png

第一步还是搜集样本数据,第二步通过MSE学习模型动态​,第三步通过​使用反向传播的方法来优化策略函数​,最后是使用学习到的​产生新样本数据,然后进行反复循环。

需要注意得是的是, ​只是去最小化损失函数,而​ 则是通过 BPTT 训练 RNN 的方法进行求解的。当然这个方法本身并不是很好的,主要原因和训练 RNN 难度很大,会有梯度消失或者爆炸的问题。

对以上四个版本的框架进行比较,得到以下小结:

  • v0.5 版:我们收集随机样本,训练模型动态,并进行规划。比较适合模型动态形式基本已知,只需要去求解少数参数的情形。优点在于方法简单,没有迭代过程;缺点主要在于分布不匹配问题。

  • v1.0 版:针对分布不匹配问题,采用交替进行收集数据和重新训练模型并规划的方法。优点在于同样简单,而且解决了分布不匹配的问题;缺点在于它还是一个开环控制过程,在误差下容易出现“小车跑出道路”的问题。

  • v1.5 版:在 v1.0 版的基础上加入了 MPC 进行闭环控制,在每一步运行后进行重新规划。优点在于对小的模型误差鲁棒性较好,在模型不准确的时候也可以得到很好的控制;缺点在于它的计算代价比较大,需要一边在线运行规划算法,一边收集数据。

  • v2.0 版:不再使用 MPC 进行反复重新规划,而考虑构建一个策略函数,通过反向传播去更新策略函数。优点在于它在运行时计算代价较小,只需要根据策略函数执行行动,比规划算法容易很多;缺点在于它可能在数值上非常不稳定,尤其是在一些随机域之中。

2. 全局模型与局部模型

在之前的V2.0版本中,存在训练过程中的梯度消失或者梯度爆炸的问题,其解决方案一个是使用模型去生成一些数据,然后应用model-free的强化学习算法。另一个解决方案是使用局部模型去改善模型,这会使用比神经网络更加简单的策略,比如LQR-FLM(LQR-Fitted Local Model),通过解决一些简单的任务去训练局部策略,以及通过监督学习的方法和全局模型进行结合。

2.1 全局模型

对于动态模型的反向传播,策略梯度以及对应的基于时间的反向传播(BPTT)的相应的公式是:

image.png

通过上面的公式对比可以看到,策略梯度会比BPTT更加稳定,策略梯度不需要像BPTT那么多的Jacobian的连乘。

2.2 Dyna算法

经典的Dyna算法是一个在线Q-learning算法,他是结合了基于模型与model-free算法,经典的Dyna的关键在其中第三步对模型进行了更新,基本流程是:

image.png

模型在流程中作用在与计算期望。把经典的Dyna算法进行泛化,可以得到:

image.png

在第四步从Buffer中采样一些点,比如图上的圆点,第五步从Buffer中选择动作或者用自己的策略选择动作,第六步从模型中采样出下一个状态,第七步使用新的数据训练model-free的算法。

这种general的算法,他仅仅需要从模型中产生很少的数据,但是还是不稳定。使用这种思想的算法包括了与MBA(model-based acceleration),MVE(model-based value expansion )以及MBPO(model-based policy optimization)。

image.png

2.3 局部模型

在全局模型中,我们学习一个​,对于整个系统中都起作用。出于这个目的,我们尝试使用单一的函数去拟合,譬如一个巨大的神经网络。它对于我们所能访问到的状态行动处表现不俗,也可以用它来进行很好的决策。在我们的 v1.0 版框架中,问题在于如果​一开始估计不好,那么规划步就会去探索因为模型错误而被乐观估计的区域(模型指向了错误的​,恰好比较优秀,规划器以为会访问到,而实际不会)。譬如说对于一个只会行走的生物,模型却认为它下一步能飞起来,那么规划器会尝试去规划它下一步怎么飞,而事实上它并不能飞。

要把一个模型学习得很好其实是压力山大的,我们需要弄出一个很好的模型,在状态空间的绝大多数区域都收敛到一个很好的解。有些时候我们可以使用较短的规划期、MPC 等手段,但总体来说还是问题很大的。在某些任务中,模型比行动策略要复杂很多。譬如把一个有柄的杯子拿起来,我们的策略很简单,拿住杯柄握起来放到对应位置就行,跟各种物理关系不大;而这样一个问题的物理模型则非常复杂,如手可能是软的会变形,接触点可能很多,等等。因此将这些东西全盘考虑进来进行准确预测会很难。

相较于训练很好的全局模型,有一些我们可以做的事情,譬如训练局部模型 (local models)。在我们之前所述的方法中,做轨迹优化通常需要的仅仅是模型在某点的导数,而这正是局部信息。因此,我们某种程度上也可以认为不见得一定要训练好一个全局模型才能做好优化问题,而训练一些能对梯度等局部信息有表征的模型也可以:事实上这个就简单很多了。

image.png

现在我们只来关心​,​。知道了这些信息之后,我们就可以用 iLQR 等方法来进行轨迹优化了。因此,我们的想法不是去拟合模型动态,而仅仅是去拟合关于当前轨迹或者策略的​,​,譬如使用线性回归的方法。注意到 LQR 很好的特性是它是线性的,而且这个策略是可以在真实环境中运行的。

image.png

我们尝试对一个增强学习过程进行拆解。

image.png

首先我们通过运行策略函数​来收集数据。然后我们拟合模型动态​:为了简单起见,我们假设模型动态是一个高斯分布​,其中的均值可能是比较复杂的非线性函数,方差基本上比较确定但是稍微有一些噪音,他不影响结果。这个假设对连续系统还是比较合理的。我们假设在每个时刻,都有一个线性化表达式​,对于不同时刻矩阵是不同的。这样近似其实已经很有表达力了,因为在不同的时间,前面的系数矩阵可能完全不同,但在给定时间下只是线性而已。这样近似更是因为我们通常只会用到的​的一阶导数,​ ,​。因此我如果我们可以拟合​,那么我们就能得到这两个微分结果。从而,我们可以用这个来使用 iLQR 方法改进我们的策略函数​ ,然后重新下一个循环。

2.3.1、使用怎么样的策略

在这个大框架下,其实有很多值得探讨的问题。第一个问题是,使用怎样的策略(这里也是控制器 controller)去收集数据。我们现在不尝试去拟合一个全局模型了,所以选用怎么样的策略的重要性就更强了。如果我们只是随便选策略的话,那么我们很难去拟合当前策略下的局部信息。回顾 iLQR:

image.png

其中​可以给出最优化的动作,在Version0.5的最简单的想法是选取​作为锚点,但是如果模型执行了一些不好的动作,就会产生偏差或者偏移等问题。进一步我们选择 iLQR 给出的最优控制(v1.0 版),看起来这样的确定性策略有点儿“太好了”,如果我们想拟合局部信息,可能总是采取某种意义上的最优策略并不好,可能会总是往一个地方不停钻,使用基本一样的数据去拟合会使局部信息非常病态(ill condition)。一个更好的版本(v2.0 版)执行高斯分布,其中均值是 iLQR 做出的最优控制,并加入了一些噪音,使得数据不总是基本一样,数据多样性稍微加强。方差建议的选择是​。

2.3.2、如何你和局部模型

第二个问题是如何去拟合这个局部模型。假设我们已经收集了一些轨迹转移数据,我们使用高斯分布的模型动态,因为我们在上一篇中已经提到过对于这样的问题直接做 LQR 还是能得到最优解,我们可以忽略噪音的影响。最简单的拟合方法是我们直接使用线性回归,譬如假定:

image.png

一种更好的做法是考虑到在相近的时间点,模型动态可能是比较接近的,因此贝叶斯线性回归可能是一个比较好的选择,可以使用某些全局模型作为先验分布:我们可以把所有数据用来拟合一个全局模型,并把它作为先验,这样可以提高数据的使用率。这样的想法比较像是我们有一个全局模型,效果还可以但是不够完善,由此我们把它作为先验来提高局部模型的拟合。

当然,学习全局难度的模型需求量远比局部模型高,因为局部模型的矩阵形式比诸如神经网络全局模型简单很多,但是局部模型的难点在于每次策略更新之后,局部模型就得推倒重来,以收集更好的样本(也可以说是在线 (on-policy) 的基于模型的增强学习):两者是有权衡的,在一个盈亏平衡点后可能学习全局模型的代价相对更小了。具体代价和具体问题紧密相关,有些问题很容易去拟合全局模型,但是有些问题则很难。

2.3.3、策略函数变化太大的问题

第三个问题是,我们更新策略函数总是希望让它能与现在有所不同,那么如果策略函数变化太大会怎么样

image.png

在上图中,真实模型是绿色线的非线性函数,我们使用一个蓝色线的线性模型去拟合(因此在中部一点相切)。我们进行一步更新的时候,可能到达一个比较远的位置(红色竖虚线投影),此时蓝色拟合模型和绿色真实模型有很大的差别。在蓝色线性模型下,我们认为轨迹只会是蓝色的虚线;而我们实际运行时,由于蓝色拟合模型完全是错误的,实际上我们拐到了红色虚线这样很远的地方,就完全在计划之外了。我们之所以叫蓝色模型为局部模型,是因为它只能告诉我们在局部范围内如何改进策略,而如果我们策略变动过大,则这样不见得是一个改进(甚至可能是完全错误的),因为我们的局部模型太只关注局部了。我们要做的事情,是去限制每次迭代中,策略函数改变了多少,使得每一步走得不远。

那么我们怎么做才能使得新的策略与原策略接近呢?

image.png

如果我们的新的轨迹分布和老的轨迹分布比较相近,那么模型动态也会比较接近。使用KL散度去限制分布的变化被控制在局部范围之内。

3. 结合局部模型与全局模型

3.1 引导策略搜索(Guided Policy Search)

主要思想是模型先有很多从初始状态不同的轨迹,然后使用监督学习算法去拟合从这些不同的轨迹。

image.png

这里的问题是轨迹中心产生的数据是没办法通过一个简单的神经网络去拟合的。一个改进方法是:
image.png

3.2 distillation

主要思想是单个模型的健壮性不足,那么我们可以通过学习很多的模型然后对预测结果进行平均,也就是集成的方法。Distillation是基于集成的结果来训练模型,对模型概率的拟合的效果会比直接拟合原始单一的标签更加合适。

image.png

3.3 分而治之(Divide and conquer )

这种Divide and conquer的强化学习算法的思想如下:

image.png
image.png

你可能感兴趣的:(12、基于模型的策略学习(Model-based policy learning))