概述
- n步时序差分方法是蒙特卡洛方法和时序差分方法更一般的推广。
- 将单步Sarsa推广到n步Sarsa我们得到n步方法的同轨策略控制。
- n步方法最基本的离轨策略控制是基于重要度采样的。
- n步树回溯法是一种不需要重要度采样的离轨策略控制。
通过进一步归纳可见,动态规划和时序差分学习都根据对后继状态价值的估计来更新对当前状态价值的估计,这种基于其他估计来更新自己的估计的思想被称为自举法。通过将单步时序差分推广到n步,我们可以得到一系列n步自举法,甚至在极限状态下得到蒙特卡洛方法。
n步时序差分预测#
对于固定策略π下的给定的多幕采样序列,从某一状态开始,蒙特卡洛方法利用直至终止状态的收益序列对该状态的价值进行更新,而时序差分方法只根据下一步的即时收益,在后继状态的价值估计值的基础上进行自举更新。
我们很容易想到一种介于二者之间的方法是利用该状态之后的多个中间时刻的收益来进行更新,但又不到达终止状态。对于n步更新,我们利用当前状态之后的n步收益和n步之后的价值估计来更新当前状态价值估计。n步更新仍然属于时序差分方法,因为前面状态的估计值仍根据它与后继状态估计值的差异进行更新,只不过后继状态可以是n步之后的状态。时序差分量被扩展成n的方法被称为n步时序差分方法。
利用回溯图可以直观地对算法进行图示总结。不同步数下的时序差分方法更新的回溯图如下,空心圈代表采样的状态,实心点代表采样的动作:

接下来我们考虑该方法的数学表示。我们知道,在蒙特卡洛方法中,更新目标Gt沿着完整回报的方向计算
Gt=˙Rt+1+γRt+2+γ2Rt+3+⋯+γT−t−1RT其中T是终止状态的时刻。
而在单步时序差分中,更新的目标是即时收益加上后继状态的价值函数估计值乘以折扣系数,我们称其为单步回报
Gt:t+1=˙Rt+1+γVt(St+1)其中Vt是在t时刻vπ的估计值,后继状态的折后价值函数估计γVt(St+1)可以视为对后续完整回报γRt+2+⋯+γT−t−1RT的估计。类似地,将这种想法扩展到两步的情况,我们有两步更新的目标两步回报
Gt:t+2=˙Rt+1+γRt+2+γ2Vt+1(St+2)而任意n步更新的目标是n步回报
Gt:t+n=˙Rt+1+γRt+2+⋯+γn−1Rt+n+γnVt+n−1(St+n)其中n⩾1,0⩽t⩽T−n。n步回报即在n步后截断完整回报,并用Vt+n−1(St+n)作为对剩余部分的估计。如果t+n⩾T,则超出终止状态的部分均为零,n步回报等于完整回报。
计算时刻t的n步回报需要在时刻t+n时得到Rt+n和Vt+n−1后才能计算。最基础的基于n步回报的状态价值函数更新算法即n步时序差分(n步TD)算法
Vt+n(St)=˙Vt+n−1(St)+α[Gt:t+n−Vt+n−1(St)],0⩽t<T在更新当前状态的过程中,其他状态s=St的价值估计保持不变
Vt+n(S)=Vt+n−1(S)用n步回报在Vt+n−1的基础上更新Vt+n的一个重要依据是,n步回报的期望和真实状态价值函数vπ(s)之间的最大误差能保证不大于Vt+n−1和vπ(s)之间的最大误差的γn倍
smax∣Eπ[Gt:t+n∣St=s]−vπ(s)∣⩽γnsmax∣Vt+n−1(s)−vπ(s)∣这被称为n步回报的误差减少性质,其可以证明所有的n步时序差分方法在合适的条件下都能收敛到正确的预测,且n越大,收敛性越好。
n步TD的伪代码如下:
- 参数:步长α∈(0,1],正整数n
- 对所有的s∈S,任意初始化V(s)
- 对每幕循环:
- 初始化和存储S0=终止状态
- T←∞
- 循环t=0,1,2⋯:
- 如果t<T,那么:
- 根据π(⋅∣St)采取动作
- 观察和存储下一时刻的收益Rt+1和状态St+1
- 如果St+1是终止状态,则T←t+1
- τ←t−n+1(τ是当前正在更新的状态所在时刻)
- 如果τ⩾0:
- G←i=τ+1∑min(τ+n,T)γi−τ−1Ri
- 如果τ+n<T,那么G←G+γnV(Sτ+n)
- V(Sτ)←V(Sτ)+α[G−V(Sτ)]
- 直到τ=T−1
该伪代码的逻辑较为晦涩,其进一步解释如下:在每一幕,我们从S0根据策略π选择动作直至终止状态ST,其中T在一开始并不知道,直到遇到终止状态才能确定。S0的更新需要等到时刻t=n+1时才能执行,相应地,往后Sτ(τ⩾0)的更新则在时刻t=n+1+τ执行,在代码中则表示为在时刻t执行对St−n+1(τ=t−n+1⩾0)的更新。在更新中,如果Sτ距离终止状态ST不足n步,则min(τ+n,T)=T,回报只能在终止状态截断,即直接使用完整回报作为更新目标,此时也无需再加上后继状态的折后价值估计,因为终止状态的价值v(ST)=0。
事实证明,对于大小为∣S∣的状态集合,n取其中间大小的值时通常效果最好,这也证明了将单步时序差分方法和蒙特卡洛方法推广到n步时序差分方法可能会得到更好的效果。
n步Sarsa#
将n步方法与Sarsa结合,我们可以得到同轨策略下的n步时序差分学习控制方法。n步版本的Sarsa被称为n步Sarsa,相应地,上一章介绍的初始版本的Sarsa被称为单步Sarsa或Sarsa(0)。不同步数下的Sarsa方法更新的回溯图如下:
![[Pasted image 20250519191609.png]]
和单步TD到单步Sarsa的转换一样,n步TD到n步Sarsa的核心思想也是将状态替换为“状态-动作”二元组,并使用ϵ-贪心策略。我们根据动作价值估计重新定义n步Sarsa方法下的n步回报
Gt:t+n=˙Rt+1+γRt+2+⋯+γn−1Rt+n+γnQt+n−1(St+n,At+n),n⩾1,0⩽t<T−n当t+n⩾T时,Gt:t+n=Gt。
则n步Sarsa的更新公式为
Qt+n(St,At)=˙Qt+n−1(St,At)+α[Gt:t+n−Qt+n−1(St,At)],0⩽t<T在处理对应“动作-状态”二元组的更新时,所有其他二元组保持不变,即对于所有s=St,a=At,有
Qt+n(s,a)=Qt+n−1(s,a)n步Sarsa算法的伪代码如下:
- 参数:步长α∈(0,1],很小的ϵ>0,正整数n
- 对所有的s∈S,a∈A,任意初始化Q(s,a)
- 初始化π为基于Q的ϵ-贪心策略或者某个给定策略
- 对每幕循环:
- 初始化和存储S0=终止状态
- 选择和存储动作A0∼π(⋅∣S0)
- T←∞
- 循环t=0,1,2⋯:
- 如果t<T,那么:
- 采取动作At
- 观察和存储下一时刻的收益Rt+1和状态St+1
- 如果St+1是终止状态:
- T←t+1
- 否则:
- 选择并存储动作At+1∼π(⋅∣St+1)
- τ←t−n+1(τ是当前正在更新的状态所在时刻)
- 如果τ⩾0:
- G←i=τ+1∑min(τ+n,T)γi−τ−1Ri
- 如果τ+n<T,那么G←G+γnQ(Sτ+n,Aτ+n)
- Q(Sτ,Aτ)←Q(Sτ,Aτ)+α[G−Q(Sτ,Aτ)]
- 更新π为基于Q的ϵ-贪心策略
- 直到τ=T−1
n步Sarsa相比单步Sarsa能够加速策略学习。假设在一个网格世界中,除了终点具有高收益,其余格子的收益均为零,则完成一幕序列的采样后,单步Sarsa的终点收益只能影响到达终点的前一个格子相应的动作价值,而n步Sarsa却能更新路径上到达终点的前n个格子相应的动作价值,学到了更多的知识。
![[Pasted image 20250519191717.png]]
n步期望Sarsa则在Sarsa的基础上重新定义了n步回报
Gt:t+n=˙Rt+1+γRt+2+⋯+γn−1Rt+n+γnVˉt+n−1(St+n),n⩾1,0⩽t<T−n其中Vˉ(s)表示状态s的期望近似价值,它通过在目标策略下t时刻的动作价值估计的期望来计算
Vˉt(s)=˙a∑π(a∣s)Qt(s,a)终止状态的期望近似价值为零。
n步离轨策略学习#
n步时序差分方法的离轨策略学习与蒙特卡洛方法中介绍的离轨策略控制相似,因为我们需要行动策略和目标策略在n步上采取相同行动的相对概率(重要度采样比),进而由行动策略b的n步回报来预测目标策略π的n步回报。
对于由策略b从t时刻采样的n步回报Gt:t+n,在对n步之后t+n时刻策略π的状态价值估计Vt+n(St)进行更新时,可以简单地用重要度采样比ρt:t+n−1(两种策略采取At∼At+n这n个动作的相对概率)进行修正
Vt+n(St)=˙Vt+n−1(St)+αρt:t+n−1[Gt:t+n−Vt+n−1(St)],0⩽t<T这里,重要度采样比的计算为
ρt:h=˙k=t∏min(h,T−1)b(Ak∣Sk)π(Ak∣Sk)其中min(h,T−1)在终止状态截断截断计算。
在蒙特卡洛方法的离轨策略控制中,我们使用贪心策略作为目标策略。但是尽管我们选择了具有试探性的行为策略,在重要度采样中,价值估计的更新仍然取决于目标策略是否有概率选择,因此在学习中使用绝对的贪心策略并不是一个好的选择。我们仍可以采取ϵ-贪心策略使得所有价值估计都有被更新的可能,在合适的条件下,基于ϵ-贪心策略收敛后的价值估计生成一个贪心策略也能得到最优策略。
离轨策略下的n步Sarsa算法伪代码如下:
- 参数:步长α∈(0,1],正整数n
- 对所有的s∈S,a∈A,任意初始化Q(s,a)
- 初始化b为一个任意的满足b(a∣s)>0的策略
- 初始化π为基于Q的ϵ-贪心策略或者某个给定策略
- 对每幕循环:
- 初始化和存储S0=终止状态
- 选择和存储动作A0∼b(⋅∣S0)
- T←∞
- 循环t=0,1,2⋯:
- 如果t<T,那么:
- 采取动作At
- 观察和存储下一时刻的收益Rt+1和状态St+1
- 如果St+1是终止状态:
- T←t+1
- 否则:
- 选择并存储动作At+1∼b(⋅∣St+1)
- τ←t−n+1(τ是当前正在更新的状态所在时刻)
- 如果τ⩾0:
- ρ←i=τ+1∏min(τ+n−1,T−1)b(Ai∣Si)π(Ai∣Si)
- G←i=τ+1∑min(τ+n,T)γi−τ−1Ri
- 如果τ+n<T,那么G←G+γnQ(Sτ+n,Aτ+n)
- Q(Sτ,Aτ)←Q(Sτ,Aτ)+αρ[G−Q(Sτ,Aτ)]
- 更新π为基于Q的ϵ-贪心策略
- 直到τ=T−1
n步树回溯法#
n步树回溯法是一种不需要重要度采样的n步离轨策略学习方法。普通的n步离轨策略方法只依赖行动策略采样的具体动作,因此需要对行动策略的动作采取概率进行修正。而在n步树回溯法中,行动策略的作用仅仅是产生状态转移,决定采样的动作-状态路径,在计算n步回报时,行动策略选择的动作和未选择的动作都会以在目标策略下的选择概率被加权。一个三步树回溯更新的回溯图如下:
![[Pasted image 20250519201306.png|138]]
树回溯算法的单步回报与期望Sarsa相同,即对于t<T−1,有
Gt:t+1=˙Rt+1+γa∑π(a∣St+1)Qt(St+1,a)对于t<T−2,两步树回溯的回报将Q(St+1,At+1)展开为在St+1选择At+1转移到St+2的单步回报
Gt:t+2=˙Rt+1+γa=At+1∑π(a∣St+1)Qt(St+1,a)+γπ(At+1∣St+1)(Rt+2+γa∑π(a∣St+2)Qt+1(St+2,a))=Rt+1+γa=At+1∑π(a∣St+1)Qt(St+1,a)+γπ(At+1∣St+1)Gt+1:t+2从这个公式中我们可以看出树回溯的n步回报的递归形式,即对于t<T−1,n⩾2,有
Gt:t+n=˙Rt+1+γa=At+1∑π(a∣St+1)Qt(St+1,a)+γπ(At+1∣St+1)Gt+1:t+n上式是我们在代码中更新n步回报的基础。对于t+n超出T−1的部分,我们仍使用终止状态的收益RT截断,即GT−1:t+n=RT。价值估计的更新公式与n步Sarsa一样
Qt+n(St,At)=˙Qt+n−1(St,At)+α[Gt:t+n−Qt+n−1(St,At)],0⩽t<Tn步树回溯算法的伪代码如下:
- 参数:步长α∈(0,1],正整数n
- 对所有的s∈S,a∈A,任意初始化Q(s,a)
- 初始化b为一个任意的满足b(a∣s)>0的策略
- 初始化π为基于Q的ϵ-贪心策略或者某个给定策略
- 对每幕循环:
- 初始化和存储S0=终止状态
- 根据S0任意选择并存储动作A0
- T←∞
- 循环t=0,1,2⋯:
- 如果t<T,那么:
- 采取动作At
- 观察和存储下一时刻的收益Rt+1和状态St+1
- 如果St+1是终止状态:
- T←t+1
- 否则:
- 根据St+1任意选择并存储动作At+1
- τ←t−n+1(τ是当前正在更新的状态所在时刻)
- 如果τ⩾0:
- 如果t+1⩾T:
- G←RT
- 否则
- G←Rt+1+γa∑π(a∣St+1)Q(St+1,a)
- 循环k从min(t,T−1)递减到τ+1:
- G←Rk+γa=Ak∑π(a∣Sk)Q(Sk,a)+γπ(Ak∣Sk)G
- Q(Sτ,Aτ)←Q(Sτ,Aτ)+α[G−Q(Sτ,Aτ)]
- 更新π为基于Q的ϵ-贪心策略
- 直到τ=T−1