强化学习系列学习笔记,结合《UCL强化学习公开课》、《白话强化学习与PyTorch》、网络内容,如有错误请指正,一起学习!

强化学习基本介绍

强化学习的中心思想是让智能体在环境中自我学习和迭代优化。

强化学习流程

强化学习的过程是一个反馈控制系统,其大概的一个流程图如下所示:

结合这张图,我们进行相关的概念解释和流程说明。首先图中涉及了几个概念,我们依次来看下是什么意思。

  • Agent:或者称为“Brain”、大脑、智能体,是机器人的智能主体部分,也即我们要操控的对象
  • Environment:指机器人所处的环境,客观存在的状态
  • State:当前时刻下Agent所处的状态
  • Reward:Agent在执行某个动作后获得的奖励
  • Action:要执行的动作,Agent在结合当前所处的状态(State)和上一次执行动作(Action)之后获得的奖励(Reward)要在当前时刻下执行的动作

接着我们再去理解这个图,所表达的意思是:在当前状态(State,StS_tSt​)下,智能体(Agent)做了动作(Action,AtA_tAt​)之后获得了奖励(Reward,RtR_tRt​),其串行的流程为上图的下边部分。

强化学习与监督学习

机器学习从其学习方式上大体可以分为三类:

  • 监督学习(supervised learning)
  • 无监督学习(unsupervised learning)
  • 强化学习(reinforcement learning)

监督学习是从有标签的数据集中进行模式和特征的学习,从而对新的样本进行预测,比如常见的分类、回归问题,还有推荐系统中的CTR预估。这种场景下label都是固定的,我们需要研究出一种固定的映射关系y=f(x∣θ)y = f(x|\theta)y=f(x∣θ),以便于在新样本上发挥作用。

无监督学习则是对无标签的数据进行学习,比如常见的聚类就是典型的无监督学习算法。对比有监督学习,我们只知道样本即xxx,并不知道 也不需要知道yyy。

强化学习相较于监督学习和无监督学习,区别在于其是以不同建模方式或思考角度来解决问题,是一种方法论,其拥有了一套比较完整的处理数据、建模、训练、调优的套路。但是通过对强化学习流程的了解,你会发现强化学习和监督学习的思路有点类似,但是其标签(即yyy)是有时间上的延迟的,即先产生动作,再得到反馈。

强化学习的应用

对于强化学习大家印象最深的莫过于2016年AlphaGo击败 九段的围棋选手李在石,但其实强化学习也应用于社会中的各个场景,比如:

  • 自动机器学习AutoML
  • 决策服务(Decision Service)
  • 推荐系统、广告系统
  • 智能交通
  • 机器人
  • 计算机视觉
  • 计算机系统
  • 教育
  • 金融
  • 游戏
  • 自动驾驶
  • … …

在每年的各类计算机大会上发表的论文中,其实都可以看到强化学习的身影,由于笔者是专注于推荐系统的,所以主要关注的是:强化学习与推荐系统。

后续会在《结合论文看Youtube推荐系统中召回和排序的演进之路(下)篇》中介绍Youtube推荐系统与强化学习的结合应用,欢迎关注,目前已经更新(上)篇。

另外从事推荐系统相关工作的朋友,应该知道「多臂老虎机」,即Bandit类算法,其本质上也是一种自我博弈和反馈决策的过程,算是强化学习中比较好理解的算法和内容了,感兴趣的朋友可以看下面的2篇关于多臂老虎机的文章:

  • EE和冷启动中的多臂老虎机问题
  • LinUCB论文的思想解读、场景应用与痛点说明

马尔科夫决策过程

在前边的内容中提到了强化学习的决策过程,依赖于当前的状态的环境,但是实际的场景是非常复杂的,难以进行建模,因此对其进行了简化,即假设状态的转化是马尔科夫性,即转化到到下一个时刻的状态st+1s_{t+1}st+1​ 仅仅和上一个状态sts_tst​有关,与之前的状态无关。

因此我们先来了解一下马尔科夫的相关知识,再去了解马尔科夫决策过程(Markov Decision Process,MDP)。

马尔科夫链

什么是马尔科夫链呢?一个比较正式的定义为:设xtx_txt​表示随机变量XXX在离散时间ttt时刻的取值,若该变量随时间变化的转移概率仅依赖于它的当前值,即:
P(Xt+1=sj+1∣X0=s0,X1=s1,...,Xt=sj)=P(Xt+1=sj+1∣Xt=st)P(X_{t+1} = s_{j+1} | X_0=s_0, X_1 = s_1, ..., X_t = s_j) = P(X_{t+1} = s_{j+1} | X_t = s_t) P(Xt+1​=sj+1​∣X0​=s0​,X1​=s1​,...,Xt​=sj​)=P(Xt+1​=sj+1​∣Xt​=st​)
也就是状态转移概率仅依赖于前一个状态,称这个变量为马尔科夫变量,其中s0,s1,...,sjs_0, s_1, ..., s_js0​,s1​,...,sj​为随机遍历XXX的可能状态,这个性质称为马尔科夫性质,具有马尔科夫性质的随机过程称为马尔科夫过程

马尔科夫链则是满足马尔科夫性质的随机过程,在一段时间内随机变量XXX的取值序列(X0,X1,...,XnX_0, X_1, ..., X_nX0​,X1​,...,Xn​)满足上述性质。

比如:一只青蛙呆在井底(q=1q=1q=1),一层一层的向上跳,到达第iii层之后,它能跳上去的概率和跳不上去的概率(直接回到底层的概率)为:
{qi,i+1=aiqi,1=1−ai\left\{\begin{matrix} q_{i,i+1} = a_i \\ q_{i,1} = 1-a_i \end{matrix}\right. {qi,i+1​=ai​qi,1​=1−ai​​
也就是说,每一次这只青蛙站在比如第5层,下一次尝试能跳到第6层的概率都是一样的,跟这只青蛙历史上掉回底层多少次之类都是没有关系的,这就是一个马尔科夫过程。

马尔科夫过程是一个无记忆的随机过程,例如满足马尔科夫性质的状态一系列序列为:S1,S2,S3,...S_1, S_2, S_3, ...S1​,S2​,S3​,...

马尔科夫过程(Markov Process)的定义为:一个马尔科夫过程或者马尔科夫链由一个二元组构成:(S,P)(S,P)(S,P)

  • SSS为有限的状态空间集,sis_isi​表示时间步iii的状态,其中S={s1,s2,...,sn}S=\{ s_1, s_2, ..., s_n \}S={s1​,s2​,...,sn​}
  • PPP为状态转移矩阵,Ps′=P[Ss+1=s′∣St=s]P_{s'} = P[S_{s+1} = s' | S_t = s]Ps′​=P[Ss+1​=s′∣St​=s]

又比如把一个人的上课学习过程当作是一个简单的马尔科夫过程(例子来源:https://www.jianshu.com/p/fb33231ac3a8 ),如下图所示:

这个任务中有7个状态(Facebook,Class1,Class2,Class3,Pass,Pub,Sleep)(Facebook, Class 1, Class 2, Class 3, Pass, Pub, Sleep)(Facebook,Class1,Class2,Class3,Pass,Pub,Sleep)。在每个状态对应着响应的转移概率,比如在Class1Class1Class1状态下,有0.5概率继续转移到Class2Class2Class2以及0.5的概率转移到FacebookFacebookFacebook,这里可以注意到每个状态转移概率之和为1。

在这里我们如果对这个马尔科夫过程,从Class1Class1Class1状态开始采样,将会得到很多幕(episode)的采样数据。其中每一幕序列可能为:

  • Class1,Class2,Class3,Pass,SleepClass 1, Class 2, Class 3, Pass, SleepClass1,Class2,Class3,Pass,Sleep
  • Class1,Facebook,Facebook,Class1,Class2,SleepClass 1, Facebook, Facebook, Class 1, Class 2, SleepClass1,Facebook,Facebook,Class1,Class2,Sleep
  • Class1,Class2,Class3,Pub,Class2,Class3,Pass,SleepClass 1, Class 2, Class 3, Pub, Class 2, Class 3, Pass, SleepClass1,Class2,Class3,Pub,Class2,Class3,Pass,Sleep

这里的每一幕数据都会有个终点状态(这里为Sleeep)

转移概率矩阵

转移概率矩阵,是事物体在不同状态下的转换的概率,比如上边提到的青蛙跳台阶的例子中,其对应的转移概率矩阵为:
[0ai1−ai0]\begin{bmatrix} 0 & a_i \\ 1-a_i & 0 \end{bmatrix} [01−ai​​ai​0​]
其中0表示的是不会停留在本层。

我们再看另外一个例子,来说明一下状态更加多的情况下的事物体的状态转移(以下例子来自于:https://zhuanlan.zhihu.com/p/26453269 )

某村有一个智商为0的王二狗,人傻不拉几的,见人就傻笑,每天中午12点的标配,仨状态:吃,玩,睡。这就是传说中的状态分布

你想知道他nnn天后中午12点的状态么?是在吃,还是在玩,还是在睡?这些状态发生的概率分别都是多少?

先看个假设,他每个状态的转移都是有概率的,比如今天玩,明天睡的概率是几,今天玩,明天也玩的概率是几几,看图更清楚一点。

这个矩阵就是转移概率矩阵PPP,并且它是保持不变的,就是说第一天到第二天的转移概率矩阵跟第二天到第三天的转移概率矩阵是一样的。(这个叫时齐,不细说了,有兴趣的同学自行百度)。

有了这个矩阵,再加上已知的第一天的状态分布,就可以计算出第NNN天的状态分布了。

S1S1S1 是4月1号中午12点的的状态分布矩阵 [0.6, 0.2, 0.2],里面的数字分别代表吃的概率,玩的概率,睡的概率。

那么

4月2号的状态分布矩阵 S2=S1∗PS2 = S1 * PS2=S1∗P (俩矩阵相乘)。

4月3号的状态分布矩阵 S3=S2∗PS3 = S2 * PS3=S2∗P (看见没,跟S1S1S1无关,只跟S2S2S2有关)。

4月4号的状态分布矩阵 S4=S3∗PS4 = S3 * PS4=S3∗P (看见没,跟S1S1S1,S2S2S2无关,只跟S3S3S3有关)。

4月nnn号的状态分布矩阵 Sn=Sn−1∗PSn = S_{n-1} * PSn=Sn−1​∗P (看见没,只跟它前面一个状态Sn−1S_{n-1}Sn−1​有关)。

转移概率矩阵在Google著名的网页排名算法 PageRank 算法中也有体现,感兴趣的可以参考:https://thinkgamer.blog.csdn.net/article/details/47443877

马尔科夫奖励过程

上面介绍到了马尔科夫过程,这部分内容来学习一下马尔科夫奖励过程(Markov Reward Process)

定义

原来的马尔科夫过程加上奖励值之后就变成了马尔科夫奖励过程,元素由$ <S, P> 变为变为变为 <S,P,R,\gamma> ,其中,其中,其中R就是奖励,就是奖励,就是奖励,\gamma$是折扣因子

马尔科夫奖励过程(Markov Reward Process)定义:一个马尔科夫奖励过程由一个四元组构成:$ <S,P,R,\gamma> $,其中:

  • SSS为有限的状态空间集,sis_isi​表示时间步iii的状态,其中S={s1,s2,...,sn}S=\{ s_1, s_2, ..., s_n \}S={s1​,s2​,...,sn​}
  • PPP为状态转移矩阵,Pss′=P[Ss+1=s′∣St=s]P_{ss'} = P[S_{s+1} = s' | S_t = s]Pss′​=P[Ss+1​=s′∣St​=s]
  • RRR为奖励函数,Rs=E[Rt+1∣St=s]R_s = E[R_{t+1} | S_t = s]Rs​=E[Rt+1​∣St​=s]
  • γ\gammaγ 为折扣因子,γ∈[0,1]\gamma \in [0,1]γ∈[0,1]

可以将「马尔科夫链」中的例子变成如下的马尔科夫奖励过程:

红色标注的值就是奖励,注意的是,这里的奖励是即时奖励,也就是脱离状态时立刻得到的奖励,这里没有考虑下个状态可能转移到哪里。

累积奖励(Return)与折扣因子γ\gammaγ

为了找到长期的累积奖励,不仅要考虑当前时间步ttt的奖励,还需要考虑到未来的奖励,总奖励(Total Reward) RRR的计算公式如下:
R=r1+r2+...+rnR = r_1 + r_2 + ... + r_n R=r1​+r2​+...+rn​
根据总奖励RRR的计算公式可知,长期累积奖励从当前时间步ttt开始,直到最终状态的奖励rnr_nrn​,得到未来累积奖励(Future Cumulative Reward) RtR_tRt​。
R=rt+1+rt+2+...+rnR = r_{t+1} + r_{t+2} + ... + r_{n} R=rt+1​+rt+2​+...+rn​

一般而言,环境是随机的或者未知的,这意味着下一个状态可能也是随机的。即由于所处的环境是随机的,所以无法确定下一次执行相同的动作,以及是否能够获得相同的奖励。向未来探索得越多,可能产生的分歧(不确定性)就越多。因此,在实际任务中,通常用折扣未来累积奖励(Discounted Future Cumulative Reward)GtG_tGt​ 来代替未来累积奖励。

Gt=Rt+1+γRt+2+...+γkRnG_t = R_{t+1} + \gamma R_{t+2} + ... + \gamma ^k R_n Gt​=Rt+1​+γRt+2​+...+γkRn​

如果考虑到无限时间的场景,更加通用的表示为(当前获得的奖励表示为Rt+1R_{t+1}Rt+1​):
Gt=∑t=0∞γkRt+k+1G_t = \sum_{t=0}^{\infty} \gamma ^ k R_{t+k+1} Gt​=t=0∑∞​γkRt+k+1​
其中γ\gammaγ为折扣因子(Discount Factor),是介于[0,1][0,1][0,1]的常数,对于距离当前时间步越远的奖励,其重要性就越低。假设折扣因子γ=0\gamma = 0γ=0,可以认为该策略“目光短浅”,只考虑当前的及时奖励rt+1r_{t+1}rt+1​(注释:因为当γ=0,k=0\gamma =0,k = 0γ=0,k=0时,00=10^0=100=1,所以只关注眼前的收益。)。倘若想平衡当前时间的奖励与未来的奖励,可设置γ\gammaγ为一个较大的值,比如γ=0.9\gamma = 0.9γ=0.9。如果环境是恒定的,或者说环境的所有状态是已知的(Model-based),那么未来累积奖励可以提前获得并不需要进行折扣计算,这时候可以简单的将折扣因子γ\gammaγ设置为1,看起来就像非常“有远见”。

大多数的马尔科夫奖励过程(MRP)与马尔科夫决策过程(MDP)都会使用折扣因子γ\gammaγ。主要基于如下几点考虑:

  • 数学上计算的便利性
  • 避免未来进入循环马尔科夫过程带来的无限大回报
  • 未来的不可靠性
  • 类比经济学中,眼前的利益比未来的利益更加有意义
  • 人类的行为也更加倾向于眼前利益
  • 退一步来说,令γ\gammaγ为1,也可以简单的转化成没有折扣因子的状态

价值函数

价值函数是状态sss的长期价值表示,它是上面说的回报的期望。
v(s)=E[Gt∣St=s]v(s) = E[G_t | S_t = s] v(s)=E[Gt​∣St​=s]
在概率论和统计学中,数学期望是试验中每次可能的结果的概率乘以结果值的总和。这里回报的期望,即价值函数会随着折扣因子的变化而取不同的值,因为回报会因为 γ\gammaγ的值而改变,期望自然也就会改变。

下面三张图分别为γ=0,γ=0.9,γ=1\gamma=0, \gamma=0.9, \gamma=1γ=0,γ=0.9,γ=1时的奖励过程:

其红色的状态价值的计算方式为:遍历得到以某个状态开始的所有可能的采样数据,分别计算某个采样数据下的最终返回的期望值,进行累加可得到起始状态的最终状态值。

在UCL的讲义上给了一个例子,如下图所示:

我们可以看下当γ=0\gamma=0γ=0时的状态值,γ=0\gamma=0γ=0,则G1=R2G_1 = R_2G1​=R2​,所有某状态的价值为离开该状态获得的奖励RRR的值。

当γ=1\gamma = 1γ=1时,通过价值函数的公式我们可以知道,要想求解一个状态的状态价值, 需要根据马尔科夫链把所有的可能列出来。每个可能都在终点终止,但是上面这个马尔科夫过程其实是有环的, 可能陷入无限循环的局面。因为折扣因子还是1,所以会导致回报GGG无限大,期望也就无限大,状态价值VVV也就无限大。下面引入贝尔曼方程就是为了更好的求解价值函数的。

马尔科夫奖励过程的贝尔曼方程

贝尔曼方程(Bellman Equation)可以用来方便的表示和计算马尔科夫奖励过程,价值函数可以分为两个部分:

  • 即时奖励Rt+1R_{t+1}Rt+1​
  • 下一状态的折扣状态价值γv(St+1)\gamma v(S_{t+1})γv(St+1​)

马尔科夫奖励过程的贝尔曼方程可以进行如下简单的推导:
v(s)=E[Gt∣St=s]=E[Rt+1+γRt+2+γ2Rt+3+...∣St=s]=E[Rt+1+γ(Rt+2+γRt+3+...)∣St=s]=E[Rt+1+γGt+1∣St=s]=E[Rt+1+γv(St+1)∣St=s]\begin{aligned} v(s) & =\mathbb E[G_t|S_t=s]{} \\\\ &=\mathbb E[R_{t+1}+\gamma R_{t+2} + \gamma ^2R_{t+3}+ ...|S_t=s] \\\\ &=\mathbb E[R_{t+1}+\gamma (R_{t+2} + \gamma R_{t+3}+ ...)|S_t=s] \\\\ &=\mathbb E[R_{t+1}+\gamma G_{t+1}|S_t=s] \\\\ &=\mathbb E[R_{t+1}+\gamma v(S_{t+1})|S_t=s] \\\\ \end{aligned} v(s)​=E[Gt​∣St​=s]=E[Rt+1​+γRt+2​+γ2Rt+3​+...∣St​=s]=E[Rt+1​+γ(Rt+2​+γRt+3​+...)∣St​=s]=E[Rt+1​+γGt+1​∣St​=s]=E[Rt+1​+γv(St+1​)∣St​=s]​

贝尔曼方程的推导过程中只是简单的使用了累积回报GtG_tGt​,以及状态价值函数v(s)v(s)v(s)的基本定义。最后即可得出当前状态价值函数v(s)v(s)v(s)的值为,在当前状态sss下,即时奖励Rt+1R_{t+1}Rt+1​与下一状态的折扣状态价γv(St+1)\gamma v(S_{t+1})γv(St+1​)值的期望之和。

其核心即阻碍与表示当前状态价值函数v(s)v(s)v(s)与下一刻状态价值函数v(st+1)v(s_{t+1})v(st+1​)之间的递归关系。

我们可以回溯树的方式更好的理解贝尔曼方程的计算。因回溯图中的关系是回溯运算的基础,也是强化学习的核心内容。通俗的讲,回溯操作就是讲后续状态的价值信息回传给当前时刻的状态。

其中空心圆表示一个状态,以状态sss作为根节点,智能体依据状态转移概率,可能会到达两个后续状态s′s's′,以及在离开状态sss时获得的奖励。贝尔曼方程对所有可能性采用其出现概率进行了加权平均。这也就说明了起始状态的价值一定等于后续状态的(折扣)期望值加上对应收益的期望值。
$$
\begin{aligned} v(s)= \mathbb E[R_{t+1} + \gamma v(S_{t+1})|S_t=s] \end{aligned}

\begin{aligned} v(s)= \mathbb R_s+ \gamma \sum_{s’ \in S} \mathbb P_{ss’}v(s’) \end{aligned}
$$

这里通过之前的实例可以进行直观的验证。这里主要观测图中Class3状态下的状态值函数4.3的计算过程。

Class3状态下的即时奖励为R=−2R=-2R=−2,并有两个后续状态(0.6的概率转移到pass状态,0.4的概率转移到pub状态),同时设定了折扣系数γ\gammaγ为1。所以可以计算得出:
v(Class3)=即时奖励R+P转移到pass∗v(pass)+P转移到pub∗v(pub)=−2+0.6∗10+0.4∗0.8=4.32≈4.3\begin{aligned} v(Class3) &=即时奖励R +P_{转移到pass}*v(pass) +P_{转移到pub}*v(pub) \\\\ &= -2 + 0.6 * 10+0.4* 0.8 \\\\&=4.32 \\\\& \approx 4.3 \end{aligned} v(Class3)​=即时奖励R+P转移到pass​∗v(pass)+P转移到pub​∗v(pub)=−2+0.6∗10+0.4∗0.8=4.32≈4.3​

贝尔曼方程的矩阵形式

贝尔曼方程 也可以简单的表示为矩阵的形式:
v=R+γPvv = R + \gamma P_v v=R+γPv​

这里的价值函数vvv是关于每个状态的价值函数的列向量,矩阵形式展开后的表达如下:
∣v1.vn∣=∣R1.Rn∣+γ∣P11...P1n..Pn1...Pnn∣∣v1.vn∣\left|\begin{matrix}v_{1}\\\\.\\\\v_{n}\end{matrix}\right| = \left|\begin{matrix}R_{1}\\\\.\\\\R_{n}\end{matrix}\right|+ \gamma \left|\begin{matrix}P_{11} & ...&P_{1n}\\\\. & &.\\\\P_{n1} &... &P_{nn}\end{matrix}\right|\left|\begin{matrix}v_{1}\\\\.\\\\v_{n}\end{matrix}\right| ∣∣∣∣∣∣∣∣∣∣​v1​.vn​​∣∣∣∣∣∣∣∣∣∣​=∣∣∣∣∣∣∣∣∣∣​R1​.Rn​​∣∣∣∣∣∣∣∣∣∣​+γ∣∣∣∣∣∣∣∣∣∣​P11​.Pn1​​......​P1n​.Pnn​​∣∣∣∣∣∣∣∣∣∣​∣∣∣∣∣∣∣∣∣∣​v1​.vn​​∣∣∣∣∣∣∣∣∣∣​

贝尔曼方程的求解

既然已经能够将贝尔曼方程表示为矩阵形式,并且其为线性方程,那么就可以直接进行求解:
v=R+γPv(1−γP)v=Rv=(1−γP)−1Rv=R + \gamma Pv \\ (1-\gamma P)v=R \\ v=(1- \gamma P)^{-1}R v=R+γPv(1−γP)v=Rv=(1−γP)−1R

对于一些低复杂度的MRP问题,这样直接计算解析解是非常快的,但是由于要计算矩阵的逆,其计算复杂度为O(n3)O(n^3)O(n3)。所以并不适用与复杂的计算场景,针对复杂MRP问题,一般用迭代的方式求解贝尔曼方程,例如:

  • 动态规划(Dynamic programming)
  • 蒙特卡洛方法(Monte-Carlo evaluation)
  • 差分学习法(Temporal-Difference learning)

这三种方法在强化学习笔记的第二篇文章中会进行介绍,敬请期待!

马尔科夫决策过程

定义

上面的内容主要介绍的是马尔科夫的奖励过程以及涉及的知识点,但强化学习是一个包含决策的过程,因此在上面的基础上我们再引入一个因子,就是动作(Action),从而将MRP问题变成了马尔科夫决策过程(Markov Decision Processes,MDP)。此时才能算得上是强化学习。MDP是一个环境,里面的每个状态都满足马尔科夫性质(Markov Property)。

MDP定义:一个马尔科夫决策过程由一个五元组构成:<S,A,P,R,γ><S, A, P, R, \gamma><S,A,P,R,γ>,其中

  • SSS为有限的状态空间集,sis_isi​表示时间步iii的状态,其中S={s1,s2,...,sn}S=\{ s_1, s_2, ..., s_n \}S={s1​,s2​,...,sn​}
  • AAA 为动作空间集,aia_iai​表示时间步ttt的动作,其中A={a1,a2,...,an}A = \{a_1, a_2, ..., a_n \}A={a1​,a2​,...,an​}
  • PPP为状态转移矩阵,Pss′=P[Ss+1=s′∣St=s]P_{ss'} = P[S_{s+1} = s' | S_t = s]Pss′​=P[Ss+1​=s′∣St​=s]
  • RRR为奖励函数,Rs=E[Rt+1∣St=s]R_s = E[R_{t+1} | S_t = s]Rs​=E[Rt+1​∣St​=s]
  • γ\gammaγ 为折扣因子,γ∈[0,1]\gamma \in [0,1]γ∈[0,1]

为了直观理解MDP过程,还是以之前的例子为例,图中红色的部分就是动作(Action)。

这里需要注意的是,因为有了动作的加入,奖励不再只和状态相关,还和动作有关。之前的奖励是离开状态就获取的即时奖励,现在是:在某个状态下采取特定动作后获取的即时奖励

接下来我们将介绍在MDP的框架之下的一些基本要素。

策略(Policy)

策略是状态到动作的映射,在某个状态下采取什么样的动作,可以是确定的策略,也可以是一个随机策略(概率事件)。其定义如下:
π(a∣s)=P[At=a∣St=s]\pi(a|s) =P[A_t=a|S_t=s] π(a∣s)=P[At​=a∣St​=s]

  • 策略完整定义了智能体的所有行为方式
  • MDP的策略只依赖于当前的状态,不依赖于历史状态
  • 策略是稳态的,不受时间约束。 即At∼π(.∣St),∀t>0A_t \sim \pi(.|S_t),\forall t\gt 0At​∼π(.∣St​),∀t>0
  • 在给定一个MDP,$M= <S,A,P,R,\gamma> 以及一个策略以及一个策略以及一个策略\pi,那么状态序列,那么状态序列,那么状态序列S_1,S_2,…,可以表示的前面章节描述的马尔科夫过程(MP)为,可以表示的前面章节描述的马尔科夫过程(MP)为,可以表示的前面章节描述的马尔科夫过程(MP)为 <S,P^{\pi}>$
  • 在给定一个MDP,$M= <S,A,P,R,\gamma> 以及一个策略以及一个策略以及一个策略\pi,那么状态与奖励序列,那么状态与奖励序列,那么状态与奖励序列S_1,R_2,S_2,R_3…,可以表示前面章节描述的的马尔科夫奖励过程(MRP)为,可以表示前面章节描述的的马尔科夫奖励过程(MRP)为,可以表示前面章节描述的的马尔科夫奖励过程(MRP)为 <S,P{\pi},R{\pi},\gamma> $

上述中的状态转移矩阵与奖励函数定义为:
$$
P_{s,s’}^{\pi} = \sum_{a \in A}\pi (a|s)P_{ss’}^a

R_{s}^{\pi} = \sum_{a \in A}\pi (a|s)R_{s}^a
$$

价值函数(Value Function)

MDP的价值函数和MRP的有一些不同,与策略相关。正因为有了策略,价值函数不再单纯的只和状态sss相关了。采取不同的策略,价值函数也会不同。因为从贝尔曼方程中我们也能看出,价值的计算和动作相关,而动作的选择就是策略。但是这里不得不提一下,这里的价值函数只是策略的价值函数,它的好坏不一定代表真正的状态的好坏,它只是根据你提供的这个策略计算出来的,提供的这个策略不一定是一个好策略,那么自然计算出来的价值不一定具有很强的参考性。

当执行到某一步时,如果需要评估当前智能体在该时间步状态的好坏程度,主要由价值函数(Value Function)来完成。由于价值函数的输入分为状态sss和<状态,价值>对<s,a><s, a><s,a>,所以通常,当输入状态时统称为状态值函数,输入<状态,价值>对<s,a><s, a><s,a>时统称为动作值函数,当不讨论其输入时,统称为价值函数。

一个马尔科夫决策过程的状态值函数vπ(s)v_{\pi}(s)vπ​(s)是对未来奖励的预测,表示在状态sss下,跟随给定的策略π\piπ会得到的奖励期望。
vπ(s)=Eπ[Gt∣St=s]v_{\pi}(s) = E_{\pi}[G_t|S_t=s] vπ​(s)=Eπ​[Gt​∣St​=s]

一个马尔科夫决策过程的动作值函数qπ(s,a)q_{\pi}(s,a)qπ​(s,a),表示在状态sss下,执行动作aaa,并跟随给定的策略π\piπ会得到的奖励期望。

qπ(s,a)=Eπ[Gt∣St=s,At=a]q_{\pi}(s,a) = E_{\pi}[G_t|S_t=s,A_t=a] qπ​(s,a)=Eπ​[Gt​∣St​=s,At​=a]

MDP的贝尔曼方程

与在马尔科夫奖励过程的贝尔曼方程思想相同,状态值函数可以分解为即时奖励Rt+1R_{t+1}Rt+1​与下一状态的折扣状态价值γv(St+1)\gamma v(S_{t+1})γv(St+1​)的期望之和。
vπ(s)=Eπ[Rt+1+γvπ(St+1)∣St=s]v_{\pi}(s) = E_{\pi}[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_t=s] vπ​(s)=Eπ​[Rt+1​+γvπ​(St+1​)∣St​=s]
同时动作值函数也可以进行类似的分解:
qπ(s,a)=Eπ[Rt+1+γqπ(St+1,At+1)∣St=s,At=a]q_{\pi}(s,a) = E_{\pi}[R_{t+1}+\gamma q_{\pi}(S_{t+1},A_{t+1})|S_t=s,A_t=a] qπ​(s,a)=Eπ​[Rt+1​+γqπ​(St+1​,At+1​)∣St​=s,At​=a]
最终动作值函数可以表示为:
qπ(s,a)=Rsa+γ∑s′∈SPss′a∑a′∈Aπ(a′∣s′)qπ(s′,a′)q_{\pi}(s,a)=R_s^a+\gamma \sum _{s' \in S}P_{ss'}^a\sum _{a' \in A}\pi(a'|s')q_{\pi}(s',a') qπ​(s,a)=Rsa​+γs′∈S∑​Pss′a​a′∈A∑​π(a′∣s′)qπ​(s′,a′)

贝尔曼方程求解示例

下面我们顺着之前的例子,看看贝尔曼方程的求解过程:

这里我们需要求解Class3状态下的状态值函数v(class3)v(class3)v(class3)。
v(Class3)=∑a∈Aπ(a∣s)qπ(s,a)=Ppub∗qπ(Class3,pub)+Pstudy∗qπ(Class3,sleep)=Ppub∗(Rpub+v(pub))+Pstudy∗(Rstudy+v(sleep))=Ppub∗(Rpub+Ppub−class1∗v(class1)+Ppub−class2∗v(class2)+Ppub−class3∗v(class3))+Pstudy∗(Rstudy+v(sleep))=0.5∗(1+0.2∗(−1.3)+0.4∗2.7+0.4∗7.4)+0.5∗(10+0)=7.4\begin{aligned} v(Class3) &=\sum _{a \in A}\pi(a|s)q_{\pi}(s,a) \\\\ &=P_{pub}*q_{\pi}(Class3,pub)+P_{study}*q_{\pi}(Class3,sleep) \\\\ &=P_{pub}*(R_{pub}+v(pub))+P_{study}*(R_{study}+v(sleep)) \\\\ &=P_{pub}*(R_{pub}+P_{pub-class1}*v(class1)+P_{pub-class2}*v(class2)+P_{pub-class3}*v(class3))+P_{study}*(R_{study}+v(sleep)) \\\\ &=0.5*(1+0.2*(-1.3)+0.4*2.7+0.4*7.4)+0.5*(10+0) \\\\ &=7.4 \end{aligned} v(Class3)​=a∈A∑​π(a∣s)qπ​(s,a)=Ppub​∗qπ​(Class3,pub)+Pstudy​∗qπ​(Class3,sleep)=Ppub​∗(Rpub​+v(pub))+Pstudy​∗(Rstudy​+v(sleep))=Ppub​∗(Rpub​+Ppub−class1​∗v(class1)+Ppub−class2​∗v(class2)+Ppub−class3​∗v(class3))+Pstudy​∗(Rstudy​+v(sleep))=0.5∗(1+0.2∗(−1.3)+0.4∗2.7+0.4∗7.4)+0.5∗(10+0)=7.4​

MDP下贝尔曼方程的矩阵形式

在马尔科夫决策过程下的贝尔曼方程的矩阵形式与在马尔科夫奖励过程下的矩阵形式类似,只是考虑了策略π\piπ。
vπ=Rπ+γPπvπv_{\pi}= R^{\pi} + \gamma P^{\pi}v_{\pi} vπ​=Rπ+γPπvπ​

其直接的解析解为:
vπ=(1−γPπ)−1Rπv_{\pi}=(1- \gamma P^{\pi})^{-1}R^{\pi} vπ​=(1−γPπ)−1Rπ

计算复杂度为O(n3)O(n^3)O(n3)。所以并不适用于复杂的计算场景,针对复杂MRP问题,一般用迭代的方式求解贝尔曼方程。

最优值函数

由之前的介绍可知,强化学习的目标就是求解马尔科夫决策过程的最优策略,而值函数是对最优策略π∗\pi ^*π∗的表达。

最优值函数(Optimal Value Function)分为最优状态值函数(optimal state-value function)与最优动作值函数(optimal action_value function),他们的定义如下:

最优状态值函数(optimal state-value function)v∗(s)v_* (s)v∗​(s)就是在所有策略π\piπ当中,最大的状态值函数:
v∗(s)=max⁡πvπ(s)v_*(s)=\max_{\pi}v_{\pi}(s) v∗​(s)=πmax​vπ​(s)
最优动作值函数(optimal action_value function)q∗(s,a)q_*(s,a)q∗​(s,a)就是在所有策略当中,最大的动作值函数:
q∗(s,a)=max⁡πqπ(s,a)q_*(s,a)=\max_{\pi}q_{\pi}(s,a) q∗​(s,a)=πmax​qπ​(s,a)

我们更希望的是最优值函数,最优值函数是与策略无关的,根据最优值函数可以直接得到最优策略。只需要沿着状态价值函数大的方向移动就行,这其实也就是强化学习中的一个流派,基于值学习的(相对于基于策略学习)。值比较大的状态就是好,比如终点前的一个状态值一般就比较大,因为下一刻就可以结束。此处用"一般"是因为考量的是状态值,如果这个状态不仅和终点相连并且还和几个失败点相连,状态值不一定大。参考贝尔曼方程计算公式,如果我们使用另一种动作值函数,代表状态sss下采取特定动作aaa的价值。那么我们就可以说,终点前一个状态,采取动作aaa可以直接到终点,这个a(s,a)a(s,a)a(s,a)一定是一个大值。这也提示了使用q(s,a)q(s,a)q(s,a)值一般比使用状态价值v(s)v(s)v(s)更好,因为考虑了动作。

最优值函数确定了马尔科夫决策过程中智能体的最优的可能表现。获得了最优值函数,也就获得了状态的最有价值,那么此时马尔科夫决策过程的所有变量都为已知的,接下来便能够很好的求解马尔科夫决策过程的问题。

在上图中,比如红色10的节点状态,可以选取Study 或者 Pub,选择去Study获得的奖励是10,选择去Pub获得的奖励是1,所以该节点的最大状态价值为10,如果是红色8的节点状态,有两种选择分别为Study和Sleep,Sleep的奖励是0,Study的奖励是-2,但是因为到达10后能获得的最大奖励是10,所以为 10 -2=8。依次类推其他状态节点的最大状态价值。

v∗v_*v∗​会告诉你每一步获得的最大状态价值,但是不会告诉你怎么做,因此需要p∗p_*p∗​的辅助,继而告诉你怎么去执行动作(Action)。下图中的弧上的q∗q_*q∗​表明了执行该action可以获得的价值,有了这些价值之后,就可以选择最大价值的路线了。

从10 开始的Pub动作获得价值为8.4,是因为该状态平均了6、8、10三个状态价值的结果,0.2 * 6 + 0.4 * 8 + 0.4 * 10 = 8.4/

最优策略

最优策略(Optimal Policy)的定义为:
π≥π’ifvπ(s)≥vπ′(s),∀s\pi \ge \pi ’ \ \ \ if \ \ \ v_{\pi}(s) \ge v_{\pi'}(s),\forall s π≥π’   if   vπ​(s)≥vπ′​(s),∀s
在状态sss下,当策略π\piπ的价值函数优于任何其他策略π′\pi'π′的价值函数时,策略π\piπ即为状态sss下的最优策略。关于马尔科夫决策过程的最优策略,有如下3个定理:

  • 1、对于任何马尔科夫决策过程问题,存在一个最优策略π∗\pi^*π∗,其优于(至少等于)任何其他策略,即π∗≥π\pi^* \ge \piπ∗≥π。
  • 2、所有最优策略下都有最优状态值函数,即vπ∗(s)=v∗(s)v_{\pi^*}(s) = v^*(s)vπ∗​(s)=v∗(s)
  • 3、所有最优策略下都有最优动作值函数,即qπ∗(s,a)=q∗(s,a)q_{\pi^*}(s,a) = q^*(s,a)qπ∗​(s,a)=q∗(s,a)

基于上述三个定理,寻找最优策略可以通过最优状态值函数vπ∗(s)v_{\pi^*}(s)vπ∗​(s)或者最优动作值函数qπ∗(s,a)q_{\pi^*}(s,a)qπ∗​(s,a)来得到。也就是说如果最优值函数已知,则可以获得马尔科夫决策过程的最优策略。

因此,可以通过最大化q∗(s,a)q^*(s,a)q∗(s,a)得到最优策略π∗\pi^*π∗,具体的定义如下:
π∗(a∣s)={1,ifa=max⁡a∈Aq(s,a)0,其他\pi_{*}(a|s)=\begin{cases} 1,\quad if \ \ a= \max_{a \in A}\ q(s,a) \\\\ 0,\quad 其他 \end{cases} π∗​(a∣s)=⎩⎪⎨⎪⎧​1,if  a=maxa∈A​ q(s,a)0,其他​
上式中,a=max⁡a∈Aq(s,a)a= \max_{a \in A}\ q(s,a)a=maxa∈A​ q(s,a)时,π(a∣s)\pi(a|s)π(a∣s)为1,表明如果动作值函数的最大值为最优策略所选择的动作,那么智能体已经找到最优策略π∗\pi^*π∗。只要最优动作值函数q∗(s,a)q^*(s,a)q∗(s,a)已知,就可以立即获得最优策略。综上所述,最优策略π∗\pi^*π∗对于任何马尔科夫决策过程都会有一个对应的确定性最优策略π∗(a∣s)\pi_*(a|s)π∗​(a∣s)。

到目前为止,最优策略的求解问题事实上已经转换成为了最优值函数的求解问题。如果已经求出最优值函数,那么最优策略是非常容易得到的,反之同理。通过最优策略求解问题的转换,可以将鼓励的最优策略π∗\pi^*π∗、最优值函数v∗(s)v^*(s)v∗(s)、最优动作值函数q∗(s,a)q^*(s,a)q∗(s,a)连为一体。需要注意的是,在实际工作中,也可以不求最优值函数,而使用其他方法直接求解最优策略。

比如下图中的最优策略路线为:6−>6−>8−>106->6->8->106−>6−>8−>10

求解贝尔曼最优方程

上面描述的回溯图过程中已经给出了贝尔曼最优方程的基本形式,其阐述的一个事实是:最优策略下各个状态的价值一定等于这个状态下最优动作的期望回报。我们已经知道:

  • 求解强化学习问题实际上是求解最优策略。
  • 最优策略可以通过求解最优值函数得到。
  • 最优值函数的求解就是优化贝尔曼方程。

简而言之,强化学习的求解最后演化成了优化贝尔曼方程。贝尔曼最优方程实际上是一个方程组,每个状态对应一个方程等式。也就是说,如果有nnn个状态,那么有nnn个含有nnn个未知量的方程。如果环境的动态变化特性ppp是已知的,那么原则上可以用解非线性方程组的求方法来求解v∗v_*v∗​方程组。类似地,我们也可以求得q∗q_*q∗​的一组解。对于小规模的马尔科夫决策过程,可以直接求解价值函数,对于大规模的马尔科夫决策过程,通常非常难以获得解析解,必须采用迭代的方法优化贝尔曼方程。比如:

  • Value Iteration算法
  • Policy Iteration算法
  • Q-learning算法
  • Sarsa算法

同样会在第二篇进行介绍。

鸣谢

  • 学习笔记-强化学习基本概念
  • 强化学习应用场景
  • 如何通俗地解释马尔科夫链?
  • 马尔科夫链 (Markov Chain)是什么鬼
  • 强化学习基础篇(二)马尔科夫决策过程(MDP)

【技术服务】详情点击查看: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg



扫一扫关注「搜索与推荐Wiki」!号主「专注于搜索和推荐系统,以系列分享为主,持续打造精品内容!

强化学习介绍和马尔可夫决策过程详细推导相关推荐

  1. 强化学习丨有限马尔可夫决策过程学习总结

    目录 一.前言 二.有限MDP问题简介 三.相关概念定义 3.1 动态函数 3.2 收益与回报 3.3 策略和价值函数 3.4 贝尔曼方程 3.5 最优策略和最优价值函数 一.前言 有限马尔可夫决策过 ...

  2. 深度强化学习入门:马尔可夫决策过程(井字棋案例理解)

    注:笔记 来自知乎文章 深度强化学习综述(上) Tips①:只是记录从这个文章学到的东西 Tips②:只摘选了文章中部分理论阅读整理 Tips③:重点是对文章中的一些公式进行理解,方便自己回顾 Tip ...

  3. 强化学习中的马尔可夫决策过程

    前言 我在学习Playing Atari with Deep Reinforcement Learning这篇论文时,文章中引用到了马尔可夫决策过程的相关概念,为此特意学习了马尔可夫决策过程的相关知识 ...

  4. 【深入浅出强化学习】2 马尔可夫决策过程

    文章目录 2.1 马尔科夫决策过程理论讲解 2.2 MDP 中的概率学基础讲解 2.3 基于 gym 的 MDP 实例讲解 Appendix grid_mdp.py 文件代码 2.1 马尔科夫决策过程 ...

  5. 决策过程并举例_David Silver 增强学习——Lecture 2 马尔可夫决策过程(一)

    其他lecture [1]搬砖的旺财:David Silver 增强学习--笔记合集(持续更新) 目录 **David Silver 增强学习--Lecture 2 马尔可夫决策过程(一)**1. 前 ...

  6. 强化学习: 贝尔曼方程与马尔可夫决策过程

    强化学习: 贝尔曼方程与马尔可夫决策过程 一.简介 贝尔曼方程和马尔可夫决策过程是强化学习非常重要的两个概念,大部分强化学习算法都是围绕这两个概念进行操作.尤其是贝尔曼方程,对以后理解蒙特卡洛搜索.时 ...

  7. 马尔可夫决策过程-强化学习学习笔记(二)

    概念引入 强化学习的通俗理解 马尔可夫的通俗介绍 简介 马尔可夫决策过程 (Markov Decision Processes, MDPs)是对强化学习问题的数学描述. 马尔可夫决策过程(Markov ...

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

    强化学习笔记(一)马尔可夫决策过程 参考资料 正文 Q1: R t R_{t} Rt​, G t G_{t} Gt​, V ( S t ) V(S_{t}) V(St​)都有奖励或收获的含义,它们有什 ...

  9. 强化学习组队学习task02——马尔可夫决策过程及表格型方法

    文章目录 一.马尔科夫决策过程 1.马尔科夫链 2.马尔科夫奖励过程 (1)贝尔曼公式(Bellman equation) (2)迭代法 蒙特卡罗办法 动态规划方法 3.马尔科夫决策过程 MDP的价值 ...

最新文章

  1. 如何通过 Vue+Webpack 来做通用的前端组件化架构设计
  2. 一网打尽数据结构中线性表链表的相关算法
  3. 用按位异或运算符交换两个数,不引入第三个变量
  4. 除了 MySQL 数据库,你还要了解的一些数据库
  5. Libvirsh 问题:GLib-WARNING **: gmem.c:483: custom memory allocation vtable not supported
  6. python中for x in range_python教程:对 [lambda x: x*i for i in range(4)] 理解
  7. CloudStack学习-3
  8. JeeWx_2.4.2 版本发布,免费开源微信管家系统
  9. Python数据分析:pandas玩转Excel(三)
  10. 常见的排序算法四——直接选择排序
  11. 使用python对学生表的查询_python + mysql 实现查询表数据
  12. 【深度学习案例】手写数字项目实现-3. Matlab深度学习模型训练
  13. 电子工程师最全面试题大全
  14. 运用递归来画谢尔宾斯基三角形
  15. 网站性能常用指标与优化方法
  16. 如何用html实现图片轮播,怎么单纯的用html+css实现图片轮播?
  17. mysql binlog 查看pos点_如何寻找主库binlog和pos点
  18. Kmeans参数n_clusters_labels_centers_
  19. with ties 的用法
  20. 一个男网友娶到一个女网友后在洞房发生的事情

热门文章

  1. 实现strStr()
  2. 五轴数控转台_RTCP、一次装夹、双转台……这是一份五轴应用说明书
  3. python中文朗读_用python实现的文字朗读
  4. C++ - 文件读写(fstream)
  5. WAF学习之一——Nginx与反向代理
  6. 最积极的搜索引擎蜘蛛有哪些可以屏蔽掉
  7. 计算机会考作业,计算机会考Excel操作题作业文档.doc
  8. 逻辑回归原理介绍及Matlab实现
  9. Linux安装Oracle报Checking operating system version must be redhat-3, SuSE-9, redhat-4, UnitedLin
  10. 模电1.1 半导体基础知识