强化学习笔记(一)马尔可夫决策过程
今年4月-5月我结合了《白话强化学习与Pytorch》和刘建平老师的博客,简单梳理了一下强化学习的脉络,用Gym接口跑了几个DQN,无奈自己笔记本的1650显卡有些羸弱,最终也就跑一个Atari游戏。之后有一两个月干别的事情,就丢在了一边。最近再拾起强化学习知识,感觉自己之前也就入了个门。
主要原因有两点:一是对技术原理仅停在看的层面,没有自己的思考和实践,特别是代码能力很差。清华大学大佬之前开源了基于Pytorch的强化学习平台——天授,再配合OpenAI写好的API环境,不到100行代码我们就能训练一个模型。但是实际上如果让我从头去部署一个模型,应用到自己的问题上,真就头大了。所以说学以致用真的很重要。二是过于依赖于书本教材及网课,对前沿的技术没有关心。之前下了NIPS2019的十几篇强化学习论文,可能最后就看了一两篇…
本专栏旨在督促自己学习吧。主要是以提问——回答及一些总结性的话语为主,强化学习的详细理论和概述有许多经典的资料可以参阅,这里不会赘述。
参考资料
- 刘建平老师的博客
- 《Reinforcement Learning:An Introduction》Richard Sutton经典教材,强化学习之父,不多说。
- David Silver深度强化算法学习:B站有课程,评论区可以下载到PPT
- 《白话强化学习与Pytorch》,一开始主要是想用Pytorch搭DNN部分,而网上大部分的代码都是Tensorflow写的。这本书感觉做参考比较好,因为有的地方写的不错,有的部分就写的有点一般了。而且有时候过于白话,数学的部分说的太少。Github地址:https://github.com/GAOYANGAU/DRLPytorch
正文
主要参考了David Silver UCL课程的第二讲。这一讲首先介绍了马尔可夫性,然后从马尔可夫奖励过程(Markov Reward Process, MRP)讲到了马尔可夫决策过程(Markov Decision Process, MDP). 推导了贝尔曼方程,贯穿全课的实例是Student Markov Chain.
马尔可夫过程并不难,但是其中有很多概念有重叠和相互表出的性质,需要进行区分。
Q1: , , 都有奖励或收获的含义,它们有什么区别?
是即时奖励,只跟某一时刻有关。指后续的奖励加权衰减和,它反映的只是单个序列的某个时刻的收益。是的期望,也就是说它是通过经验或者计算得来的准确值。比如使用蒙特卡洛采样的平均会收敛到准确的.
Q2:为什么使用那样的衰减公式?
UCL课程的PPT里有说明原因。其实我们也可以使用其它的公式来表达收益,只是目前这种简单好用,也具有现实意义。
Q3:贝尔曼方程的作用?
阐述了价值函数在时序上的递推关系。比如价值函数等于即时奖励加衰减值乘下一时刻价值函数的期望,这样任何有限的MP/MRP/MDP都可以从后往前计算价值函数。另一个很重要的点就是,贝尔曼方程实际上是个线性方程,也就是说对一个给定策略的MDP或者MRP,理论上所有的问题我们都可以用矩阵的逆求解出价值函数。这反映了MDP的可解性,说明价值函数最终是会收敛到一个值的。
Q4:和的区别?
字面上理解:前者是选取策略,即在状态S下,取动作a的概率;后者是在状态S下,选取动作a后,状态转移到S‘的概率。状态的转移可以理解为两步走:比如今天出门前是状态0,到达单位是状态1.我从状态0选择开车上班的概率是0.7,坐公交的概率是0.3,这是前者。我选择了,堵车迟到的概率为0.2,及时到单位的概率是0.8,这是后者。也就是经过选择动作,环境选择状态随机转移这两步,才真正完成状态的转移。
Q5: 和的关系?
这个问题乍一看很简单,但后来我发现自己回过头来看又绕糊涂了。两者其实是相互影响制约的。状态的转移需要动作的支配(这里什么都不做也可以看作是一种动作,比如玩Atari的乒乓球游戏,如果对方打过来的球刚好冲你现在的拍子位置上打过来,你就不需要做动作,直接反弹过去),而动作的价值取决于下一状态的价值。这里幻灯片的树型图可以很好的解释这一关系。
白色结点看成状态,黑色结点看成动作。可以看到,状态价值函数就是当前状态下,可选动作对应的动作价值函数加权和。这个权重取决于我们的策略,当然最优策略肯定是让q最大的动作概率为1,其它为0.
动作价值函数跟状态价值函数的递推很像。
把这两步合起来,我们可以得到两者的自我递推关系。
比较一下贝尔曼方程的形式,其实都是一个意思。只不过前面把期望的表达给写开了。
因为,所以等式就自然成立了.
Q6: 不同的策略产生不同的或者,那么选其中最大的一定会是最优策略吗?
书上或者幻灯片上说最大的价值函数对应的策略就是最优策略。
以我薄弱的实践经验,我是没有资格回答这个问题的。但是个人看法是:最大价值函数的策略一定是最符合你所设目标价值的策略,至于对于实际工程是不是符合,得看你建模与实际任务的契合程度。另一点是,在实际大规模的问题中,比如围棋,我们即使使用蒙特卡洛树搜索加深度卷积网络去计算价值函数,也无法真正拟合出完全符合MDP价值的参数,这时候我们的不能完全看作最优解,这也是超参数探索率的存在意义。