本章是强化学习的基础,主要讲的就是马尔科夫决策过程,以后的内容都是以这一节为基础的,所以对本节的相关概念的理解是很重要的。

这一节的概念比较多,也是后面章节的基础,一开始笔者也是一头雾水,只有多看几遍,多去思考,才能慢慢理解。毕竟概念与定义比较多,想要一下子消化完还是有一些难度的。这篇博客也是笔者看完David Silver的公开课与其它一些参考资料后的理解,希望对大家有所帮助。


为什么在强化学习中会用到马尔科夫决策过程呢?

在强化学习中,agent与environment一直在互动。在每个时刻t,agent会接收到来自环境的状态s,基于这个状态s,agent会做出动作a,然后这个动作作用在环境上,于是agent可以接收到一个奖赏Rt+1Rt+1,并且agent就会到达新的状态。所以,其实agent与environment之间的交互就是产生了一个序列:

S0,A0,R1,S1,A1,R2,...

我们称这个为序列决策过程。而马尔科夫决策过程就是一个典型的序列决策过程的一种公式化。有了马尔科夫的假设,在解决这个序列决策过程才比较方便,而且实用。所以这也是这一节为何要学习马尔科夫决策过程的原因了。


Markov 的定义

首先定义一下什么是Markov:下一个状态的产生只和当前的状态有关,即:

P[St+1|St]=P[St+1|S1,...,St]

这说明state StSt is Markov. 本来直观上讲,下一个状态的产生跟所有历史状态是有关的,也就是等式右边所示。但是Markov的定义则是忽略掉历史信息,只保留了当前状态的信息来预测下一个状态,这就叫Markov。


状态转移概率

对于一个具体的状态s和它的下一个状态s’ ,它们的状态转移概率(就是从s转移到s’的概率)定义为:

Pss′=P[St+1=s′|St=s]

也就是说,下一个状态的产生只受到当前状态的影响。

假如总共有n种状态可以选择。那么状态转移矩阵P定义为:

P=⎡⎣⎢P11...Pn1......P1n...Pnn⎤⎦⎥P=[P11...P1n......Pn1...Pnn]

矩阵中第i行表示,如果当前状态为i,那么它的下一个状态为1, … , n的概率分别为 Pi1,...,Pin。显然,这一行所有概率之和为1.

例如:

上图中,Class1, Class2, Class3, Facebook, Sleep, pub, Pass都是分别代表不同的状态,状态到状态之间有一个转移概率,即上图右边所示。


Markov Process


这个tuple包含了所有的状态,以及各种状态之间转移的概率,这就是马尔科夫过程。马尔科夫过程是一个二元组。

也许你会问:这些转移概率是怎么知道的?
这个问题很好,但是在这里我们先不讨论这个,先假设这个概率我们是知道的就好。以后会说到在现实情况下,很多时候是不知道状态转移概率的,所以有别的方法来做。现在只是要知道有这样的概念。


Markov Reward Process

从Markov Process到Markov Reward Process我们加入了一个R。这个R是一个reward,它表示从一个状态s转移到另一个状态s’时能够获得的奖励的期望,也就是上图的RsRs的公式。也许你会问,为什么不是进入某一个状态时得到奖励而是离开时呢?其实这只是一种规定而已,当然也可以说进入某一个状态时得到奖励,只要规定得好就行。在强化学习之简介博客中已经有说到reward这个东西,可以参考。

如何理解RsRs?

其实就是说,在当前状态s下,你可以获得多少reward。例如下图,红色部分指出在这些不同的状态下,你可以得到多少reward。比如,你在class1这个状态下,当你转移到另一个状态时(在图中要么转移到FB,要么转移到Class2),你就可以得到reward R= -2。也就是说,这个转移给你带来的即时奖赏是-2.

理解GtGt


从状态s出发,经过一系列的状态转移最终达到终点,得到了一条路径,每次状态转移都会有一个R,所以最终G就表示从s开始一直到终点的所有R之和。因为离s越远的地方一般影响较小,所以加了一个折扣因子。
这里GtGt是某个具体的episode所获得的return,当然我们的目标是想找到一个路径使得GtGt的值最大,也就是累积奖赏最大。

在状态stst的情况下,agent转移到了st+1st+1状态,接下来转移到了st+2st+2状态。我们知道,之所以能够转移到st+2st+2状态,stst是对此有贡献的,如果不是stst转移到st+1st+1,也许就不会转移到st+2st+2了。所以这就像stst做了一个决定,后面受到了一定的回报。所以评价当前这个状态stst的好坏,需要后来发生的事来反馈,这就是GtGt。

比如上面那个学生上课的例子,假如当前状态是c1,你做了一个决定将状态转移到了c2,接着转移到c3,然后到了Pass,再转移到sleep。我们知道在pass那里获得了很大的reward(R = 10)。那么你之所以能够得到这个reward(R = 10),有一部分原因是因为当初在c1的时候做了去c2的决定,这才有可能获得这么大的reward。所以就需要反馈给c1说你做的这个决定是不错的,可以得到很大的reward。如果在c1的时候转移到了FB,那就没有大的回报了,所以以后c1就会懂得转移到c2以后获得的回报会更多。

γγ的理解

我们可以这样形象理解,后来经历的状态是受到当前状态s的影响,但是这个影响是逐渐减弱的。就好像你的一个决定会对接下来马上要发生的事有很大的影响,但随着时间的流逝,这个决定对后面的事的影响就越来越小了。所以需要一个折扣因子来表达衰减。


Value Function(价值函数)

从公式上看,值函数表示在状态s下,GtGt的期望。为什么有GtGt的期望呢?其实就像上面说的,从c1出发到c2是一种可能,会得到一个GG,从c1到FB也是一种可能也能得到一个GG,还有其他的各种可能,也就是从c1开始有很多条路径可以最终到达Sleep(即结束的标志),每条路径都有一个GG,这里值函数就是这些GG的期望。下面举例说明:
还是上面这个例子,将其转换成表格的形式:

假设我们得到了下面4个马尔科夫链(也就是4条到达终点的路径),假设γ=0.5γ=0.5,出发点都是在c1这个状态,我们就可以分别求出每一条马尔科夫链的GG值:

当然,如果要算出期望的话,我们需要把所有的可能的路径都列举出来进行计算。但是穷举所有的路径在这个例子可能可以,但是对于复杂的问题,穷举基本上是不可能的,所以后面会说到值函数的估计,因为很难把路径都遍历了。

Bellman Equation


上面的推导是用价值函数的定义公式来推导的,从这个推导过程我们发现这其实是一个递归的过程。而从最后的推导结果来看,一个状态s的价值V(s)V(s)由两部分组成,一部分是Rt+1Rt+1,它代表即时奖励的期望,而根据即时奖励的定义,它与下一个状态无关。另一个是下一时刻的状态st+1st+1的价值期望。


Markov Decision Process

马尔科夫决策过程是一个五元组,它是在前面马尔科夫奖励过程的基础上添加了动作集(A)改进来的。在强化学习的简介中我们也知道,agent与环境是通过执行动作来进行交互的。因此,我们需要添加动作集进来,这样从一个状态转移到另一个状态就是因为执行了动作才会产生的。

Policies

policy ππ表示的是在给定的state下,一个关于action的概率分布。就是说,ππ表示在一个状态s下,agent接下来可能会采取的任意一个action的概率分布。只是这里我们可能一开始不知道概率是多少。例如,在状态s下,agent接下来要么向右走,要么向左走(有且只有两种情况),可能agent有0.9的概率往右走,0.1的概率往左走。π(a|s)π(a|s)表示的就是这种概率。而如果只是ππ的话,就表示所有的状态的概率形成的整个策略。因为对于每一个状态s都会有这样一个π(a|s)π(a|s),所有状态的π(a|s)π(a|s)就形成整体策略ππ。比如,我们可以说我们的策略就是在每个状态下都随机选取一个动作,这也是一种策略。我们也可以说我们的策略就是在每个状态下一直选某一个动作。总之,策略ππ是指所有状态都要使用这个策略,不是单独指某一个状态。

无论怎样,我们的目标是最大化累积奖赏,所以我们可以通过不断地改进我们的策略,使得我们最后能够获得最大累积奖赏。

理解Pπs,s′Ps,s′π

Pπs,s′Ps,s′π其实是一个联合概率,表示在执行策略ππ的情况下,状态从s转移到s’的概率。
例如我们种一棵树,在种的过程中有以下四个状态(状态空间S):缺水(s1),健康(s2),溢水(s3),死亡(s4)。我们的动作(动作空间A)有:浇水(a1),不浇水(a2)。

现在假如这棵树处于缺水状态,所以π(a1|s1)π(a1|s1)表示在缺水状态下,我有多大的概率采取浇水这个动作。在这里要注意的是,采取动作了并不表示状态就会改变,不浇水的话,树的状态可能是继续缺水,也可能是死亡。浇水的话,树的状态可能会继续缺水,也可能会变健康。也就是状态的转移也有一定的概率,也就是状态转移概率Pss′Pss′,所以π(a1|s1)Pa1s1s2π(a1|s1)Ps1s2a1表示浇水的概率与浇水之后树能从缺水状态变到健康的概率的乘积。

基于策略ππ的价值函数

前面有了值函数的定义,值函数就是用来计算期望的累积奖赏。

上图这个值函数表示从状态s出发,使用策略ππ所带来的累积奖赏。这个策略是指在一个状态下,执行所有可能行动的概率,是一个概率分布。每个不同的状态的概率分布可以不一样,因为在不同的状态下,执行不同动作的概率不一样。


qπ(s,a)qπ(s,a)表示从状态s出发,已经采取了动作a之后,再使用策略ππ所带来的累积奖赏。被称为状态动作值函数。也许有人会说,这里都已经采取了动作a了,怎么还说再使用策略ππ呢?要注意这里的策略ππ并不是只针对当前状态s的,它是一个整体的策略,对于每个状态都有这样的策略。所以这里ππ是针对当前状态s下采取动作a之后的下一个状态以及以后的状态。

v 和q之间的关系

上图白色点表示状态,黑色点表示动作,比如在这个s状态下,agent可能执行左边的动作(假设概率0.4),也可能执行右边的动作(假设概率0.6),那么vπ(s)vπ(s)想表达的就是一种期望reward。而这个0.4和0.6其实就是由策略ππ决定的。
而qπ(s,a)qπ(s,a)表示的是执行一个具体的动作后的reward值。所以显然,vπ(s)vπ(s)与qπ(s,a)qπ(s,a)的关系就是:

vπ(s)=0.4∗qπ(s,a1)+0.6∗qπ(s,a2)vπ(s)=0.4∗qπ(s,a1)+0.6∗qπ(s,a2)

比如种树那个例子,假如现在的状态是缺水,那么我的动作有两个,要么浇水,要么不浇水。在还没有执行动作(即浇水或者不浇水)之前的值函数就是v。如果我已经浇水了,那么就是q。采取不浇水的动作后,也是另一个q。所以v就是所有可能动作的q的总和。因为执行不同动作的概率不一样,所以就是每个动作的概率乘以它们对应的q的总和。上图中的实心黑点代表的是动作。所以上图是说在状态s下,接下来可以有两个动作可以选择。至于如何选择,就是策略ππ说了算。

这个图承接了上一个图,因为执行了动作a后,状态就可能会发生改变,这里有可能变成左边的状态(白色圆圈),有可能变到右边的状态(白色圆圈)。而改变状态就会产生一个r的即时奖励,然后到达s’状态,这样又回到了vπ(s′)vπ(s′),显然这是一个递归的过程。

这个图说的是q与v 的关系。在上一个图中,执行动作a就会得到当前rewardRasRsa。等式右边说的是执行动作a之后,有可能去到哪个状态。去到不同状态的奖赏就不一样,所以期望的奖赏就是它们对应的概率乘以下一个状态的vπ(s′)vπ(s′),然后所有可能的情况加起来就是期望的奖赏了。

所以上面两个图结合起来就是:

上图是对于v来说的。对于q,可以看下图:


Optimal Value Function(最优价值函数)

强化学习是通过奖励或惩罚来学习怎样选择能产生最大积累奖励的行动的算法。为了找到最好的行动,非常有效的方式是,找到那些奖励最大的状态就好了,即在我们目前的环境(environment)中首先找到最有价值的状态states。例如,在赛车跑道上最有价值的是终点线(这里好像就是你冲刺要达到deadline的前一步,这个状态肯定最有价值),这也是奖励最多的状态,因此在跑道之上的状态也比在跑道之外的状态更有价值。(其实这里面就是递归的思想,当你找到了最有价值的状态,你只需要想办法得到这个状态就好了)


最优状态价值函数v∗(s)v∗(s)指的是在所有的策略产生的状态价值函数中最大的那个函数。同样的,最优状态动作值函数q∗(s,a)q∗(s,a)指的是再所有的策略中产生的状态动作价值函数中最大的那个函数。因为我们的目标就是要找到一个使得reward最大化的路径,所以也就是相当于每一步都要找到最大的。

Optimal Policy

如何寻找最优策略呢?
如果在一个状态s下,agent可以向左走或者向右走,现在知道往右走可以得到17单位的reward,也就是知道了q(s,a=rightmove)q(s,a=rightmove),然后我又知道往左走可以得到80单位的reward,也就是q(s,a=leftmove)q(s,a=leftmove)。那么不用想了,肯定是向左走的策略好呀。所以,下图的公式表示的就是,在q已经得到最大化时,我们在状态s下,要选择哪一个策略(动作)才能去到q∗q∗那里。所以表示成下图:

Bellman Optimality Equation (bellman最优方程)

从上文我们定义了vπ(s)=∑a∈Aπ(a|s)q(s,a)vπ(s)=∑a∈Aπ(a|s)q(s,a)。而根据上图的最优策略的计算式子合起来我们就可以知道最优的值函数为:

v∗(s)=maxa q∗(s,a)v∗(s)=maxa q∗(s,a)

这个方程是说最优状态值函数就从所有最优状态动作值函数中选择最大的那个。但是我们怎么得到最优状态动作值函数呢?

最优状态动作值函数

从上面的方程我们可以知道,最优状态动作值函数q∗(s,a)q∗(s,a)由两部分组成,一部分是即时奖励,另一部分是所有能够到达状态s’的最优状态值函数按状态转移概率求和。

上面说到的v∗(s)v∗(s)与q∗(s,a)q∗(s,a)的式子组合起来有:

v∗(s)=maxa [Ras+γ∑s′∈APass′v∗(s′)]v∗(s)=maxa [Rsa+γ∑s′∈APss′av∗(s′)]

q∗(s,a)=Ras+γ∑s′∈APass′maxa′ q∗(s′,a′)q∗(s,a)=Rsa+γ∑s′∈APss′amaxa′ q∗(s′,a′)

这就是我们最终想要求的v∗(s)v∗(s)与q∗(s,a)q∗(s,a)。从上面两个式子我们可以知道,想要知道v∗(s)v∗(s),我们需要先知道v∗(s′)v∗(s′)。想要知道q∗(s,a)q∗(s,a),我们需要先知道q∗(s′,a′)q∗(s′,a′),这是一个递归的过程。我们现在只是知道这个形式,但是具体在代码中要怎么实现就得用迭代的方法了。比如value iteration, Policy iteration, Q-learning,Sarsa等等。后面的章节会讲到。后面章节举的例子一般是状态转移概率为1.像格子世界,一旦选择了动作,我们就知道一定会转移到哪一个状态。

参考资料:
David Silver强化学习公开课

《机器学习》周志华 清华大学出版社

《强化学习》第二讲 马尔科夫决策过程 - 知乎

【机器学习】强化学习:马尔科夫决策过程(Markov decision process)相关推荐

  1. 强化学习——马尔科夫决策过程 MDP

    马尔可夫决策过程是强化学习里面的一个基本框架. 马尔可夫过程.马尔可夫反馈过程是马尔可夫决策过程的基础,所以本博客将会一并介绍. 文章目录 1. 马尔科夫过程 Markov Process,MP 1. ...

  2. 深度强化学习-马尔科夫决策过程和表格型方法

    深度强化学习-马尔科夫决策过程和表格型方法-笔记(二)_wield_jjz的博客-CSDN博客 深度强化学习2--马尔科夫决策过程(MDP)_谢宜廷的博客-CSDN博客 (零基础可以看懂)强化学习中的 ...

  3. 强化学习 马尔科夫决策过程(MDP)

    1. 强化学习引入MDP的原因 强化学习的环境的状态转化模型,它可以表示为一个概率模型,即在状态下采取动作a,转到下一个状态s′的概率,表示为 如果按照真实的环境转化过程看,转化到下一个状态s′的概率 ...

  4. 强化学习(二)马尔科夫决策过程(MDP)

    在强化学习(一)模型基础中,我们讲到了强化学习模型的8个基本要素.但是仅凭这些要素还是无法使用强化学习来帮助我们解决问题的, 在讲到模型训练前,模型的简化也很重要,这一篇主要就是讲如何利用马尔科夫决策 ...

  5. 【强化学习入门】马尔科夫决策过程

    本文介绍了马尔可夫决策过程,首先给出了马尔可夫决策过程的定义形式 ,其核心是在时序上的各种状态下如何选择最优决策得到最大回报的决策序列,通过贝尔曼方程得到累积回报函数:然后介绍两种基本的求解最优决策的 ...

  6. 【强化学习】MOVE37-Introduction(导论)/马尔科夫链/马尔科夫决策过程

    写在前面的话:从今日起,我会边跟着硅谷大牛Siraj的MOVE 37系列课程学习Reinforcement Learning(强化学习算法),边更新这个系列.课程包含视频和文字,课堂笔记会按视频为单位 ...

  7. 强化学习(一)---马尔科夫决策过程

    目录 先大致了解工智能,机器学习,深度学习之间的联系与区别 主学习网址 莫烦python网址 [David Silver强化学习公开课中文讲解及实践](https://zhuanlan.zhihu.c ...

  8. 强化学习:2 马尔科夫决策过程

    总结 无数的学者通过几十年的努力,提出了一套可以解决大部分强化学习问题的框架,这个框架就是马尔科夫决策过程. 马尔科夫性 ----> 马尔科夫过程 -> 马尔科夫决策过程 马尔科夫性描述的 ...

  9. 漫谈机器学习经典算法—增强学习与马尔科夫决策过程

    公式及图片正常显示的精美排版版请移步http://lanbing510.info/2015/11/17/Master-Reinforcement-Learning-MDP.html 写在前面 现有的机 ...

最新文章

  1. vim block vim_如何不再害怕Vim
  2. 使用 IDEA 解决 Java8 的数据流问题,用过的都说好!!!
  3. vue-cli3 中跨域解决方案
  4. 周三直播丨Oracle 12cR2 ADG LGWR Library Cache案例分享
  5. php如何上传文件,PHP上传文件
  6. 服务器安装时找不到驱动器,单位有台曙光的A840r-G服务器 由于之前做过RAID 所以在装系统时提前找不到硬盘驱动器...
  7. 10692 XYM-入门之道
  8. spark编程基础python版 pdf_《Spark编程基础(Scala版)》.PDF
  9. Python调用百度API实现语音识别
  10. 元组创建、删除、最大值、最小值、求长度、计数
  11. springboot2 集成支付宝支付
  12. springboot配置两个parent的方法
  13. [Power Query] 标题提升
  14. ARM linux系统调用的实现原理
  15. 教会你怎么安装和使用 Visio 哦 ~ ~
  16. matlab 加等深线
  17. 2、手写实现开放平台
  18. 《大众摄影》四十年经典作品精选
  19. 21年更新版抓取小姐姐短视频教程!最关键的是无水印下载哦。这还学不会?
  20. android one 壁纸,壁纸喵-看到就想哇哦一声的壁纸

热门文章

  1. MegLab | 永远有一份春日浪漫等待多时,为你而来
  2. 一文详解编辑距离(Levenshtein Distance)
  3. perl 数组引用_Perl中数组引用的魔力
  4. 视觉暂留:余晖效应/视觉暂留
  5. 对教培机构来说,搭建教育培训平台有哪些好处?
  6. 大数据(3h)HIVE引擎更换
  7. mssql 数据库恢复
  8. 微博引流的方法,微博引流脚本使用策略
  9. coolshell 谜题通关
  10. 获取Chronometer 计时器的总秒数