资格迹,在第七章的n步TD方法的基础之上,引入了一个短时记忆向量z,以及与之相对的长时记忆向量w,当参数w的一个分量参与计算并产生一个估计值时,对应的z的分量会瞬间升高,然后逐渐衰减,在资格迹归零前,如果发现了非零的TD误差,那么对应的w的分量就可以得到学习。
在n步算法中资格迹的主要优势在于,其只需要追踪一个迹向量,而不需要存储最近的n个特征向量,学习也会持续并统一地在整个时间上进行,而不是延迟到整幕的结尾,并且遇到状态时也可马上进行学习而不需要n步的延迟。
前向视图通过待更新的状态往前看,更新依赖于当前还未发生的未来。
后向视图使用当前的TD误差并用资格迹回看那些已访问过的状态。
12.1 λ \lambda λ-回报
一次有效的更新,除了以任意的n步回报之外,也可以用不同n的平均n步回报作为更新目标,只要满足权重都为正数且和为1即可。这样的复合回报,能够减小误差,也能保证更新的收敛性。
复合更新会限制组分中最长部分的长度,因为它决定了更新的延迟。
TD(
λ
\lambda
λ)可以看作是平均n步更新的一个特例,这里的平均值包括了所有可能的n步更新,每一步加权:
其回溯图如下:
其中
λ
\lambda
λ=1时,
λ
\lambda
λ-回报就是蒙特卡洛算法,
λ
\lambda
λ=0时,
λ
\lambda
λ-回报就是单步TD算法。目前所讲的算法都是基于前向视图的。
12.2 TD( λ \lambda λ)
TD(
λ
\lambda
λ)在每一步都更新权重,并且计算平均在整个时间轴上,并且适用于持续性问题。
资格迹辅助整个学习过程,唯一的作用就是影响权值向量,进而权值向量决定了估计值。
在TD(
λ
\lambda
λ)中,资格迹向量初始化为0,然后每一步累积价值函数的梯度,并以
γ
λ
\gamma\lambda
γλ衰减:
资格迹追踪了对最近的状态评估值做出了贡献的权值向量的分量,当一个强化事件出现时,我们认为这些贡献“痕迹”展示了权值向量的对应分量有多少“资格”可以接受学习过程引起的变化,而关注的强化事件是一个又一个时刻的单步TD误差。而在TD(
λ
\lambda
λ)中,权值向量每一步的更新正比于TD的标量误差和资格迹:
对应的半梯度TD(
λ
\lambda
λ)算法如下:
在每个时刻,计算当前的TD误差,并根据之前的状态对当前资格迹的贡献来分配,可以想象在一个状态流中,计算TD误差,并将其传播给之前访问过的状态,对应于后向视图:
对应的TD(0)即
λ
\lambda
λ=0,退化为简单的单步TD算法,对应的TD(0)即
λ
\lambda
λ=1,恰好与MC算法是对应的回报衰减,并且它不需要在幕结束时才学习。
12.3 n步截断 λ \lambda λ-回报方法
离线
λ
\lambda
λ-回报使用了知道幕结尾才知道的
λ
\lambda
λ-回报,和之前等方法类似,可以考虑使用截断回报:
对应的截断TD(
λ
\lambda
λ)的更新方式为:
12.4 重做更新:在线 λ \lambda λ-回报算法
选择截断回报时,截断参数n需要折中考虑,n应该尽量大使其更接近离线
λ
\lambda
λ-回报算法,同时它也应该比较小使得更新更快且更迅速地影响后续行为。
折中的基本思想是,在每一步收集到新的数据增量的同时,回到当前幕的开始并重做所有的更新。由于获得了新的数据,因此新的更新会比原来的更好,每次都使用新的视界,每一次遍历当前幕时,都可以使用一个稍长一点的视界来得到更好的结果。
视觉每扩展一步,都需要重新从
w
0
w_0
w0开始重做有的更新,需要区分不同视界计算的不同的权值向量,也就是需要对权值向量w加入视界上标来进一步区分,每一步的初始权值向量继承上一步的,以三次视界为例:
对应在线
λ
\lambda
λ-回报算法的更新式即为:
这是一个完全在线的算法,在一幕中的每一个时刻t,仅仅使用时刻t获取的信息确定新的权值向量,其主要缺点时计算十分复杂,每一个时刻都需要遍历整幕序列,这种算法不仅能在幕中进行更新,在幕结束时,用于自举的权值向量也获得了更多数量的有意义的更新。
12.5 真实的在线TD( λ \lambda λ)
在线
λ
\lambda
λ-回报算法的权重的更新序列可以组织成一个三角形:
在每个时刻产生这个三角形的一行,但是只有对角线上的权值向量才是我们真正需要的,实际上就要找到更紧凑的寻找对角线权值的算法。做到之后,针对现行情况就能得到基于资格迹的真实在线TD(
λ
\lambda
λ)更新:
这个算法能产生和在线
λ
\lambda
λ-回报算法完全相同的权值向量,但是代价更低,相比普通的TD(
λ
\lambda
λ),代价是同一数量级的,但是每一步的计算量增加了约50%(增加了一步内积)。
对应的完整的伪代码为:
前面介绍的资格迹称为积累迹,而这节介绍的资格迹被称为荷兰级。
12.6 蒙特卡洛学习中的荷兰迹
考虑线性版本的梯度MC预测算法:
假设回报值就是在幕结束的时候得到的单一收益回报值,且没有折扣。结合资格迹方法,依然在每幕结束才进行更新,但是将计算平均到每一步中,也可以减少存储需求:
其实就是对权值更新方程进行移项处理,对权值构造一个衰减矩阵,并且可以进行递归:
这里的a和z就是辅助记忆向量的,可以自不知道G的条件下被增量式地进行更新,z事实上就是资格迹中荷兰迹,根据下式进行更新:
(注意第二个和第三个等式中的
α
\alpha
α其实是不需要的)
只需要把
x
t
x_t
xt隔离出去后,再将
F
t
F_t
Ft放到求和之外进行递归,再进行移项即可得到对应的增量更新方式。而这个更新凡是就是
γ
λ
\gamma\lambda
γλ情况下的荷兰迹。
对应的a辅助向量的更新式为:
辅助向量a和z在每个时间步骤更新,并且在观测到G时,被用来计算这个时刻的w,这是一个每步时间和存储复杂度都是
O
(
d
)
O(d)
O(d)的增量式算法。
12.7 Sarsa( λ \lambda λ)
用近似动作价值函数代替近似状态价值含糊,得到截断
λ
\lambda
λ的动作价值函数:
Sarsa(
λ
\lambda
λ)也是基于前向视图,其更新规则与TD(
λ
\lambda
λ)相同:
只不过对应的TD误差和资格迹不同:
采用二值特征和线性函数逼近的Sarsa(
λ
\lambda
λ)算法的伪代码如下:
与之前的算法类似,也会有真实在线Sarsa(
λ
\lambda
λ)算法,伪代码如下: