[归纳]强化学习导论 - 第十二章:资格迹

本文深入探讨了强化学习中资格迹的概念,解释了其在TD和MC方法之间的桥梁作用,详细介绍了TD(λ),Sarsa(λ),以及带有资格迹的在线算法,对比了不同λ值对学习性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 本章内容概要

资格迹(eligibility trace)是RL的基本技术。例如, TD ⁡ ( λ ) \operatorname{TD}(\lambda) TD(λ)算法就使用了资格迹,其中的 λ \lambda λ表明该算法含有资格迹。几乎所有的TD方法(Q-learning,Sarsa)都能结合资格迹,使之更通用、更高效。

资格迹统一和泛化了TD与MC方法,使用资格迹增强TD方法,我们就像第一Part总结的一样,得到了算法族一个新的维度,一端是MC( λ = 1 \lambda=1 λ=1),另一端是TD( λ = 0 \lambda=0 λ=0),中间分布的方法则是其混合,往往在实际问题中效果更好。资格迹方法使得MC能在线的实现,即使对于continuing任务也能工作。

第七章中的n-step TD方法也是TD和MC的综合,但是资格迹的算法框架更加优雅,且具有计算优势。实际上资格迹的机制是引入了短记忆向量 z t ∈ R d \mathbf{z}_{t} \in \mathbb{R}^{d} ztRd,也叫做资格迹,而 λ \lambda λ因子叫做迹衰减,满足 λ ∈ [ 0 , 1 ] \lambda \in[0,1] λ[0,1]。不同于我们之前介绍的方法,我们之前介绍的方法都是需要后续n个状态的,叫做forward views,而资格迹则依赖前面的状态,叫做backward views,更容易实现,也更简洁。

其为何具有优势我们详细了解后就清楚了。像往常一样,我们先讨论状态值的预测,然后扩展到动作值,并讨论控制过程;在此基础上,扩展on-policy到off-policy的情形,并特别讨论线性拟合器的应用,此时资格迹的效果很好。所有这些讨论也是适用于表格与state aggregation的,它们是线性拟合器的特殊情形。

2. λ \lambda λ-return

带有拟合器的n-step return的形式为:
G t : t + n ≐ R t + 1 + γ R t + 2 + ⋯ + γ n − 1 R t + n + γ n v ^ ( S t + n , w t + n − 1 ) , 0 ≤ t ≤ T − n G_{t : t+n} \doteq R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{n-1} R_{t+n}+\gamma^{n} \hat{v}\left(S_{t+n}, \mathbf{w}_{t+n-1}\right), \quad 0 \leq t \leq T-n Gt:t+nRt+1+γRt+2++γn1Rt+n+γnv^(St+n,wt+n1),0tTn
n ≥ 1 n \ge1 n1时就可以根据这个return更新了。

如果把不同n的n-step return加权作为更新目标,且保证加权因子非负且和为1,那么也是有效的,能保证收敛,例如: 1 2 G t : t + 2 + 1 2 G t : t + 4 \frac{1}{2} G_{t : t+2}+\frac{1}{2} G_{t : t+4} 21Gt:t+2+21Gt:t+4,把TD和MC混合,把TD/MC和DP混合等。 这种混合大大扩展了算法的种类。这种混合的更新叫做复合更新(compound update),更新的时刻显然由最长的那个组分决定,其backup diagram如下:

在这里插入图片描述

TD( λ \lambda λ)的return就是上述这种compound update,将无穷多n-step return加权,加权因子为 ( 1 − λ ) λ n − 1 (1-\lambda)\lambda^{n-1} (1λ)λn1,其更新目标叫做 λ \lambda λ-return, G t λ ≐ ( 1 − λ ) ∑ n = 1 ∞ λ n − 1 G t : t + n G_{t}^{\lambda} \doteq(1-\lambda) \sum_{n=1}^{\infty} \lambda^{n-1} G_{t : t+n} Gtλ(1λ)n=1λn1Gt:t+n。其backup diagram如下:

在这里插入图片描述

n ≥ T n \ge T nT时,所有的return都认为等于 G t G_t Gt,因而有: G t λ = ( 1 − λ ) ∑ n = 1 T − t − 1 λ n − 1 G t : t + n + λ T − t − 1 G t G_{t}^{\lambda}=(1-\lambda) \sum_{n=1}^{T-t-1} \lambda^{n-1} G_{t : t+n}+\lambda^{T-t-1} G_{t} Gtλ=(1λ)n=1Tt1λn1Gt:t+n+λTt1Gt。显然,当 λ = 1 \lambda=1 λ=1时,相当于MC,当 λ = 0 \lambda=0 λ=0时,相当于TD(0)。容易地,我们可以仿照第三章写出这些return的迭代形式。权重因子 λ \lambda λ的衰减曲线如下图所示:

在这里插入图片描述

下面介绍基于 λ \lambda λ-return的第一个算法离线 λ \lambda λ-return算法。离线指的是,在episode期间不进行权重更新,在episode结束的时候再根据得到的各个step的 G t λ G_{t}^{\lambda} Gtλ进行更新(即非in-place方式)。权重更新公式为:

w t + 1 ≐ w t + α [ G t λ − v ^ ( S t , w t ) ] ∇ v ^ ( S t , w t ) , t = 0 , … , T − 1 \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha\left[G_{t}^{\lambda}-\hat{v}\left(S_{t}, \mathbf{w}_{t}\right)\right] \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right), \quad t=0, \ldots, T-1 wt+1wt+α[Gtλv^(St,wt)]v^(St,wt),t=0,,T1

对于我们前面介绍过的19状态random walk问题,我们分别用离线 λ \lambda λ-return算法和n-step TD算法估计值函数,并变化步长 α \alpha α以及 n n n λ \lambda λ,得到如下图所示的结果,看起来离线 λ \lambda λ-return算法效果稍好,而且与n-step方法类似,也是当 λ \lambda λ取适中的数字时效果最好。

在这里插入图片描述

这种方法也是forward view的,每个状态的更新都与后续状态有关。

在这里插入图片描述

3. TD( λ \lambda λ)

TD( λ \lambda λ)是RL中最古老、应用最广的算法。TD( λ \lambda λ)相比于离线 λ \lambda λ-return算法有三点改进:1. 在每个时间步都进行更新权重,而不是只在episode结尾一次性更新;2. 计算均匀地分布在每个step上;3. 可以用到continuing任务中。本节我们给出半梯度TD( λ \lambda λ)算法。

资格迹是一个与权重向量 w t \textbf{w}_t wt元素数相等的向量 z t ∈ R d \mathbf{z}_{t} \in \mathbb{R}^{d} ztRd。权重向量 w t \textbf{w}_t wt是长期的记忆,而资格迹是短期的,往往维持的时间短于一个episode。资格迹的作用是辅助学习过程,对权重的更新造成一定的影响,然后由权重决定估计的值。

在TD( λ \lambda λ)中,资格迹向量在每个episode开始时初始化未0,然后由下式逐step的更新:
z − 1 ≐ 0 \mathbf{z}_{-1} \doteq \mathbf{0} z10
z t ≐ γ λ z t − 1 + ∇ v ^ ( S t , w t ) , 0 ≤ t ≤ T \mathbf{z}_{t} \doteq \gamma \lambda \mathbf{z}_{t-1}+\nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right), \quad 0 \leq t \leq T ztγλzt1+v^(St,wt),0tT
其中, γ \gamma γ是折扣因子, λ \lambda λ是资格迹的迹衰减因子。资格迹衡量的是最近哪个参数被修正的较多(对于线性模型,公式中的梯度就是输入的特征向量 x ( s ) \mathbf{x}(s) x(s),因此资格迹就是最近一些输入的加权和)。资格迹表征权重中的每个成分得到学习的潜力,因而我们得到TD( λ \lambda λ)的更新公式:

δ t ≐ R t + 1 + γ v ^ ( S t + 1 , w t ) − v ^ ( S t , w t ) \delta_{t} \doteq R_{t+1}+\gamma \hat{v}\left(S_{t+1}, \mathbf{w}_{t}\right)-\hat{v}\left(S_{t}, \mathbf{w}_{t}\right) δtRt+1+γv^(St+1,wt)v^(St,wt)
w t + 1 ≐ w t + α δ t z t \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha \delta_{t} \mathbf{z}_{t} wt+1wt+αδtzt

与之前的算法相比,梯度项包含在了 z t \mathbf{z}_t zt之中,且每个step的梯度不仅仅在这一步发生作用,它的作用会持续一段时间,逐渐衰减。其算法伪代码为:

在这里插入图片描述
这是一种backward view的算法,其更新机制如下图所示:
在这里插入图片描述
这个过程的推导其实不难(我尝试了下,觉得不难><),思路为:
在这里插入图片描述

我们考虑几个特殊情况。当 λ = 0 \lambda=0 λ=0时,显然算法变成了半梯度TD(0)算法;当 λ = 1 \lambda=1 λ=1时,则算法叫做TD(1),基本变为了MC方法[回顾下TD误差与MC误差的关系就能理解,参考第六章第二节]。当 λ \lambda λ取中间数字时,则是两种方法的折中。

TD(1)是MC算法更通用的实现方式,极大增加了MC方法的应用范围,使之可以应用到continuing类的任务中,并且可以增量、在线的实现。关于在episode才更新的问题,这里给了另一种思路:如果在一个episode中间遇到了一个很好或者很差的动作,那么step-by-step的方法可以立即修改策略,使得这个episode后续的steps降低如此动作的概率;而在episode-by-episode的方法中则无法在episode中间提高策略,导致这个episode中的samples不太好。

回顾上一节介绍的离线 λ \lambda λ-return算法,其也是在 λ = 0 \lambda=0 λ=0时等价于TD(0),在 λ = 1 \lambda=1 λ=1时等价于MC。在19状态random-walk问题中,可以看出TD( λ \lambda λ)的表现与离线 λ \lambda λ-return算法是类似的。但是需要注意,当 α \alpha α增大时,TD( λ \lambda λ)的效果会迅速变坏,甚至会不稳定。

在这里插入图片描述
线性TD( λ \lambda λ)在step-size满足第二章给出的收敛条件时,在on-policy情形下是能够收敛的,但是正如第九章中所提到的TD不动点,线性TD( λ \lambda λ)也是收敛到靠近最优的一个点上,continuing任务的VE上界如下式所示:

V E ‾ ( w ∞ ) ≤ 1 − γ λ 1 − γ min ⁡ w V E ‾ ( w ) \overline{\mathrm{VE}}\left(\mathbf{w}_{\infty}\right) \leq \frac{1-\gamma \lambda}{1-\gamma} \min _{\mathbf{w}} \overline{\mathrm{VE}}(\mathbf{w}) VE(w)1γ1γλminwVE(w)

λ = 1 \lambda=1 λ=1时,线性TD( λ \lambda λ)等价于MC,因此上界缩放系数是1;当 λ = 0 \lambda=0 λ=0时,线性TD( λ \lambda λ)等价于TD(0),因此上界缩放系数与TD不动点的缩放系数一致。 λ = 1 \lambda=1 λ=1是比较差的选择,后面我们会讨论这个问题。

离线 λ \lambda λ-return算法的更新误差项(中括号里的)也可以写成TD误差之和的形式。

4. n-step截断 λ \lambda λ-return方法

离线 λ \lambda λ-return算法是重要的想法,但是由于 λ \lambda λ-return只有在episode的末尾才能计算,因此造成计算分布不均衡,对于continuing任务甚至无法得到。实际上,由于因子 γ λ \gamma \lambda γλ的存在,计算 G t λ G_{t}^{\lambda} Gtλ时越往后的项发挥的作用越小,因此我们可以限制这个求和的长度。这就是截断 λ \lambda λ-return方法,求和长度由horizon h决定:

G t : h λ ≐ ( 1 − λ ) ∑ n = 1 h − t − 1 λ n − 1 G t : t + n + λ h − t − 1 G t : h , 0 ≤ t &lt; h ≤ T G_{t : h}^{\lambda} \doteq(1-\lambda) \sum_{n=1}^{h-t-1} \lambda^{n-1} G_{t : t+n}+\lambda^{h-t-1} G_{t : h}, \quad 0 \leq t&lt;h \leq T Gt:hλ(1λ)n=1ht1λn1Gt:t+n+λht1Gt:h,0t<hT

这样的处理衍生出了一系列新的算法。如果应用于状态值函数,这族算法就叫做截断TD( λ \lambda λ)或者TTD( λ \lambda λ)。下图给出了它的backup diagram,注意 t + n ≥ T t+n\ge T t+nT的情况:
在这里插入图片描述
TTD( λ \lambda λ)的更新公式如下:

w t + n ≐ w t + n − 1 + α [ G t : t + n λ − v ^ ( S t , w t + n − 1 ) ] ∇ v ^ ( S t , w t + n − 1 ) , 0 ≤ t &lt; T \mathbf{w}_{t+n} \doteq \mathbf{w}_{t+n-1}+\alpha\left[G_{t : t+n}^{\lambda}-\hat{v}\left(S_{t}, \mathbf{w}_{t+n-1}\right)\right] \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t+n-1}\right), \qquad 0 \leq t&lt;T wt+nwt+n1+α[Gt:t+nλv^(St,wt+n1)]v^(St,wt+n1),0t<T

这个算法是比较高效的,但是需要注意,每个episode前n-1个step是不能更新的,而且需要终止状态后n-1个额外更新。 对 G t : h λ G_{t : h}^{\lambda} Gt:hλ也可以写成TD误差之和的形式:

G t : t + k λ = v ^ ( S t , w t − 1 ) + ∑ i = t t + k − 1 ( γ λ ) i − t δ i ′ G_{t : t+k}^{\lambda}=\hat{v}\left(S_{t}, \mathbf{w}_{t-1}\right)+\sum_{i=t}^{t+k-1}(\gamma \lambda)^{i-t} \delta_{i}^{\prime} Gt:t+kλ=v^(St,wt1)+i=tt+k1(γλ)itδi
δ t ′ ≐ R t + 1 + γ v ^ ( S t + 1 , w t ) − v ^ ( S t , w t − 1 ) \delta_{t}^{\prime} \doteq R_{t+1}+\gamma \hat{v}\left(S_{t+1}, \mathbf{w}_{t}\right)-\hat{v}\left(S_{t}, \mathbf{w}_{t-1}\right) δtRt+1+γv^(St+1,wt)v^(St,wt1)

5. 重新更新:在线 λ \lambda λ-return算法

截断 λ \lambda λ-return中n的选择是需要权衡的,大的n可以让算法更接近离线 λ \lambda λ-return的性能,小的n可以减小更新延迟,尽快改变策略。我们可以以计算量提高为代价,得到同时拥有这两个优点的算法:也就是,在每个step,我们得到新的数据后,我们回溯再次更新episode中的每个step,直到该episode的起点。每次回溯的时候,我们相当于逐渐增大horizon,从而逐渐得到更好的结果。在这个过程中,我们需要始终保存 w 0 \mathbf{w}_0 w0,每次我们前进一个step,到达step j,我们利用 G i : j λ , i = 0 , 1 , 2 , . . . , j G_{i : j}^{\lambda},i = 0, 1, 2, ..., j Gi:jλi=0,1,2,...,j作为更新目标,再次从 w 0 \mathbf{w}_0 w0出发更新参数,然后利用更新好的参数决定下一步动作。

为了区分不同step时的更新,我们在 w 0 h \mathbf{w}_0^h w0h中的上标表示目前进展到的step编号,下标仍然表示实际执行该更新所处的时间步,那么对于一个episode,step 1~3 时的更新为:

h = 1 : w 1 1 ≐ w 0 1 + α [ G 0 : 1 λ − v ^ ( S 0 , w 0 1 ) ] ∇ v ^ ( S 0 , w 0 1 ) \begin{aligned} h=1 : \quad &amp; \mathbf{w}_{1}^{1} \doteq \mathbf{w}_{0}^{1}+\alpha\left[G_{0 : 1}^{\lambda}-\hat{v}\left(S_{0}, \mathbf{w}_{0}^{1}\right)\right] \nabla \hat{v}\left(S_{0}, \mathbf{w}_{0}^{1}\right) \end{aligned} h=1:w11w01+α[G0:1λv^(S0,w01)]v^(S0,w01)
h = 2 : w 1 2 ≐ w 0 2 + α [ G 0 : 2 λ − v ^ ( S 0 , w 0 2 ) ] ∇ v ^ ( S 0 , w 0 2 ) w 2 2 ≐ w 1 2 + α [ G 1 : 2 λ − v ^ ( S 1 , w 1 2 ) ] ∇ v ^ ( S 1 , w 1 2 ) \begin{aligned} h=2 : \quad &amp; \mathbf{w}_{1}^{2} \doteq \mathbf{w}_{0}^{2}+\alpha\left[G_{0 : 2}^{\lambda}-\hat{v}\left(S_{0}, \mathbf{w}_{0}^{2}\right)\right] \nabla \hat{v}\left(S_{0}, \mathbf{w}_{0}^{2}\right) \\ &amp; \mathbf{w}_{2}^{2} \doteq \mathbf{w}_{1}^{2}+\alpha\left[G_{1 : 2}^{\lambda}-\hat{v}\left(S_{1}, \mathbf{w}_{1}^{2}\right)\right] \nabla \hat{v}\left(S_{1}, \mathbf{w}_{1}^{2}\right) \end{aligned} h=2:w12w02+α[G0:2λv^(S0,w02)]v^(S0,w02)w22w12+α[G1:2λv^(S1,w12)]v^(S1,w12)
h = 3 : w 1 3 ≐ w 0 3 + α [ G 0 : 3 λ − v ^ ( S 0 , w 0 3 ) ] ∇ v ^ ( S 0 , w 0 3 ) w 2 3 ≐ w 1 3 + α [ G 1 : 3 λ − v ^ ( S 1 , w 1 3 ) ] ∇ v ^ ( S 1 , w 1 3 ) w 3 3 ≐ w 2 3 + α [ G 2 : 3 λ − v ^ ( S 2 , w 2 3 ) ] ∇ v ^ ( S 2 , w 2 3 ) \begin{aligned} h=3 : \quad &amp; \mathbf{w}_{1}^{3} \doteq \mathbf{w}_{0}^{3}+\alpha\left[G_{0 : 3}^{\lambda}-\hat{v}\left(S_{0}, \mathbf{w}_{0}^{3}\right)\right] \nabla \hat{v}\left(S_{0}, \mathbf{w}_{0}^{3}\right) \\ &amp; \mathbf{w}_{2}^{3} \doteq \mathbf{w}_{1}^{3}+\alpha\left[G_{1 : 3}^{\lambda}-\hat{v}\left(S_{1}, \mathbf{w}_{1}^{3}\right)\right] \nabla \hat{v}\left(S_{1}, \mathbf{w}_{1}^{3}\right) \\ &amp; \mathbf{w}_{3}^{3} \doteq \mathbf{w}_{2}^{3}+\alpha\left[G_{2 : 3}^{\lambda}-\hat{v}\left(S_{2}, \mathbf{w}_{2}^{3}\right)\right] \nabla \hat{v}\left(S_{2}, \mathbf{w}_{2}^{3}\right) \end{aligned} h=3:w13w03+α[G0:3λv^(S0,w03)]v^(S0,w03)w23w13+α[G1:3λv^(S1,w13)]v^(S1,w13)w33w23+α[G2:3λv^(S2,w23)]v^(S2,w23)

更新公式为:
w t + 1 h ≐ w t h + α [ G t : h λ − v ^ ( S t , w t h ) ] ∇ v ^ ( S t , w t h ) , 0 ≤ t &lt; h ≤ T \mathbf{w}_{t+1}^{h} \doteq \mathbf{w}_{t}^{h}+\alpha\left[G_{t : h}^{\lambda}-\hat{v}\left(S_{t}, \mathbf{w}_{t}^{h}\right)\right] \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}^{h}\right), \quad 0 \leq t&lt;h \leq T wt+1hwth+α[Gt:hλv^(St,wth)]v^(St,wth),0t<hT

定义 w t ≐ w t t \mathbf{w}_{t} \doteq \mathbf{w}_{t}^{t} wtwtt,则我们得到比较完整的表示。这个算法是完全在线的,在每个step都计算得到一个新的权重向量 w t \mathbf{w}_t wt,且只利用到时间步t为止的信息。这个方法计算复杂度很高,比离线 λ \lambda λ-return算法还要复杂很多,但是学习效率是比离线方法好很多的。

回到19状态random walk问题,可以看到在线方法确实比离线方法好。
在这里插入图片描述

6. 真正的在线TD( λ \lambda λ)

在线方法效果是目前所有算法中最好的,但是计算量过大,我们可以考虑资格迹的方法简化它,也就是采用backward-view的视角,这对于线性拟合器来说是可行的。这种方法就叫做真正在线TD( λ \lambda λ)算法。

该方法的推导是很复杂的(参考下一节介绍及文献van Seijen et al., 2016),所以这里没有详述,但是给出了参考文献。其实它的思想是简单的。首先,我们把离线算法的所有中间权重列成三角形,每一行都是单个推进的step基础上产生的,我们关心的只是右侧倾斜排列的那些权重:

w 0 0 w 0 1 w 1 1 w 0 2 w 1 2 w 2 2 w 0 3 w 1 3 w 2 3 w 3 3 ⋮ ⋮ ⋮ ⋮ ⋱ w 0 T w 1 T w 2 T w 3 T ⋯ w T T \begin{array}{cccccc}{\mathbf{w}_{0}^{0}} &amp; {} &amp; {} &amp; {} \\ {\mathbf{w}_{0}^{1}} &amp; {\mathbf{w}_{1}^{1}} \\ {\mathbf{w}_{0}^{2}} &amp; {\mathbf{w}_{1}^{2}} &amp; {\mathbf{w}_{2}^{2}} \\ {\mathbf{w}_{0}^{3}} &amp; {\mathbf{w}_{1}^{3}} &amp; {\mathbf{w}_{2}^{3}} &amp; {\mathbf{w}_{3}^{3}} \\ {\vdots} &amp; {\vdots} &amp; {\vdots} &amp; {\vdots} &amp; {\ddots} \\ {\mathbf{w}_{0}^{T}} &amp; {\mathbf{w}_{1}^{T}} &amp; {\mathbf{w}_{2}^{T}} &amp; {\mathbf{w}_{3}^{T}} &amp; {\cdots} &amp; {\mathbf{w}_{T}^{T}}\end{array} w00w01w02w03w0Tw11w12w13w1Tw22w23w2Tw33w3TwTT

如果我们能从上一个 w t t \mathbf{w}_t^t wtt计算出下一个,那么就能作为离线算法的高效形式。对于线性拟合器,可以得到如下形式:

w t + 1 ≐ w t + α δ t z t + α ( w t ⊤ x t − w t − 1 ⊤ x t ) ( z t − x t ) \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha \delta_{t} \mathbf{z}_{t}+\alpha\left(\mathbf{w}_{t}^{\top} \mathbf{x}_{t}-\mathbf{w}_{t-1}^{\top} \mathbf{x}_{t}\right)\left(\mathbf{z}_{t}-\mathbf{x}_{t}\right) wt+1wt+αδtzt+α(wtxtwt1xt)(ztxt)

z t ≐ γ λ z t − 1 + ( 1 − α γ λ z t − 1 ⊤ x t ) x t \mathbf{z}_{t} \doteq \gamma \lambda \mathbf{z}_{t-1}+\left(1-\alpha \gamma \lambda \mathbf{z}_{t-1}^{\top} \mathbf{x}_{t}\right) \mathbf{x}_{t} ztγλzt1+(1αγλzt1xt)xt

可以证明,这个算法和离线算法的效果是一致的,计算量仅仅比普通的TD( λ \lambda λ)算法高50%,还是O(d),而存储量则与普通TD( λ \lambda λ)算法一致。该算法的伪代码如下:

在这里插入图片描述
为了区分目前提到的两种资格迹,这一节的方法叫做dutch trace,之前介绍的方法叫做accumulating trace。早期的工作常用一种叫做replacing trace的形式(可以粗略地看作dutch trace的近似),这种形式只对表格情形/二进制编码情形(如tile coding)有效,其定义为:

z i , t ≐ { 1  if  x i , t = 1 γ λ z i , t − 1  otherwise  z_{i, t} \doteq\left\{\begin{array}{ll}{1} &amp; {\text { if } x_{i, t}=1} \\ {\gamma \lambda z_{i, t-1}} &amp; {\text { otherwise }}\end{array}\right. zi,t{1γλzi,t1 if xi,t=1 otherwise 

注意这里两个下标,第一个下标表明是资格迹的分量,第二个下标表明时间步。dutch trace比replacing trace表现好,且理论依据明确,accumulating trace则对非线性方法也适用,但是dutch trace则不适用。

7. MC学习中的Dutch Trace

虽然资格迹在发展上和TD很密切,但实际上却没那么紧密,因为我们可以看到资格迹与MC方法也是有关联的。我们前面已经示意,线性MC这种forward view算法,可以由与其等价的使用dutch traces的backward view算法代替,且大大降低计算量。我们这里对其等价性给出证明,这个证明对真正在线TD( λ \lambda λ)算法与在线TD( λ \lambda λ)算法的等价性证明有启发作用。

MC算法的线性版本更新公式如下:
w t + 1 ≐ w t + α [ G − w t ⊤ x t ] x t , 0 ≤ t &lt; T \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha\left[G-\mathbf{w}_{t}^{\top} \mathbf{x}_{t}\right] \mathbf{x}_{t}, \quad 0 \leq t&lt;T wt+1wt+α[Gwtxt]xt,0t<T

为了简化,假设只有在episode的结尾才有非零的reward,且折扣因子为1.0,因此在任何step t,更新目标都是一样的,因此直接用G表示。作为MC算法,所有的更新都依赖于最终的reward,而这必须等到episode的结尾,因此MC算法是离线的。但是这里我们首先不去寻求改成在线的方法,我们主要关注如何提高计算效率。我们在episode中间进行计算,但是在episode的结尾再更新,这样可以让计算的分布更加均匀,每个step都是 O ( d ) O(d) O(d)的复杂度,同时也降低了内存开销,因为不需要存储中间的step了。资格迹的方法就实现了这样的效果,且其与MC方法是等价的:

w T = w T − 1 + α ( G − w T − 1 ⊤ x T − 1 ) x T − 1 = w T − 1 + α x T − 1 ( − x T − 1 ⊤ w T − 1 ) + α G x T − 1 = ( I − α x T − 1 x T − 1 ⊤ ) w T − 1 + α G x T − 1 = F T − 1 w T − 1 + α G x T − 1 = F T − 1 ( F T − 2 w T − 2 + α G x T − 2 ) + α G x T − 1 = F T − 1 F T − 2 w T − 2 + α G ( F T − 1 x T − 2 + x T − 1 ) = F T − 1 F T − 2 ( F T − 3 w T − 3 + α G x T − 3 ) + α G ( F T − 1 x T − 2 + x T − 1 ) = F T − 1 F T − 2 F T − 3 w T − 3 + α G ( F T − 1 F T − 2 x T − 3 + F T − 1 X T − 2 + x T − 1 ) ⋮ = F T − 1 F T − 2 ⋯ F 0 w 0 ⎵ a T − 1 + α G ∑ k = 0 T − 1 F T − 1 F T − 2 ⋯ F k + 1 x k ⎵ z T − 1 = a T − 1 + α G z T − 1 \begin{aligned} \mathbf{w}_{T} &amp;=\mathbf{w}_{T-1}+\alpha\left(G-\mathbf{w}_{T-1}^{\top} \mathbf{x}_{T-1}\right) \mathbf{x}_{T-1} \\ &amp;=\mathbf{w}_{T-1}+\alpha \mathbf{x}_{T-1}\left(-\mathbf{x}_{T-1}^{\top} \mathbf{w}_{T-1}\right)+\alpha G \mathbf{x}_{T-1} \\ &amp;=\left(\mathbf{I}-\alpha \mathbf{x}_{T-1} \mathbf{x}_{T-1}^{\top}\right) \mathbf{w}_{T-1}+\alpha G \mathbf{x}_{T-1} \\ &amp;=\mathbf{F}_{T-1} \mathbf{w}_{T-1}+\alpha G \mathbf{x}_{T-1} \\&amp;=\mathbf{F}_{T-1}\left(\mathbf{F}_{T-2} \mathbf{w}_{T-2}+\alpha G \mathbf{x}_{T-2}\right)+\alpha G \mathbf{x}_{T-1}\\&amp;=\mathbf{F}_{T-1} \mathbf{F}_{T-2} \mathbf{w}_{T-2}+\alpha G\left(\mathbf{F}_{T-1} \mathbf{x}_{T-2}+\mathbf{x}_{T-1}\right)\\&amp;=\mathbf{F}_{T-1} \mathbf{F}_{T-2}\left(\mathbf{F}_{T-3} \mathbf{w}_{T-3}+\alpha G \mathbf{x}_{T-3}\right)+\alpha G\left(\mathbf{F}_{T-1} \mathbf{x}_{T-2}+\mathbf{x}_{T-1}\right)\\&amp;=\mathbf{F}_{T-1} \mathbf{F}_{T-2} \mathbf{F}_{T-3} \mathbf{w}_{T-3}+\alpha G\left(\mathbf{F}_{T-1} \mathbf{F}_{T-2} \mathbf{x}_{T-3}+\mathbf{F}_{T-1} \mathbf{X}_{T-2}+\mathbf{x}_{T-1}\right) \\&amp; \vdots \\&amp;=\underbrace{\mathbf{F}_{T-1} \mathbf{F}_{T-2} \cdots \mathbf{F}_{0} \mathbf{w}_{0}}_{\mathbf{a}_{T-1}}+\alpha G\underbrace{ \sum_{k=0}^{T-1} \mathbf{F}_{T-1} \mathbf{F}_{T-2} \cdots \mathbf{F}_{k+1} \mathbf{x}_{k}}_{\mathbf{z}_{T-1}}\\&amp;=\mathbf{a}_{T-1}+\alpha G \mathbf{z}_{T-1} \end{aligned} wT=wT1+α(GwT1xT1)xT1=wT1+αxT1(xT1wT1)+αGxT1=(IαxT1xT1)wT1+αGxT1=FT1wT1+αGxT1=FT1(FT2wT2+αGxT2)+αGxT1=FT1FT2wT2+αG(FT1xT2+xT1)=FT1FT2(FT3wT3+αGxT3)+αG(FT1xT2+xT1)=FT1FT2FT3wT3+αG(FT1FT2xT3+FT1XT2+xT1)=aT1 FT1FT2F0w0+αGzT1 k=0T1FT1FT2Fk+1xk=aT1+αGzT1

这两项都可以逐step计算的,且与 G G G无关, F t ≐ I − α x t x t ⊤ \mathbf{F}_{t} \doteq \mathbf{I}-\alpha \mathbf{x}_{t} \mathbf{x}_{t}^{\top} FtIαxtxt只与第t个step的特征向量有关,因而 a T − 1 \mathbf{a}_{T-1} aT1很容易逐step地计算:

a t ≐ F t F t − 1 ⋯ F 0 w 0 = F t a t − 1 = a t − 1 − α x t x t ⊤ a t − 1 , 1 ≤ t &lt; T \mathbf{a}_{t} \doteq \mathbf{F}_{t} \mathbf{F}_{t-1} \cdots \mathbf{F}_{0} \mathbf{w}_{0}=\mathbf{F}_{t} \mathbf{a}_{t-1}=\mathbf{a}_{t-1}-\alpha \mathbf{x}_{t} \mathbf{x}_{t}^{\top} \mathbf{a}_{t-1}, \quad 1 \leq t&lt;T atFtFt1F0w0=Ftat1=at1αxtxtat1,1t<T

z T − 1 \mathbf{z}_{T-1} zT1也可以迭代地计算,实际上是dutch风格的资格迹( γ λ = 1 \gamma\lambda =1 γλ=1),初始化为 z 0 = x 0 \mathbf{z}_{0}=\mathbf{x}_{0} z0=x0并根据下式迭代:

z t ≐ ∑ k = 0 t F t F t − 1 ⋯ F k + 1 x k , 1 ≤ t &lt; T = ∑ k = 0 t − 1 F t F t − 1 ⋯ F k + 1 x k + x t = F t ∑ k = 0 t − 1 F t − 1 F t − 2 ⋯ F k + 1 x k + x t = F t z t − 1 + x t = ( I − α x t x t ⊤ ) z t − 1 + x t = z t − 1 − α x t x t ⊤ z t − 1 + x t = z t − 1 − α ( z t − 1 ⊤ x t ) x t + x t = z t − 1 + ( 1 − α z t − 1 ⊤ x t ) x t \begin{aligned} \mathbf{z}_{t} &amp; \doteq \sum_{k=0}^{t} \mathbf{F}_{t} \mathbf{F}_{t-1} \cdots \mathbf{F}_{k+1} \mathbf{x}_{k}, \quad 1 \leq t&lt;T \\ &amp;=\sum_{k=0}^{t-1} \mathbf{F}_{t} \mathbf{F}_{t-1} \cdots \mathbf{F}_{k+1} \mathbf{x}_{k}+\mathbf{x}_{t} \\ &amp;=\mathbf{F}_{t} \sum_{k=0}^{t-1} \mathbf{F}_{t-1} \mathbf{F}_{t-2} \cdots \mathbf{F}_{k+1} \mathbf{x}_{k}+\mathbf{x}_{t} \\&amp;=\mathbf{F}_{t} \mathbf{z}_{t-1}+\mathbf{x}_{t} \\&amp;=\left(\mathbf{I}-\alpha \mathbf{x}_{t} \mathbf{x}_{t}^{\top}\right) \mathbf{z}_{t-1}+\mathbf{x}_{t} \\&amp;=\mathbf{z}_{t-1}-\alpha \mathbf{x}_{t} \mathbf{x}_{t}^{\top} \mathbf{z}_{t-1}+\mathbf{x}_{t} \\&amp;=\mathbf{z}_{t-1}-\alpha\left(\mathbf{z}_{t-1}^{\top} \mathbf{x}_{t}\right) \mathbf{x}_{t}+\mathbf{x}_{t} \\&amp;=\mathbf{z}_{t-1}+\left(1-\alpha \mathbf{z}_{t-1}^{\top} \mathbf{x}_{t}\right) \mathbf{x}_{t} \end{aligned} ztk=0tFtFt1Fk+1xk,1t<T=k=0t1FtFt1Fk+1xk+xt=Ftk=0t1Ft1Ft2Fk+1xk+xt=Ftzt1+xt=(Iαxtxt)zt1+xt=zt1αxtxtzt1+xt=zt1α(zt1xt)xt+xt=zt1+(1αzt1xt)xt

可以看到这就是上一小节的dutch风格的迹的形式。

以上过程等价于所设定条件下的MC/LMS方法,但是改善了计算和存储过程,这说明资格迹与TD方法关联没那么紧密,是更基础底层的技巧。因此,在需要学习长期预测时都可以应用资格迹的技巧。

8. Sarsa( λ \lambda λ)

这里开始讨论如何在动作值上应用资格迹,实际上需要的变化很少。首先给出n-step return的动作值版本:

G t : t + n ≐ R t + 1 + ⋯ + γ n − 1 R t + n + γ n q ^ ( S t + n , A t + n , w t + n − 1 ) , t + n &lt; T G_{t : t+n} \doteq R_{t+1}+\cdots+\gamma^{n-1} R_{t+n}+\gamma^{n} \hat{q}\left(S_{t+n}, A_{t+n}, \mathbf{w}_{t+n-1}\right), \quad t+n&lt;T Gt:t+nRt+1++γn1Rt+n+γnq^(St+n,At+n,wt+n1),t+n<T

其中, G t : t + n ≐ G t G_{t : t+n} \doteq G_{t} Gt:t+nGt 如果 t + n ≥ T t+n \geq T t+nT

动作值版本的离线 λ \lambda λ-return算法更新公式为:

w t + 1 ≐ w t + α [ G t λ − q ^ ( S t , A t , w t ) ] ∇ q ^ ( S t , A t , w t ) , t = 0 , … , T − 1 \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha\left[G_{t}^{\lambda}-\hat{q}\left(S_{t}, A_{t}, \mathbf{w}_{t}\right)\right] \nabla \hat{q}\left(S_{t}, A_{t}, \mathbf{w}_{t}\right), \quad t=0, \ldots, T-1 wt+1wt+α[Gtλq^(St,At,wt)]q^(St,At,wt),t=0,,T1

其中, G t λ ≐ G t : ∞ λ G_{t}^{\lambda} \doteq G_{t : \infty}^{\lambda} GtλGt:λ。下图给出了其backup diagram,和TD( λ \lambda λ)算法是差不多的。引入资格迹,就得到了Sarsa( λ \lambda λ),和TD( λ \lambda λ)是类似的:

w t + 1 ≐ w t + α δ t z t \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha \delta_{t} \mathbf{z}_{t} wt+1wt+αδtzt
δ t ≐ R t + 1 + γ q ^ ( S t + 1 , A t + 1 , w t ) − q ^ ( S t , A t , w t ) \delta_{t} \doteq R_{t+1}+\gamma \hat{q}\left(S_{t+1}, A_{t+1}, \mathbf{w}_{t}\right)-\hat{q}\left(S_{t}, A_{t}, \mathbf{w}_{t}\right) δtRt+1+γq^(St+1,At+1,wt)q^(St,At,wt)
z − 1 ≐ 0 \mathrm{z}_{-1} \doteq 0 z10
z t ≐ γ λ z t − 1 + ∇ q ^ ( S t , A t , w t ) , 0 ≤ t ≤ T \mathrm{z}_{t} \doteq \gamma \lambda \mathrm{z}_{t-1}+\nabla \hat{q}\left(S_{t}, A_{t}, \mathrm{w}_{t}\right), \quad 0 \leq t \leq T ztγλzt1+q^(St,At,wt),0tT
在这里插入图片描述
带有线性拟合器、二进制编码特征、使用accumulating或replacing迹的Sarsa( λ \lambda λ)的伪代码如下,其显示了在这个特殊设定下算法的进一步简化:

在这里插入图片描述
这个算法也可以使用dutch迹。

example 12.1 Traces in Gridworld
使用资格迹可以提高控制算法的效率,比one-step方法甚至n-step方法都要好的。对于Gridworld问题,设定值函数初始都是0,所有回报,除了终止状态都是0,终止状态的回报是正数。用箭头表示得到提高的状态-动作对,箭头的大小表示经验信息对更新指引的程度( λ \lambda λ)。则能得到如下结果:
在这里插入图片描述

example 12.2 Sarsa( λ \lambda λ) on Mountain Car
对第十章中的Mountain Car问题,我们采用Sarsa( λ \lambda λ)求解,并变化参数 λ \lambda λ画出多条曲线。可以看到Sarsa( λ \lambda λ)比n-step方法看起来好很多:
在这里插入图片描述

当然,也可以写出动作值版本的在线 λ \lambda λ-return算法,以及其高效的实现真正在线Sarsa( λ \lambda λ)。这两种算法与前面介绍的状态值的版本基本是一样的。其算法伪代码如下:

在这里插入图片描述
下图给出了不同版本的Sarsa( λ \lambda λ)在Mountain Car问题上的表现:

在这里插入图片描述

此外,还有截断版本的Sarsa( λ \lambda λ),叫做forward Sarsa( λ \lambda λ),其效果也是不错的(van Seijen, 2016)。

9. 变量 λ \lambda λ γ \gamma γ

到这里,我们就完成了基本的TD学习的全部进展。我们可以把bootstrapping和discounting的程度改写成状态和动作的函数,而不是固定的参数,这样每个step我们就会有不同的 λ \lambda λ γ \gamma γ,即: λ t \lambda_{t} λt γ t \gamma_{t} γt。因此,我们定义 λ : S × A → [ 0 , 1 ] \lambda : \mathcal{S} \times \mathcal{A} \rightarrow[0,1] λ:S×A[0,1]是[0, 1]值域的状态和动作的函数,记为 λ t ≐ λ ( S t , A t ) \lambda_{t} \doteq \lambda\left(S_{t}, A_{t}\right) λtλ(St,At),定义 γ : S → [ 0 , 1 ] \gamma : \mathcal{S} \rightarrow[0,1] γ:S[0,1]是[0, 1]值域的状态的函数,记为 γ t ≐ γ ( S t ) \gamma_{t} \doteq \gamma\left(S_{t}\right) γtγ(St),也叫做termination function。

这样,我们可以写出更一般的return定义:

G t ≐ R t + 1 + γ t + 1 G t + 1 = R t + 1 + γ t + 1 R t + 2 + γ t + 1 γ t + 2 R t + 3 + γ t + 1 γ t + 2 γ t + 3 R t + 4 + ⋯ = ∑ k = t ∞ ( ∏ i = t + 1 k γ i ) R k + 1 \begin{aligned} G_{t} &amp; \doteq R_{t+1}+\gamma_{t+1} G_{t+1} \\ &amp;=R_{t+1}+\gamma_{t+1} R_{t+2}+\gamma_{t+1} \gamma_{t+2} R_{t+3}+\gamma_{t+1} \gamma_{t+2} \gamma_{t+3} R_{t+4}+\cdots \\ &amp;=\sum_{k=t}^{\infty}\left(\prod_{i=t+1}^{k} \gamma_{i}\right) R_{k+1} \end{aligned} GtRt+1+γt+1Gt+1=Rt+1+γt+1Rt+2+γt+1γt+2Rt+3+γt+1γt+2γt+3Rt+4+=k=t(i=t+1kγi)Rk+1

为了保证收敛,要求 ∏ k = t ∞ γ k = 0 \prod_{k=t}^{\infty} \gamma_{k}=0 k=tγk=0对所有的t,依概率1成立。这种写法带来了一些好处,例如我们不必再针对episodic类任务定义终止状态了,只需令对应状态的 γ ( s ) = 0 \gamma(s)=0 γ(s)=0,并转移到起始状态即可。依状态的终止,包括之前为了降低方差引入的伪终止,都可以用这种方法处理。因此,这种方法统一了episodic和discounted-continuing情形(undiscounted-continuing仍需特殊处理)。

基于 λ \lambda λ函数的 λ \lambda λ-return更新目标需要改写为迭代形式,由上面给出的 G t G_t Gt的定义以及 λ \lambda λ-return的原始定义可以导出: G t λ s ≐ R t + 1 + γ t + 1 ( ( 1 − λ t + 1 ) v ^ ( S t + 1 , w t ) + λ t + 1 G t + 1 λ s ) G_{t}^{\lambda s} \doteq R_{t+1}+\gamma_{t+1}\left(\left(1-\lambda_{t+1}\right) \hat{v}\left(S_{t+1}, \mathbf{w}_{t}\right)+\lambda_{t+1} G_{t+1}^{\lambda s}\right) GtλsRt+1+γt+1((1λt+1)v^(St+1,wt)+λt+1Gt+1λs) λ s \lambda s λs表示这个return是从状态值bootstrap的,后面我们引入的 λ a \lambda a λa则表明这个return是从动作值bootstrap的。对于动作值的 λ \lambda λ-return,可以写成Sarsa或者Expected Sarsa的形式:
Sarsa:
G t λ a ≐ R t + 1 + γ t + 1 ( ( 1 − λ t + 1 ) q ^ ( S t + 1 , A t + 1 , w t ) + λ t + 1 G t + 1 λ a ) G_{t}^{\lambda a} \doteq R_{t+1}+\gamma_{t+1}\left(\left(1-\lambda_{t+1}\right) \hat{q}\left(S_{t+1}, A_{t+1}, \mathbf{w}_{t}\right)+\lambda_{t+1} G_{t+1}^{\lambda a}\right) GtλaRt+1+γt+1((1λt+1)q^(St+1,At+1,wt)+λt+1Gt+1λa)
Expected Sarsa:
G t λ a ≐ R t + 1 + γ t + 1 ( ( 1 − λ t + 1 ) V ‾ t ( S t + 1 ) + λ t + 1 G t + 1 λ a ) G_{t}^{\lambda a} \doteq R_{t+1}+\gamma_{t+1}\left(\left(1-\lambda_{t+1}\right) \overline{V}_{t}\left(S_{t+1}\right)+\lambda_{t+1} G_{t+1}^{\lambda a}\right) GtλaRt+1+γt+1((1λt+1)Vt(St+1)+λt+1Gt+1λa)
V ‾ t ( s ) ≐ ∑ a π ( a ∣ s ) q ^ ( s , a , w t ) \overline{V}_{t}(s) \doteq \sum_{a} \pi(a | s) \hat{q}\left(s, a, \mathbf{w}_{t}\right) Vt(s)aπ(as)q^(s,a,wt)

10. 带有控制变异(Control Variates)的离线迹

最后,我们考虑off-policy下的情形,此时需要引入重要性采样。不像n-step情形,我们无法使重要性采样独立于目标return,因此此处直接采用带有控制变异的per-decision方式,结合上一节的式子,得到:

G t λ s ≐ ρ t ( R t + 1 + γ t + 1 ( ( 1 − λ t + 1 ) v ^ ( S t + 1 , w t ) + λ t + 1 G t + 1 λ s ) ) + ( 1 − ρ t ) v ^ ( S t , w t ) G_{t}^{\lambda s} \doteq \rho_{t}\left(R_{t+1}+\gamma_{t+1}\left(\left(1-\lambda_{t+1}\right) \hat{v}\left(S_{t+1}, \mathbf{w}_{t}\right)+\lambda_{t+1} G_{t+1}^{\lambda s}\right)\right)+\left(1-\rho_{t}\right) \hat{v}\left(S_{t}, \mathbf{w}_{t}\right) Gtλsρt(Rt+1+γt+1((1λt+1)v^(St+1,wt)+λt+1Gt+1λs))+(1ρt)v^(St,wt)

以上公式可以参考第7.5小节。

其中, ρ t = π ( A t ∣ S t ) b ( A t ∣ S t ) \rho_{t}=\frac{\pi\left(A_{t} | S_{t}\right)}{b\left(A_{t} | S_{t}\right)} ρt=b(AtSt)π(AtSt)。这个式子约等于基于状态的TD误差的和(如果估计的值函数不变的话,就变得准确了):
δ t s ≐ R t + 1 + γ t + 1 v ^ ( S t + 1 , w t ) − v ^ ( S t , w t ) \delta_{t}^{s} \doteq R_{t+1}+\gamma_{t+1} \hat{v}\left(S_{t+1}, \mathbf{w}_{t}\right)-\hat{v}\left(S_{t}, \mathbf{w}_{t}\right) δtsRt+1+γt+1v^(St+1,wt)v^(St,wt)
G t λ s ≈ v ^ ( S t , w t ) + ρ t ∑ k = t ∞ δ k s ∏ i = t + 1 k γ i λ i ρ i G_{t}^{\lambda s} \approx \hat{v}\left(S_{t}, \mathbf{w}_{t}\right)+\rho_{t} \sum_{k=t}^{\infty} \delta_{k}^{s} \prod_{i=t+1}^{k} \gamma_{i} \lambda_{i} \rho_{i} Gtλsv^(St,wt)+ρtk=tδksi=t+1kγiλiρi

forward view的更新公式为:
w t + 1 = w t + α ( G t λ s − v ^ ( S t , w t ) ) ∇ v ^ ( S t , w t ) ≈ w t + α ρ t ( ∑ k = t ∞ δ k s ∏ i = t + 1 k γ i λ i ρ i ) ∇ v ^ ( S t , w t ) \begin{aligned} \mathbf{w}_{t+1} &amp;=\mathbf{w}_{t}+\alpha\left(G_{t}^{\lambda s}-\hat{v}\left(S_{t}, \mathbf{w}_{t}\right)\right) \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right) \\ &amp; \approx \mathbf{w}_{t}+\alpha \rho_{t}\left(\sum_{k=t}^{\infty} \delta_{k}^{s} \prod_{i=t+1}^{k} \gamma_{i} \lambda_{i} \rho_{i}\right) \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right) \end{aligned} wt+1=wt+α(Gtλsv^(St,wt))v^(St,wt)wt+αρt(k=tδksi=t+1kγiλiρi)v^(St,wt)

这看起来像基于资格迹的TD更新,乘积和资格迹类似,然后乘上TD误差。但是这种只是one-step forward view。我们希望寻找将forward-view更新沿时间加和,把backward-view也沿着时间加和,使这两个和大致相等。forward-view沿着时间的加和为:

∑ t = 1 ∞ ( w t + 1 − w t ) ≈ ∑ t = 1 ∞ ∑ k = t ∞ α ρ t δ k s ∇ v ^ ( S t , w t ) ∏ i = t + 1 k γ i λ i ρ i = ∑ k = 1 ∞ ∑ t = 1 k α ρ t ∇ v ^ ( S t , w t ) δ k s ∏ i = t + 1 k γ i λ i ρ i = ∑ k = 1 ∞ α δ k s ∑ t = 1 k ρ t ∇ v ^ ( S t , w t ) ∏ i = t + 1 k γ i λ i ρ i \begin{aligned} \sum_{t=1}^{\infty}\left(\mathbf{w}_{t+1}-\mathbf{w}_{t}\right) &amp; \approx \sum_{t=1}^{\infty} \sum_{k=t}^{\infty} \alpha \rho_{t} \delta_{k}^{s} \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right) \prod_{i=t+1}^{k} \gamma_{i} \lambda_{i} \rho_{i} \\ &amp;=\sum_{k=1}^{\infty} \sum_{t=1}^{k} \alpha \rho_{t} \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right) \delta_{k}^{s} \prod_{i=t+1}^{k} \gamma_{i} \lambda_{i} \rho_{i} \\&amp;=\sum_{k=1}^{\infty} \alpha \delta_{k}^{s} \sum_{t=1}^{k} \rho_{t} \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right) \prod_{i=t+1}^{k} \gamma_{i} \lambda_{i} \rho_{i}\end{aligned} t=1(wt+1wt)t=1k=tαρtδksv^(St,wt)i=t+1kγiλiρi=k=1t=1kαρtv^(St,wt)δksi=t+1kγiλiρi=k=1αδkst=1kρtv^(St,wt)i=t+1kγiλiρi

如果第二个求和可以写成并按照资格迹的形式增量更新,这个式子就能构成backward-view TD更新的加和形式,我们下面给出如何实现。如果表达式是在时刻k的迹,我们就能用k-1时刻的值更新它:

z k = ∑ t = 1 k ρ t ∇ v ^ ( S t , w t ) ∏ i = t + 1 k γ i λ i ρ i = ∑ t = 1 k − 1 ρ t ∇ v ^ ( S t , w t ) ∏ i = t + 1 k γ i λ i ρ i + ρ k ∇ v ^ ( S k , w k ) = γ k λ k ρ k ∑ t = 1 k − 1 ρ t ∇ v ^ ( S t , w t ) ∏ i = t + 1 k − 1 γ i λ i ρ i ⎵ z k − 1 + ρ k ∇ v ^ ( S k , w k ) = ρ k ( γ k λ k z k − 1 + ∇ v ^ ( S k , w k ) ) \begin{aligned} \mathbf{z}_{k} &amp;=\sum_{t=1}^{k} \rho_{t} \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right) \prod_{i=t+1}^{k} \gamma_{i} \lambda_{i} \rho_{i} \\ &amp;=\sum_{t=1}^{k-1} \rho_{t} \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right) \prod_{i=t+1}^{k} \gamma_{i} \lambda_{i} \rho_{i}+\rho_{k} \nabla \hat{v}\left(S_{k}, \mathbf{w}_{k}\right) \\ &amp;=\gamma_{k} \lambda_{k} \rho_{k} \underbrace{\sum_{t=1}^{k-1} \rho_{t} \nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right) \prod_{i=t+1}^{k-1} \gamma_{i} \lambda_{i} \rho_{i}}_{\mathbf{z_{k-1}}}+\rho_{k} \nabla \hat{v}\left(S_{k}, \mathbf{w}_{k}\right) \\ &amp;=\rho_{k}\left(\gamma_{k} \lambda_{k} \mathbf{z}_{k-1}+\nabla \hat{v}\left(S_{k}, \mathbf{w}_{k}\right)\right) \end{aligned} zk=t=1kρtv^(St,wt)i=t+1kγiλiρi=t=1k1ρtv^(St,wt)i=t+1kγiλiρi+ρkv^(Sk,wk)=γkλkρkzk1 t=1k1ρtv^(St,wt)i=t+1k1γiλiρi+ρkv^(Sk,wk)=ρk(γkλkzk1+v^(Sk,wk))

下标则从k变化到t,是针对状态值常规的accumulating迹更新:
z t ≐ ρ t ( γ t λ t z t − 1 + ∇ v ^ ( S t , w t ) ) \mathbf{z}_{t} \doteq \rho_{t}\left(\gamma_{t} \lambda_{t} \mathbf{z}_{t-1}+\nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right)\right) ztρt(γtλtzt1+v^(St,wt))

这个资格迹,结合TD( λ \lambda λ)的半梯度参数更新规则 w t + 1 ≐ w t + α δ t z t \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha \delta_{t} \mathbf{z}_{t} wt+1wt+αδtzt,可以构成既可用于on-policy也可用于off-policy的通用TD( λ \lambda λ)算法。在on-policy情形下,这个算法就退化为 T D ( λ ) \mathrm{TD}(\lambda) TD(λ)。在off-policy情形,这个算法通常效果很好,但是却不能保证收敛稳定,因为其是半梯度的。在之后几个章节中,我们会改造这个算法使之稳定。

对于动作值的off-policy资格迹及与之相关Sarsa( λ \lambda λ)算法,也可访上导出。我们可以从迭代或者一般形式的动作值 λ \lambda λ-return开始,也就是:
G t λ a ≐ R t + 1 + γ t + 1 ( ( 1 − λ t + 1 ) q ^ ( S t + 1 , A t + 1 , w t ) + λ t + 1 G t + 1 λ a ) G_{t}^{\lambda a} \doteq R_{t+1}+\gamma_{t+1}\left(\left(1-\lambda_{t+1}\right) \hat{q}\left(S_{t+1}, A_{t+1}, \mathbf{w}_{t}\right)+\lambda_{t+1} G_{t+1}^{\lambda a}\right) GtλaRt+1+γt+1((1λt+1)q^(St+1,At+1,wt)+λt+1Gt+1λa)
G t λ a ≐ R t + 1 + γ t + 1 ( ( 1 − λ t + 1 ) V ‾ t ( S t + 1 ) + λ t + 1 G t + 1 λ a ) G_{t}^{\lambda a} \doteq R_{t+1}+\gamma_{t+1}\left(\left(1-\lambda_{t+1}\right) \overline{V}_{t}\left(S_{t+1}\right)+\lambda_{t+1} G_{t+1}^{\lambda a}\right) GtλaRt+1+γt+1((1λt+1)Vt(St+1)+λt+1Gt+1λa)
但是Expected Sarsa(后者)形式的更容易推导。我们把其拓展到off-policy情形,并结合七章中的控制变体方法:

G t λ a ≐ R t + 1 + γ t + 1 ( ( 1 − λ t + 1 ) V ‾ t ( S t + 1 ) + λ t + 1 [ ρ t + 1 G t + 1 λ a + V ‾ t ( S t + 1 ) − ρ t + 1 q ^ ( S t + 1 , A t + 1 , w t ) ] ) = R t + 1 + γ t + 1 ( V ‾ t ( S t + 1 ) + λ t + 1 ρ t + 1 [ G t + 1 λ a − q ^ ( S t + 1 , A t + 1 , w t ) ] ) \begin{aligned} G_{t}^{\lambda a} &amp; \doteq R_{t+1}+\gamma_{t+1}\left(\left(1-\lambda_{t+1}\right) \overline{V}_{t}\left(S_{t+1}\right)+\lambda_{t+1}\left[\rho_{t+1} G_{t+1}^{\lambda a}+\overline{V}_{t}\left(S_{t+1}\right)-\rho_{t+1} \hat{q}\left(S_{t+1}, A_{t+1}, \mathbf{w}_{t}\right)\right]\right) \\ &amp;=R_{t+1}+\gamma_{t+1}\left(\overline{V}_{t}\left(S_{t+1}\right)+\lambda_{t+1} \rho_{t+1}\left[G_{t+1}^{\lambda a}-\hat{q}\left(S_{t+1}, A_{t+1}, \mathbf{w}_{t}\right)\right]\right) \end{aligned} GtλaRt+1+γt+1((1λt+1)Vt(St+1)+λt+1[ρt+1Gt+1λa+Vt(St+1)ρt+1q^(St+1,At+1,wt)])=Rt+1+γt+1(Vt(St+1)+λt+1ρt+1[Gt+1λaq^(St+1,At+1,wt)])

其中, V ‾ t ( S t + 1 ) \overline{V}_{t}\left(S_{t+1}\right) Vt(St+1)与之前定义的一致: V ‾ t ( s ) ≐ ∑ a π ( a ∣ s ) q ^ ( s , a , w t ) \overline{V}_{t}(s) \doteq \sum_{a} \pi(a | s) \hat{q}\left(s, a, \mathbf{w}_{t}\right) Vt(s)aπ(as)q^(s,a,wt)。再次, λ \lambda λ-return可以写成近似的形式(TD误差之和):

G t λ a ≈ q ^ ( S t , A t , w t ) + ∑ k = t ∞ δ k a ∏ i = t + 1 k γ i λ i ρ i G_{t}^{\lambda a} \approx \hat{q}\left(S_{t}, A_{t}, \mathbf{w}_{t}\right)+\sum_{k=t}^{\infty} \delta_{k}^{a} \prod_{i=t+1}^{k} \gamma_{i} \lambda_{i} \rho_{i} Gtλaq^(St,At,wt)+k=tδkai=t+1kγiλiρi

使用期望形式的动作值TD误差:
δ t a = R t + 1 + γ t + 1 V ‾ t ( S t + 1 ) − q ^ ( S t , A t , w t ) \delta_{t}^{a}=R_{t+1}+\gamma_{t+1} \overline{V}_{t}\left(S_{t+1}\right)-\hat{q}\left(S_{t}, A_{t}, \mathbf{w}_{t}\right) δta=Rt+1+γt+1Vt(St+1)q^(St,At,wt)

和之前一样,当近似值函数不变化的话,则这个近似公式就很准确了。

参考针对状态值的处理,我们能写出forward-view的更新,得到如下的形式:
z t ≐ γ t λ t ρ t z t − 1 + ∇ q ^ ( S t , A t , w t ) \mathbf{z}_{t} \doteq \gamma_{t} \lambda_{t} \rho_{t} \mathbf{z}_{t-1}+\nabla \hat{q}\left(S_{t}, A_{t}, \mathbf{w}_{t}\right) ztγtλtρtzt1+q^(St,At,wt)

这个资格迹和期望形式TD误差一起,以及半梯度参数更新方法,就构成了优雅、高效的Expected Sarsa( λ \lambda λ)算法,这个算法既可以应用到on-policy情形,也可以应用到off-policy情形。这可能是目前此类算法中最好的一个(但是这个原始版本不保证收敛稳定,加入后续小节的技巧就能保证稳定了)。在on-policy情形时,固定 λ \lambda λ γ \gamma γ和动作值的TD误差,这个算法就和Sarsa( λ \lambda λ)一样了。

λ = 1 \lambda=1 λ=1时,这些算法就和MC算法非常相关了,对于episodic问题,如果采用offline更新策略,则和MC方法完全一致。但实际上,这种关联性是比较微妙的,在这些条件下,实际上只是期望上等价,episode-by-episode的更新并不等价。这是不奇怪的,因为在轨迹展开的过程中,这些方法都是要更新的,然而对于MC方法,如果实际采取的某个动作对于target policy来说是0概率的,那么就不会针对这个轨迹更新了。特别地,所有这些方法,在 λ = 1 \lambda=1 λ=1时,实际上还是有bootstrap的,因为target依赖于当前的估计值,只有在期望形式的时候,这种依赖才能去掉。这些方法需要额外的临时权重,来跟踪updates,这些updates需要根据后续的动作逐渐衰减。状态和状态动作版本的方法叫做PTD( λ \lambda λ)和PQ( λ \lambda λ),其中P表示临时的。

这些新的off-policy方法的效果目前还不明确,但是无可置疑的,因为这些方法在off-policy情形下都包含重要性采样,因此其方差是比较大的。

如果 λ &lt; 1 \lambda&lt;1 λ<1,那么所有这些off-policy算法都包含bootstrapping,且符合死亡三角,这意味着只有在表格、state aggregation、或者其它受限拟合器的情形下才能保证稳定。对于线性和更一般的拟合器形式,其参数可能发散。正如我们之前讨论的,off-policy的挑战包含两部分,off-policy资格迹能高效地处理第一个挑战,但是对于第二个挑战却没法克服。对于第二个挑战的解决,我们在12节中给出一些方法。

11. Watkins的Q( λ \lambda λ)到Tree-Backup( λ \lambda λ)

为了在Q学习中使用资格迹,已经有几种方法提出来了。最早的方法就是Watkins的Q( λ \lambda λ),只要采取greedy的动作,就像之前介绍的逐渐衰减资格迹,然后在第一个non-greedy的位置把迹置为0。Watkins的Q( λ \lambda λ)的backup diagram如下图所示:

在这里插入图片描述
在第六章中,我们给出了 Q-learning 和 Expected Sarsa 的统一框架,并在之后给出了其 off-policy 的版本,在这个框架中,Q-learning 是特殊的情形,且可以泛化到任意的 target policy 上。在之前的章节中,我们已经把 Expected Sarsa 融入了 off-policy 资格迹,在第七章中,我们给出了 n-step Tree Backup 方法,它能处理 off-policy 情形,且不需要显式的重要性采样,在资格迹版本的 Q 算法中,我们也采用这个方法,叫做Tree-Backup( λ \lambda λ),简称TD( λ \lambda λ)。

TD( λ \lambda λ)的概念是很直接的,如下图所示
在这里插入图片描述
每个长度的tree-backup更新由bootstrapping参数 λ \lambda λ决定,为了得到方程,我们从 λ \lambda λ-return的迭代形式出发:

G t λ a ≐ R t + 1 + γ t + 1 ( ( 1 − λ t + 1 ) V ‾ t ( S t + 1 ) + λ t + 1 [ ∑ a ≠ A t + 1 π ( a ∣ S t + 1 ) q ^ ( S t + 1 , a , w t ) + π ( A t + 1 ∣ S t + 1 ) G t + 1 λ a ] ) = R t + 1 + γ t + 1 ( V ‾ t ( S t + 1 ) + λ t + 1 π ( A t + 1 ∣ S t + 1 ) ( G t + 1 λ a − q ^ ( S t + 1 , A t + 1 , w t ) ) ) \begin{aligned} G_{t}^{\lambda a} &amp; \doteq R_{t+1}+\gamma_{t+1}\left(\left(1-\lambda_{t+1}\right) \overline{V}_{t}\left(S_{t+1}\right)+\lambda_{t+1}\left[\sum_{a \neq A_{t+1}} \pi\left(a | S_{t+1}\right) \hat{q}\left(S_{t+1}, a, \mathbf{w}_{t}\right)+\pi\left(A_{t+1} | S_{t+1}\right) G_{t+1}^{\lambda a}\right]\right) \\ &amp;=R_{t+1}+\gamma_{t+1}\left(\overline{V}_{t}\left(S_{t+1}\right)+\lambda_{t+1} \pi\left(A_{t+1} | S_{t+1}\right)\left(G_{t+1}^{\lambda a}-\hat{q}\left(S_{t+1}, A_{t+1}, \mathbf{w}_{t}\right)\right)\right) \end{aligned} GtλaRt+1+γt+1(1λt+1)Vt(St+1)+λt+1a̸=At+1π(aSt+1)q^(St+1,a,wt)+π(At+1St+1)Gt+1λa=Rt+1+γt+1(Vt(St+1)+λt+1π(At+1St+1)(Gt+1λaq^(St+1,At+1,wt)))

依据通常的处理方式,我们可以写出其TD误差和的近似形式(忽略估计的值函数的变化):
G t λ a ≈ q ^ ( S t , A t , w t ) + ∑ k = t ∞ δ k a ∏ i = t + 1 k γ i λ i π ( A i ∣ S i ) G_{t}^{\lambda a} \approx \hat{q}\left(S_{t}, A_{t}, \mathbf{w}_{t}\right)+\sum_{k=t}^{\infty} \delta_{k}^{a} \prod_{i=t+1}^{k} \gamma_{i} \lambda_{i} \pi\left(A_{i} | S_{i}\right) Gtλaq^(St,At,wt)+k=tδkai=t+1kγiλiπ(AiSi)

这里使用了基于动作的TD误差的期望形式。

依照前面章节相同的步骤,我们可以得到考虑target policy动作选择概率的资格迹更新:
z t ≐ γ t λ t π ( A t ∣ S t ) z t − 1 + ∇ q ^ ( S t , A t , w t ) \mathbf{z}_{t} \doteq \gamma_{t} \lambda_{t} \pi\left(A_{t} | S_{t}\right) \mathbf{z}_{t-1}+\nabla \hat{q}\left(S_{t}, A_{t}, \mathbf{w}_{t}\right) ztγtλtπ(AtSt)zt1+q^(St,At,wt)

结合参数更新的规则 w t + 1 ≐ w t + α δ t z t \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha \delta_{t} \mathbf{z}_{t} wt+1wt+αδtzt,我们就得到了TB( λ \lambda λ)算法。和所有的半梯度方法一样,使用off-policy数据和拟合器时这个算法不能保证稳定,而为了保证稳定,TB( λ \lambda λ)必须结合下一节所介绍的任一个方法。

12. 带有迹的稳定off-policy方法

目前人们已经提出了几种off-policy训练下能保证稳定的资格迹方法,这里我们给出四种比较重要的。这些方法要么基于梯度TD,要么基于Emphatic TD,所有的算法都假设使用线性拟合器,也有文献把它们扩充到非线性情形。


GTD( λ \lambda λ)是类似于TDC的资格迹算法,这两种状态值梯度TD预测算法的比较在11.8节中已经讨论过了。这种算法的目标是基于on-policy或者off-policy的样本,学习到参数 w t \mathbf{w}_{t} wt,使 v ^ ( s , w ) ≐ w t ⊤ x ( s ) ≈ v π ( s ) \hat{v}(s, \mathbf{w}) \doteq \mathbf{w}_{t}^{\top} \mathbf{x}(s) \approx v_{\pi}(s) v^(s,w)wtx(s)vπ(s),其更新公式为:

w t + 1 ≐ w t + α δ t s z t − α γ t + 1 ( 1 − λ t + 1 ) ( z t ⊤ v t ) x t + 1 \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha \delta_{t}^{s} \mathbf{z}_{t}-\alpha \gamma_{t+1}\left(1-\lambda_{t+1}\right)\left(\mathbf{z}_{t}^{\top} \mathbf{v}_{t}\right) \mathbf{x}_{t+1} wt+1wt+αδtsztαγt+1(1λt+1)(ztvt)xt+1

其中,参数 δ t s , z t , ρ t \delta_{t}^{s}, \mathbf{z}_{t}, \rho_t δts,zt,ρt的定义和前面的定义一样,即:
δ t s ≐ R t + 1 + γ t + 1 v ^ ( S t + 1 , w t ) − v ^ ( S t , w t ) \delta_{t}^{s} \doteq R_{t+1}+\gamma_{t+1} \hat{v}\left(S_{t+1}, \mathbf{w}_{t}\right)-\hat{v}\left(S_{t}, \mathbf{w}_{t}\right) δtsRt+1+γt+1v^(St+1,wt)v^(St,wt)
z t ≐ ρ t ( γ t λ t z t − 1 + ∇ v ^ ( S t , w t ) ) \mathbf{z}_{t} \doteq \rho_{t}\left(\gamma_{t} \lambda_{t} \mathbf{z}_{t-1}+\nabla \hat{v}\left(S_{t}, \mathbf{w}_{t}\right)\right) ztρt(γtλtzt1+v^(St,wt))
ρ t ≐ ρ t : t = π ( A t ∣ S t ) b ( A t ∣ S t ) \rho_{t} \doteq \rho_{t : t}=\frac{\pi\left(A_{t} | S_{t}\right)}{b\left(A_{t} | S_{t}\right)} ρtρt:t=b(AtSt)π(AtSt)
v t v_t vt的迭代式为:
v t + 1 ≐ v t + β δ t s z t − β ( v t ⊤ x t ) x t \mathbf{v}_{t+1} \doteq \mathbf{v}_{t}+\beta \delta_{t}^{s} \mathbf{z}_{t}-\beta\left(\mathbf{v}_{t}^{\top} \mathbf{x}_{t}\right) \mathbf{x}_{t} vt+1vt+βδtsztβ(vtxt)xt
正如11.8节中讨论的, v ∈ R d \mathbf{v} \in \mathbb{R}^{d} vRd是和参数 w \mathbf{w} w维度一样的向量,且初值为0: v ∈ R d \mathbf{v} \in \mathbb{R}^{d} vRd β \beta β是大于零的第二个步长参数。


GQ( λ \lambda λ)是针对动作值的带有资格迹的梯度TD算法。其目标是基于off-policy数据,学习到参数 w t \mathbf{w}_{t} wt,使之满足: q ^ ( s , a , w t ) ≐ w t ⊤ x ( s , a ) ≈ q π ( s , a ) \hat{q}\left(s, a, \mathbf{w}_{t}\right) \doteq \mathbf{w}_{t}^{\top} \mathbf{x}(s, a) \approx q_{\pi}(s, a) q^(s,a,wt)wtx(s,a)qπ(s,a)。如果target策略针对贪婪策略是有偏的,那么GQ( λ \lambda λ)可以被用作控制算法。其更新公式为:

w t + 1 ≐ w t + α δ t a z t − α γ t + 1 ( 1 − λ t + 1 ) ( z t ⊤ v t ) x ‾ t + 1 \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha \delta_{t}^{a} \mathbf{z}_{t}-\alpha \gamma_{t+1}\left(1-\lambda_{t+1}\right)\left(\mathbf{z}_{t}^{\top} \mathbf{v}_{t}\right) \overline{\mathbf{x}}_{t+1} wt+1wt+αδtaztαγt+1(1λt+1)(ztvt)xt+1

其中, x ‾ t ≐ ∑ a π ( a ∣ S t ) x ( S t , a ) \overline{\mathbf{x}}_{t} \doteq \sum_{a} \pi\left(a | S_{t}\right) \mathbf{x}\left(S_{t}, a\right) xtaπ(aSt)x(St,a) δ t a ≐ R t + 1 + γ t + 1 w t ⊤ x ‾ t + 1 − w t ⊤ x t \delta_{t}^{a} \doteq R_{t+1}+\gamma_{t+1} \mathbf{w}_{t}^{\top} \overline{\mathbf{x}}_{t+1}-\mathbf{w}_{t}^{\top} \mathbf{x}_{t} δtaRt+1+γt+1wtxt+1wtxt z t \mathbf{z}_t zt的定义和前面一小节一致: z t ≐ γ t λ t ρ t z t − 1 + ∇ q ^ ( S t , A t , w t ) \mathbf{z}_{t} \doteq \gamma_{t} \lambda_{t} \rho_{t} \mathbf{z}_{t-1}+\nabla \hat{q}\left(S_{t}, A_{t}, \mathbf{w}_{t}\right) ztγtλtρtzt1+q^(St,At,wt)。其余参数则与本节前面介绍的GTD( λ \lambda λ)算法一致。


HTD( λ \lambda λ)是混合GTD( λ \lambda λ)和TD( λ \lambda λ)的状态值算法。其最有吸引力的特征为:其为TD( λ \lambda λ)在off-policy情形下的严格泛化,也就是如果behavior策略恰好与target策略一样,那么HTD( λ \lambda λ)就变得和TD( λ \lambda λ)完全一致,而这个特点对于GTD( λ \lambda λ)是不成立的。这个特点很有用,因为TD( λ \lambda λ)通常比GTD( λ \lambda λ)要快,因为GTD( λ \lambda λ)涉及两个步长因子。HTD( λ \lambda λ)的定义为:

w t + 1 ≐ w t + α δ t s z t + α ( ( z t − z t b ) ⊤ v t ) ( x t − γ t + 1 x t + 1 ) \mathbf{w}_{t+1} \doteq \mathbf{w}_{t}+\alpha \delta_{t}^{s} \mathbf{z}_{t}+\alpha\left(\left(\mathbf{z}_{t}-\mathbf{z}_{t}^{b}\right)^{\top} \mathbf{v}_{t}\right)\left(\mathbf{x}_{t}-\gamma_{t+1} \mathbf{x}_{t+1}\right) wt+1wt+αδtszt+α((ztztb)vt)(xtγt+1xt+1)
v t + 1 ≐ v t + β δ t s z t − β ( z t b ⊤ v t ) ( x t − γ t + 1 x t + 1 ) , \mathbf{v}_{t+1} \doteq \mathbf{v}_{t}+\beta \delta_{t}^{s} \mathbf{z}_{t}-\beta\left(\mathbf{z}_{t}^{b \top} \mathbf{v}_{t}\right)\left(\mathbf{x}_{t}-\gamma_{t+1} \mathbf{x}_{t+1}\right), \quad vt+1vt+βδtsztβ(ztbvt)(xtγt+1xt+1), with v 0 ≐ 0 \mathbf{v}_{0} \doteq \mathbf{0} v00
z t ≐ ρ t ( γ t λ t z t − 1 + x t ) , \mathbf{z}_{t} \doteq \rho_{t}\left(\gamma_{t} \lambda_{t} \mathbf{z}_{t-1}+\mathbf{x}_{t}\right), \quad ztρt(γtλtzt1+xt), with z − 1 ≐ 0 \mathbf{z}_{-1} \doteq \mathbf{0} z10
z t b ≐ γ t λ t z t − 1 b + x t , \mathbf{z}_{t}^{b} \doteq \gamma_{t} \lambda_{t} \mathbf{z}_{t-1}^{b}+\mathbf{x}_{t}, \quad ztbγtλtzt1b+xt, with z − 1 b ≐ 0 \mathbf{z}_{-1}^{b} \doteq \mathbf{0} z1b0

其中, β \beta β是大于零的第二个步长参数。注意这里 v t \mathbf{v}_t vt z t b \mathbf{z}_t^b ztb的定义和前面不一样,他们是behavior策略通常的accumulating资格迹,并且当 ρ t = 1 \rho_{t}=1 ρt=1时, z t b = z t \mathbf{z}_t^b=\mathbf{z}_t ztb=zt,使得 w t \mathbf{w}_t wt更新公式中的最后一项是0,因此更新公式变得和TD( λ \lambda λ)一致。


Emphatic TD( λ \lambda λ)是one-step Emphatic-TD算法引入资格迹的扩展,在off-policy下有很好的收敛保证,但是这是以较大的方差和较慢的收敛速度为代价的。其定义为:

w t + 1 ≐ w t + α δ t z t δ t ≐ R t + 1 + γ t + 1 w t ⊤ x t + 1 − w t ⊤ x t z t ≐ ρ t ( γ t λ t z t − 1 + M t x t ) ,  with  z − 1 ≐ 0 M t ≐ λ t I t + ( 1 − λ t ) F t F t ≐ ρ t − 1 γ t F t − 1 + I t ,  with  F 0 ≐ i ( S 0 ) \begin{aligned} \mathbf{w}_{t+1} &amp; \doteq \mathbf{w}_{t}+\alpha \delta_{t} \mathbf{z}_{t} \\ \delta_{t} &amp; \doteq R_{t+1}+\gamma_{t+1} \mathbf{w}_{t}^{\top} \mathbf{x}_{t+1}-\mathbf{w}_{t}^{\top} \mathbf{x}_{t} \\ \mathbf{z}_{t} &amp; \doteq \rho_{t}\left(\gamma_{t} \lambda_{t} \mathbf{z}_{t-1}+M_{t} \mathbf{x}_{t}\right), \quad \text { with } \mathbf{z}_{-1} \doteq \mathbf{0} \\ M_{t} &amp; \doteq \lambda_{t} I_{t}+\left(1-\lambda_{t}\right) F_{t} \\ F_{t} &amp; \doteq \rho_{t-1} \gamma_{t} F_{t-1}+I_{t}, \quad \text { with } F_{0} \doteq i\left(S_{0}\right) \end{aligned} wt+1δtztMtFtwt+αδtztRt+1+γt+1wtxt+1wtxtρt(γtλtzt1+Mtxt), with z10λtIt+(1λt)Ftρt1γtFt1+It, with F0i(S0)

其中, M t ≥ 0 M_{t} \geq 0 Mt0,也就是所谓的emphasis, F t ≥ 0 F_{t} \geq 0 Ft0被称作followon迹, I t ≥ 0 I_{t} \geq 0 It0是所谓的interest。注意, M t M_{t} Mt δ t \delta_{t} δt一样,不是真正的额外记忆变量,使用资格迹的形式替换可以去掉这个变量。这个算法的真正在线版本伪代码可以在网络上查到(Sutton, 2015b)。

在on-policy情形下,Emphatic TD( λ \lambda λ)和经典的TD( λ \lambda λ)是相似的,但仍然有较大的不同。实际上,Emphatic TD( λ \lambda λ)对于所有状态独立的 λ \lambda λ函数都能保证收敛,但是TD( λ \lambda λ)就不能保证,TD( λ \lambda λ)只有在恒定 λ \lambda λ时才能保证收敛性。这个可以参考(Ghiassian, Rafiee, and Sutton, 2016)。

13. 实现中的问题

对于表格化算法,使用资格迹地方法比one-step算法计算上复杂很多。最naive的实现要求在每个step都要更新估计值和资格迹,这对于单指令、多数据、并行计算机或者神经网络中都不是问题,但是对于串行计算机则问题较大。幸运的是,对于典型的 λ \lambda λ γ \gamma γ取值,几乎所有状态的资格迹都将经常是0,只有那些最近被访问的状态才有明显大于0的迹,且只有很少的状态需要更新。

实践中,通常只有那些明显大于0的迹才会被跟踪和更新,使用这个技巧,在表格方法中使用资格迹的计算代价只是one-step方法的数倍,具体则取决于参数 λ \lambda λ γ \gamma γ的取值,而表格情形是使用资格迹最差的情形。当使用拟合器时,则资格迹造成的计算提高就小很多,例如,使用ANN和反向传播算法时,资格迹只会导致存储和计算代价增加一倍(per step),截断 λ \lambda λ-return则在传统计算机上计算效率更高,虽然会增加一定的内存开销。

14. 总结

资格迹与TD误差结合,提供了一种高效、增量的折中TD和MC的方式。虽然第七章中的n-step方法也有这个作用,但是资格迹方法更加通用,学习速度更快,并且能够提供不同程度的计算复杂度权衡。本章给出了各种基于资格迹的算法,真正在线方法在保证和TD方法类似的计算复杂度的同时,达到了那些需要更多计算的方法的性能;另一类则是增量backward-view算法。

正如我们第五章提到的,MC方法在非马尔可夫任务中可能有优势,因为它不需要bootstrap。而资格迹方法使得TD方法接近于MC方法,从而在这种场景中也能表现得较好。如果我们既需要TD的某些优点,任务本身又带有一定的非马尔可夫性,那么资格迹方法就是好的选择。资格迹方法是长期延迟回报和非马尔可夫任务的第一道防线。

通过调整 λ \lambda λ,我们可以在MC和one-step TD之间平滑移动,得到一系列新的方法。那么如何设置这个参数呢?目前还没有理论上的指导,但是经验上的指导还是有的。对于每个episode有很多steps的任务,或者折扣的半衰期覆盖很多steps的任务,使用资格迹效果会很好,如下图。另一方面,如果使用资格迹时使之过于接近MC方法( λ \lambda λ接近1.0),那么性能会快速下降。因此,选择折中的参数是效果最好的,资格迹方法应该让我们的方法向MC靠近,但是不能太近。

在这里插入图片描述
使用资格迹的方法比one-step方法需要更多的计算,但是大大加速了学习,特别是当reward延迟了很多步的时候。因此,当数据是稀疏的或者难以重复处理时(在线应用),使用资格迹是很有价值的。另一方面,在离线应用中,数据可以廉价地大量产生,此时使用资格迹就不合适了,因为这时需要尽可能快的处理大量数据。

参考文献

[1].(张文博客)https://zhuanlan.zhihu.com/c_1060499676423471104

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值