zoukankan      html  css  js  c++  java
  • 机器学习 | 强化学习(7) | 融合学习与规划(Integrating Learning and Planning)

    7-融合学习与规划(Integrating Learning and Planning)

    1.导论

    基于模型的强化学习(Model-Based Reinforcement Learning)

    • 在上一个课程中,是从记录序列中直接学习策略
    • 在过往的课程中,是从记录序列中直接学习价值函数
    • 而本次课程,则是从记录序列中直接学习模型
    • 然后采用规划(Planning)来构建一个价值函数或者策略
    • 将学习(Learning)与规划(Planning)融合到一个架构中

    基于模型(Model-Based)和无模型(Model-Free)强化学习

    • 无模型强化学习

      • 无模型
      • 从经验序列中学习价值函数或者策略
    • 基于模型强化学习

      • 从序列中学习一个模型
      • 通过模型来规划价值函数或者策略

    2.基于模型的强化学习(Model-Based RL)

    价值/策略 -> 交互 -> 经验序列 -> 模型学习 -> 模型 -> 规划 -> 价值/策略 ->....

    基于模型强化学习的优点

    优点:

    • 可以基于监督学习的方法快速学习
    • 能够解释模型的不确定性

    缺点:

    • 先学习一个模型,再构建策略函数,中间过程导致了两次近似误差的产生

    什么为模型?

    • 对于一个模型(mathcal{M})则是代表一个由参数(eta)进行控制的$MDPmathcal{langle S, A, P, R angle} $

    • 我们假定状态空间(mathcal{S})和动作空间(mathcal{A})是已知的

    • 为此一个模型(mathcal{M=langle P_eta,R_eta angle})代表着状态转移概率(mathcal{P_etaapprox P})以及回报(mathcal{R_etaapprox R})

      [egin{align} S_{t+1}&simmathcal{P_eta}(S_{t+1}|S-t,A_t) \ R_{t+1}&simmathcal{R_eta}(R_{t+1}|S-t,A_t) end{align} ]

    • 一般来说假设状态转移以及回报是符合条件性独立的

      即:

      [mathbb{P}[S_{t+1},R_{t+1}|S_t,A_t]=mathbb{P}[S_{t+1}|S_t,A_t]mathbb{P}[R_{t+1}|S_t,A_t] ]

    模型学习(Model Learning)

    • 目标:从经验序列({S_1,A_1,R_2dots,S_T})估计模型(mathcal{M_eta})

    • 显然这是一个监督学习问题:

      [egin{align} S_1,A_1& ightarrow R_2,S_2 \ S_2,A_2& ightarrow R_3,S_3 \ &vdots \ S_{T-1},A_{T-1}& ightarrow R_T,S_T end{align} ]

    • 学习 (s,a ightarrow r)即是回归问题

    • 学习(s,a ightarrow s')即是密度估计问题(即是学习密度概率函数或者说分布)

    • 选择一个损失函数,如MSE、KL散度等

    • 寻找参数(eta)以最小化经验误差

    一些模型的典型例子

    • 查表法模型(Table Lookup Model)
    • 线性期望模型(Linear Expectiation Model)
    • 线性高斯模型(Linear Gaussian Model)
    • 高斯过程模型(Gaussian Process Model)
    • 深度微型网络(Deep Belief Network Model)
    • ...

    查表模型(Table Lookup Model)

    • 模型显然是一个显式的马尔科夫决策过程(mathcal{hat P,hat R})

    • 计算访问每个状态动作对的访问次数(N(s,a))

      [egin{align} mathcal{hat P^a_{s,s'}} & = frac{1}{N(s,a)}sum^{T}_{t=1}mathbf 1(S_t, A_t,S_{t+1}=s,a,a') \ mathcal{hat R^a_{s,s'}} & = frac{1}{N(s,a)}sum^{T}_{t=1}mathbf 1(S_t, A_t=s,a)R_t end{align} ]

    • 或者换一种说法

      • 在每一个时间辍t中记录经验元组(langle S_t,A_t, R_{t+1},S_{t+1} angle)
      • 对于一个采样模型,随机性地采样形如(langle s,a,cdot,cdot angle)的元素

    模型规划(Planning with a model)

    *Planning即是Solving

    • 给定模型(mathcal{M_eta=langle P_eta,R_eta angle})
    • 解决(MDPmathcal{langle S,A,P_eta,R_eta angle})
    • 用你喜欢的算法即可:
      • 价值迭代
      • 策略迭代
      • 树形搜索
      • ...

    基于采样的规划(Sample-Based Planning)

    • 简易却是强大的规划方法

    • 只用模型来生成样本

    • 从模型中进行采样

      [egin{align} S_{t+1} & sim mathcal{P_eta}(S_{t+1}|S_t,A_t) \ R_{t+1} & = mathcal{R_eta}(R_{t+1}|S_t,A_t) end{align} ]

    • 通过无模型的强化学习方法去采样,例如说:

      • 蒙特卡罗控制
      • SARSA算法
      • Q--Learning
    • 基于采样的规划(Sample-Based Planning)一般来说都比较高效

    非精准模型的规划

    • 给定非完美的模型(mathcal{langle P_eta,R_eta angle eq langle P,R angle})

    • 基于模型强化学习的表现决定或者说限制了拟合(MDPmathcal{langle S,A,P_eta, R_eta angle})的最优策略

      即是基于模型的强化学习只能跟他估计所用的模型一致

    • 那么当模型不够精确之时,在规划的过程中只能得到一个次优解的策略

    • 方法1:当模型完全出错之时,采用无模型的强化学习

    • 方法2:显式地描述模型的不确定性

    3.融合架构(Integrated Architectures)

    真实序列与模拟序列

    我们这里定义两种来源的经验序列

    • 真实序列(Real experience)从环境中进行的取样(真正的MDP)

      [S' sim mathcal{P^a_{s,s;}} \ R = mathcal{R^a_s} ]

    • 模拟序列(Simulated experience)从模型中进行的取样的(近似MDP)

      [egin{align} S'& sim mathcal{P_eta(S'|S,A)} \ R & = mathcal{R_eta}(R|S,A) end{align} ]

    基于模型(Model-Based)和无模型(Model-Free)强化学习

    • 无模型强化学习

      • 无模型
      • 从经验序列中学习价值函数或者策略
    • 基于模型强化学习(通过基于采样的规划)

      • 从序列中学习一个模型
      • 通过模型来规划价值函数或者策略
    • Dyna(pronounce: daina)(二者的融合体)

      • 从真实经验序列中学习一个模型
      • 学习并且规划处一个价值函数(或者策略)从混合的真实与模拟经验序列

    Dyna-Q算法

    对所有的(sinmathcal{S})以及所有的(ainmathcal{A(s)}),初始化 (Q(s,a))以及模型(Model(s,a))

    一直循环:

    1. (Sleftarrow) 目前的状态(非终结态)

    2. (Aleftarrowepsilon-greedy(S,Q))

    3. 执行动作(A),得到回报(R)以及下一状态(S')

    4. (Q(S,A)leftarrow Q(S,A)+alpha[R + gammamax_a Q(S',a)-Q(S,A)])

    5. (Model(S,A) leftarrow R,S')(假设是确定性的环境)

    6. 循环(n)

      (Sleftarrow) 随机取样过去观测到的状态

      (Aleftarrow)随机取样在(S)中会采取的动作

      (R,S'leftarrow Model(S,A))

      (Q(S,A) leftarrow Q(S,A) + alpha[R + gammamax_a Q(S',a) - Q(S,A)])

    其中中间循环(n)次也可以看做是思考次数

    尤其适合变化性的环境

    4.基于模拟的搜索(Simulation-Based Search)

    前向搜索(Forward search)

    • 前向搜索算法通过向前预测来选取最佳的动作
    • 通过建立基于目前状态(s_t)作为根的搜索树(Search Tree)
    • 通过一个MDP的模型来向前预测
    • 其实并不需要整个MDP,只是从目前出发的一部分MDP

    基于模拟的搜索(Simulation-Based Search)

    • 前向搜索图采用基于采样的规划

    • 通过模型模拟出从现在开始的经验序列

    • 在模拟出来的序列中应用无模型的强化学习

    • 首先基于模型模拟从目前状态开始的经验序列

      [{color{red}{s^k_t},A^k_t,R^k_{t+1},dots,S^k_T}^K_{k=1}simmathcal{M_v} ]

    • 在模拟出来的序列中应用无模型强化学习(按你喜欢的即可)

      • 蒙特卡罗·控制( ightarrow)蒙特卡罗搜索(Monte-Carlo Search)
      • SARSA( ightarrow) TD搜索

    简易蒙特卡罗搜索(Simple Monte-Carlo Search)

    • 给定模型(mathcal{M_v})以及一个模拟策略(pi)

    • 对于所有动作(ain mathcal{A})

      • 然后基于目前状态(s_t)(是真实的)去模拟(K)个状态

        [{color{red}{s_t,a},R^k_{t+1},S^k_{t+1},A^k_{t+1},dots,S^k_T}^K_{k=1}sim mathcal{M_v,pi} ]

      • 通过均值返回回报去评估每一个动作(蒙特卡罗评估)

        [Q(color{red}{s_t,a})=frac{1}{K}sum^K_{k=1}G_tmathop{ ightarrow}^P q_pi(s_t,a) ]

      • 选择具有目前最大价值的动作

        [a_t=mathop{argmax}_{ain A}Q(s,a) ]

    蒙特卡罗树搜索(Monte-Carlo Tree Search)(评估)

    • 给定模型(mathcal{M_v})

    • 通过目前的模拟策略(pi)从目前状态(s_t)模拟K步序列

      [{color{red}{s_t}A^k_t,R^k_{t+1},S^k_{t+1},A^k_{t+1},dots,S^k_T}^K_{k=1}sim mathcal{M_v,pi} ]

    • 然后构建一个包含(模拟中)访问过的状态以及动作的搜索树

    • 通过从(s,a)出发的每一步序列返回的均值返回回报评估状态的(Q(s,a))

      [Q(color{red}{s,a})=frac{1}{N(s,a)}sum^K_{k=1}sum^T_{u=t}mathbf1(S_u,A_u=s,a)G_umathop{ ightarrow}^P q_pi(s,a) ]

      • 选择具有目前最大价值的动作

        [a_t=mathop{argmax}_{ain A}Q(s,a) ]

    蒙特卡罗树搜索(模拟)

    • 在蒙特卡罗树搜索中,模拟策略(pi)是可以被更新改进的

    • 每一次模拟都包含了两部分(入树与出树)

      • 树策略(改进):通过最大化(Q(S,A))进行动作选择
      • 缺省策略(修正过):随机选择动作
    • 重复(每次循环如此)

      • 通过蒙特卡罗评估去评估状态(Q(S,A))
      • 改进树策略例如通过(epsilon-greddy(Q))
    • 然后将蒙特卡罗控制应用在模拟出来的经验序列中

    • 将会收敛于最优的搜索树,(Q(S,A) ightarrow q_*(S,A))

      *从目前状态出发树策略一直下推以取代缺省策略

    蒙特卡罗树搜索的优点

    • 高度选择性的最优优先搜索
    • 动态评估所有状态(不像例如动态规划那样)
    • 通过采样来破坏维度曲线(curse dimensionality)*大概指的是状态随着树分支的增加以几何级数的趋势爆发
    • 黑箱模型的杰作(只需采样)
    • 计算处理上地高效,支持并行处理

    时序差分搜索(Temporal-Difference Search)

    • 基于模拟的搜索
    • 采用TD来取代蒙特卡罗(自助法)
    • 蒙特卡罗树搜索应用蒙特卡罗控制到部分MDP上
    • 同理时序差分搜索应用SARSA控制到部分MDP上

    蒙特卡罗对比时序差分搜索

    • 对于无模型强化学习,自助法比较有用
      • TD学习减少了方差但是增加偏差
      • TD学习一般比蒙特卡罗更为高效
      • (TD(lambda))比蒙特卡罗非常非常高效
    • 对于基于模拟的搜索,自助法一样好用
      • TD搜索减少方差但是增加偏差
      • TD搜索一般比蒙特卡罗搜索要更为高效
      • (TD(lambda))比蒙特卡罗搜索要非常非常高效

    时序差分搜索

    • 模拟从目前状态(s_t)开始的经验序列

    • 估计动作-价值函数(Q(s,a))

    • 对于每一步模拟,tguo1SARSA去更新动作价值函数

      [Delta Q(S,A) = alpha(R + gamma Q(S',A') - Q(S,A)) ]

    • 选择动作基于动作价值函数(Q(s,a))

      • 例如说(epsilon-greedy)
    • 同样Q也适用于函数近似

    Dyna-2

    • 在Dyna-2之中,智能体存储了两个特征权重的数据集

      • 长期记忆
      • 短期记忆(动态工作中)
    • 长期记忆是从真实经验序列通过时序差分学习更新出来的

      • 通用的知识可以应用于所有状态序列
    • 短期记忆是基于模拟经验序列通过时序差分学习更新出来的

    • 整个价值函数是长期记忆与短期记忆的求和

  • 相关阅读:
    ionic入门教程第十二课-通用模块的分离$ionicModal
    ionic入门教程第十一课-简要说明ion-list、ion-item完成列表页ion-infinite-scroll上拉加载ion-refresher下拉刷新
    ionic入门教程第十课-接着说说ion-slide-box和它的注意事项、slide-tabs
    ionic入门教程第九课-开始动手做项目吧!ion-nav-bar、ion-nav-buttons、ion-tabs
    ionic入门教程第八课-(加更)从无到有说Ionic、画图说明MVC-U-S
    ionic入门教程第七课-简要说明几种界面之间的参数传递及优缺点
    ionic入门教程第六课-从服务器请求数据的几种方式$http.get()、jsonp()分别和callback、$q的组合
    Java 8 API Stream让List操作更便捷
    程序员常用linux命令ls,ll,cd,more,tail,rm,mv,find,vi,mdir,touch,ps,kill详解
    java数组插入排序代码详解
  • 原文地址:https://www.cnblogs.com/uzuki/p/14289998.html
Copyright © 2011-2022 走看看