缩写说明
- DP:动态规划
- GPI:广义策略迭代
- MC:蒙特卡洛
- MDP:马尔可夫决策过程
- TD:时序差分
概述
- 时序差分是一种在状态的下一个时刻就能更新其价值估计的无模型算法。
- Sarsa是同轨策略下的时序差分控制方法。
- Q学习是离轨策略下的时序差分控制方法。
- 期望Sarsa综合并推广了Sarsa和Q学习,具有更优的表现。
- 双学习思想用于解决最大化操作导致的最大化偏差问题。
时序差分(TD)学习结合了蒙特卡洛方法和动态规划方法的思想。与蒙特卡洛方法一致,时序差分方法可以直接从与环境互动的经验中学习策略,而不需要构件关于环境动态特性的模型;与动态规划一致,时序差分方法无需等待交互的最终结果,而可以基于已得到的其他状态的估计值来更新当前状态的价值函数。
时序差分预测#
我们先回顾一下,蒙特卡洛方法需要一直等到计算出一次访问后的回报之后(也就是到达该次访问所在幕的终点),再用这个回报作为V(St)的目标进行估计。一个适用于非平稳环境(参见多臂赌博机一章)的简单的每次访问型蒙特卡洛方法可以表示成
V(St)←V(St)+α[Gt−V(St)]其中α是常量步长参数,该方法称为常量αMC。蒙特卡洛方法的估计是无偏的,因为
vπ(s)=˙Eπ[Gt∣St=s]而TD方法只需要等到一次访问的下一个时刻,就能用观察到的收益Rt+1和已有的估计值V(St+1)来进行一次更新
V(St)←V(St)+α[Rt+1+γV(St+1)−V(St)]这种方法被称为TD(0)或单步TD,它是在多步TD方法TD(λ)(将在后续章节讨论)的一个特例。TD方法的估计是有偏的,尽管
vπ(s)=˙Eπ[Gt∣St=s]=Eπ[Rt+1+γGt+1∣St=s]=Eπ[Rt+1+γvπ(St+1)∣St=s]而在估计中我们用于替代vπ(St+1)的V(St+1)本身也是一个估计,因此存在偏差,但随着样本量的增加,TD方法会趋于无偏。
以下是使用TD(0)进行策略估计的算法伪代码:
- 参数:步长α∈[0,1]
- 对于所有s∈S+,任意初始化V(s),其中V(终止状态)=0
- 对每幕循环:
- 初始化S
- 对幕中的每一步循环:
- A←策略π在状态S下做出的决策动作
- 执行动作A,观察到R,S′
- V(S)←V(S)+α[R+γV(S′)−V(S)]
- S←S′
- 直到S为终止状态
在常量αMC和TD(0)中,我们都可以把α后的括号部分视为一种现有估计值与估计目标的误差,即蒙特卡洛误差为Gt−V(St),而TD误差为
δt=˙Rt+1+γV(St+1)−V(St)如果状态价值函数估计V在遍历一幕的过程中不会更新(即蒙特卡洛方法采用的过程),则蒙特卡洛误差可以写为TD误差之和
Gt−V(St)=Rt+1+γGt+1−V(St)+γV(St+1)−γV(St+1)=δt+γ(Gt+1−V(St+1))=δt+γδt+1+γ2δt+2+⋯+γT−t−1δT−1+γT−t(GT−V(ST))=δt+γδt+1+γ2δt+2+⋯+γT−t−1δT−1+γT−t(0−0)=k=t∑T−1γk−tδk而在TD(0)中,V在一次遍历中会不断更新,使这个等式并不准确。但在时间步长较小的情况下,该等式仍能近似成立,这种泛化在TD学习的理论和算法中很重要。
时序差分预测方法具有如下优势:
- 相比DP方法,TD方法不需要一个描述收益和下一状态联合概率分布的模型。
- 相比MC方法,TD方法的更新只需等到下一个时刻即可,这对于持续性任务和幕非常长的分幕式任务是很实用的。
同时,对于任何固定的策略π,TD(0)都已被证明能够收敛到vπ。但是关于TD和MC哪种方法收敛得更快、数据利用更有效,这些仍未被严格证明。不过在实践中,TD方法在随机任务上通常比常量αMC方法收敛得更快。
Sarsa#
现在,我们使用时序差分方法来解决控制问题。GPI模式下的时序差分方法仍然可以分为同轨策略和离轨策略,本节介绍一种同轨策略下的时序差分控制方法。
如蒙特卡洛方法一节中所讲,在没有环境模型的情况下,估计动作价值函数比估计状态价值函数更有效。我们只需将状态的价值替换为“状态-动作”二元组的价值就能得到对应的更新方法
Q(St,At)←Q(St,At)+α[Rt+1+γQ(St+1,At+1)−Q(St,At)]每当从非终止状态的St进行一次状态转移之后,我们就进行一次更新。如果St+1为终止状态,则定义Q(St,At)=0。上述更新规则利用了五元组(St,At,Rt+1,St+1,At+1)的元素,因此被命名为Sarsa。
同样地,为了保证试探性,我们可以用ϵ-软性策略和ϵ-贪心策略来进行策略改进,或者其他保证所有“状态-动作”二元组都能被访问到的方式,来使其最终收敛到最优策略。Sarsa算法的伪代码如下:
- 参数:步长α∈(0,1],很小的ϵ>0
- 对所有s∈S+,a∈A(s),任意初始化Q(s,a),其中Q(终止状态,⋅)=0
- 对每幕循环:
- 初始化S
- 使用从Q得到的策略(例如ϵ-贪心),在S处选择A
- 对幕中的每一步循环:
- 执行动作A,观察到R,S′
- 使用从Q得到的策略(例如ϵ-贪心),在S′处选择A′
- Q(S,A)←Q(S,A)+α[R+γQ(S′,A′)−Q(S,A)]
- S←S′
- A←A′
- 直到S是终止状态
Q学习#
Q学习是一种离轨策略下的时序差分控制,它直接以对最优动作价值函数q∗的估计为目标
Q(St,At)←Q(St,At)+α[Rt+1+γamaxQ(St+1,a)−Q(St,At)]当该更新公式收敛时,有
Q(St,At)=Rt+1+γamaxQ(St+1,a)而这正是贝尔曼最优方程的动作价值函数表示形式。因此Q学习可以视为无环境模型的价值迭代(参见动态规划一章),只是Q学习的价值函数需要通过行动策略与环境交互采样获得,而不是直接由环境动态特性计算得出。
需要注意的是,同轨策略和离轨策略仅仅针对需要采取策略与环境交互的方法,价值迭代既不是同轨策略也不是离轨策略。
Q学习的伪代码如下:
- 参数:步长α∈(0,1],很小的ϵ>0
- 对所有s∈S+,a∈A(s),任意初始化Q(s,a),其中Q(终止状态,⋅)=0
- 对每幕:
- 初始化S
- 对幕中的每一步循环:
- 使用从Q得到的策略(例如ϵ-贪心),在S处选择A
- 执行A,观察到R,S′
- Q(St,At)←Q(St,At)+α[Rt+1+γamaxQ(St+1,a)−Q(St,At)]
- S←S′
- 直到S是终止状态
但是在一些高风险环境、要求策略包含一定随机性(例如非平稳问题)的情况下,Q学习可能表现得不如Sarsa。考虑一个带悬崖的网格世界问题,贴着悬崖走能以最短路径到达终点,但也靠近危险,远离悬崖需要绕路,但更安全。在走到悬崖边的一个格子时,对Q学习来说,它会通过贪心直接选择出下一个贴着悬崖的格子,因而能很快收敛到最短但靠近危险路径;对Sarsa学习来说,它的软性策略还会随机采样下一个动作,这使得其有一定几率掉下悬崖受到惩罚,因而会逐渐收敛到一个绕路但安全的路径。此时如果分别基于Q学习和Sarsa收敛的价值估计采用同样的ϵ-贪心策略,则Sarsa会因为不易掉下悬崖而表现得更好。
期望Sarsa#
期望Sarsa是一种介于Sarsa和Q学习之间的算法,它采用如下更新公式
Q(St,At)←Q(St,At)+α[Rt+1+γE[Q(St+1,At+1)∣St+1]−Q(St,At)]←Q(St,At)+α[Rt+1+γa∑π(a∣St+1)Q(St+1,At+1)−Q(St,At)]在Sarsa的基础上,期望Sarsa通过期望消除了使用随机选择的At+1更新Q(St,At)带来的方差,在相同数量的经验下,它表现得比Sarsa更好。而相较于Q学习,它又不那么激进,会更综合地考虑下一个状态的价值,更加适用于高风险环境。
期望Sarsa既可以是同轨策略也可以是离轨策略,这取决于其用于采样估计Q的策略π′是否不同于用于计算期望的策略π。在离轨策略下,如果π是贪心策略,则期望Sarsa就是Q学习,因此其可以视为Q学习的推广。
最大化偏差与双学习#
由于最优策略的贪心性质,我们目前讨论的所有控制算法在构建目标策略时都包含了最大化操作。但考虑一种情况,在状态s下,所有动作的真实价值q(s,a)全为零,但它们的估计值Q(s,a)是不确定的,可能有些大于零,有些小于零。此时我们如果对估计值采用最大化操作,反而产生了最大的正偏差,我们将其称为最大化偏差。
避免最大化偏差的一个方法是双学习。既然估计值Q可能高估也可能低估,那么如果采用两组独立更新的估计Q1和Q2,从期望上来看,二者的误差会相互抵消。
双学习的关键在于解耦了选择和评估动作的过程,在更新Q1时,我们仍基于Q1选择贪心动作,但是不会使用Q1作为其更新基准,而是让Q2重新给出对这一动作的评估。这相当于在复习时,自己抽查自己往往检验不出薄弱的地方,而两个人相互抽查则更容易发现对方的漏洞。
双学习的思想可以推广到为完备MDP设计的算法中,在Q学习中的推广则被称为双Q学习。双Q学习在每次状态转移随机对Q1或Q2进行更新,其中Q1的更新公式如下
Q1(St,At)←Q1(St,At)+α[Rt+1+γQ2(St+1,aargmaxQ1(St+1,a))−Q1(St,At)]Q2的更新只需将上式二者的地位互换即可。
双Q学习的伪代码如下:
- 参数:步长α∈(0,1],很小的ϵ>0
- 对所有s∈S+,a∈A(s),任意初始化Q1(s,a)和Q2(s,a),其中Q(终止状态,⋅)=0
- 对每幕:
- 初始化S
- 对幕中的每一步循环:
- 使用从Q1+Q2得到的策略(例如ϵ-贪心),在S处选择A
- 执行A,观察到R,S′
- 以0.5的概率执行: Q1(St,At)←Q1(St,At)+α[Rt+1+γQ2(St+1,aargmaxQ1(St+1,a))−Q1(St,At)]
- 或者执行: Q2(St,At)←Q2(St,At)+α[Rt+1+γQ1(St+1,aargmaxQ2(St+1,a))−Q2(St,At)]
- S←S′
- 直到S是终止状态