强化学习(十七) 基于模型的强化学习与Dyna算法框架

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

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

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

    基于价值的强化学习模型和基于策略的强化学习模型都不是基于模型的,它们从价值函数,策略函数中直接去学习,不用学习环境的状态转化几率模型,即在状态$s$下采起动做$a$,转到下一个状态$s'$的几率$P_{ss'}^a$。框架

    而基于模型的强化学习则会尝试从环境的模型去学习,通常是下面两个相互独立的模型:一个是状态转化预测模型,输入当前状态$s$和动做$a$,预测下一个状态$s'$。另外一个是奖励预测模型,输入当前状态$s$和动做$a$,预测环境的奖励$r$。即模型能够描述为下面两个式子:$$S_{t+1} \sim P(S_{t+1}|S_t,A_t)$$$$R_{t+1} \sim R(R_{t+1}|S_t,A_t)$$函数

    若是模型$P,R$能够准确的描述真正的环境的转化模型,那么咱们就能够基于模型来预测,当有一个新的状态$S$和动做$A$到来时,咱们能够直接基于模型预测获得新的状态和动做奖励,不须要和环境交互。固然若是咱们的模型很差,那么基于模型预测的新状态和动做奖励可能错的离谱。学习

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

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

 

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

    这里咱们看看基于模型的强化学习算法训练流程,其流程和咱们监督学习算法是很是相似的。blog

    假设训练数据是若干组这样的经历:$$S_1,A_1,R_2,S_2,A_2,R_2,...,S_T$$get

    对于每组经历,咱们能够将其转化为$T-1$组训练样本,即:$$S_1,A_1 \to S_2,\;S_1,A_1 \to R_2$$$$S_2,A_2 \to S_3,\;S_2,A_2 \to R_3$$$$......$$$$S_{T-1},A_{T-1} \to S_T,\;S_{T_1},A_{T-1} \to R_T$$产品

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

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

    固然还能够更简单,即经过对训练样本进行查表法进行统计,直接获得$P(S_{t+1}|S_t,A_t)$的几率和$R(R_{t+1}|S_t,A_t)$的平均值,这样就能够直接预测。比使用模型更简单。

    此外,还有其余的方法能够用来获得$P(S_{t+1}|S_t,A_t)$和$R(R_{t+1}|S_t,A_t)$,这个咱们后面再讲。

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

3. Dyna算法框架

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

    

     Dyna算法框架和不一样的具体的不基于模型的强化学习一块儿,能够获得具体的不一样算法。若是咱们使用基于价值函数的Q-Learning,那么咱们就获得了Dyna-Q算法。咱们基于Dyna-Q来看看Dyna算法框架的通常流程.

4. Dyna-Q算法流程

    这里咱们给出基于价值函数的Dyna-Q算法的概要流程。假设模型使用的是查表法。

    1.  初始化任意一个状态$s$,和任意一个动做$a$对应的状态价值$Q(s,a)$, 初始化奖励模型$R(s,a)$和状态模型$P(s,a)$

    2. for i=1 to 最大迭代次数T:

      a) S $\gets$ current state

      b) A $\gets$ $\epsilon-greedy(S,Q)$

      c) 执行动做$A$,获得新状态$S'$和奖励$R$

      d) 使用Q-Learning更新价值函数:$Q(S,A) =Q(S,A) + \alpha[R +\gamma\max_aQ(S',a) -Q(S,A)]$

      e) 使用$S,A,S'$更新状态模型$P(s,a)$,使用$S,A,R$更新状态模型$R(s,a)$

      f)  for j=1 to 最大次数n:

        i)  随机选择一个以前出现过的状态$S$, 在状态$S$上出现过的动做中随机选择一个动做$A$

        ii) 基于模型$P(S,A)$获得$S'$, 基于模型$R(S,A)$获得$R$

        iii) 使用Q-Learning更新价值函数:$Q(S,A) =Q(S,A) + \alpha[R +\gamma\max_aQ(S',a) -Q(S,A)]$

 

    从上面的流程能够看出,Dyna框架在每一个迭代轮中,会先和环境交互,并更新价值函数和(或)策略函数,接着进行n次模型的预测,一样更新价值函数和(或)策略函数。这样同时利用上了和环境交互的经历以及模型的预测。

5. Dyna-2算法框架

    在Dyna算法框架的基础上后来又发展出了Dyna-2算法框架。和Dyna相比,Dyna-2将和和环境交互的经历以及模型的预测这两部分使用进行了分离。仍是以Q函数为例,Dyna-2将记忆分为永久性记忆(permanent memory)和瞬时记忆(transient memory), 其中永久性记忆利用实际的经验来更新,瞬时记忆利用模型模拟经验来更新。

    永久性记忆的Q函数定义为:$$Q(S,A) = \phi(S,A)^T\theta$$

    瞬时记忆的Q函数定义为:$$Q'(S,A) = \overline{\phi}(S,A)^T\overline{\theta }$$

    组合起来后记忆的Q函数定义为:$$\overline{Q}(S,A) = \phi(S,A)^T\theta + \overline{\phi}(S,A)^T\overline{\theta }$$

    Dyna-2的基本思想是在选择实际的执行动做前,智能体先执行一遍从当前状态开始的基于模型的模拟,该模拟将仿真完整的轨迹,以便评估当前的动做值函数。智能体会根据模拟获得的动做值函数加上实际经验获得的值函数共同选择实际要执行的动做。价值函数的更新方式相似于$SARSA(\lambda)$

    如下是Dyna-2的算法流程:

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

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

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

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

相关文章
相关标签/搜索