强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)

上一节讲的是在已知模型的情况下,如何去解决一个马尔科夫决策过程(MDP)问题。方法就是通过动态规划来评估一个给定的策略,通过不断迭代最终得到最优价值函数。具体的做法有两个:一个是策略迭代,一个是值迭代。从这一节开始,我们将要进入模型未知的情况下,如何去解决一个MDP问题的方法。所谓的模型未知,即状态转移概率 Pass P s s ′ a 这些我们是不知道的。所以我们无法直接利用Bellman方程来求解得到最优策略。

vπ(s)=aAπ(a|s)(Ras+γsSPassvπ(s)) v π ( s ) = ∑ a ∈ A π ( a | s ) ( R s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) )

所以,为了能够从环境中学习,我们需要让agent与environment交互,得到一些经历(样本)。然后通过这些经历来进行策略评估与策略迭代。从而最终得到最优策略。这种做法的理论是从蒙特卡罗方法中来的。所以我们先讲蒙特卡罗学习。接着从蒙特卡罗的缺点出发,进一步讲解了时序差分学习以及λ时序差分强化学习。


Monte-Carlo Learning(蒙特卡罗学习)

  • 蒙特卡罗方法又叫做统计模拟方法,它使用随机数(或伪随机数)来解决计算问题。
    强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第1张图片
  • 比如上图,矩形的面积我们可以轻松得到,但是对于阴影部分的面积,我们积分是比较困难的。所以为了计算阴影部分的面积,我们可以在矩形上均匀地撒豆子,然后统计在阴影部分的豆子数占总的豆子数的比例,就可以估算出阴影部分的面积了。

为什么要用蒙特卡罗的方法?

  • 前面讲的主要内容是整个问题可以转换成一个马尔科夫决策过程(MDP),MDP是通过5元组: <S,P,A,R,γ> < S , P , A , R , γ > 来做决策的。对于这种已知模型的情况,也就是知道了这个5元组,我们可以容易获得奖赏最大化。但是,在现实世界中,我们无法同时知道这个5元组。比如P,状态转移概率就很难知道,P不知道,我们就无法使用bellman方程来求解V和Q值。但是我们依然要去解决这个问题,所以怎么办呢?怎样转化为一个MDP的形式呢?
  • 一个想法是,虽然我不知道状态转移概率P,但是这个概率是真实存在的。我们可以直接去尝试,不断采样,然后会得到奖赏,通过奖赏来评估值函数。这个想法与蒙特卡罗方法的思想是一致的。我们可以尝试很多次,最后估计的V值就会很接近真实的V值了。

RL中的蒙特卡罗方法

  • MC methods learn directly from episodes of experience. 也就是从经验中直接估算值函数V和策略 π π
  • MC learns from complete episodes: No bootstrapping。
  • MC uses the simplest possible idea: value = mean return
  • All episodes must terminate
  • 蒙特卡罗学习是指在不清楚MDP状态转移概率及即时奖励的情况下,直接从经历完整的Episode来学习状态价值,通常情况下某状态的价值等于在多个Episode中以该状态算得到的所有收获的平均。
怎么理解episode?
  • 强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第2张图片
  • episode就是经历,每条episode就是一条从起始状态到结束状态的经历。例如在走迷宫,一条episode就是从你开始进入迷宫,到最后走出迷宫的路径。
  • 首先我们要得到的是某一个状态s的平均收获。所以我们说的episode要经过状态s。所以上图中第二条路径没有经过状态s,对于s来说就不能使用它了。而且最后我们episode都是要求达到终点的,才能算是一个episode。
All episodes must terminate是什么意思?
  • 其实就是说,无论采用哪个策略,都会在有限时间内到达终点并获得回报。就像上面那个图,每条样本都会最终到达终点。现实中,我们的棋类游戏,都会在有限步数以后达到输赢或者平局的结果并获得相应的回报。
value = mean return是什么意思?
  • 这里写图片描述
  • 其实从字面理解就是求均值的意思。就是状态s在每一个样本中的回报的均值。具体来说,在蒙特卡罗方法中分为first visit 和every visit两种方法。
  • first visit是说,在计算状态s处的值函数时,只利用每次实验(episode)中第一次访问到状态s时返回的值,如上图所示,计算s出的均值只利用了 G11 G 11 ,因此计算公式如下:
  • 这里写图片描述
  • every visit 是说,在计算状态s处的值函数时,利用所有访问到状态s时的回报返回值。即:
  • 这里写图片描述
  • 所以蒙特卡罗学习就是指不基于模型本身,而是直接从经历过的episode中的学习,通过不同episode的平均收获值替代价值函数。

上面这些事蒙特卡罗学习中会用到的术语。知道这些概念之后,我们要知道我们的思想是想从采样的这些经历中。如何去进行策略评估以及策略迭代。这里与动态规划(DP)的不同就在于我们现在需要采样,通过采样来近似q(s, a)。

Monte-Carlo Policy Evaluation(蒙特卡罗策略评估)

  • 目标:在一个固定的策略 π π 下,从一系列的episodes中学习到该策略下的状态价值函数 vπ(s) v π ( s )
  • 那么我们先来看看我们以前是怎么计算状态价值函数的:
  • vπ(s)=Eπ[Gt|St=s] v π ( s ) = E π [ G t | S t = s ]
  • 其中, Gt=Rt+1+γRt+2+...+γT1RT G t = R t + 1 + γ R t + 2 + . . . + γ T − 1 R T
  • 而蒙特卡罗策略评估则是使用多个episodes的平均获得值来代替这个状态价值函数。
  • 具体做法:
  • 强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第3张图片
  • 其中,N(s)表示状态s出现的次数。每次状态s出现,N(s)加1。

  • 上面的做法需要等到所有的episodes都经历完了,再去计算V(s)。其实可以使用Incremental mean(累进更新平均值)。具体的做法就是:

  • 对于每来一个episode: S1,A1,R2,S2,A2,...,St,At,Rt+1,...,Sk S 1 , A 1 , R 2 , S 2 , A 2 , . . . , S t , A t , R t + 1 , . . . , S k
  • 对于episode里的每一个状态 St S t ,有一个收获 Gt G t ,每碰到一次 St S t ,使用下面的式子计算状态的平均价值 V(s) V ( s ) :
  • 这里写图片描述
  • 能够这样做的原因是:
  • 强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第4张图片
  • 一个变量的均值可以像上图所示这样计算。
  • 以上就是蒙特卡罗的基本思想与做法,蒙特卡罗学习方法有许多缺点,在实践中的应用不多。接下来介绍TD学习方法。

Temporal-Difference Learning(时序差分学习)

  • TD Learing的特点:
  • 强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第5张图片

  • 如上所示,TD Learning中才会把 Gt G t 写成递归的形式。这样,每走一步都可以更新一次V。而蒙特卡罗中,却需要走完整个样本,才能得到 Gt G t ,从而更新一次。 蒙特卡罗学习方法的更新是这样的:

  • 这里写图片描述

  • 在TD learning中,算法在估计某一个状态的价值时,用的是离开该状态时的即时奖励 Rt+1 R t + 1 与下一个状态 St+1 S t + 1 的预估状态价值乘以折扣因子 γ γ 组成,
    强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第6张图片

  • 其中,bootstrapping指的就是TD目标值 Rt+1+γV(St+1) R t + 1 + γ V ( S t + 1 ) 代替 Gt G t 的过程。

  • 显然,蒙特卡罗每次更新都需要等到agent到达终点之后再更新;而对于TD learning来说,agent每走一步它都可以更新一次,不需要等到到达终点之后才进行更新。

示例——AB example

  • 已知:有两个状态A和B,折扣因子为1,有8个完整的episodes。除了第一个episode有状态转移之外,其余7个均只有一个状态。如下图所示:
  • 强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第7张图片
  • 问题就是要求解出V(A)和V(B)。
  • 解释:假如应用MC算法,由于需要完整的episode,因此,只有episode 1 能够用来计算A的状态值,所以显然,V(A) = 0;同时B状态的价值为6/8。而对于TD算法来说,由于状态A的后继有状态B,所以状态A的价值是通过状态B的价值来计算的。所以根据上面TD的计算公式,V(A)=V(B) = 6/8.

强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第8张图片


MC,TDL,DP

Monte-Carlo, Temporal-Difference 和Dynamic Programming这三种学习方法都是用来计算状态价值的。它们的区别在于,前两种是在不知道模型的情况下常用的方法,而MC方法又需要一个完整的episode来更新状态价值,TD则不需要完整的episode。DP方法则是基于Model(知道模型的运作方式)的计算状态价值的方法。它通过计算一个状态S所有可能的转移状态S’及其转移概率以及对应的即时奖励来计算这个状态S的价值。也正是因为它知道整个模型的情况(知道状态转移概率与即时奖励),所以它才能够这样子计算全面的情况。下面的图可以直观地看出它们的区别:

强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第9张图片

  • 上图中的这颗树,代表了整个状态与动作空间。对于蒙特卡罗方法来说,要更新一次V值,需要有一个完整的样本(即图中红色部分就是一个样本)。这条路径经过了三个状态,所以可以更新三个状态的V值。由于不知道模型情况,所以无法计算从 St S t 到下面四个节点的概率以及即时奖励,所以一次只能更新一条路径。如果重复次数够多了,就能覆盖所有的路径,最后的结果才能跟动态规划那样。

强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第10张图片

  • 上图的红色部分是TDL每次更新所需要的。对于MC和TDL来说,它们都是模型不可知的,所以它们只能通过尝试来近似真实值。

强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第11张图片

  • 这是动态规划的V值计算,由于知道了模型,所以可以直接计算期望V值。

TD(λ) T D ( λ )

先前所说的TD方法实际上都是TD(0)方法。其中,0表示的是在当前状态下往前多看1步,即:

Gt=Rt+1+γV(St+1) G t = R t + 1 + γ V ( S t + 1 )

要是往前多看2步然后再更新状态价值,那就是:
Gt=Rt+1+γRt+2+γ2V(St+2) G t = R t + 1 + γ R t + 2 + γ 2 V ( S t + 2 )

那如果是n步呢?

n-step TD

强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第12张图片

  • 所谓的n-step TD,其实就是说要往前多少步再来估计V值。如果往前n步直到终点,那么就等价于蒙特卡罗方法了。
    强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第13张图片

既然存在n步,那么n为多少时,预测的效果最好呢?

  • 选择多少步数作为一个较优的计算参数也是一个问题。于是,引入一个新的参数  λ   λ 。通过这个新的参数,可以做到在不增加计算复杂度的情况下综合考虑所有步数的预测。

TD(λ) T D ( λ )

强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第14张图片

  • 从上图中的定义可以看出,这是综合了所有步数的情况,我们不直接选取一个具体的n步,然后忽略掉其它的步数。而是利用 λ λ 来综合所有的步数。
  • 给出这样的定义,有点像之前的 γ γ 参数一样,是用来控制权重的。而这里的 λ λ 的形式就是这样,它的权重就是下图所示:
    强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第15张图片

    • 经过这个 (1λ)λn1 ( 1 − λ ) λ n − 1 的作用,各个步数的权重就像上图这样衰减。相当于离状态s越远的,权重就越小。这也符合我们一般的想法,离得远的作用就小。

前向 TD(λ) T D ( λ )

引入 λ λ 之后,会发现要更新一个状态的价值,必须要有一个完整的episode(看前面的公式)。这和MC算法的要求一样。所以前向 TD(λ) T D ( λ ) 在实际应用中也很少。
* 强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第16张图片

  • 前向视角的解释:假设一个人坐在状态流上拿着望远镜看向前方,前方是那些将来的状态。当估计当前状态的值函数时,从 TD(λ) T D ( λ ) 的定义中可以看到,它需要用到将来时刻的值函数。
  • 这里写图片描述

  • 其中,这里写图片描述

  • 这里写图片描述

后向 TD(λ) T D ( λ )

强化学习(四):蒙特卡罗学习(MonteCarlo)与时序差分学习(TD learning)_第17张图片
* TD(λ) T D ( λ ) 的后向视角解释:有个人坐在状态流上,手里拿着话筒,面朝着已经经历过的状态,获得当前回报并利用下一个状态的值函数得到TD偏差之后,此人会想已经经历过的状态喊话告诉这些已经经历过的状态处的值函数需要利用当前时刻的TD偏差进行更新。此时过往的每个状态值函数更新的大小应该跟距离当前状态的步数有关。假设当前状态为 st s t ,TD偏差为 δt δ t ,那么 st1 s t − 1 处的值函数更新应该乘以一个衰减因子 γλ γ λ ,状态 st2 s t − 2 处的值函数更新应该乘以 (γλ)2 ( γ λ ) 2 ,以此类推。
* 后向 TD(λ) T D ( λ ) 的更新过程:
* 计算当前状态的TD偏差:这里写图片描述
* 更新eligibility trace:这里写图片描述
* 对状态空间中的每一个状态s,更新价值函数:这里写图片描述
* 注意这里是对已经经历过的所有状态都更新v值。

参考:
David Silver强化学习公开课
https://zhuanlan.zhihu.com/p/28107168
《机器学习》周志华 清华大学出版社

你可能感兴趣的:(Reinforcement,Learning)