Easy RL是由清华大学、北京大学以及中国科学院大学的三名硕士生编写的一门强化学习入门书籍,又称为“蘑菇书”Easy RL github地址。笔者主要从事博弈论、多智能体强化学习等方面的研究。最近在学习该本书,故将学习笔记和心得在这里记录下来,供大家观看交流。之后笔者也会继续更新有关多智能体和强化学习的内容,包括强化学习算法原理和代码实现、论文复现、强化学习竞赛等,对文章内容有任何问题或想一起学习强化学习相关内容可以邮件联系。([email protected])
MP就是值满足马尔科夫性质的过程,即下一时刻的状态只和当前状态相关,与之前的历史状态无关。(相当于一只小船随波逐流,下一时刻的状态只和当前时刻状态以及状态转移概率相关)
MRP是指在MP中加入奖励信息,即为每一个状态赋予一个奖励值。(相当于小船漂到的每个位置都有一个奖励信息)
状态价值函数:
状态值函数描绘了某个状态在未来累积奖赏的期望
在MRP中,存在针对每个状态的价值函数 V t ( s ) V^t\left( s \right) Vt(s),定义为:
V t ( s ) = E [ G t ∣ s t ] = E [ r t + 1 + γ r t + 2 + γ 2 r t + 3 + . . . . ∣ s t ] V^t\left( s \right) =E\left[ G_t\left| s_t \right. \right] =E\left[ r_{t+1}+\gamma r_{t+2}+\gamma ^2r_{t+3}+....\left| s_t \right. \right] Vt(s)=E[Gt∣st]=E[rt+1+γrt+2+γ2rt+3+....∣st]
其中 G t G_t Gt表示未来得到的回报, γ \gamma γ表示折扣因子。
贝尔曼方程
贝尔曼方程描述了在MRP中状态值函数的迭代关系,首先有下式成立:(可由全期望公式来推)
E [ V ( s ′ ) ∣ s ] = E [ E [ G t + 1 ∣ s ′ ] ∣ s ] = E [ G t + 1 ∣ s ] E\left[ V\left( s' \right) \left| s \right. \right] =E\left[ E\left[ G_{t+1}\left| s' \right. \right] \left| s \right. \right] =E\left[ G_{t+1}\left| s \right. \right] E[V(s′)∣s]=E[E[Gt+1∣s′]∣s]=E[Gt+1∣s]
由此可以推出贝尔曼方程:
V ( s ) = R ( s ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) V ( s ′ ) V\left( s \right) =R\left( s \right)+\gamma \sum_{s'\in S}{p\left( s'\left| s \right. \right)}V\left( s' \right) V(s)=R(s)+γs′∈S∑p(s′∣s)V(s′)
MRP价值迭代算法:MC、DP
蒙特卡洛法是指,针对某个需要估计值函数的状态s,从s开始让小船依据MRP生成多条轨迹(因为存在概率转移,所以会生成多条不同的轨迹,计算每一条轨迹的回报值,取平均即可作为状态s的值)。
动态规划法是指通过一直迭代贝尔曼方程(也称为自举的方法)来完成状态值函数的更新,从而得到最终的值函数。在迭代时需要将贝尔曼方程改写为如下的形式:
V ′ ( s ) = R ( s ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) V ( s ′ ) V'\left( s \right) =R\left( s \right)+\gamma \sum_{s'\in S}{p\left( s'\left| s \right. \right)}V\left( s' \right) V′(s)=R(s)+γs′∈S∑p(s′∣s)V(s′)
在初始状态时,每个状态都有其初始价值。同时,MRP给出了状态转移概率以及过程奖励.因此,对全部状态s可以根据贝尔曼方程完成第一次计算得到 V ′ V' V′。将 V ′ V' V′赋给 V V V,完成第一次更新。重复上述过程,直到V不再发生变化或前后两次更新的差距足够小。
MDP就是在MRP中加入了决策过程,用实际的策略来代替状态转移概率。(相当于有人乘着小船,可以决定小船的方向)
马尔可夫决策过程是一个五元组
γ \gamma γ> 其中 R表示从 S到 S*′ 能够获得的奖励期望,γ* 为折扣因子, A* 为动作集合;
状态价值函数:
在MDP中,状态价值函数记作$V_{\pi}\left( s \right) $,这表明此时状态值函数与使用的决策策略有关,不同的策略决定了不同的状态值函数。其计算方式如下:
V π ( s ) = E π [ G t ∣ s t = s ] V_{\pi}\left( s \right) =E_{\pi}\left[ G_t\left| s_t=s \right. \right] Vπ(s)=Eπ[Gt∣st=s]
在MDP中,状态价值函数对应的贝尔曼期望方程为:(即表明了状态值函数和动作值函数的关系)
V π ( s ) = ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) V_{\pi}\left( s \right) =\sum_{a\in A}{\pi \left( a\left| s \right. \right) Q_{\pi}\left( s,a \right)} Vπ(s)=a∈A∑π(a∣s)Qπ(s,a)
动作价值函数:
动作价值函数描述在状态s下,采取动作a后,在未来获得累积回报的期望。
动作值函数的定义如下:
Q π ( s , a ) = E π [ G t ∣ s t = s , a t = a ] Q_{\pi}\left( s,a \right) =E_{\pi}\left[ G_t\left| s_t=s,a_t=a \right. \right] Qπ(s,a)=Eπ[Gt∣st=s,at=a]
对应的贝尔曼期望方程为:
Q π ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) V π ( s ′ ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) Q ( s ′ , a ′ ) Q_{\pi}\left( s,a \right) =R\left( s,a \right) +\gamma\sum_{s'\in S}{p\left( s'\left| s \right. \right) V_{\pi}\left( s' \right)} \\ \,\, =R\left( s,a \right) +\gamma\sum_{s'\in S}{p\left( s'\left| s,a \right. \right) \sum_{a'\in A}{\pi \left( a'\left| s' \right. \right) Q\left( s',a' \right)}} Qπ(s,a)=R(s,a)+γs′∈S∑p(s′∣s)Vπ(s′)=R(s,a)+γs′∈S∑p(s′∣s,a)a′∈A∑π(a′∣s′)Q(s′,a′)
其中, π ( a ∣ s ) \pi \left( a\left| s \right. \right) π(a∣s)表示采用策略π时,在状态s下采取动作a的概率。
图1:
备份图的主要作用是帮助理解状态值函数和动作值函数的贝尔曼期望方程,其中黑色实心圆表示动作,空心圆表示状态。由一个空心圆指向多个实心圆表示在当前状态下采取动作,由于多为随机性策略,因此针对自身动作集有一个概率分布 π ( a ∣ s ) \pi(a|s) π(a∣s)。由一个实心圆指向多个空心圆表示即便确定了采取的动作,此时状态转移还是未知的,还取决于状态转移概率 p ( s ′ ∣ s ) p(s'|s) p(s′∣s)。
从下向上看该图,由图1可知,首先计算 Q π ( s , a ) = R ( s , a ) + ∑ s ′ ∈ S p ( s ′ ∣ s ) V π ( s ′ ) Q_{\pi}\left( s,a \right) =R\left( s,a \right) +\sum_{s'\in S}{p\left( s'\left| s \right. \right)}V_{\pi}\left( s' \right) Qπ(s,a)=R(s,a)+s′∈S∑p(s′∣s)Vπ(s′),然后再计算V函数:(即得到V函数的贝尔曼期望方程)
V π ( s ) = ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) = ∑ a ∈ A π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π ( s ′ ) ) V_{\pi}\left( s \right) =\sum_{a\in A}{\pi \left( a\left| s \right. \right)}Q_{\pi}\left( s,a \right) \\ \,\, =\sum_{a\in A}{\pi \left( a\left| s \right. \right)}\left( R\left( s,a \right) +\gamma\sum_{s'\in S}{p\left( s'\left| s,a \right. \right)}V_{\pi}\left( s' \right) \right) Vπ(s)=a∈A∑π(a∣s)Qπ(s,a)=a∈A∑π(a∣s)(R(s,a)+γs′∈S∑p(s′∣s,a)Vπ(s′))
由图2可知,先计算 V π ( s ′ ) = ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) V_{\pi}\left( s' \right) =\sum_{a'\in A}{\pi \left( a'\left| s' \right. \right)}Q_{\pi}\left( s',a' \right) Vπ(s′)=∑a′∈Aπ(a′∣s′)Qπ(s′,a′),再计算Q函数:(即得到Q函数的贝尔曼期望方程)
Q π ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π ( s ′ ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) Q ( s ′ , a ′ ) Q_{\pi}\left( s,a \right) =R\left( s,a \right) +\gamma\sum_{s'\in S}{p\left( s'\left| s,a \right. \right) V_{\pi}\left( s' \right)}\\\,\, =R\left( s,a \right) +\gamma\sum_{s'\in S}{p\left( s'\left| s \right. \right) \sum_{a'\in A}{\pi \left( a'\left| s' \right. \right) Q\left( s',a' \right)}} Qπ(s,a)=R(s,a)+γs′∈S∑p(s′∣s,a)Vπ(s′)=R(s,a)+γs′∈S∑p(s′∣s)a′∈A∑π(a′∣s′)Q(s′,a′)
在MDP中,预测问题就是指给定MDP以及策略,预测该策略对应的价值函数(在每个状态下),可以使用动态规划方法来进行策略评估。
动态规划进行策略评估
动态规划进行策略评估的方式跟前面使用DP在MRP过程里迭代贝尔曼方程计算价值函数的方法类似,首先将贝尔曼期望方程改写为:
V ’ π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V π ( s ′ ) ) V’_{\pi}\left( s \right) =\sum_{a\in A}{\pi \left( a\left| s \right. \right)}\left( R\left( s,a \right) +\gamma\sum_{s'\in S}{p\left( s'\left| s,a \right. \right)}V_{\pi}\left( s' \right) \right) V’π(s)=a∈A∑π(a∣s)(R(s,a)+γs′∈S∑p(s′∣s,a)Vπ(s′))
在初始状态时,每个状态都对应一个价值。并且此时,策略,奖赏函数以及状态转移概率都已经给定,只需要根据贝尔曼期望方程不断迭代,直到V不再发生变化即可。
借助动态规划进行策略评估的演示网站
在MDP中,控制问题就是已知MDP,在不给定任何策略的情况下,搜索出最佳策略(即使得值函数最大),同时得到最优值函数。一般可以使用策略迭代和值迭代两种方法进行MDP控制。
最优价值函数的定义:
V π ∗ ( s ) = max π V π ( s ) V_{\pi}^{*}\left( s \right) =\max_{\pi} V_{\pi}\left( s \right) Vπ∗(s)=πmaxVπ(s)
当取到最优值函数时,对应的最优策略为:
π ∗ = a r g max π V π ( s ) \pi _*=\mathop {arg\max} \limits_{\pi}V_{\pi}\left( s \right) π∗=πargmaxVπ(s)
策略迭代的目的就是找到上述的最优价值函数以及最优策略。
MDP控制:策略迭代**(PS:策略迭代主要基于贝尔曼期望方程)**
策略迭代包括策略评估和策略改进两个阶段。策略评估可以使用上面的动态规划方法,以下介绍如何借助Q函数进行策略改进。
在策略评估结束后可以得到当前策略 π i \pi_i πi下的状态值函数$V_{\pi_i}\left( s \right) $,通过下式可以得到此时对应的Q函数:(PS:此Q函数给出了所有状态以及该状态下所有动作的Q值)
Q π i ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) V π i ( s ′ ) Q_{\pi _i}\left( s,a \right) =R\left( s,a \right) +\gamma\sum_{s'\in S}{p\left( s'\left| s \right. \right) V_{\pi _i}\left( s' \right)} Qπi(s,a)=R(s,a)+γs′∈S∑p(s′∣s)Vπi(s′)
对该Q函数取最大值,即可作为策略改进的方向,即:
π i + 1 ( s ) = a r g max a Q π i ( s , a ) \pi _{i+1}\left( s \right) =\mathop {arg\max} \limits_{a}Q_{\pi _i}\left( s,a \right) πi+1(s)=aargmaxQπi(s,a)
(PS:该策略改进实际上是对所有状态都完成了)
完成该策略改进之后,再次进行策略评估,并进一步得到 Q π i + 1 ( s , a ) Q_{\pi _i+1}\left( s,a \right) Qπi+1(s,a)。基于贪心思想,可以再次更新策略。重复进行上述策略迭代,直到价值函数收敛,最终得到 V ∗ V^* V∗以及 π ∗ \pi^* π∗。
MDP控制:价值迭代
价值迭代主要基于贝尔曼最优方程,首先基于策略迭代的过程介绍该方程的推导:
假设策略改进已经收敛到最优策略,则此时有:
Q π ∗ ( s , π ∗ ( s ) ) = max π V π ( s ) = V π ∗ ( s ) Q_{\pi ^*}\left( s,\pi ^*\left( s \right) \right) =\max_{\pi} V_{\pi}\left( s \right) =V_{\pi ^*}\left( s \right) Qπ∗(s,π∗(s))=πmaxVπ(s)=Vπ∗(s)
即此时的Q函数就等价于V函数。从而可以得到**贝尔曼最优方程(针对V函数)**为:
贝尔曼最优方程:
V π ( s ) = max a Q ( s , a ) V_{\pi}\left( s \right) =\max_a Q\left( s,a \right) Vπ(s)=amaxQ(s,a)
贝尔曼最优公式说明:当采用最优策略时,应满足在每个状态s下,采取的动作是当前的最好动作,对应的值函数即为该最好动作所带来的未来回报的期望。
再来考虑在最优策略下,Q函数的贝尔曼方程:
Q ∗ ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V ∗ ( s ′ ) Q_*\left( s,a \right) =R\left( s,a \right) +\gamma\sum_{s'\in S}{p\left( s'\left| s,a \right. \right) V_*\left( s' \right)} Q∗(s,a)=R(s,a)+γs′∈S∑p(s′∣s,a)V∗(s′)
而 V ∗ ( s ′ ) = V π ( s ) = Q ∗ ( s , a ) V_*\left( s' \right)=V_\pi(s)=Q_*(s,a) V∗(s′)=Vπ(s)=Q∗(s,a),可得:
Q ∗ ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) m a x a ′ Q ∗ ( s ′ , a ′ ) Q_*\left( s,a \right) =R\left( s,a \right) +\gamma\sum_{s'\in S}{p\left( s'\left| s,a \right. \right) max_{a'}Q_*\left( s',a' \right)} Q∗(s,a)=R(s,a)+γs′∈S∑p(s′∣s,a)maxa′Q∗(s′,a′)
上式即给出了Q函数之间的转移关系,Q学习就是基于该思想得来的。最后,再来计算在最优策略下,V函数之间的转移关系:
V ∗ ′ ( s ) = max a ( R ( s , a ) + ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V ∗ ( s ′ ) ) V'_*\left( s \right) =\max_a \left( R\left( s,a \right) +\sum_{s'\in S}{p\left( s'\left| s,a \right. \right) V_*\left( s' \right) \,\,} \right) V∗′(s)=amax(R(s,a)+s′∈S∑p(s′∣s,a)V∗(s′))
基于价值迭代的MDP控制基于上式完成,上式相当于贝尔曼最优方程的迭代形式(关于V函数)。因此价值迭代的过程为:
首先初始化值函数,即令所有状态的价值为0。然后基于上述V函数的贝尔曼最优方程进行迭代,直到价值函数收敛,即可得到最优价值函数。再根据最优价值函数在每个状态处提取最优动作,即可得到最优策略。
事实上,贝尔曼最优方程仅在最优状态下才满足。这里使用该方程进行迭代,目的是让价值函数逐渐收敛到最优状态。整个过程相当于一个反向传递的过程。
思考题:若数据不满足马尔科夫性怎么办? |
---|
不满足马尔科夫性说明下一时刻的状态不仅和当前状态有关,还和之前的状态有关。解决这个问题,可以使用RNN对历史信息建模,获得包含历史信息的状态表征,表征过程也可以使用注意力机制等,最后再表征状态空间求解MDP过程即可。