Integrating Learning and Planning(续)

Table Lookup Model

查表模型适用于MDP的P,R都为已知的情况。我们通过visit得到各状态行为的转移概率和奖励,把这些数据存入表中,使用时直接检索。状态转移概率和奖励计算方法如下:

P^s,s′a=1N(s,a)∑t=1T1(St,At,St+1=s,a,s′)\hat{P}^a_{s,s'}=\frac{1}{N(s,a)}\sum_{t=1}^T 1(S_t,A_t,S_{t+1}=s,a,s')P^s,s′a​=N(s,a)1​t=1∑T​1(St​,At​,St+1​=s,a,s′)

R^sa=1N(s,a)∑t=1T1(St,At=s,a)Rt\hat{R}^a_{s}=\frac{1}{N(s,a)}\sum_{t=1}^T 1(S_t,A_t=s,a)R_tR^sa​=N(s,a)1​t=1∑T​1(St​,At​=s,a)Rt​

其中的N(s,a)N(s,a)N(s,a)表示state action pair<s,a><s,a><s,a>在visit中出现的次数。

这里也可以采用如下变种:

  • 在每个time-step:t,记录experience tuple:<St,At,Rt+1,St+1><S_t, A_t, R_{t+1}, S_{t+1}><St​,At​,Rt+1​,St+1​>。

  • 从模型采样构建虚拟经历时,从tuples中随机选择符合<s,a,⋅,⋅><s,a,\cdot,\cdot><s,a,⋅,⋅>的一个tuple。

这种方法,不再以Episode为最小学习单位,而是以时间步(time-step)为单位,一次学习一个状态转换。

Planning with a Model

规划的过程相当于求解一个MDP的过程,即给定一个模型Mη=<Pη,Rη>M_\eta = <P_\eta, R_\eta>Mη​=<Pη​,Rη​>,求解MDP<S,A,Pη,Rη><S, A, P_\eta, R_\eta><S,A,Pη​,Rη​>,找到基于该模型的最优价值函数或最优策略,也就是在给定的状态s下确定最优的行为a。

我们可以使用之前介绍过的价值迭代,策略迭代方法;也可以使用树搜索方法(Tree Search)。

Sample-Based Planning

Sample-Based Planning使用Model生成采样数据,即一个time-step的虚拟经历。

有了这些虚拟采样,随后使用model-free RL方法来学习得到价值或策略函数。

Planning with an Inaccurate Model

由于实际经历的不足或者一些无法避免的缺陷,我们通过实际经历学习得到的模型不可能是完美的模型,即:<Pη,Rη>=<P,R><P_\eta, R_\eta> = <P,R><Pη​,Rη​>=<P,R>

而model-based RL的性能取决于Model的准确度,如果Model不准确的话,往往只能得到一些次优解。

使用近似的模型解决MDP问题与使用价值函数或策略函数的近似表达来解决MDP问题并不冲突,他们是从不同的角度来近似求解MDP问题,有时候构建一个模型来近似求解MDP比构建一个近似的价值函数或策略函数要更加方便,这是model-based RL的可取之处。

同时由于个体经历的更新,模型处在一个动态变化的过程,当利用早期经历构建的模型后来被认为存在很大错误,不适用于当下经历的时候,需要放弃模型,转而使用model-free RL。

此外,可以在模型中,增加一些不确定性,以跳出次优解。

model-based RL适用于连续变量的状态和行为空间。

Dyna-Q Algorithm

当构建了一个环境的模型后,个体可以有两种经历来源:

  • 实际经历(real experience)。

S′∼Ps,s′a,R=RsaS'\sim P_{s,s'}^a, R=R_s^aS′∼Ps,s′a​,R=Rsa​

  • 模拟经历(simulated experience)。

S′∼Pη(S′∣S,A),R=Rη(R∣S,A)S'\sim P_\eta(S' | S,A), R=R_\eta(R | S,A)S′∼Pη​(S′∣S,A),R=Rη​(R∣S,A)

对于Model-Free RL来说,所有的知识都来源于real experience。

对于Model-Based RL来说,Model来源于real experience,而planning相关的知识来源于simulated experience。

于是我们很自然的想到,是否可以把real experience和simulated experience结合起来呢?

上图是Dyna算法的流程图。它从实际经历中学习得到模型,然后联合使用实际经历和模拟经历,一边学习,一边规划更新价值和(或)策略函数。

Dyna-Q算法流程如下:

Initialize Q(s,a)Q(s, a)Q(s,a) and Model(s,a)Model(s, a)Model(s,a) for all s∈Ss \in Ss∈S and a∈A(s)a \in A(s)a∈A(s)
Do forever:

(a) S←S \leftarrowS← current (nonterminal) state
(b) A←ϵ−greedy(S,Q)A \leftarrow \epsilon-greedy(S, Q)A←ϵ−greedy(S,Q)
© Execute action A; observe resultant reward, R, and state S’
(d) Q(S,A)←Q(S,A)+α[R+γmax⁡aQ(S′,a)−Q(S,A)]Q(S, A) \leftarrow Q(S, A)+\alpha[R+\gamma \max_a Q(S', a)-Q(S, A)]Q(S,A)←Q(S,A)+α[R+γmaxa​Q(S′,a)−Q(S,A)]
(e) Model(S,A)←R,S′Model(S, A) \leftarrow R,S'Model(S,A)←R,S′(assuming deterministic environment)
(f) Repeat n times:

S←S \leftarrowS← random previously observed state
A←A \leftarrowA← random action previously taken in S
R,S′←Model(S,A)R, S' \leftarrow Model(S, A)R,S′←Model(S,A)
Q(S,A)←Q(S,A)+α[R+γmax⁡aQ(S′,a)−Q(S,A)]Q(S, A) \leftarrow Q(S, A)+\alpha[R+\gamma \max_a Q(S', a)-Q(S, A)]Q(S,A)←Q(S,A)+α[R+γmaxa​Q(S′,a)−Q(S,A)]

这个算法赋予了个体在与实际环境进行交互式时有一段时间用来思考的能力。其中的步骤:a,b,c,d和e都是从实际经历中学习,d过程是学习价值函数,e过程是学习模型。

在f步,给以个体一定时间(或次数)的思考。在思考环节,个体将使用模型,在之前观测过的状态空间中随机采样一个状态,同时从这个状态下曾经使用过的行为中随机选择一个行为,将两者带入模型得到新的状态和奖励,依据这个来再次更新行为价值函数。

上图是细化后的Dyna框架图。从上面的分析可以看出,Dyna与其说是一个算法,倒不如说是一个算法框架,两者的区别在于:框架的每个组成部分,可以采用不同的算法,只要各部分之间的关系不变,就还算是同一个框架。

上图比较了在Dyna算法中一次实际经历期间采取不同步数的规划时的个体表现。横坐标是Episode序号,纵坐标是特定Episode所花费的步数。可以看出,当直接使用实际经历时,个体在早期完成一个Episode需要花费较多步数,而使用5步或50步思考步数时,个体完成一个Episode与环境发生的实际交互的步数要少很多。不过到了后期,基本上就没什么差别了。

可以看出Dyna算法可以有效提升算法的收敛速度,但不会提高最终的性能

上面的例子模拟了某时刻(虚线所示)环境发生了改变,变得更加困难,此时使用Dyna-Q算法在经历过一段时间的平台期后又找到了最优解决方案。在平台期,模型持续的给以个体原先的策略,也就是错误的策略,但个体通过与实际的交互仍然能够找到最优方案。

上二个例子表明,Dyn-Q算法赋予了个体一定的应对环境变化的能力,当环境发生一定改变时,个体一方面可以利用模型,一方面也可以通过与实际环境的交互来重新构建模型。

上2个示例图中的Q+算法与Q的差别体现在:Q+算法鼓励探索,给以探索额外的奖励。

Simulation-Based Search

Planning主要有两个用途:

  • 改善policy或value function。这种方式通常叫做background planning。它不在乎当前的状态,而在乎对于所有状态都有效的policy或value function。

  • 直接根据当前状态选择动作。这种方式通常叫做decision-time planning。它更在乎于当前状态。

这里以最简单的前向搜索(Forward Search)算法来讨论一下decision-time planning的特点。

上图是Forward Search的示意图,图中绿色方格节点指的是终止状态。

这种算法以当前状态StS_tSt​作为根节点构建了一个搜索树(Search Tree),使用MDP模型进行前向搜索。前向搜索不需要解决整个MDP,而仅仅需要构建一个从当前状态开始与眼前的未来相关的次级(子)MDP。这相当于一个登山运动员的登山问题,在某一个时刻,他只需要关注当前位置(状态)时应该采取什么样的行为才能更有利于登山(或者下撤),而不需要考虑第二天中饭该吃什么,那是登顶并安全撤退后才要考虑的事情。

从中可以看出,background planning相当于是广度优先遍历,虽然考虑的比较全面,但决策的深度较浅,而decision-time planning虽然只考虑当前状态的情况,但决策的深度较深(通常是一个完整的episode),相当于是深度优先遍历

sample-based planning+Forward search就得到了Simulation-Based Search。

首先,从Model中采样,形成从当前状态开始到终止状态的一系列Episode:

{stk,Atk,Rt+1k,…,STk}k=1K∼Mv\{s_t^k, A_t^k, R_{t+1}^k, \dots, S_T^k\}_{k=1}^K\sim M_v{stk​,Atk​,Rt+1k​,…,STk​}k=1K​∼Mv​

有了这些Episode资源,我们可以使用Model-Free的强化学习方法,如果我们使用Monte-Carlo control,那么这个算法可以称作蒙特卡罗搜索(Monte-Carlo Search),如果使用Sarsa方法,则称为TD搜索(TD Search)。

Monte-Carlo Search

我们首先看一下Simple Monte-Carlo Search的步骤:

  • 给定一个模型M和一个模拟的策略π\piπ。

  • 针对行为空间里的每一个行为a∈Aa\in Aa∈A:

从这个当前状态sts_tst​开始模拟出K个Episodes:

{stk,a,Rt+1k,St+1k,At+1k,…,STk}k=1K∼Mv,π\{s_t^k, a, R_{t+1}^k, S_{t+1}^k, A_{t+1}^k,\dots, S_T^k\}_{k=1}^K\sim M_v,\pi{stk​,a,Rt+1k​,St+1k​,At+1k​,…,STk​}k=1K​∼Mv​,π

使用平均收获(蒙特卡罗评估)来评估当前行为a的行为价值:

Q(st,a)=1K∑k=1KGt→Pqπ(st,a)Q(s_t, a)=\frac{1}{K}\sum_{k=1}^KG_t\xrightarrow[]{P} q_\pi(s_t, a)Q(st​,a)=K1​k=1∑K​Gt​P​qπ​(st​,a)

  • 选择一个有最大Q值的行为作为实际要采取的行为:

at=arg⁡max⁡a∈AQ(st,a)a_t = \mathop{\arg\max}_{a\in A}Q(s_t, a)at​=argmaxa∈A​Q(st​,a)

Simple Monte-Carlo Search的主要问题在于模拟出的Episodes的质量依赖于Model的质量,如果Model不准确,就会导致一系列的偏差,最终会导致结果的不准确。

我们可以采用优化领域常用的Evaluate/Improve方法来改进Monte-Carlo Search,于是就得到了Monte-Carlo Tree Search(MCTS)方法。

这里先看一下MCTS的Evaluation阶段的流程:

  • 给定一个模型M。

  • 从当前状态sts_tst​开始,使用当前的模拟策略π\piπ,模拟生成K个Episodes:

{stk,a,Rt+1k,St+1k,At+1k,…,STk}k=1K∼Mv,π\{s_t^k, a, R_{t+1}^k, S_{t+1}^k, A_{t+1}^k,\dots, S_T^k\}_{k=1}^K\sim M_v,\pi{stk​,a,Rt+1k​,St+1k​,At+1k​,…,STk​}k=1K​∼Mv​,π

  • 构建一个包括所有个体经历过的状态和行为的搜索树

  • 对于搜索树种每一个状态行为对(s,a)(s,a)(s,a),计算从该(s,a)(s,a)(s,a)开始的所有完整Episode收获的平均值,以此来估算该状态行为对的价值Q(s,a)Q(s,a)Q(s,a):

Q(st,a)=1N(s,a)∑k=1K∑u=tT1(Su,Au=s,a)Gu→Pqπ(s,a)Q(s_t, a)=\frac{1}{N(s,a)}\sum_{k=1}^K \sum_{u=t}^T 1(S_u,A_u=s,a) G_u\xrightarrow[]{P} q_\pi(s, a)Q(st​,a)=N(s,a)1​k=1∑K​u=t∑T​1(Su​,Au​=s,a)Gu​P​qπ​(s,a)

  • 选择一个有最大Q值的行为作为实际要采取的行为:

at=arg⁡max⁡a∈AQ(st,a)a_t = \mathop{\arg\max}_{a\in A}Q(s_t, a)at​=argmaxa∈A​Q(st​,a)

MCTS的一个特点是在构建搜索树的过程中,更新了搜索树内状态行为对的价值,积累了丰富的信息,利用这些信息可以更新模拟策略,使得模拟策略得到改进。换句话说,MCTS的策略不是一成不变的。

MCTS的Simulation也是有讲究的。

首先,改进策略时要分情况对待:

  • 树内(in-tree)确定性策略(Tree Policy):对于在搜索树中存在的状态行为对,策略的更新倾向于最大化Q值,这部分策略随着模拟的进行是可以得到持续改进的。

  • 树外(out-of-tree)默认策略(Default Policy):对于搜索树中不包括的状态,可以使用固定的随机策略。

随着不断地重复模拟,状态行为对的价值将得到持续地得到评估。同时基于ϵ−greedy(Q)\epsilon-greedy(Q)ϵ−greedy(Q)的搜索策略使得搜索树不断的扩展,策略也将不断得到改善。

机器学习(三十六)——Integrating Learning and Planning(2)相关推荐

  1. 机器学习(三十七)——Integrating Learning and Planning(3)

    Integrating Learning and Planning Monte-Carlo Search(续) 下面我们结合实例(下围棋)和示意图,来实际了解MCTS的运作过程. 第一次迭代:五角形表 ...

  2. 机器学习(三十五)——Actor-Critic, Integrating Learning and Planning(1)

    Actor-Critic 概述 MC策略梯度方法使用了收获作为状态价值的估计,它虽然是无偏的,但是噪声却比较大,也就是变异性(方差)较高.如果我们能够相对准确地估计状态价值,用它来指导策略更新,那么是 ...

  3. 推荐系统三十六式——学习笔记(三)

    由于工作需要,开始学习推荐算法,参考[极客时间]->[刑无刀大牛]的[推荐系统三十六式],学习并整理. 3 原理篇之紧邻推荐 3.1 协同过滤 要说提到推荐系统中,什么算法最名满天下,我想一定是 ...

  4. [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. Python编程基础:第三十六节 模块Modules

    第三十六节 模块Modules 前言 实践 前言 我们目前所有的代码都写在一个文档里面.如果你的项目比较大,那么把所有功能写在一个文件里就非常不便于后期维护.为了提高我们代码的可读性,降低后期维护的成 ...

  6. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  7. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. 三十六、Java集合中的HashMap

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  9. 三十六、rsync通过服务同步、Linux系统日志、screen工具

    三十六.rsync通过服务同步.Linux系统日志.screen工具 一.rsync通过服务同步 该方式可以理解为:在远程主机上建立一个rsync的服务器,在服务器上配置好各种应用,然后本机将作为客户 ...

最新文章

  1. 技术人如何做职场沟通?
  2. 为了探究不同光照处理_浅谈中考物理实验探究易错题
  3. linux 内核驱动模块的编译及加载
  4. 把伪需求扼制在摇篮里-B端产品需求方法论
  5. 前端(五)——CSS之美化页面
  6. HTTP状态码:400\500 错误代码
  7. Apollo自动驾驶入门课程第②讲 — 高精地图
  8. js生成验证码并且验证
  9. 用户列表 html,用户列表.html
  10. 中国移动计算机类行测题目,中国移动笔试题:行测巧用十字交叉法解题
  11. GPU图形加速型云服务器是什么?
  12. sql时间转换时分秒_sql时间格式转换yyyymm
  13. linux系统 安装主板驱动,I810 Graphics LINUX Driver的安装
  14. 空格符号复制html,空格网名符号复制
  15. 从苏宁电器到卡巴斯基第06篇:我在佳木斯的日子(中)
  16. window10无法访问局域网共享文件夹
  17. 飞塔防火墙常用命令集合
  18. python爬虫学校正方教务系统获取全部成绩
  19. 1月第1周榜单丨B站UP主排行榜(飞瓜数据B站)发布!
  20. 数据集下载地址(转)

热门文章

  1. JS----JavaScript中函数
  2. 手机上用的是的WAP协议 电脑上的是HTTP协议 这两个有什么不同
  3. c语言1000内亲密对数,《C语言程序的设计上机指导》项目五函数及其应用.pptx
  4. m3u8 php防盗链代码,Nginx-accesskey权限模块使用——简单的m3u8防盗链
  5. 使用await实现多接口并行调用
  6. 让同步函数同步执行,异步函数异步执行,并且让它们具有统一的 API
  7. 谷歌离线地图Api附获取教程
  8. 安卓使用ImageView显示OpenCV-Mat
  9. java 后台输出_将后台输出动态打输出到前台并且显示
  10. 使用 Python 5 年后,我转向了Go