上一篇:时序差分学习
n-step bootstrapping n 步自举法
1、n步时序差分预测
我们已经知道TD(0)和MC的回溯图分别是这样:


自然会联想到中间的一些情况有没有什么意义呢?比如下方的一些回溯图:

其实中间的这些过度情况就是n步时序差分方法,它的两种极端情况就是TD(0)和MC。还是按照原来的思路,先研究预测再考虑控制。想要弄清楚n步时序差分的预测是怎么实现的,可以从MC和TD(0)入手。我们知道MC的向着完整回报的方向更新,即:
Gt≐Rt+1+γRt+2+γ2Rt+3+⋯+γT−t−1RT(6.1.1)
TD(0)则是采用的单步回报:
Gt:t+1≐Rt+1+γVt(St+1)(6.1.2)
依次类推,两次回报更新就是:
Gt:t+2≐Rt+1+γRt+2+γ2Vt+1(St+2)(6.1.3)
那么n步回报就是:
Gt:t+n≐Rt+1+γRt+2+⋯+γn−1Rt+n+γnVt+n−1(St+n)(6.1.4)
当 t+n>T 时 Gt:t+n=Gt
所以n步状态价值函数的更新算法就是:
Vt+n(St)≐Vt+n−1(St)+α[Gt:t+n−Vt+n−1(St)],0≤t<T(6.1.5)
2、n步Sarsa
搞明白了预测就可以仿照之前的思路将Sarsa变成n步Sarsa
Gt:t+n≐Rt+1+γRt+2+⋯+γn−1Rt+n+γnQt+n−1(St+n,At+n),n≥1,0≤t<T−nQt+n(St,At)≐Qt+n−1(St,At)+α[Gt:t+n−Qt+n−1(St,At)],0≤t<T(6.2.1)
n步Sarsa和Sarsa的不同可以通过下面这个例子很好地体现出来:

假如我们从某一点出发想要到达G,并且初始化每个状态的初始价值都是0;只有走到G的那一步获得R=1,其他动作R=0。==单步Sarsa每一幕只会更新一个动作!==回想单步Sarsa控制:
Q(St,At)←Q(St,At)+α[Rt+1+γQ(St+1,At+1)−Q(St,At)]
在到达G之前每个R都是0,每个Q也都是0,只有G之前的那个网格,往上走一步获得了R=1,因此也仅有G正下方的那个状态的动作价值得到了增强。这就好比是我们只看重那个直接导致成功的行为而对之前的探索和努力都视而不见。因此单步Sarsa每一幕只能加强最后一个动作价值,等到下一幕Agent再不断探索时G下方的那个网格的价值已经不再为0所以倒数第二个动作的价值得到了加强,依此类推训练多幕之后才能找到最优的策略。不难分析出,导致单步Sarsa一幕只能更新一个动作的原因就是它只用了单步的回报,如果改成用两步回报:
Q(St,At)←Q(St,At)+α[Rt+1+γRt+2+γ2Q(St+2,At+2)−Q(St,At)]
那么同样是走一幕,再更新倒数第二个动作的时候就可以受到最后一步R的作用,所以一幕之内可以更新倒数两个动作。那么当使用n步回报的时候自然可以更新倒数n步,这么做比单步Sarsa更加高效!
3、参考资料
《Reinforcement Learning An Introduction》Sutton
RL Course by David Sliver