zoukankan      html  css  js  c++  java
  • 9. 基于模型的强化学习与Dyna2

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

    基于价值的强化学习模型和基于策略的强化学习模型都不是基于模型的,它们从价值函数,策略函数中直接去学习。

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

    [egin{array}{l}
    {S_{t + 1}} sim Pleft( {{S_{t + 1}}|{S_t},{A_t}} ight)\
    {R_{t + 1}} sim Pleft( {{R_{t + 1}}|{S_t},{A_t}} ight)
    end{array}]

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

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

    假设训练数据是$S_1,A_1,R_2,S_2,A_2,R_2,...,S_T$,我们可以转换成T-1组训练样本,

    [egin{array}{*{20}{l}}
    {{S_1},{A_1} o {S_2}}&{{S_1},{A_1} o {R_2}}\
    {{S_2},{A_2} o {S_3}}&{{S_2},{A_2} o {R_3}}\
    {{S_{T - 1}},{A_{T - 1}} o {S_T}}&{{S_{T - 1}},{A_{T - 1}} o {R_T}}
    end{array}]

    左边的训练样本一起组成了一个分类模型或密度估计模型训练集,输入状态和动作,输出下一个状态。右边的训练样本一起组成了一个回归模型训练集,输入状态和动作,输出动作奖励值。至此我们的强化学习求解过程和传统的监督学习算法没有太多区别了,可以使用传统的监督学习算法来求解这两个模型。当然还可以更简单,即通过对训练样本进行查表法进行统计$P(S_{t+1}|S_t,A_t)$概率和$R(R_{t+1}|S_t,A_t)$平均值,这样就可以直接预测,比使用模型简单。

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

    Dyna算法框架并不是一个具体的强化学习算法,而是一类算法框架的总称。Dyna将基于模型的强化学习和不基于模型的强化学习集合起来,既从模型中学习,也从和环境交互的经历去学习,从而更新价值函数和(或)策略函数。

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

    1. 初始化价值函数$Q(s,a)$、奖励模型$R(s,a)$和状态模型$P(s,a)$

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

    A.  当前状态s,以$varepsilon-greddy$策略依据当前的Q函数选择动作a

    B.  执行动作a,得到下一状态s'和奖励r

    C.  更新价值函数Q

    [Q(S,A) = Q(S,A) + alpha [R + gamma {max _a}Q(S',a) - Q(S,A)]]

    D.  使用样本$s,a o s'$更新状态模型$P(s,a)$,使用样本$s,a  o r$更新奖励模型$R(s,a)$

    E.  for j=1 to 最大次数n:

    a).    随机选择一个之前出现过的状态s, 在状态s上出现过的动作中随机选择一个动作a

    b).    基于模型P(S,A)得到S′, 基于模型R(S,A)得到R

    c).    更新价值函数Q

    [Q(S,A) = Q(S,A) + alpha [R + gamma {max _a}Q(S',a) - Q(S,A)]]

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

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

    转载来自:

    https://www.cnblogs.com/pinard/p/10384424.html

  • 相关阅读:
    WPF 常用path示例
    Grid之 Gridlength 解析
    Binding Relative 示例
    Grid之 好玩的GridSplitter
    Blend 制作水晶按钮
    DockPanel—最守规矩布局控件
    万恶之源python介绍
    04.基本数据类型(list,tuple)
    02.万恶之源python 运算符和编码
    基本数据类型(int, bool, str)
  • 原文地址:https://www.cnblogs.com/yijuncheng/p/10514491.html
Copyright © 2011-2022 走看看