强化学习(五)用时序差分法(TD)求解

微信公众号、知乎号(同名):李歪理,欢迎大家关注

在强化学习(四)用蒙特卡罗法(MC)求解中,我们讲到了使用蒙特卡罗法来求解强化学习问题的方法,虽然蒙特卡罗法很灵活,不需要环境的状态转化概率模型,但是它需要所有的采样序列都是经历完整的状态序列。如果我们没有完整的状态序列,那么就无法使用蒙特卡罗法求解了。本文我们就来讨论可以不使用完整状态序列求解强化学习问题的方法:时序差分(Temporal-Difference, TD)。

1. 时序差分TD简介

时序差分法和蒙特卡罗法类似,都是不基于模型的强化学习问题求解方法。所以在上一篇定义的不基于模型的强化学习控制问题和预测问题的定义,在这里仍然适用。

预测问题:即给定强化学习的5个要素:状态集 SSS, 动作集 AAA, 即时奖励 RRR,衰减因子 γ\gammaγ, 给定策略 π\piπ,求解该策略的状态价值函数 v(π)v(\pi)v(π)

控制问题,也就是求解最优的价值函数和策略。给定强化学习的5个要素:状态集 SSS, 动作集 AAA, 即时奖励 RRR,衰减因子 γ\gammaγ, 探索率 ϵ\epsilonϵ,求解最优的动作价值函数 q∗q_{*}q 和最优策略 π∗\pi_{*}π

回顾蒙特卡罗法中计算状态收获的方法是:

Gt=Rt+1+γRt+2+γ2Rt+3+⋯+γT−t−1RTG_t=R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3} + \cdots+\gamma^{T-t-1}R_TGt=Rt+1+γRt+2+γ2Rt+3++γTt1RT

而对于时序差分法来说,我们没有完整的状态序列,只有部分的状态序列,那么如何可以近似求出某个状态的收获呢?回顾强化学习(二)马尔科夫决策过程(MDP)中的贝尔曼方程:

vπ(s)=Eπ(Rt+1+γvπ(St+1)∣St=s)v_{\pi}(s) = \mathbb{E}_{\pi}(R_{t+1} + \gamma v_{\pi}(S_{t+1}) \mid S_t = s)vπ(s)=Eπ(Rt+1+γvπ(St+1)St=s)

这启发我们可以用 Rt+1+γvπ(St+1)R_{t+1} + \gamma v_{\pi}(S_{t+1})Rt+1+γvπ(St+1) 来近似的代替收获 GtG_tGt,一般我们把 Rt+1+γvπ(St+1)R_{t+1} + \gamma v_{\pi}(S_{t+1})Rt+1+γvπ(St+1) 称为TD目标值。 Rt+1+γvπ(St+1)−V(St)R_{t+1} + \gamma v_{\pi}(S_{t+1})-V(S_t)Rt+1+γvπ(St+1)V(St) 称为TD误差,将用TD目标值近似代替收获 GtG_tGt 的过程称为引导(bootstrapping)。这样我们只需要两个连续的状态与对应的奖励,就可以尝试求解强化学习问题了。

现在我们有了自己的近似收获 GtG_tGt 的表达式,那么就可以去求解时序差分的预测问题和控制问题了。

2. 时序差分TD的预测问题求解

时序差分的预测问题求解和蒙特卡罗法类似,二者的区别主要是收获 GtG_tGt 的表达式不同,时序差分 GtG_tGt 的表达式为:

Gt=Rt+1+γV(St+1)G_t=R_{t+1} + \gamma V(S_{t+1})Gt=Rt+1+γV(St+1)

而蒙特卡罗法 GtG_tGt 的表达式为:

Gt=Rt+1+γRt+2+γ2Rt+3+⋯+γT−t−1RTG_t=R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3} + \cdots+\gamma^{T-t-1}R_TGt=Rt+1+γRt+2+γ2Rt+3++γTt1RT

可以看一下二者在求解 V(St)V(S_t)V(St) 时的比较:

V(St)←V(St)+α(Rt+1+γRt+2+γ2Rt+3+⋯+γT−t−1RT−V(St))V(S_t) \leftarrow V(S_t) + \alpha \left( \textcolor{red}{R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3} + \cdots+\gamma^{T-t-1}R_T} - V(S_t) \right)V(St)V(St)+α(Rt+1+γRt+2+γ2Rt+3++γTt1RTV(St))

V(St)←V(St)+α(Rt+1+γV(St+1)−V(St))V(S_t) \leftarrow V(S_t) + \alpha \left( \textcolor{red}{R_{t+1} + \gamma V(S_{t+1})} - V(S_t) \right)V(St)V(St)+α(Rt+1+γV(St+1)V(St))

这两种方法都可以用一个[0,1]的系数 α\alphaα 作为参数,但不同点是因为蒙特卡罗法要用到完整的序列,所以在大多数情况下可以用序列的长度来计算 α\alphaαα=1N(s)\alpha=\frac{1}{N(s)}α=N(s)1,而时序差分TD因为不使用完整的序列,所以不能用 1N(s)\frac{1}{N(s)}N(s)1

这里我们用一个简单的例子来看看蒙特卡罗法和时序差分法求解预测问题的不同。

假设我们的强化学习问题有A,B两个状态,模型未知,不涉及策略和行为。只涉及状态转化和即时奖励。一共有8个完整的状态序列如下:

  1. A,0,B,0
  2. B,1
  3. B,1
  4. B,1
  5. B,1
  6. B,1
  7. B,1
  8. B,0

只有第一个状态序列是有状态转移的,其余7个只有一个状态。设置衰减因子 γ=1\gamma=1γ=1

首先我们按蒙特卡罗法来求解预测问题。由于只有第一个序列中包含状态A,因此A的价值仅能通过第一个序列来计算,也就等同于计算该序列中状态A的收获:

V(A)=G(A)=RA+γRB=0V(A)=G(A)=R_A+\gamma R_B=0V(A)=G(A)=RA+γRB=0

对于B,则需要对其在8个序列中的收获值来平均,其结果是6/8。

再来看看时序差分法求解的过程。其收获是在计算状态序列中某状态价值时是应用其后续状态的预估价值来计算的,对于B来说,它总是终止状态,没有后续状态,因此它的价值直接用其在8个序列中的收获值来平均,其结果是6/8。

对于A,只在第一个序列出现,它的价值为:

V(A)=G(A)=RA+γV(B)=68V(A)=G(A)=R_A+\gamma V(B)=\frac{6}{8}V(A)=G(A)=RA+γV(B)=86

从上面的例子我们也可以看到蒙特卡罗法和时序差分法求解预测问题的区别。

一是时序差分法在知道结果之前就可以学习,也可以在没有结果时学习,还可以在持续进行的环境中学习,而蒙特卡罗法则要等到最后结果才能学习,时序差分法可以更快速灵活的更新状态的价值估计,这在某些情况下有着非常重要的实际意义。

二是时序差分法在更新状态价值时使用的是TD目标值,即基于即时奖励和下一状态的预估价值来替代当前状态在状态序列结束时可能得到的收获,是当前状态价值的有偏估计,而蒙特卡罗法则使用实际的收获来更新状态价值,是某一策略下状态价值的无偏估计,这一点蒙特卡罗法占优。

三是虽然时序差分法得到的价值是有偏估计,但是其方差却比蒙特卡罗法得到的方差要低,且对初始值敏感,通常比蒙特卡罗法更加高效。

从上面的描述可以看出时序差分法的优势比较大,因此现在主流的强化学习求解方法都是基于时序差分的。后面的文章也会主要基于时序差分法来扩展讨论。

3. n步时序差分

在第二节的时序差分法中,我们使用了 Rt+1+γV(St+1)R_{t+1} + \gamma V(S_{t+1})Rt+1+γV(St+1) 来近似的代替收获 GtG_tGt。即向前一步来近似我们的收获 GtG_tGt,那么能不能向前两步呢?当然可以,这时我们的收获 GtG_tGt 的近似表达式为:

Gt=Rt+1+γRt+2+γ2V(St+2)G_t=R_{t+1} + \gamma R_{t+2}+\gamma^2V(S_{t+2})Gt=Rt+1+γRt+2+γ2V(St+2)

从两步,到三步,再到n步,我们可以归纳出n步时序差分收获 GtG_tGt 表达式为:

Gt=Rt+1+γRt+2+⋯+γn−1Rt+n+γnV(St+n)G_t=R_{t+1} + \gamma R_{t+2}+\cdots+\gamma^{n-1}R_{t+n}+\gamma^nV(S_{t+n})Gt=Rt+1+γRt+2++γn1Rt+n+γnV(St+n)

当n越来越大,趋于无穷,或者说趋于使用完整的状态序列时,n步时序差分就等价于蒙特卡罗法了。

对于n步时序差分来说,和普通的时序差分的区别就在于收获的计算方式的差异。那么既然有这个n步的说法,那么n到底是多少步好呢?如何衡量n的好坏呢?我们在下一节讨论。

4. TD(λ)TD(\lambda)TD(λ)

为了便于理解,我们先举个大规模随机行走的例子:

这个示例研究了使用多个不同步数预测联合不同步长(step-size,公式里的系数α)时,分别在在线和离线状态时状态函数均方差的差别。所有研究使用了10个Episode。离线与在线的区别在于,离线是在经历所有10个Episode后进行状态价值更新;而在线则至多经历一个Episode就更新依次状态价值

结果如图表明,离线和在线之间曲线的形态差别不明显;从步数上来看,步数越长,越接近MC算法,均方差越大。对于这个大规模随机行走示例,在线计算比较好的步数是3-5步,离线计算比较好的是6-8步。但是不同的问题其对应的比较高效的步数不是一成不变的。这里比较好的意思是RMS error比较低。因此选择多少步数作为一个较优的计算参数也是一个问题。

n步时序差分选择多少步数作为一个较优的计算参数是需要尝试的超参数调优问题。为了能在不增加计算复杂度的情况下综合考虑所有步数的预测,也就是不去考虑选择多少步为最优,而是直接将所有可能的步数都考虑进入,我们引入了一个新[0,1]的参数 λ\lambdaλ,定义 λ\lambdaλ-收获 是n从1到 ∞\infty 所有步的收获乘以权重的和。每一步的权重是 (1−λ)λn−1(1-\lambda)\lambda^{n-1}(1λ)λn1 ,这样 λ\lambdaλ-收获 的计算公式表示为:

Gtλ=(1−λ)∑n=1∞λn−1Gt(n)G_t^{\lambda} = (1 - \lambda) \sum_{n=1}^{\infty} \lambda^{n-1} G_t^{(n)}Gtλ=(1λ)n=1λn1Gt(n)

如上图所示(其中空心的大圈表示状态,实心小圈表示动作),第三节的末尾抛出一个问题:n到底是多少步好呢?也就是说选择图中的那一条序列最好呢?这里直接给每一条序列都赋予了一个参数,然后选取所有序列,然后让参数之和为1。

进而我们可以得到 TD(λ)TD(\lambda)TD(λ) 的价值函数的迭代公式:

V(St)=V(St)+α(Gtλ−V(St))V(S_t) = V(S_t) + \alpha (G_t^{\lambda} - V(S_t))V(St)=V(St)+α(GtλV(St))

Q(St,At)=Q(St,At)+α(Gtλ−Q(St,At))Q(S_t, A_t) = Q(S_t, A_t) + \alpha (G_t^{\lambda} - Q(S_t, A_t))Q(St,At)=Q(St,At)+α(GtλQ(St,At))

每一步收获的权重定义为 (1−λ)λn−1(1-\lambda)\lambda^{n-1}(1λ)λn1 的原因是什么呢?其图像如下图所示,可以看到随着n的增大,其第n步收获的权重呈几何级数的衰减。当在T时刻到达终止状态时,未分配的权重全部给予终止状态的实际收获值。这样可以使一个完整的状态序列中所有的n步收获的权重加起来为1,离当前状态越远的收获其权重越小。

这张图还是比较好理解,例如对于n=3的3-步收获,赋予其在 λ\lambdaλ-收获 中的权重如左侧阴影部分面积,对于终止状态的T-步收获,T以后的所有阴影部分面积。而所有节段面积之和为1。这种几何级数的设计也考虑了算法实现的计算方便性。

Gtλ=(1−λ)∑n=1∞λn−1Gt(n)G_t^{\lambda} = (1 - \lambda) \sum_{n=1}^{\infty} \lambda^{n-1} G_t^{(n)}Gtλ=(1λ)n=1λn1Gt(n)

对于所有n从1到 ∞\infty,权重的总和为:

∑n=1∞(1−λ)λn−1\sum_{n=1}^{\infty} (1-\lambda)\lambda^{n-1}n=1(1λ)λn1

这是一个等比数列,首项为 (1−λ)(1-\lambda)(1λ),公比为 λ\lambdaλ。其和为:

和=(1−λ)∑n=0∞λn=1−λn=1(当n趋向于无穷的时候)和=(1-\lambda)\sum_{n=0}^{\infty}\lambda^n=1-\lambda^n=1(当n趋向于无穷的时候) =(1λ)n=0λn=1λn=1(n趋向于无穷的时候)

TD(λ)TD(\lambda)TD(λ) 的设计使得Episode中:

  • 后一个状态的状态价值与之前所有状态的状态价值有关,同时也可以说成是一个状态价值参与决定了后续所有状态的状态价值
  • 但是每个状态的价值对于后续状态价值的影响权重是不同的。我们可以从两个方向来理解TD(λ)TD(\lambda)TD(λ)

从前向来看 TD(λ)TD(\lambda)TD(λ)

一个状态的价值 V(St)V(S_t)V(St)GtG_tGt 得到,而 GtG_tGt 又间接由所有后续状态价值计算得到,因此可以认为更新一个状态的价值需要知道所有后续状态的价值。也就是说,必须要经历完整的状态序列获得包括终止状态的每一个状态的即时奖励才能更新当前状态的价值。这和蒙特卡罗法的要求一样,因此 TD(λ)TD(\lambda)TD(λ) 有着和蒙特卡罗法一样的劣势。

λ=0\lambda=0λ=0 时,就是第二节讲到的普通的时序差分法,当 λ=1\lambda=1λ=1 时,所有步数的回报都会被考虑(且权重之和为1),最后的结果就是用完整Episode获得的实际回报来更新状态值——这正是MC方法的做法。

这里对上一段的说法进行解释:

λ=1\lambda=1λ=1 的情况:

λ=0\lambda=0λ=0 的情况:

从反向来看 TD(λ)TD(\lambda)TD(λ)

它可以分析我们状态对后续状态的影响。比如老鼠在依次连续接受了3 次响铃和1 次亮灯信号后遭到了电击,那么在分析遭电击的原因时,到底是响铃的因素较重要还是亮灯的因素更重要呢?如果把老鼠遭到电击的原因认为是之前接受了较多次数的响铃,则称这种归因为频率启发(frequency heuristic) 式;而把电击归因于最近少数几次状态的影响,则称为就近启发(recency heuristic) 式

如果给每一个状态引入一个数值:效用(eligibility, E) 表示该状态对后续状态的影响,就可以同时利用到上述两个启发。而所有状态的效用值总称为效用迹(eligibility traces,ES)。定义为:

E0(s)=0Et(s)=γλEt−1(s)+1(St=s)={0t<k(γλ)t−kt≥k,s.t. λ,γ∈[0,1], s is visited once at time k\begin{align*} E_0(s) &= 0 \\ E_t(s) = \gamma \lambda E_{t-1}(s) + \mathbb{1}(S_t = s) &= \begin{cases} 0 & t < k \\ (\gamma \lambda)^{t-k} & t \geq k \end{cases} , \quad \text{s.t. } \lambda, \gamma \in [0,1],\, s \text{ is visited once at time } k \end{align*}E0(s)Et(s)=γλEt1(s)+1(St=s)=0={0(γλ)tkt<ktk,s.t. λ,γ[0,1],s is visited once at time k

其中 1(St=s)1(S_{t} = s)1(St=s) 指示函数,若当前时刻访问的状态是 sss,则为1,否则为0。

这个式子是考虑状态 sss 只在时间步 kkk 被访问了一次。可以理解为:t<kt < kt<k 的时候状态 sss 对后续状态的影响为0,因为状态 sss 还未被访问;t≥kt\ge ktk 时对后续状态的影响随着 tttkkk 的距离变长而逐渐减小。

也可以手动推理一下上面的式子:

Et(s)=γλEt−1(s)+1(St=s)=γλ(γλEt−2(s)+1(St−1=s))+1(St=s)=(γλ)2Et−2(s)+γλ1(St−1=s)+1(St=s)=⋯=(γλ)t−kEk(s)+(γλ)t−k−11(Sk+1=s)+(γλ)t−k−21(Sk+2=s)+⋯+γλ1(St−1=s)+1(St=s)\begin{align} E_t(s) &= \gamma \lambda E_{t-1}(s) + \mathbb{1}(S_t = s)\\ &=\gamma \lambda(\gamma \lambda E_{t-2}(s)+1(S_{t-1}=s))+\mathbb{1}(S_t = s)\\ &=(\gamma \lambda)^2 E_{t-2}(s)+\gamma \lambda\mathbb{1}(S_{t-1} = s)+\mathbb{1}(S_t = s)\\ &=\cdots\\ &=(\gamma \lambda)^{t-k} E_{k}(s)+(\gamma \lambda)^{t-k-1}\mathbb{1}(S_{k+1} = s)+(\gamma \lambda)^{t-k-2}\mathbb{1}(S_{k+2} = s)+\cdots+\gamma \lambda\mathbb{1}(S_{t-1} = s)+\mathbb{1}(S_t = s) \end{align}Et(s)=γλEt1(s)+1(St=s)=γλ(γλEt2(s)+1(St1=s))+1(St=s)=(γλ)2Et2(s)+γλ1(St1=s)+1(St=s)==(γλ)tkEk(s)+(γλ)tk11(Sk+1=s)+(γλ)tk21(Sk+2=s)++γλ1(St1=s)+1(St=s)

因为只有在 t=kt=kt=k 时状态 sss 才会被访问,所以从 E0(s)E_{0}(s)E0(s)Ek−1(s)E_{k-1}(s)Ek1(s) 都为0,Ek(s)=γλEk−1(s)+1(Sk=s)=1E_{k}(s)=\gamma \lambda E_{k-1}(s)+\mathbb{1}(S_k = s)=1Ek(s)=γλEk1(s)+1(Sk=s)=1,除 1(Sk=s)\mathbb{1}(S_k = s)1(Sk=s)为1,其他的都为0,即1(Sk+1=s)=0,1(Sk+2=s)=0,1(Sk−1=s)=0,1(Sk−2=s)=0\mathbb{1}(S_{k+1} = s)=0,\mathbb{1}(S_{k+2} = s)=0,\mathbb{1}(S_{k-1} = s)=0,\mathbb{1}(S_{k-2} = s)=01(Sk+1=s)=0,1(Sk+2=s)=0,1(Sk1=s)=0,1(Sk2=s)=0,这样可以推算出当 t≥kt\ge ktkEk(s)=(γλ)t−kE_{k}(s)=(\gamma \lambda)^{t-k}Ek(s)=(γλ)tk

下图给出了 Et(s)E_{t}(s)Et(s) 对于 ttt 的一个可能的曲线图:

该图横坐标是时间,横坐标下有竖线的位置代表当前进入了状态 sss(在一个时间序列里面多次进入) ,纵坐标是效用追踪值 EEE 。可以看出当某一状态连续出现,EEE 值会在一定衰减的基础上有一个单位数值的提高,此时将增加该状态对于最终收获贡献的比重,因而在更新该状态价值的时候可以较多地考虑最终收获的影响。同时如果该状态距离最终状态较远,则其对最终收获的贡献越小,在更新该状态时也不需要太多的考虑最终收获。

特别的, EEE 值并不需要等到完整的Episode结束才能计算出来,它可以每经过一个时刻就得到更新。 EEE 值存在饱和现象,有一个瞬时最高上限:Emax=1/(1−γλ)E_{max} = 1/(1-\gamma\lambda)Emax=1/(1γλ)

这个瞬时最高上限是假设某一状态 sss 在每个时刻都被访问,也就是 1(St=s)=1\mathbb{1}(S_{t} = s)=11(St=s)=1 对所有的 ttt 都成立,这样 Et(s)E_t(s)Et(s) 达到最大。

迭代展开就是:

Et(s)=λγEt−1(s)+1E_t(s)=\lambda \gamma E_{t-1}(s)+1Et(s)=λγEt1(s)+1
Et−1(s)=λγEt−2(s)+1E_{t-1}(s)=\lambda \gamma E_{t-2}(s)+1Et1(s)=λγEt2(s)+1
⋯\cdots
E1(s)=1E_1(s)=1E1(s)=1

代回去,可以得到:

Et(s)=1+γλ(1+γλ(1+⋯ ))E_t(s)=1+\gamma \lambda(1+\gamma \lambda(1+\cdots))Et(s)=1+γλ(1+γλ(1+))

这是一个无限等比数列的和(当 ttt 很大时趋于稳定):

Emax=1+γλ+(γλ)2+(γλ)3+⋯=11−γλE_{max}=1+\gamma \lambda+(\gamma \lambda)^2+(\gamma \lambda)^3+\cdots=\frac{1}{1-\gamma \lambda}Emax=1+γλ+(γλ)2+(γλ)3+=1γλ1

此时我们 TD(λ)TD(\lambda)TD(λ) 的价值函数更新式子可以表示为:

δt=Rt+1+γV(St+1)−V(St)\delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t)δt=Rt+1+γV(St+1)V(St)

V(St)=V(St)+αδtEt(s)V(S_t) = V(S_t) + \alpha \delta_t E_t(s)V(St)=V(St)+αδtEt(s)

注:每一个状态都有一个 EEE 值,EEE 值随时间而变化。

这里效用迹 Et(s)E_t(s)Et(s) 可以理解为“当前状态 sss 对当前 TD 误差的责任”,也就是用来决定每次 TD 误差 δt\delta_tδt 在多大程度上要用于每个状态价值的更新。

λ=0\lambda=0λ=0 时,只有当前状态得到更新,等同于TD(0)算法。具体来说:

代入 λ=0\lambda=0λ=0

Et(s)=γ×0×Et−1(s)+1(St=s)=1(St=s)E_t(s)=\gamma \times0\times E_{t-1}(s)+\mathbb{1}(S_t=s)=1(S_t=s)Et(s)=γ×0×Et1(s)+1(St=s)=1(St=s)

也就是说,只有当前访问到的状态 sss 的效用迹为1,其它为0。这意味着只有当前状态的价值会被 TD 误差更新,其它状态完全不会被更新,这正是TD(0)的本质——每步只更新当前状态。

λ=1\lambda=1λ=1 时,TD(1)粗略看与每次访问的MC算法等同;在线更新时,状态价值差每一步都会有积累;离线更新时,TD(1)等同于MC算法。具体来说:

代入 λ=1\lambda=1λ=1

Et(s)=γ×1×Et−1(s)+1(St=s)E_t(s)=\gamma \times1\times E_{t-1}(s)+\mathbb{1}(S_t=s)Et(s)=γ×1×Et1(s)+1(St=s)

这时,效用迹每访问一次状态 sss,它的效用迹会一直累积(并且只按 γ\gammaγ 衰减),直到 episode 结束。这意味着每个状态在 episode 内每次被访问后,其效用迹会“记住”每一步的 TD 误差,直到 episode 结束时一起更新。这种累计效果相当于等到 episode 结束再统一用实际整段回报来更新,正是蒙特卡洛方法的做法。

注:ET是一个非常符合神经科学相关理论的、非常精巧的设计。把它看成是神经元的一个参数,它反映了神经元对某一刺激的敏感性和适应性。神经元在接受刺激时会有反馈,在持续刺激时反馈一般也比较强,当间歇一段时间不刺激时,神经元又逐渐趋于静息状态;同时不论如何增加刺激的频率,神经元有一个最大饱和反馈。

也许有人会问,这前向的式子和反向的式子看起来不同啊,是不是不同的逻辑呢?其实两者是等价的。现在我们从前向推导一下反向的更新式子。

Gtλ−V(St)=−V(St)+(1−λ)λ0(Rt+1+γV(St+1))+(1−λ)λ1(Rt+1+γRt+2+γ2V(St+2))+(1−λ)λ2(Rt+1+γRt+2+γ2Rt+3+γ3V(St+3))+…=−V(St)+(γλ)0(Rt+1+γV(St+1)−γλV(St+1))+(γλ)1(Rt+2+γV(St+2)−γλV(St+2))+(γλ)2(Rt+3+γV(St+3)−γλV(St+3))+…=(γλ)0(Rt+1+γV(St+1)−V(St))+(γλ)1(Rt+2+γV(St+2)−V(St+1))+(γλ)2(Rt+3+γV(St+3)−V(St+2))+…=δt+γλδt+1+(γλ)2δt+2+…\begin{align} G_t^\lambda - V(S_t) &= -V(S_t) + (1-\lambda)\lambda^0 (R_{t+1} + \gamma V(S_{t+1})) \tag{1}\\ &\quad + (1-\lambda)\lambda^1 (R_{t+1} + \gamma R_{t+2} + \gamma^2 V(S_{t+2})) \tag{2}\\ &\quad + (1-\lambda)\lambda^2 (R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \gamma^3 V(S_{t+3})) \tag{3}\\ &\quad + \ldots \tag{4}\\ &= -V(S_t) + (\gamma\lambda)^0 (R_{t+1} + \gamma V(S_{t+1}) - \gamma\lambda V(S_{t+1})) \tag{5}\\ &\quad + (\gamma\lambda)^1 (R_{t+2} + \gamma V(S_{t+2}) - \gamma\lambda V(S_{t+2})) \tag{6}\\ &\quad + (\gamma\lambda)^2 (R_{t+3} + \gamma V(S_{t+3}) - \gamma\lambda V(S_{t+3})) \tag{7}\\ &\quad + \ldots \tag{8}\\ &= (\gamma\lambda)^0 (R_{t+1} + \gamma V(S_{t+1}) - V(S_t)) \tag{9}\\ &\quad + (\gamma\lambda)^1 (R_{t+2} + \gamma V(S_{t+2}) - V(S_{t+1})) \tag{10}\\ &\quad + (\gamma\lambda)^2 (R_{t+3} + \gamma V(S_{t+3}) - V(S_{t+2})) \tag{11}\\ &\quad + \ldots \tag{12}\\ &= \delta_t + \gamma\lambda \delta_{t+1} + (\gamma\lambda)^2 \delta_{t+2} + \ldots \tag{13} \end{align}GtλV(St)=V(St)+(1λ)λ0(Rt+1+γV(St+1))+(1λ)λ1(Rt+1+γRt+2+γ2V(St+2))+(1λ)λ2(Rt+1+γRt+2+γ2Rt+3+γ3V(St+3))+=V(St)+(γλ)0(Rt+1+γV(St+1)γλV(St+1))+(γλ)1(Rt+2+γV(St+2)γλV(St+2))+(γλ)2(Rt+3+γV(St+3)γλV(St+3))+=(γλ)0(Rt+1+γV(St+1)V(St))+(γλ)1(Rt+2+γV(St+2)V(St+1))+(γλ)2(Rt+3+γV(St+3)V(St+2))+=δt+γλδt+1+(γλ)2δt+2+(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)

可以看出前向TD误差和反向的TD误差实际上一致的。

下表给出了λ取各种值时,不同算法在不同情况下的关系:

5. 时序差分的控制问题求解

现在我们回到普通的时序差分,来看看它控制问题的求解方法。回想上一篇蒙特卡罗法在线控制的方法,我们使用的是 ϵ\epsilonϵ-贪婪法来做价值迭代。对于时序差分,我们也可以用 ϵ\epsilonϵ-贪婪法来价值迭代,和蒙特卡罗法在线控制的区别主要只是在于收获的计算方式不同。时序差分的在线控制(on-policy)算法最常见的是SARSA算法,我们在下一篇单独讲解。

而除了在线控制,我们还可以做离线控制(off-policy),离线控制和在线控制的区别主要在于在线控制一般只有一个策略(最常见的是ϵ\epsilonϵ-贪婪法)。而离线控制一般有两个策略,其中一个策略(最常见的是ϵ\epsilonϵ-贪婪法)用于选择新的动作,另一个策略(最常见的是贪婪法)用于更新价值函数。时序差分的离线控制算法最常见的是Q-Learning算法,我们在下下篇单独讲解。

6. 时序差分小结

时序差分和蒙特卡罗法比它更加灵活,学习能力更强,因此是目前主流的强化学习求解问题的方法,现在绝大部分强化学习乃至深度强化学习的求解都是以时序差分的思想为基础的。因此后面我们会重点讨论。

下一篇我们会讨论时序差分的在线控制算法SARSA。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

comli_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值