6.时序差分学习Temporal-Difference Learning--阅读笔记【Reinforcement Learning An Introduction 2nd】

时序差分学习Temporal-Difference Learning

内容简要梳理:
本章主要讲解了又一种RL方法,基于时序差分学习的方法,依照GPI模式,首先要了解基于TD的预测方法,同时涉及两种策略方式,on-policy和off-policy。主要涉及到SARSA、Q-learning等经典的算法及其相应的提升版本。要明确TD与MC之间的一些区别和对比。

前言

如果必须将rl中的一种想法当作是强化学习的核心的话,那么毫无疑问就是temporal-difference learning时序差分学习。TD学习是DP和MC方法的结合,与MC一样,TD可以直接从经验中进行学习,无需动态环境模型;与DP一样,TD方法更新估计值与其他状态的估计值有关,无需等待一个最终的结果,所以说TD是bootstrap。**TD、DP、MC三者之间的关系是rl学习理论中反复出现的主题。**依然按照之前的套路,先关注策略评估/预测,根据值函数估算策略,然后再考虑控制问题,寻找最优策略。DP、MC、TD都使用GPI的一些变体,方法的差异在于它们对预测问题的方法的差异。

TD预测/评估

TD和MC都是使用经验来解决预测问题,根据策略 π \pi π获得的经验数据,这两种方法都更新了经验中发生的非终止状态 S t S_t St的状态价值。MC方法一直要等到一个episode结束之后才会返回回报值,从而进行更新。适用于非平稳环境的every-visit的MC方法: V ( S t ) ← V ( S t ) + α [ G t − V ( S t ) ] V(S_t)\leftarrow V(S_t)+\alpha[G_t-V(S_t)] V(St)V(St)+α[GtV(St)],其中 G t G_t Gt是时间t的回报,α是一个步长常数值,这种方法也叫做constant-α MC。MC方法必须等到回合结束才可以进行更新,这是因为只有回合结束我们才能已知 G t G_t Gt累积回报,从而才可以确定 G t − V ( S t ) G_t-V(S_t) GtV(St)增量,才可以进行更新。TD方法只需要获得下一个状态的估计值以及对应的即时奖励就可以进行更新:
V ( S t ) ← V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) − V ( S t ) ] V(S_{t}) \leftarrow V(S_{t})+\alpha[R_{t+1}+\gamma V(S_{t+1})-V(S_{t})] V(St)V(St)+α[Rt+1+γV(St+1)V(St)]
MC方法更新的目标实际上是 G t G_t Gt,TD方法更新的目标是 R t + 1 + γ V ( S t + 1 ) R_{t+1}+\gamma V(S_{t+1}) Rt+1+γV(St+1).这种TD方法也叫做TD(0)或者one-step TD。是TD(λ)或n-step TD方法的一种特殊情况。
TD(0)算法的伪代码如下:
image
TD(0)的更新依赖于一个已知的估计,因此说它是bootstrap。
来看之前的DP的式子(该式在第3章第4章):
v π ( s ) ≐ E π [ G t ∣ S t = s ] = E π [ R t + 1 + γ G t + 1 ∣ S t = s ] = E π [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] \begin{aligned} v_{\pi}(s) & \doteq \mathbb{E}_{\pi}\left[G_{t} \mid S_{t}=s\right] \\ &=\mathbb{E}_{\pi}\left[R_{t+1}+\gamma G_{t+1} \mid S_{t}=s\right] \\ &=\mathbb{E}_{\pi}\left[R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right) \mid S_{t}=s\right] \end{aligned} vπ(s)Eπ[GtSt=s]=Eπ[Rt+1+γGt+1St=s]=Eπ[Rt+1+γvπ(St+1)St=s]
式子的第一行实际上就是MC方法,第三行是DP和TD方法。MC是无模型的,无法直接得到对应的期望值,因此需要进行采样更新sample update;DP方法中的模型是已知的,所以期望可求,但是其 v π ( S t + 1 ) v_\pi(S_{t+1}) vπ(St+1)是估计得到的;TD方法则结合了MC的采样和DP的bootstrap,因为对于TD来说,期望是估计的,后续状态的值也是估计得到的。

TD(0)的backup diagram图如下:
image
backup diagram只有一条分支,这是因为我们采用的是采样的方式而不是求期望的方式,这种方式被称作sample update。采样更新与期望更新的区别在于更新值依赖于单个的采样还是所有可能的后继状态的分布。另外TD(0)采用了bootstrap的方法,只需要观测到下一个状态即可。区别于MC的备份图(是一条完整的分支)。
TD error:回看上述关于TD(0)更新状态的表达式,其中 R t + 1 + γ V ( S t + 1 ) − V ( S t ) R_{t+1}+\gamma V(S_{t+1})-V(S_{t}) Rt+1+γV(St+1)V(St)是一个误差值,衡量的是当前估计值与目标估计值 R t + 1 + γ V ( S t + 1 ) R_{t+1}+\gamma V(S_{t+1}) Rt+1+γV(St+1)的差别,这个差值就是TD error。TD error表示为:
δ t ≐ R t + 1 + γ V ( S t + 1 − V ( S t ) ) \delta_t \doteq R_{t+1}+\gamma V(S_{t+1}-V(S_t)) δtRt+1+γV(St+1V(St))
MC误差也可以表示为TD误差的形式:
G t − V ( S t ) = R t + 1 + γ G t + 1 − V ( S t ) + γ V ( S t + 1 ) − γ V ( S t + 1 )                                    = δ t + γ ( G t + 1 − V ( S t + 1 ) )                                    = δ t + γ δ t + 1 + γ 2 ( G t + 2 − V ( S t + 2 ) )                                    = δ t + γ δ t + 1 + γ 2 δ t + 2 + ⋯ + γ T − t − 1 δ T − 1 + γ T − t ( G T − V ( S T ) )                                    = δ t + γ δ t + 1 + γ 2 δ t + 2 + ⋯ + γ T − t − 1 δ T − 1 + γ T − t ( 0 − 0 )                                    = ∑ k = t T − 1 γ k − t δ k \begin{aligned} &G_{t}-V\left(S_{t}\right)=R_{t+1}+\gamma G_{t+1}-V\left(S_{t}\right)+\gamma V\left(S_{t+1}\right)-\gamma V\left(S_{t+1}\right)\\ &\begin{array}{l} {\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;}=\delta_{t}+\gamma\left(G_{t+1}-V\left(S_{t+1}\right)\right) \\ {\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;} =\delta_{t}+\gamma \delta_{t+1}+\gamma^{2}\left(G_{t+2}-V\left(S_{t+2}\right)\right) \\ {\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;} =\delta_{t}+\gamma \delta_{t+1}+\gamma^{2} \delta_{t+2}+\cdots+\gamma^{T-t-1} \delta_{T-1}+\gamma^{T-t}\left(G_{T}-V\left(S_{T}\right)\right) \\ {\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;} =\delta_{t}+\gamma \delta_{t+1}+\gamma^{2} \delta_{t+2}+\cdots+\gamma^{T-t-1} \delta_{T-1}+\gamma^{T-t}(0-0) \\ {\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;} =\sum_{k=t}^{T-1} \gamma^{k-t} \delta_{k} \end{array} \end{aligned} GtV(St)=Rt+1+γGt+1V(St)+γV(St+1)γV(St+1)=δt+γ(Gt+1V(St+1))=δt+γδt+1+γ2(Gt+2V(St+2))=δt+γδt+1+γ2δt+2++γTt1δT1+γTt(GTV(ST))=δt+γδt+1+γ2δt+2++γTt1δT1+γTt(00)=k=tT1γktδk
实际过程中如果V在一个episode中被更新了,那么这个等式就不严格成立。但是如果更新步长很小的话,近似成立。(步长小的一种解释:V变化,但是TDerror对于更新的影响不大,所以可以近似成立)

example:
来自:https://blog.csdn.net/u013695457/article/details/89109881
你每天都开车回家,并尝试预测路上所需时间。当你离开办公室的时候,你看了下[时间、周几、天气、其它相关信息]。例如现在是周五,你6点离开办公室,你估计需要30分钟到家;然后你6:05来到了车上,这时你注意开始下雨了,因此你预计还需要35分钟到家;15分钟后,你跑完了高速路的部分,发现路上很顺利,因此你修改对总时长的预计为35分钟;不幸的是,这时候前面出现了个卡车堵着你,你还没法超过去,你直到6:40才超过卡车;3分钟后,你到家了。这个过程整理如下:
image
这个例子中,reward是每个路段所消耗的时间,且折扣因子是1,因此return就是还需要的时间。表格中间的一列就是对各个状态的估计值。我们可以通过这个例子理解MC和TD方法:
image
上图绘制了利用MC方法和TD方法预测的总耗时。图中的红色箭头是每个状态计算得到的error。对于MC方法,只有我们到家后得到真实的总时间消耗,才能计算各个状态的 G t G_t Gt,这样才能更新各个状态的值,而人们实际是不会这么做的,我们会根据当前的情况而不断修正对还需时间的预测。例如我们最初估V( S 0 S_0 S0)=30min,但是我们堵车了25min25min才走了半程。这时我们实际上就可以重新估计V( S 0 S_0 S0)=50min了,可见不要走完全程得到 G t G_t Gt我们也能改善估计,这就是采用时间差分的方法。
如果搬家了,导致路程的前半段还不变,但是后半段变了,这样TD方法就比MC方法好很多,因为TD方法可以充分利用以往的经验,而MC方法则必须从头开始学习,因为以往的那些 G t G_t Gt值没用了,如果非得用,也会在开始的时候被过去经验干扰,很久后才收敛,这是所谓的nonstationary问题。
此外,TD方法在计算和存储上面也有优势。

TD预测方法的优势

TD方法相比于DP的优势:TD不需要环境的model,不需要奖励以及下一个状态的概率分布。
TD方法相比于MC的优势:
①TD是step-by-step的,是作为一种在线的、增量式的方式进行计算。MC方法必须等到回合结束才能进行更新,因为只有回合结束才可以获得回报才可以进行更新,而TD方法只需要等待一个时间步长即可。有些任务一个回合的时间很长,因此如果采用MC的方法来进行学习会导致学习时间很长。还有一些continuing task根本没有episode。
②一些MC方法必须忽略/折扣实验性的actions。(看上一章off-policy部分)TD方法就不容易受这些问题的影响,可以从所有的transitions中学习。
③在随机环境中实践相关任务,往往TD方法要比MC方法收敛得快,但是目前并没有得到证明。

TD方法可以说是以一种猜测去估计另一个猜测,这种方式是否准确,是否能够收敛到正确的值。答案是肯定的。对于一个固定策略 π \pi π来说,如果步长参数足够小,并且满足第二章中关于nonstationary问题的处理方式,TD(0)已经被证明可以收敛到 v π v_\pi vπ。(大多数证明仅仅适用于基于tabluar的rl方法,部分适用于采用linear function近似的情况。)

example:随机游走
image
这是一个马尔可夫回报过程(Markov Reward Process,MRP),与MDP的区别是MRP没有动作选择的步骤,只有状态转移。random walk从中心C出发,转移到左边或右边状态的概率都是0.5,到达两侧的终止状态则结束episode,回报值标记在箭头上,取γ=1.0,那么每个状态的真实值是从该状态出发能到达最右端的概率。
这里进行计算推导,利用贝尔曼方程,把每个状态的贝尔曼方程写出来即可:
V A = 0.5 ( 0 + γ ∗ 0 ) + 0.5 ( 0 + γ ∗ V B )    V B = 0.5 ( 0 + γ ∗ V A ) + 0.5 ( 0 + γ ∗ V C )    V C = 0.5 ( 0 + γ ∗ V B ) + 0.5 ( 0 + γ ∗ V D )    V D = 0.5 ( 0 + γ ∗ V C ) + 0.5 ( 0 + γ ∗ V E )    V E = 0.5 ( 0 + γ ∗ V D ) + 0.5 ( 1 + γ ∗ 0 ) V_A = 0.5(0+\gamma*0)+0.5(0+\gamma*V_B)\\ \;V_B = 0.5(0+\gamma*V_A)+0.5(0+\gamma*V_C)\\ \;V_C = 0.5(0+\gamma*V_B)+0.5(0+\gamma*V_D)\\ \;V_D = 0.5(0+\gamma*V_C)+0.5(0+\gamma*V_E)\\ \;V_E = 0.5(0+\gamma*V_D)+0.5(1+\gamma*0)\\ VA=0.5(0+γ0)+0.5(0+γVB)VB=0.5(0+γVA)+0.5(0+γVC)VC=0.5(0+γVB)+0.5(0+γVD)VD=0.5(0+γVC)+0.5(0+γVE)VE=0.5(0+γVD)+0.5(1+γ0)
然后解方程组即可。简单的说一下,以计算 V A V_A VA为例,在state A时,转移到下一状态分别有两种可能,转移到state B或转移到terminal状态,概率都是0.5。一般的,我们把在terminal状态的状态价值定义为0.
最终得到A、B、C、D、E对应的真实值是1/6、2/6、3/6、4/6、5/6.
然后分别利用MC和TD的方法估计每个状态的值:
image
右图表示不同episode后,利用TD方法得到的估计值。黑色线表示真实的值。可以看到经过100个episode后,估计值和真实值已经很接近了。右图对比了MC方法和TD方法值估计的误差。误差的计算是:sum(估计值-真实值)除以状态数和episode的数量。可以看到TD方法得到误差都低于MC方法。

TD(0)的最优性

假设我们只有有限的经验,比如只有10个episode或者100个step的经验数据。在这种情况下为了使算法收敛,一个常用的方法就是复用这些经验值。对于TD方法来说,利用更新表达式来更新值函数,但是并不是每一步都要更新,而是要等到所有的经验都遍历完(也就是1个batch)然后再一次性的进行更新。如果一个状态在一个batch中出现了很多次,那么最后更新的就是该状态对应的多个增量的和。这种方式叫做batch update,因为所有的更新都是在完成一个batch之后进行的。
通过采用batch-update的方式,TD(0)会确定的收敛到一个解,只要步长参数α足够小;对于constant-α MC方法采用batch-update也会收敛到一个确定的值。
可以看两个例子:

image
image
针对这个例子,batch MC的是最小化样本上的MSE,而batch TD则是最小化样本上的MLE(极大似然估计),后者是考虑MDP模型的。实际上,后面这种考虑模型的估计叫做certainty equivalence估计,因为这等价于假设过程是已知的。如果不考虑折扣因子γ,这个概念的含义是,首先计算出终止状态的值函数,然后每个中间状态的值函数是其后续状态值函数依概率的加权平均,这可以通过统计计算,然而当状态空间较大时,无法直接分析出这个估计,但是TD(0)能收敛到其上。这就是TD(0)比MC好的原因。non-batch方法虽然不能这样分析,但是可以认为non-batch方法是向certainty-equivalence估计靠近的一种方法。

Sarsa:在线策略TD控制

现在转向使用TD预测方法来解决控制问题,也就是去找到一个最优策略。依然按照之前的套路,遵循GPI的模式,仅使用TD方法来解决评估或预测部分。与之前的MC一样,需要权衡探索和利用,同时有两大类方法可选,on-policy和off-policy。本节讲解的是关于on-policy。
本节介绍的SARSA算法估计的是状态-动作对价值函数,与上一节估计状态值函数不同,但是更新规则实际上是可以通用的。对于这样一个轨迹:
image
适用于TD(0)的动作价值估计函数的更新公式如下:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) ] Q(S_{t},A_t) \leftarrow Q(S_{t},A_t)+\alpha[R_{t+1}+\gamma Q(S_{t+1},A_t+1)-Q(S_{t},A_t)] Q(St,At)Q(St,At)+α[Rt+1+γQ(St+1,At+1)Q(St,At)]
α是更新步长,决定向目标移动多少。
TD(0)的动作价值函数中包含了 ( S t , A t , R t + 1 , S t + 1 , A t + 1 ) (S_t,A_t,R_{t+1},S_{t+1},A_{t+1}) (St,At,Rt+1,St+1,At+1)五元组信息,这也是SARSA算法的由来。同时这样一个五元组信息也叫做一个transition。

SARSA的backup diagram如下所示:

image

现在我们已知如何更新动作价值函数,那么为了求得最优策略,与所有的on-policy一样,只需要一直更新策略,使其相对于Q值是贪婪的,这样目标策略就会收敛到最优策略。算法伪代码如下:
image
由于我们选择的动作A和目标动作A’都是按照同一个策略得到的,因此是on-policy的。

example:Windy Gridworld
来自:https://blog.csdn.net/u013695457/article/details/89109881
image

Q-learning:off-policy TD控制

Q-learning是rl中关于off-policy TD控制算法的早期突破之一。定义如下:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ m a x a Q ( S t + 1 , a ) − Q ( S t , A t ) ] Q(S_{t},A_t) \leftarrow Q(S_{t},A_t)+\alpha[R_{t+1}+\gamma \underset a{max}Q(S_{t+1},a)-Q(S_{t},A_t)] Q(St,At)Q(St,At)+α[Rt+1+γamaxQ(St+1,a)Q(St,At)]
Q学习的表达形式与SARSA很像,但是有一定区别:

  • SARSA算法与Q-learning算法的更新目标不同,对于Q-learning算法的更新目标中含有最大化操作,SARSA的更新目标是下一个状态动作对的q值
  • 这个最大化操作使得我们关心的是哪个action a可以使得下一个状态对应的Q值最大,而实际上采取的是哪个action我们并不关心,因此我们的behavior policy和target policy是不同的,所以Q-learning是off-policy的。
  • 从Q-learning的表达式中我们也可以看到,估计得到的Q值是直接逼近最优值函数的,而不是当前策略的值函数 q π q_\pi qπ,因此就无需进行后续的策略迭代。这一区别就好比值迭代和策略迭代之间的区别一样。

保证行为策略能够探索到所有的状态动作对,并且学习率α足够小时且满足随机近似条件,那么就可以证明Q-learning可以以概率1收敛到 q ∗ q_* q
Q-learning的伪代码如下:
image

那么有一个问题,Q-learning既然是off-policy,为什么不需要important sample呢
差了一些网络资源,都没怎么看懂。然后说下我自己的理解。首先我们回顾一下important sample,之所以off-policy需要IS,是因为off-policy中行为策略和目标策略不一致,而我们可以根据探索的经验数据得到行为策略的期望回报,而IS的作用就是把行为策略的回报值纠正为目标策略的期望回报。既然这样,那我们回过头来看Q学习的更新方式,Q学习关注的仅仅是在某个状态下采取哪个action才能使其对应的状态动作对的Q值最大,至于行为策略实际采取什么动作并不关心,那自然我们就更不需要一个IS把行为策略的回报转换到目标策略的回报上去了。

example: cliff walking
image

期望sara算法

Q-learning中我们的目标是下一个状态动作值函数的最大值,如果把最大化操作换做求期望是什么样的结果呢?
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ E π [ Q ( S t + 1 , A t + 1 ) ∣ S t + 1 ] − Q ( S t , A t ) ] ← Q ( S t , A t ) + α [ R t + 1 + γ ∑ a π ( a ∣ S t + 1 ) Q ( S t + 1 , a ) − Q ( S t , A t ) ] \begin{aligned} Q\left(S_{t}, A_{t}\right) & \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma \mathbb{E}_{\pi}\left[Q\left(S_{t+1}, A_{t+1}\right) \mid S_{t+1}\right]-Q\left(S_{t}, A_{t}\right)\right] \\ & \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma \sum_{a} \pi\left(a \mid S_{t+1}\right) Q\left(S_{t+1}, a\right)-Q\left(S_{t}, A_{t}\right)\right] \end{aligned} Q(St,At)Q(St,At)+α[Rt+1+γEπ[Q(St+1,At+1)St+1]Q(St,At)]Q(St,At)+α[Rt+1+γaπ(aSt+1)Q(St+1,a)Q(St,At)]
也就是把Q-learning中更新的目标从最大化操作变为了求期望的操作。形式与sarsa一样,更新目标又是Q的期望值,因此叫做期望sarsa算法。

由于更新的目标是期望的形式,因此比起Sarsa中单个蒙特卡洛采样,具有更小的方差。在rl中,偏差和方差的平衡一直是一个难两全的问题,对于估计来说,我们希望偏差小方差也小,但实际上往往是偏差小方差大,偏差大方差小。方差大带来的后果就是算法训练不稳定,容易影响收敛性。

期望sarsa算法增加了一定的计算量,但是减小了采取动作所造成的方差,该算法一般比sarsa算法表现好,而且在这个算法框架下把步长设置为1也不影响算法性能,但是sarsa算法必须在较小的步长情况下才会表现良好。excepted sarsa算法是on-policy的,当然也可以用于off-policy的形式,比如target policy是greedy策略而behavior policy则是具有探索性的策略,此时就成为了一个off-policy算法。

最大化偏差Maximization Bias 和 Double Learning

之前我们提到的MC或TD算法,在寻找最优策略时一般都遵循GPI模式,为了求得最优策略一般需要进行策略提升,也就是针对于当前估计的值函数取贪婪。比如Q-learning中就是让目标策略的动作满足对应的动作值函数最大的条件。这个最大化操作就会导致严重的正向偏差称之为最大化偏差。通俗的说,比如我们的真值是0,但是估计值是一个比较大的正数,这种情况就是最大化偏差。其实这就是rl中经常需 要考虑的问题之一,过估计的问题。
举个例子:最大化偏差的例子

image
智能体总是从状态A开始,然后具有左右两个动作。如果向右那么就直接进入终止状态并获得0的回报,向左进入状态B,在状态B有多个动作,执行任何一个动作都会进入终止并且都得到一个服从N(-0.1,1)的回报。显然,在状态A采取向右的动作获得的q值为0,对于任何向左的动作,其对应的q值始终都是-0.1.为了获得最大回报,最优策略自然是向右运动,但是由于状态b得到的回报是一个分布,因此在状态b有很大的概率获得一个大于0的回报。根据最大化操作,则会错误的选择向左的动作。
从上图中可以分析看到,起始时Q-learning有很大的概率选择向左的动作,尽管最后收敛到最优,但是收敛的时候依然有一定的概率选择向左的动作。这是因为我们采用的ε-greedy策略,如果ε为0.1,那么就说明有百分之10的概率随机选择,因此向左向右的概率依然各有5%。
为了解决这种正向偏差的问题,一种解决办法就是采用double-Q learning。
首先再回顾一下我们Q-learning的更新表达式,Q-learning的更新目标是 R t + 1 + γ m a x a Q ( S t + 1 , a ) R_{t+1}+\gamma \underset a{max}Q(S_{t+1},a) Rt+1+γamaxQ(St+1,a),因此我们需要知道两个条件,真实的 Q ( S t + 1 , . ) Q(S_{t+1},.) Q(St+1,.)以及哪个action可以使这个值取到最大。实际上我们使用了同样的数据来估计这两个值。相当于在有最大化偏差的基础上又做了最大化。所以我们考虑把上述两个过程分开。同时估计两个值 Q 1 ( a ) Q_1(a) Q1(a) Q 2 ( a ) Q_2(a) Q2(a),然后用其中一个估计来决定最大化动作,比如 a = a r g m a x a Q 1 ( a ) a=\underset a{argmax}Q_1(a) a=aargmaxQ1(a),用另一个估计来决定状态的值, Q 2 ( A ∗ ) = Q 2 ( a r g m a x a Q 1 ( a ) ) Q_2(A^*)=Q_2(\underset a{argmax}Q_1(a)) Q2(A)=Q2(aargmaxQ1(a)),这样就无偏了。这就是double q-learning。尽管有两个估计,但是在一个时间步内只会更新一个估计,因此double q-learning并不会使计算量增加一倍,只需要增加一倍的内存来存储另一个估计。其更新公式如下:
Q 1 ( S t , A t ) ← Q 1 ( S t , A t ) + α [ R t + 1 + γ Q 2 ( S t + 1 , a r g m a x a Q 1 ( S t + 1 , a ) ] ) − Q 1 ( S t , A t ) ] Q_1(S_t,A_t)\leftarrow Q_1(S_t,A_t)+\alpha [ R_{t+1}+\gamma Q_2(S_{t+1}, \underset a{argmax}Q_1(S_{t+1},a)]) - Q_1(S_t,A_t)] Q1(St,At)Q1(St,At)+α[Rt+1+γQ2(St+1,aargmaxQ1(St+1,a)])Q1(St,At)]
以0.5的概率使用上式更新 Q 1 Q_1 Q1,以0.5的概率更新 Q 2 Q_2 Q2。double q-learning的伪代码如下:

image

上述我们所讲到的关于Q-learning和double Q-learning都是基于tabular的rl算法,如果将其扩展为高维空间,可以使用一个近似值函数来替代表格,如果是一个神经网络的形式,就得到了我们的DQN和Double DQN。

Game、afterstate和其他特例

围绕rl相关的问题,我们提出了一些比较通用的概念和工具,比如值函数,但是这些工具并不能涵盖所有,或者说对于某些特殊的问题有特殊的定义或方法来解决。
“井字棋”的例子:
第一个例子就是井字棋游戏的例子,通用的方法是学习值函数,不管是状态值函数还是动作值函数。但是之前展示给我们解决井字棋游戏的算法既不是状态值函数也不是动作值函数。传统的状态值函数是agent在某个状态估计选择某个行为获得的回报值,但是井字棋游戏中估计的是状态采取动作之后的效益,称之为afterstates,对应的值函数为afterstates值函数。
afterstates值函数对于我们对环境初始部分已知,但是没必要完全知道的情况很有用。比如在游戏中我们知道每走一步的立即回报,知道象棋每走一步移动后的状态,但是并不知道对手要如何回应,afterstates值函数是一种自然的利用这种知识的方法,所以学习更有效。
image
在这个例子当中,位置-移动对不同,但是产生了相同的afterposition,所以应该给一样的值。如果对于传统的行为值就必须单独的获得两个值函数的值,但是对于afterstates值函数会同等的评估二者,所以afterstates值函数更合理。

总结

本章引入了一个新的rl学习方法,TD方法。依照GPI模式讨论了基于TD的预测问题和控制问题。在预测问题上,又涉及两种不同的策略,on-policy和off-policy。典型的代表性算法分别为Sarsa和Q-learning。针对Sarsa的方差大的问题,结合Q-learning和Sarsa提出了excepted Sarsa;针对Q-learning方法的最大化偏差的问题,提出了double Q-learning方法。
本章所涉及的方法是rl中应用最为广泛的。之后将继续扩展这部分算法,使其略显复杂但是能够发挥更强大的作用。目前本章中所介绍的算法都是单步的,并且是基于tabular的model-free TD算法。
在本章中要了解基于TD的预测及求解最优策略的方法,同时要比对TD和DP以及MC方法的优势,在batch update的更新方式下,TD是求MLE,MC是求MSE。
最后,在这一章我们都是在增强学习的环境中讨论TD的,实际上 TD不局限于增强学习。它是学习对动态系统做长期预测的通用方法。比如TD算法可以被用来预测金融数据、生命周期、选举结构、气候模式、动物行为、电站需求和顾客购物。只有TD算法被作为一种纯粹的预测方法独立于RL之外时他们的理论特性才可得到很好的理解。即使如此,TD 学习方法潜在的应用依旧没有被广泛的探索。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值