强化学习笔记(一)马尔可夫决策过程


今年4月-5月我结合了《白话强化学习与Pytorch》和刘建平老师的博客,简单梳理了一下强化学习的脉络,用Gym接口跑了几个DQN,无奈自己笔记本的1650显卡有些羸弱,最终也就跑一个Atari游戏。之后有一两个月干别的事情,就丢在了一边。最近再拾起强化学习知识,感觉自己之前也就入了个门。
主要原因有两点:一是对技术原理仅停在看的层面,没有自己的思考和实践,特别是代码能力很差。清华大学大佬之前开源了基于Pytorch的强化学习平台—— 天授,再配合OpenAI写好的API环境,不到100行代码我们就能训练一个模型。但是实际上如果让我从头去部署一个模型,应用到自己的问题上,真就头大了。所以说学以致用真的很重要。二是过于依赖于书本教材及网课,对前沿的技术没有关心。之前下了NIPS2019的十几篇强化学习论文,可能最后就看了一两篇…
本专栏旨在督促自己学习吧。主要是以提问——回答及一些总结性的话语为主,强化学习的详细理论和概述有许多经典的资料可以参阅,这里不会赘述。

参考资料

  1. 刘建平老师的博客
  2. 《Reinforcement Learning:An Introduction》Richard Sutton经典教材,强化学习之父,不多说。
  3. David Silver深度强化算法学习:B站有课程,评论区可以下载到PPT
  4. 《白话强化学习与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: R t R_{t} Rt, G t G_{t} Gt, V ( S t ) V(S_{t}) V(St)都有奖励或收获的含义,它们有什么区别?

R t R_{t} Rt是即时奖励,只跟某一时刻有关。 G t G_{t} Gt指后续的奖励加权衰减和,它反映的只是单个序列的某个时刻的收益。 V ( S t ) V(S_{t}) V(St) G t G_{t} Gt的期望,也就是说它是通过经验或者计算得来的准确值。比如使用蒙特卡洛采样的平均会收敛到准确的 V ( S t ) V(S_{t}) V(St).

Q2:为什么 G t G_{t} Gt使用那样的衰减公式?

UCL课程的PPT里有说明原因。其实我们也可以使用其它的公式来表达收益,只是目前这种简单好用,也具有现实意义。

Q3:贝尔曼方程的作用?

阐述了价值函数在时序上的递推关系。比如价值函数等于即时奖励加衰减值乘下一时刻价值函数的期望,这样任何有限的MP/MRP/MDP都可以从后往前计算价值函数。另一个很重要的点就是,贝尔曼方程实际上是个线性方程,也就是说对一个给定策略的MDP或者MRP,理论上所有的问题我们都可以用矩阵的逆求解出价值函数。这反映了MDP的可解性,说明价值函数最终是会收敛到一个值的。

Q4: π ( a ∣ s ) \pi(a|s) π(as) P s s ′ a P_{ss'}^{a} Pssa的区别?

字面上理解:前者是选取策略,即在状态S下,取动作a的概率;后者是在状态S下,选取动作a后,状态转移到S‘的概率。状态的转移可以理解为两步走:比如今天出门前是状态0,到达单位是状态1.我从状态0选择开车上班的概率是0.7,坐公交的概率是0.3,这是前者。我选择了 a = 开 车 上 班 a=开车上班 a=,堵车迟到的概率为0.2,及时到单位的概率是0.8,这是后者。也就是经过选择动作,环境选择状态随机转移这两步,才真正完成状态的转移。

Q5: V π ( s ) V_\pi(s) Vπ(s) q π ( s , a ) q_\pi(s,a) qπ(s,a)的关系?

这个问题乍一看很简单,但后来我发现自己回过头来看又绕糊涂了。两者其实是相互影响制约的。状态的转移需要动作的支配(这里什么都不做也可以看作是一种动作,比如玩Atari的乒乓球游戏,如果对方打过来的球刚好冲你现在的拍子位置上打过来,你就不需要做动作,直接反弹过去),而动作的价值取决于下一状态的价值。这里幻灯片的树型图可以很好的解释这一关系。

白色结点看成状态,黑色结点看成动作。可以看到,状态价值函数就是当前状态下,可选动作对应的动作价值函数加权和。这个权重取决于我们的策略,当然最优策略肯定是让q最大的动作概率为1,其它为0.

动作价值函数跟状态价值函数的递推很像。

把这两步合起来,我们可以得到两者的自我递推关系。

比较一下贝尔曼方程的形式,其实都是一个意思。只不过前面把期望的表达给写开了。
E π [ R t + 1 ] + γ E π [ V π ( S t + 1 ) ] = ∑ a ∈ A π ( a ∣ s ) R s a + γ ∑ a ∈ A π ( a ∣ s ) P s s ′ a V π ( S t + 1 ) E_{\pi}[R_{t+1}]+\gamma E_{\pi}[V_{\pi}(S_{t+1})]=\sum_{a\in A}\pi(a|s)R_{s}^{a}+\gamma \sum_{a\in A}\pi(a|s) P_{ss'}^{a}V_{\pi}(S_{t+1}) Eπ[Rt+1]+γEπ[Vπ(St+1)]=aAπ(as)Rsa+γaAπ(as)PssaVπ(St+1)
因为 ∑ a ∈ A π ( a ∣ s ) = 1 \sum_{a\in A}\pi(a|s)=1 aAπ(as)=1,所以等式就自然成立了.

Q6: 不同的策略产生不同的 V π ( s ) V_{\pi}(s) Vπ(s)或者 q ( s , a ) q(s, a) q(s,a),那么选其中最大的一定会是最优策略吗?

书上或者幻灯片上说最大的价值函数对应的策略就是最优策略。

以我薄弱的实践经验,我是没有资格回答这个问题的。但是个人看法是:最大价值函数的策略一定是最符合你所设目标价值的策略,至于对于实际工程是不是符合,得看你建模与实际任务的契合程度。另一点是,在实际大规模的问题中,比如围棋,我们即使使用蒙特卡洛树搜索加深度卷积网络去计算价值函数,也无法真正拟合出完全符合MDP价值的参数,这时候我们的 V ∗ V^{*} V不能完全看作最优解,这也是超参数探索率 ϵ \epsilon ϵ的存在意义。

Q7: 如何理解Bellman方程的矩阵形式?

贝尔曼方程的矩阵形式如下:

这是个线性方程,可以直接根据矩阵逆求解:

矩阵形式只是给出一种直接的求解思路,实际面对大规模问题,根本不可能以这种方式求解,要不然也不会诞生如此多的强化学习理论了。以腾讯天美训练王者荣耀机器人为例,不同英雄在不同位置,使用不同技能都是不一样的状态,把所有这些状态都列出来都是天方夜谭,更不用说求解该矩阵的逆了。状态转移矩阵P会是一个无法想象规模的稀疏矩阵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值