如果做一件事情一定要在把他全都搞清楚之后才开始做,那样效率是不高的。
//////////////////////////////////////////////////////////////////////
一开始我是设想先把所有书上的涉及内容(MDP,DP,Monte Corla,TD,Eligibility Trace,Policy Gradient)这些全看完再去回头研究论文,但是这样进展太慢,黎叔也说效率不高,那我先把Monte Corla看完之后就去准备论文的PPT吧。
///////////////////////////////////////////////////////////////////////
5.2 Monte Corla Estimation of Action Values 启动!
首先一个就是,这应该算是state-action的状态动作对,这个探索和V(s)也是接近的,它也是episode by episode的,存在first visit和average visit,但是有个很严肃的问题:
The only complication is that many state-action pairs may never be visited. If is a deterministic policy, then in following π one will observe returns only for one of the actions from each state. With no returns to average, the Monte Carlo estimates of the other actions will not improve with experience. This is a serious problem because the purpose of learning action values is to help in choosing among the actions available in each state. To compare alternatives we need to estimate the value of all the actions from each state, not just the one we currently favor.
这个和Monte Corla的特性有关,之前就提到过Monte Corla是一枝独秀,所以在一个确定性的策略π下,它是没有随机探索的,不像是DP的广撒网,Monte Corla是一根针,没有随机探索,没有对于状态的全探索,这个就不能称之为强化学习,强化学习的一个很重要的假设就是环境全探索--龙博提到了一个“正常返”--positive recurrent state ,这个我还没看懂,回头再看//
至于前面一章对于state value的探讨,其实V(s)和Q(s,a)是不分家的,也就是说其实状态值函数也存在上述问题。。。因为其实转到代码的时候,V都是p和Q的乘积的一个期望,所以...期待如何去解决这个问题。。
///////////////////////////////////
QAQ 龙博的NIPS都快写好了,有积累是不一样啊嘤嘤嘤
//////////////////////////////////
嗯,收拾好心情,继续干!
5.2的最后提到了我们必须要确保不断的探索这个目标,和两个方法:
1. 在每个episode开始的时候,把每个state-action pair的概率都设为非0,这样就可以全探索
2.虽然上述的通过限制起始条件有时是有用的,但是这并不能被普遍依赖,尤其是当直接从与环境的交互中学习时。在这种情况下,起始条件不太可能如此有用。 确保遇到所有状态 - 行为对的最常见的替代方法是仅考虑随机的策略,并且选择每个状态中的所有动作的非零概率。 我们在后面的章节中讨论这种方法的两个重要变体。 目前,我们保留探索开始的假设,并完成蒙特卡罗控制方法的完整介绍。
好的。准备学5.3吧。
///////////////////////////////////////////////////////////////////////////////
5.3一开始就提到,其实总体思路还是和DP一样,是 generalized policy iteration (GPI) -- 广义策略迭代,这个东西,参考一下前面的伪代码:
就是这个东西,不断的迭代,最后得出一个在state s下最好的action a
然后这里就提到了...为了得到Monte Corla的收敛性保证,我们做了两个很难实现的假设:就是5.2最后提到的那两个--有探索的start和无数次episode
没错,我们现在要先把这两个假设去掉(微笑)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
对于策略验证策略更新我之前有重大理解问题!
第二步叫做策略验证,在这一步里,我们拿到了一个确定的策略π0,然后就是要求出在π0下的Valve值!也就是说这一步里不改变策略π,只是单纯的去求状态值函数V(S)
那求个V也需要迭代?
需要!
这个就是一个典型例子,策略是不变的(等概率1/4),但是V(s)是在变的,这个k,是说的状态k,而不是策略k!
因为新给过来一个策略π,状态值函数的更新是像浪潮一样,一波一波更新,如上图所示,因为每个V(s)都跟周围状态有关,所以是个动态变化的过程,也就是说,这个第二步,就是一个求现在策略π的V(s),所以第二步的判断条件是说这个V已经稳定啦,这个V,可以说就是ture value啦
然后第三部,策略改进,就是在你现有的这个V(s)中,得到一个更好的π’,如果这个π‘和之前的π不一样(实际就是比较选择的Action a),那好,这就是一个新的策略π’,再打回第二步重新求一遍Value,所以,这是policy improvement!
这个就很直接了,它根本没提π,因为我们清楚,所谓的策略π,就是找到,到底应该选择什么动作a,也就是说,得到这个最优的Action a,其实就是找到了最优策略π*,在这段伪代码里就是同时,一起去做的两件事情:
这个,就是策略提升--找到更好的a
这个,就是策略验证,也就是去求ture value
之前的是分两步,让Valve值稳定下来,拿到最终的状态值函数之后再改进,而现在这个就是同时在做这两个事情:在valve不停变得同时,去找到更好的action,同时更新。
这样为什么能行得通呢?我觉得策略验证那一步,其实不是很重要,因为它需要迭代很多很多次才能真正稳定下来--但是其实仅仅迭代的前几步我们就知道到底哪些动作更好:参考上面4*4的表格图,接下来的迭代只是去做一个把值精确的过程,这对于我们的策略提高,没什么必要!所以同步更新可以少一个系列的迭代,而且能做到收敛到最佳值!
好的,总计完毕,又一个疑惑消除了。
//////////////////////////////////////////////////////////
今日份的皂片没有 QWQ
/////////////////////////////////////////////////////////
懂了。
这个还是跟上面的evaluation & improvement 结合的那个图相似
它也是评估和提高一起做的,不过这个是以episode为单位,跑完一个episode,就完成一次评估和提升,下面是我手写的一个流程:
ok,可以看到,大括号右边的东西要一直做循环,Repeat Forever,在大括号右边的东西,其实就是一个episode--只是在开始这个episode之前,我们要保证每个state-action对都有被访问到的可能。
我认为这个应该需要两个表,一个是Return(s,a)一个是Q(s,a),其实这个Q(s,a )= average(R(s,a)),所以其实这个R表究竟有没有用我也不是很清楚,再说吧,Q表就是可以理解为动作值函数的表,然后第4步就是所谓的策略更新,也就是选择对应state中可以让Q(s,a)最大的,比如Q(s2,up)= 1 Q(s2,down)=2,我们在s2的时候就选择down,这,就是策略更新。
之前也有这么一个问题困扰着我:我已经把在每个state所对应的最佳策略已经选出来了,还有什么迭代的价值呢?
其实吧,很多东西不是迭代一步可以看出来的--比如用这个思路去解决4*4表格的问题:
就像这个案例一样,所以,我们需要迭代,这和Monte Corla的那个伪代码一样,在episode外面,有一个repeat forever。
以上就是今天的收获,很充实!
明天看论文出PPT吧,书先放放。
网友评论