在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Based RL),以及基于模型的强化学习算法框架Dyna。

    本篇主要参考了UCL强化学习课程的第8讲和Dyna-2的论文

 1. 基于模型的强化学习简介

    基于价值的强化学习模型和基于策略的强化学习模型都不是基于模型的,它们从价值函数,策略函数中直接去学习,不用学习环境的状态转化概率模型,即在状态下采取动作a,转到下一个状态的概率Pass

而基于模型的强化学习则会尝试从环境的模型去学习,一般是下面两个相互独立的模型:一个是状态转化预测模型,输入当前状态和动作a,预测下一个状态。另一个是奖励预测模型,输入当前状态s和动作,预测环境的奖励r。即模型可以描述为下面两个式子:


St+1P(St+1|St,At)

Rt+1R(Rt+1|St,At)

    如果模型可以准确的描述真正的环境的转化模型,那么我们就可以基于模型来预测,当有一个新的状态和动作A到来时,我们可以直接基于模型预测得到新的状态和动作奖励,不需要和环境交互。当然如果我们的模型不好,那么基于模型预测的新状态和动作奖励可能错的离谱。

    从上面的描述我们可以看出基于模型的强化学习和不基于模型的强化学习的主要区别:即基于模型的强化学习是从模型中学习,而不基于模型的强化学习是从和环境交互的经历去学习。

    下面这张图描述了基于模型的强化学习的思路:

2. 基于模型的强化学习算法训练流程

    这里我们看看基于模型的强化学习算法训练流程,其流程和我们监督学习算法是非常类似的。

    假设训练数据是若干组这样的经历:

S1,A1,R2,S2,A2,R2,...,ST

    对于每组经历,我们可以将其转化为T1组训练样本,即:


S1,A1S2,S1,A1R2

S2,A2S3,S2,A2R3

......

ST1,AT1ST,ST1,AT1RT

    右边的训练样本一起组成了一个分类模型或密度估计模型,输入状态和动作,输出下一个状态。 右边的训练样本一起组成了一个回归模型训练集,输入状态和动作,输出动作奖励值。

    至此我们的强化学习求解过程和传统的监督学习算法没有太多区别了,可以使用传统的监督学习算法来求解这两个模型。

    当然还可以更简单,即通过对训练样本进行查表法进行统计,直接得到的概率和的平均值,这样就可以直接预测。比使用模型更简单。

    此外,还有其他的方法可以用来得到,这个我们后面再讲。

    虽然基于模型的强化学习思路很清晰,而且还有不要和环境持续交互优化的优点,但是用于实际产品还是有很多差距的。主要是我们的模型绝大多数时候不能准确的描述真正的环境的转化模型,那么使用基于模型的强化学习算法得到的解大多数时候也不是很实用。那么是不是基于模型的强化学习就不能用了呢?也不是,我们可以将基于模型的强化学习和不基于模型的强化学习集合起来,取长补短,这样做最常见的就是Dyna算法框架。

3. Dyna算法框架

    Dyna算法框架并不是一个具体的强化学习算法,而是一类算法框架的总称。Dyna将基于模型的强化学习和不基于模型的强化学习集合起来,既从模型中学习,也从和环境交互的经历去学习,从而更新价值函数和(或)策略函数。如果用和第一节类似的图,可以表示如下图,和第一节的图相比,多了一个“Direct RL“的箭头,这正是不基于模型的强化学习的思路。

 Dyna算法框架和不同的具体的不基于模型的强化学习一起,可以得到具体的不同算法。如果我们使用基于价值函数的Q-Learning,那么我们就得到了Dyna-Q算法。我们基于Dyna-Q来看看Dyna算法框架的一般流程.

4. Dyna-Q算法流程

5. Dyna-2算法框架

6. 基于模型的强化学习总结

    基于模型的强化学习一般不单独使用,而是和不基于模型的强化学习结合起来,因此使用Dyna算法框架是常用的做法。对于模型部分,我们可以用查表法和监督学习法等方法,预测或者采样得到模拟的经历。而对于非模型部分,使用前面的Q-Learning系列的价值函数近似,或者基于Actor-Critic的策略函数的近似都是可以的。

    除了Dyna算法框架,我们还可以使用基于模拟的搜索(simulation-based search)来结合基于模型的强化学习和不基于模型的强化学习,并求解问题。这部分我们在后面再讨论。

(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com)