Integrating Learning and Planning(对Environment建立模型)
本文是David Silver强化学习公开课第八课的总结笔记。这一课主要讲了如何拟合environment模型,通过有监督的方式来更新model,以及如何基于学习的model来找policy/value function,主要谈到了Monte-Carlo Tree Search方法,并且将拟合model和求解value function结合起来实现Dyna算法。
【转载自】chenrudan.github.io
本文是David Silver强化学习公开课第八课的总结笔记。这一课主要讲了如何拟合environment模型,通过有监督的方式来更新model,以及如何基于学习的model来找policy/value function,主要谈到了Monte-Carlo Tree Search方法,并且将拟合model和求解value function结合起来实现Dyna算法。
本课视频地址:RL Course by David Silver - Lecture 8: Integrating Learning and Planning
本课ppt地址:http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/dyna.pdf
文章的内容是课程的一个总结和讨论,会按照自己的理解来组织。个人知识不足再加上英语听力不是那么好可能会有一些理解不准的地方,欢迎一起讨论。
建了一个强化学习讨论qq群,有兴趣的可以加一下群号595176373或者扫描下面的二维码。
1.内容回顾
前面两节课是将policy和value function表达成参数形式,从而通过更新参数来解决MDP问题,而本课则是希望拟合出未知environment的model,即知道environment是如何转移状态和反馈reward,那么就能从model中找到合适的policy和value function,这一步称为planning。本课的标题中learn指的是在不学习model的情况下对policy和value function建模的行为,而plan就是学习model,并从model中推断出policy和value function,后者也叫model-based reinforcement learning。
![](/qrcode.jpg)
environment的参数化好处在于,避免了状态多policy复杂难学,它像在模拟出游戏的规则,这样就能通过搜索树的方式获得value function,并且能够通过监督学习方式来学习model。例如输入是状态ss输出是状态s′s′,此处就能给一定的监督信息,说明s′s′取什么样的值比较好。而缺点在于用一个近似的model来构造一个近似的value function,两个近似都会存在一定的误差。
2.Model-Based Reinforcement Learning
model的形式可以表现为S,A,P,RS,A,P,R,假设状态集和动作集是已知的,把状态转移和奖赏表示成状态和动作的独立概率分布为P[St+1,Rt+1|St,At]=P[St+1|St,At]P[Rt+1|St,At]P[St+1,Rt+1|St,At]=P[St+1|St,At]P[Rt+1|St,At]。目标就是从一段执行序列中S1,A1,R2,…,STS1,A1,R2,…,ST来估计model,这样就能看成一个监督问题,把St,AtSt,At当成模型输入,那么即Rt+1,St+1Rt+1,St+1就能看成模型的输出。学习Rt+1Rt+1是一个回归问题,可以用最小均方差等方法来解决,而学习St+1St+1则是一个密度估计问题,可以用KL divergence等方法来解决。
举个例子,有两个状态A,BA,B,有8条序列,分别是(A,0,B,0),(B,1),(B,1),(B,1),(B,1),(B,1),(B,1),(B,0)(A,0,B,0),(B,1),(B,1),(B,1),(B,1),(B,1),(B,1),(B,0)。数字代表
这个状态下的reward,用最简单的建模方式,将所有转移过状态记录下来,reward平均一下。从样本中状态A肯定会转移到状态B,且reward均值是0,而状态B有6次reward是1,2次reward是0,平均一下得到有75%概率得到reward为1,就能得到右边的model图。
图1 Building Model实例(图片来源[1])
拟合好模型之后就是如何plan出相应的value function,最简单的planning方法就是从model中采样出一些样本,然后基于这些样本当成model-free的强化学习问题来解决,即之前课上的Monte-Carlo control、Sarsa等算法,这种方法叫Sample-based planning。针对之前的例子,假如采样得到8个样本(B,1),(B,0),(B,1),(A,0,B,1),(B,1),(A,1,B,1),(B,1),(B,0),用Monte-Carlo learning来分析,A状态出现了两次,每次最终获得的reward是1,V(A)=1,而B状态则出现8次,6次reward为1,因此V(B)=0.75。
3.Integrated Architectures
从上面内容可以看出存在两种样本,一种是真实数据称为Real experience,一种是从model中采样出来的称为Simulated experience。
如果将learn和plan结合起来,即又学习model的形式,又学习value function或者policy,这也是一种方法,称为Dyna。如下图所示,experience包括real和simulated两种,既可以用real数据来直接学value function/policy,也可以将real数据用来学习model,然后由model产生simulated数据继续学value function/policy。结合Q-learning的算法流程如下。
图2 Dyna算法流程循环图(图片来源[1])
针对集合SS和AA所有值初始化Q(s,a)Q(s,a)和Model(s,a)Model(s,a)循环==选择当前状态为SS,通过ϵ−ϵ−greedy选择一个AA==执行AA,获得reward R和下一个state S′S′(前两步都来自real experience)==由Q-Learning更新动作值函数Q(S,A)=Q(S,A)+α[R+γmaxaQ(S′,A)−Q(S,A)]Q(S,A)=Q(S,A)+α[R+γmaxaQ(S′,A)−Q(S,A)]==由获得的R,S′R,S′来学习模型Model(S,A)Model(S,A)==循环n次====随机选择一个SS和AA====基于模型得到R,S′R,S′====同样的方法更新动作值函数
3.Simulation-Based Search
上面的方法在plan值函数的时候,是随机选状态和动作再更新。但是在状态集常常会有比较关键的状态和没用的状态,那么就应该更多的关注重要的状态,将一个重要的状态作为根节点,由Model(s,a)Model(s,a)得到从这个状态出发的搜索树,如下图。再从分支中选择一些episode来做model-free learning,如果选择的方法是Monte-Carlo control方法,那么整个算法就叫Monte-Carlo Search。
图3 search tree(图片来源[1])
Monte-Carlo Tree Search算法的流程如下
给定一个model MvMv从一个重要状态出发stst在当前的simulation policy下模拟出K个episodes,即得到(st,Akt,Rkt+1,Skt+1…,SkT)Kk=1 Mv,π(st,Atk,Rt+1k,St+1k…,STk)k=1K Mv,π根据episodes构造搜索树由Monte-Carlo Learning每次访问到s,as,a都记录一次最后求所有episodes的平均得到Q(s,a)=1N(s,a)∑Kk=1∑Tu=t1(Su,Au=s,a)GuQ(s,a)=1N(s,a)∑k=1K∑u=tT1(Su,Au=s,a)Gu然后由最大值函数得到当前最佳的action,即at=argmaxa∈AQ(st,a)at=argmaxa∈AQ(st,a)
实际上就是将Monte-Carlo control应用到simulated experience上。
例如围棋中衡量一个位置ss的好坏问题。这里的奖赏函数是中间时刻Rt=0Rt=0,到达终止状态时如果是黑赢了RT=1RT=1,如果是白赢了RT=0RT=0。policy由两部分组成π=(πB,πW)π=(πB,πW)分别是两个玩家落子策略,值函数(位置s的好坏)是当前状态下黑子赢的概率vπ(s)=P[Blackwins|S=s]vπ(s)=P[Blackwins|S=s],最大值函数是v∗(s)=maxπBminπWvπ(s)v∗(s)=maxπBminπWvπ(s)
如果将MC的部分改成用TD来更新Q(s,a)就是TD search。可以看出Dyna算法就是分了两次更新值函数。
[1] http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/dyna.pdf