这一章中我们把蒙特卡洛算法(MC)和一步差分算法(one-step TD)统一起来。MC算法和一步TD算法都不可能永远是最好的。这两个方法都是比较极端的形式,可能使用它们中间形式会更好一些。另一个看待n步TD算法的优势的角度是它解决了固定时间步骤的缺点。比如一步TD算法固定了每次选择动作和更新值的时间间隔。很多应用中想要把发生的改变快速更新到值函数中,但是bootstrap方法对于一个长时间段发生的重大状态变化又是最好的方法。一步TD法中固定了更新时间间隔是一步,所以需要妥协更新的速度和bootstrap的优势。但是n步TD算法可以在多步后进行bootstrap,这就解决了固定一步时间间隔的缺点。
n步更新的方法通常是eligibility traces方法的一个介绍。这里我们只考虑n步更新方法本身,后面再介绍资格迹(eligibility traces)。和以前一样先介绍prediction的方法然后介绍control的算法。
先考虑更新V值函数的蒙特卡洛算法。MC算法根据一个完整的episode序列,观察当前状态以后所有状态的反馈来用作对当前状态值函数的更新。一步TD算法确实基于下一步的反馈以及对一步后的状态的自举作为再往后状态的一个估计而用来更新值函数。而它们俩之间的算法会是基于大于一步的反馈加上剩下的自举作为值更新的目标。比如两步TD算法会基于采取动作后的两个反馈值以及两步后的值函数作为更新目标。三步更新也是类似。可以把他们的backup diagrams画出来如下:
这种使用了n步更新的方法依然是TD算法因为它使用了对之前某个状态的估计与其的差来更新那个状态的值函数。这种方法叫做n步TD法。更正式的,考虑一个状态值序列,,MC方法中对值函数的估计是从时间t之后所有R的discounting的和也就是。而一步TD算法是使用下一步的反馈和下一个状态的估计值,即。下标t:t+1表示的是只计算到t+1时间的反馈值。对于n步TD算法而言,其估计值为:
这个值也就是n步TD算法对于状态值函数的估计值,因此n步TD算法的更新公式为:
此时其它状态的值函数都不变,即对所有的而言。因为在时间1到n-1之间都没有状态得到更新,因此会在结束状态补偿n-1个时间步。
n步TD算法利用了来代表在时间步骤t+n之后的反馈值的期望。这种方法会保证这种估计值的期望与真实值的误差远远小于与其真实值的误差,即
叫做n步反馈的误差缩减效应。
练习7.3 较大的n需要较多步来产生效果。 有可能。 较小的n表现的更好。变化的间隔,反馈的设计等等。
n步Sarsa算法很自然的将n步反馈加入到Sarsa算法中,实现了n步Sarsa。n步Sarsa算法主要也还是对值函数更新的改变,其backup diagrams如下,和n步TD类似,只不过起始状态和结束状态都变成了动作。
定义动作值函数版本的n步反馈为
所以值函数的更新为
其它不相关的状态在时间步骤增加的时候值函数一直不变。
对于expected Sarsa算法的n步版本,只是把G的最后一项的Q改为所有动作的加权值V,即
使用off-policy的策略时,为了使用行为策略产生的数据,必须计算进两个策略的差异。这种差异使用相对概率来计算。比如计算一个简单的off-policy版本的TD算法,更新值函数的时候可以直接加上相对概率作为系数,即
其中多加的系数叫做Importance sampling ratio,实在两个策略下采取n个动作的相对概率
而如果策略b下产生的动作不会被策略产生,那么他们的相对概率就会得到0。同样的,对于n步Sarsa算法来说也可以简单地转到off-policy的形式:
值得注意的是,因为这里更新的是状态动作对的值函数,因此其Importance sampling ratio比n步TD算法往后移一步。而对于expected Sarsa算法来说,由于估值计算时最后一步是期望的形式,因此最后一步的相对概率为1,于是在更新的公式里importance sampling ratio改为。
Q-learning和expected Sarsa都是不需要importance sampling的一步off-policy的例子,本章介绍一种多步的例子,叫做tree-backup algorithm。这个想法可以用一个三步tree-backup的backup diagrams来说明。
右图展示了一个三步更新的采样的例子,从最顶上的动作开始转移到最后。中轴外边悬挂的动作是没有被选到的动作(最后一个状态的三个动作都被看作没选)。对于没有选到的动作我们没有采样的结果,因此直接使用它们的估计值来组成更新的目标值。之前我们都是把前几步的采样的反馈加上最后一步的估计值结合组成更新的目标值,但是这里的更新值不仅包括前几步采样的反馈,还包括左右悬挂的动作状态的估计值。因为它是从这个树型上的每一个部分来组成更新,因此叫做tree-backup更新。
准确的说,更新值是由树上叶子结点的动作值函数的估计组成的,内部非叶子结点的部分没有参与。每个叶子结点的动作值估计前的系数都正比于策略采取该动作的概率。一步返回的形式和expected Sarsa的形式一致,即,那么两步更新的形式为
而根据两步更新的形式我们可以推断出n步反馈的迭代等式为
有了n步反馈那么很容易得到更新的公式为
下图中可以看出,n步Sarsa有所有的采样状态转移,n步expected Sarsa除了最后一步是期望形式前面都使用的采样反馈,而tree backup算法使用了每一步的反馈采样加上其他动作值的估值。有一种方法可以把它们统一起来,下面介绍。
上图中最右的图显示了一种把这几种算法统一起来的方法,它可以在每一步选择是采取期望形式还是采样的形式,这个方法叫做,其中每个状态或者每个动作或者每个状态动作对都有一个0到1之间的值,其中0表示在该状态采用期望形式,而1表示该状态采用采样形式。首先我们写出n步tree-backup算法的反馈形式,h=t+n:
那么的反馈形式可以写为
本章介绍了介于MC算法和一步TD算法之间的一系列TD算法。我们重点关注的是n步TD算法,所有的n步TD算法在更新本状态值之前都要继续前进n步。这些算法的一个缺点就是比前面的算法要求更大的计算量。和一步算法相比,n步算法同样也需要更多的内存来存储状态、动作、反馈和一些其它的变量。
尽管n步算法比使用eligibility traces的算法更复杂,但是它有更加清晰的理论解释。我们利用这一点尝试了两个n步off-policy的算法。其中一个是使用Importance Sampling的方法,它很简单但是方差很大。如果两个策略区别很大那么这个方法很不实用。第二是使用tree-backup算法,它不使用Importance Sampling但是对于两个策略区别很大的话,bootstrapping可能只能延伸很短几步。