强化学习(二):马尔科夫决策过程(Markov decision process)

版权声明:本文为博主原创文章,未经许可,请勿转载 https://blog.csdn.net/liweibin1994/article/details/79079884

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

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


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

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

S 0 , A 0 , R 1 , S 1 , A 1 , R 2 , . . .

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


Markov 的定义

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

P [ S t + 1 | S t ] = P [ S t + 1 | S 1 , . . . , S t ]

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


状态转移概率

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

P s s = P [ S t + 1 = s | S t = s ]

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

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

P = [ P 11 . . . P 1 n . . . . . . P n 1 . . . P n n ]

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

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


Markov Process

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

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


Markov Reward Process

这里写图片描述

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

如何理解 R s ?

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

理解 G t


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

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

比如上面那个学生上课的例子,假如当前状态是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下, G t 的期望。为什么有 G t 的期望呢?其实就像上面说的,从c1出发到c2是一种可能,会得到一个 G ,从c1到FB也是一种可能也能得到一个 G ,还有其他的各种可能,也就是从c1开始有很多条路径可以最终到达Sleep(即结束的标志),每条路径都有一个 G ,这里值函数就是这些 G 的期望。下面举例说明:
还是上面这个例子,将其转换成表格的形式:
这里写图片描述

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

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

Bellman Equation

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


Markov Decision Process

这里写图片描述

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

Policies

这里写图片描述

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

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

理解 P s , s π

这里写图片描述

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

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

基于策略 π 的价值函数

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

这里写图片描述

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

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

v 和q之间的关系

这里写图片描述

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

v π ( s ) = 0.4 q π ( s , a 1 ) + 0.6 q π ( s , a 2 )

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

这里写图片描述

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

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

所以上面两个图结合起来就是:
这里写图片描述

上图是对于v来说的。对于q,可以看下图:
这里写图片描述


Optimal Value Function(最优价值函数)

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

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

Optimal Policy

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

Bellman Optimality Equation (bellman最优方程)

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

v ( s ) = m a x a   q ( s , a )

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

最优状态动作值函数

这里写图片描述

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

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

v ( s ) = m a x a   [ R s a + γ s A P s s a v ( s ) ]

q ( s , a ) = R s a + γ s A P s s a m a x a   q ( s , a )

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

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

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

https://zhuanlan.zhihu.com/p/28084942

猜你喜欢

转载自blog.csdn.net/liweibin1994/article/details/79079884