文章目录
1.本章内容概要
时间差分(Temporal-Difference TD)思想是RL中最重要的思想,TD方法将MC思想和DP思想结合了起来。像MC方法一样,TD方法也能直接从原始经验中学习,不需要环境的模型;而又类似于DP,TD方法的更新也是依赖之前学得的其它估值的,而不需要等待episode的结束,因此也是bootstrap的。TD、DP和MC之间的关系是RL领域永恒的主题。后面的章节我们还会看到,MC和TD是方法空间中的端点,在它们中间则分布着诸多折中的方法。
本章,我们也从prediction问题开始。然后基于GPI给出control方法。
2.TD预测
TD方法和MC方法都是利用经验解决prediction问题。给定遵循策略 π \pi π的一些经验,这两种方法都更新对非终止状态s的 V ( S t ) V(S_t) V(St)的估计值。但是MC方法必须等待episode结束才能拿到return,并以return作为更新目标。对于nonstationary环境(上一章我们没怎么讨论非平稳情况,但是思想和第二章非平稳情况的处理一节是一致的),一个every-visit MC更新方法如下式所示,叫做constant-α MC。
V ( S t ) ← V ( S t ) + α [ G t − V ( S t ) ] V\left(S_{t}\right) \leftarrow V\left(S_{t}\right)+\alpha\left[G_{t}-V\left(S_{t}\right)\right] V(St)←V(St)+α[Gt−V(St)]
α \alpha α是更新步长, G t G_t Gt就是上一章讨论的return,只有在一个episode结束后才能得到 G t G_t Gt。而TD方法不同,它只需要等到下个时间步即可更新,也就是在 t + 1 t+1 t+1时刻,利用下式更新:
V ( S t ) ← V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) − V ( S t ) ] V\left(S_{t}\right) \leftarrow V\left(S_{t}\right)+\alpha\left[R_{t+1}+\gamma V\left(S_{t+1}\right)-V\left(S_{t}\right)\right] V(St)←V(St)+α[Rt+1+γV(St+1)−V(St)]
这里的更新目标是 R t + 1 + γ V ( S t + 1 ) R_{t+1}+\gamma V(S_{t+1}) Rt+1+γV(St+1),其中 V ( S t + 1 ) V(S_{t+1}) V(St+1)是我们已有的对 S t + 1 S_{t+1} St+1的值的估计,因此类似于DP,TD也是基于bootstrapping思想的。上式这种更新叫做 T D ( 0 ) TD(0) TD(0),或者one-step TD。显然,我们还可以扩展出 T D ( λ ) TD(\lambda) TD(λ),这将在后续章节讨论。
上述式子实际上来自于Bellman方程,我们已经在第三章中介绍了(策略和值函数小节):
q
π
(
s
,
a
)
=
E
π
[
G
t
∣
S
t
=
s
,
A
t
=
a
]
=
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
=
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
∑
a
′
π
(
a
∣
s
′
)
q
π
(
s
′
,
a
′
)
]
\begin{aligned} q_{\pi}(s, a) &=\mathbb{E}_{\pi}\left[G_{t} | S_{t}=s, A_{t}=a\right] \\ &=\sum_{s^{\prime}, r} p\left(s^{\prime}, r | s, a\right)\left[r+\gamma v_{\pi}\left(s^{\prime}\right)\right] \\ &=\sum_{s^{\prime}, r} p\left(s^{\prime}, r | s, a\right)\left[r+\gamma \sum_{a^{\prime}} \pi\left(a | s^{\prime}\right) q_{\pi}\left(s^{\prime}, a^{\prime}\right)\right] \end{aligned}
qπ(s,a)=Eπ[Gt∣St=s,At=a]=s′,r∑p(s′,r∣s,a)[r+γvπ(s′)]=s′,r∑p(s′,r∣s,a)[r+γa′∑π(a∣s′)qπ(s′,a′)]
在第二章中(非平稳情况的处理一节),我们讨论了对于非平稳问题如何逐渐更新以得到好的值估计:
Q
n
+
1
=
Q
n
+
α
[
R
n
−
Q
n
]
=
α
R
n
+
(
1
−
α
)
Q
n
=
α
R
n
+
(
1
−
α
)
[
α
R
n
−
1
+
(
1
−
α
)
Q
n
−
1
]
=
α
R
n
+
(
1
−
α
)
α
R
n
−
1
+
(
1
−
α
)
2
Q
n
−
1
=
α
R
n
+
(
1
−
α
)
α
R
n
−
1
+
(
1
−
α
)
2
α
R
n
−
2
+
=
(
1
−
α
)
n
Q
1
+
∑
i
=
1
n
α
(
1
−
α
)
n
−
i
R
i
\begin{aligned} Q_{n+1} &=Q_{n}+\alpha\left[R_{n}-Q_{n}\right] \\ &=\alpha R_{n}+(1-\alpha) Q_{n} \\ &=\alpha R_{n}+(1-\alpha)\left[\alpha R_{n-1}+(1-\alpha) Q_{n-1}\right] \\ &=\alpha R_{n}+(1-\alpha) \alpha R_{n-1}+(1-\alpha)^{2} Q_{n-1} \\ &=\alpha R_{n}+(1-\alpha) \alpha R_{n-1}+(1-\alpha)^{2} \alpha R_{n-2}+\\ &=(1-\alpha)^{n} Q_{1}+\sum_{i=1}^{n} \alpha(1-\alpha)^{n-i} R_{i} \end{aligned}
Qn+1=Qn+α[Rn−Qn]=αRn+(1−α)Qn=αRn+(1−α)[αRn−1+(1−α)Qn−1]=αRn+(1−α)αRn−1+(1−α)2Qn−1=αRn+(1−α)αRn−1+(1−α)2αRn−2+=(1−α)nQ1+i=1∑nα(1−α)n−iRi
这个算法如下:
回想下DP方法:
v π ( s ) ≐ E π [ G t ∣ S t = s ] = E π [ R t + 1 + γ G t + 1 ∣ S t = s ] = E π [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] \begin{aligned} v_{\pi}(s) & \doteq \mathbb{E}_{\pi}\left[G_{t} | S_{t}=s\right] \\ &=\mathbb{E}_{\pi}\left[R_{t+1}+\gamma G_{t+1} | S_{t}=s\right] \\ &=\mathbb{E}_{\pi}\left[R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right) | S_{t}=s\right] \end{aligned} vπ(s)≐Eπ[Gt∣St=s]=Eπ[Rt+1+γGt+1∣St=s]=Eπ[Rt+1+γvπ(St+1)∣St=s]
显然,MC方法实际上基于第一行,DP和TD方法基于第三行。在MC中,我们无法直接得到第一行式子中的期望,因此是利用采样近似的(sample update);DP方法中模型是已知的,因此不需要采样,但是 v π ( S t + 1 ) v_\pi(S_{t+1}) vπ(St+1)是估计的;而TD方法则结合了DP的bootstrapping和MC的采样。
T
D
(
0
)
TD(0)
TD(0)的backup diagram如下:
从backup图分析,sample updates只根据本次的下个state采样和reward采样更新当前状态的值,因此sample updates与DP的expected updates是不同的,sample方法不去显式地考虑后续状态与回报值的分布。
T D ( 0 ) TD(0) TD(0)中方括号内的部分叫做TD error:
δ t ≐ R t + 1 + γ V ( S t + 1 ) − V ( S t ) \delta_{t} \doteq R_{t+1}+\gamma V\left(S_{t+1}\right)-V\left(S_{t}\right) δt≐Rt+1+γV(St+1)−V(St)
如果我们在一个episode中不去更新值函数,只计算每个step的TD error,那么MC error可以写成TD error累加的形式:
G t − V ( S t ) = R t + 1 + γ G t + 1 − V ( S t ) + γ V ( S t + 1 ) − γ V ( S t + 1 ) = δ t + γ ( G t + 1 − V ( S t + 1 ) ) = δ t + γ δ t + 1 + γ 2 ( G t + 2 − V ( S t + 2 ) ) = δ t + γ δ t + 1 + γ 2 δ t + 2 + ⋯ + γ T − t − 1 δ T − 1 + γ T − t ( G T − V ( S T ) ) = δ t + γ δ t + 1 + γ 2 δ t + 2 + ⋯ + γ T − t − 1 δ T − 1 + γ T − t ( G − 0 ) = ∑ k = t T − 1 γ k − t δ k \begin{aligned} G_{t}-V\left(S_{t}\right) &=R_{t+1}+\gamma G_{t+1}-V\left(S_{t}\right)+\gamma V\left(S_{t+1}\right)-\gamma V\left(S_{t+1}\right) \\ &=\delta_{t}+\gamma\left(G_{t+1}-V\left(S_{t+1}\right)\right) \\ &=\delta_{t}+\gamma \delta_{t+1}+\gamma^{2}\left(G_{t+2}-V\left(S_{t+2}\right)\right) \\ &=\delta_{t}+\gamma \delta_{t+1}+\gamma^{2} \delta_{t+2}+\cdots+\gamma^{T-t-1} \delta_{T-1}+\gamma^{T-t}\left(G_{T}-V\left(S_{T}\right)\right) \\ &=\delta_{t}+\gamma \delta_{t+1}+\gamma^{2} \delta_{t+2}+\cdots+\gamma^{T-t-1} \delta_{T-1}+\gamma^{T-t}(G-0) \\ &=\sum_{k=t}^{T-1} \gamma^{k-t} \delta_{k} \end{aligned} 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(Gt+2−V(St+2))=δ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(G−0)=k=t∑T−1γk−tδk
在实际操作中,在episode中间我们会逐step更新,因此上面这个式子并不准确,但是如果更新步长较小,那么上面这个式子就比较有参考意义。
example 6.1 Driving Home
你每天都开车回家,并尝试预测路上所需时间。当你离开办公室的时候,你看了下[时间、周几、天气、其它相关信息]。例如现在是周五,你6点离开办公室,你估计需要30分钟到家;然后你6:05来到了车上,这时你注意开始下雨了,因此你预计还需要35分钟到家;15分钟后,你跑完了高速路的部分,发现路上很顺利,因此你修改对总时长的预计为35分钟;不幸的是,这时候前面出现了个卡车堵着你,你还没法超过去,你直到6:40才超过卡车;3分钟后,你到家了。这个过程整理如下:
这个例子中,reward是每个路段所消耗的时间,且折扣因子是1,因此return就是还需要的时间。表格中间的一列就是对各个状态的估计值。我们可以通过这个例子理解MC和TD方法:
上图绘制了利用MC方法和TD方法预测的总耗时。图中的红色箭头是每个状态计算得到的error。对于MC方法,只有我们到家后得到真实的总时间消耗,才能计算各个状态的 G t G_t Gt,这样才能更新各个状态的值,而人们实际是不会这么做的,我们会根据当前的情况而不断修正对还需时间的预测。例如我们最初估 V ( S 0 ) = 30 m i n V(S_0)=30min V(S0)=30min,但是我们堵车了 25 m i n 25min 25min才走了半程。这时我们实际上就可以重新估计 V ( S 0 ) = 50 m i n V(S_0)=50min V(S0)=50min了,可见不要走完全程得到 G t G_t Gt我们也能改善估计,这就是采用时间差分的方法。
如果搬家了,导致路程的前半段还不变,但是后半段变了,这样TD方法就比MC方法好很多,因为TD方法可以充分利用以往的经验,而MC方法则必须从头开始学习,因为以往的那些 G t G_t Gt值没用了,如果非得用,也会在开始的时候被过去经验干扰,很久后才收敛,这是所谓的nonstationary问题。
此外,TD方法在计算和存储上面也有优势。
3.TD预测方法的优势
这一小节讨论TD方法相对于DP和MC方法的优势。核心问题是,learn a guess from a guess(bootstrap)是更好的方法吗?TD方法具有如下优势:
- TD是model-free的,不需要next state和reward的分布概率;
- TD是step-by-step增量式的(只需等到t+1),而MC方法必须等到episode结束;TD方法对于长episode或continuing问题具有很大优势,因为相对而言MC方法需要等待很久才能更新,且计算和存储开销太大;且MC方法必须忽略/折扣实验性的actions(见上一章off-policy部分),而TD方法则能从所有的transitions中学习;
- TD(0)对于固定策略,已证明可以收敛到 v π v_π vπ,只要更新步长满足随机估计条件(第二章非平稳情况的处理部分),但是注意大多数证明只针对table-based类型,少数针对linear function估计类型;
- TD方法在实践上比MC方法收敛得更快,但是这是没有得到证明的。
example 6.2 Random Walk
随机行走问题如下图所示:
这是一个马尔可夫回报过程(Markov Reward Process, MRP),与MDP的区别是MRP没有动作选择的步骤,只有状态转移。random walk从中心C出发,转移到左边或右边状态的概率都是0.5,到达两侧的终止状态则结束episode,回报值标记在箭头上,取 γ = 1.0 \gamma=1.0 γ=1.0,那么每个状态的值是从该状态出发能到达最右端的概率,显然有: v π ( A ) = 1 6 , v π ( B ) = 2 6 , v π ( C ) = 3 6 , v π ( D ) = 4 6 , v π ( E ) = 5 6 v_\pi(A)=\frac{1}{6},v_\pi(B)=\frac{2}{6},v_\pi(C)=\frac{3}{6},v_\pi(D)=\frac{4}{6},v_\pi(E)=\frac{5}{6} vπ(A)=61,vπ(B)=62,vπ(C)=63,vπ(D)=64,vπ(E)=65(直接求解MDP方程组即可,见第三章)。
左图给出的是不同数量episodes后 T D ( 0 ) , α = 0.1 TD(0), \alpha=0.1 TD(0),α=0.1的估计的值的情况,可见100个episodes后就估计得很准确了。右图则给出了MC和TD方法的均方根误差RMS随着episodes数目变化的曲线(各个状态的值都初始化为0.5)。可见TD方法表现得更好,但是也和 α \alpha α的选取有关。遗留问题:为什么当 α \alpha α较大时,RMS曲线会在最后稍微上翘?这和初值有关吗?
//查了各种资料,暂时没找到这个问题的合理解释。
//这个问题还与后面Expected Sarsa一节中曲线的解释有关。
4.TD(0)的最优性和MC的最优性不同
这一节主要说明TD(0)与MC虽然都能收敛到最优,但是最优的指标不同。前者是极大似然估计MLE,后者是最小均方误差估计MSE。最优为了便于分析,需要考虑batch updating。
batch updating(类似epoch):假设只有有限的经验,我们每次遍历所有的经验,在每个step只计算出更新量,在全部遍历后一次更新值函数。在batch updating下,TD(0)确定性地收敛到唯一的解,只要α足够小的即可。batch constant-α MC方法在同样条件下也收敛到确定性的唯一解,但是这个解与TD(0)不同。
example 6.3 Random walk under batch updating
在每个新的episode后,把目前得到的所有episodes作为一个batch,然后利用batch TD(0)或batch c o n s t a n t − α constant-\alpha constant−α MC在这个批上更新,然后计算RMS,可以看到TD方法好于MC方法。乍一看,这是很奇怪的,因为MC方法计算的是样本均值,应该是最优解了。但实际上,这是因为两种方法的最优指标不同导致的,MC方法没有考虑到MDP模型的影响。example 6.4 将具体说明。
example 6.4 You are the Predictor
给定下面八个episodes,A/B表示状态,数字表示return,我们分析下基于这八个episodes,MC和TD(0)方法的区别。
折扣因子是1.0,如果用batch MC,则 v ( A ) = 0 v(A)=0 v(A)=0,如果用batch TD(0),则 v ( A ) = 3 / 4 v(A)=3/4 v(A)=3/4。直观上,B出现了8次,其中6次都返回1并结束,因此 v ( B ) = 3 / 4 v(B)=3/4 v(B)=3/4更合适,而如果γ=1, v ( A ) v(A) v(A)应该等于 v ( B ) v(B) v(B),因此可见TD方法更准确。实际上,MC是观测数据上的MSE(均方误差),TD则是观测数据上的MLE(极大似然估计)。
针对这个例子,我们看到,batch MC的是最小化样本上的MSE,而batch TD则是最小化样本上的MLE,后者是考虑MDP模型的。实际上,后面这种考虑模型的估计叫做certainty equivalence估计,因为这等价于假设过程是已知的。如果不考虑折扣因子γ,这个概念的含义是,首先计算出终止状态的值函数,然后每个中间状态的值函数是其后续状态值函数依概率的加权平均,这可以通过统计计算,然而当状态空间较大时,无法直接分析出这个估计,但是TD(0)能收敛到其上。这就是TD(0)比MC好的原因。non-batch方法虽然不能这样分析,但是可以认为non-batch方法是向certainty-equivalence估计靠近的一种方法。
5.Sara: on-policyTD控制
介绍完prediction方法后,我们来介绍control方法,也就是把policy evaluation和policy improvement结合起来。这和之前一样也是遵循GPI的,不过是改用TD方法进行评估和预测了。和MC方法类似,这里也面临探索和利用问题,可以通过on-policy和off-policy解决。
control的第一步是估计当前策略的动作值,为了不依赖模型我们评估action value,这和之前介绍的state value是类似的。我们可以写出动作值的TD(0)更新公式:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) ] Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma Q\left(S_{t+1}, A_{t+1}\right)-Q\left(S_{t}, A_{t}\right)\right] Q(St,At)←Q(St,At)+α[Rt+1+γQ(St+1,At+1)−Q(St,At)]
action-value下的backup diagram与state-value情况下是类似的,且能证明TD(0)是收敛的。注意这里处理的都是state-action pair,且是nonterminal的状态,terminal的action value始终设置为0。这需要利用 ( S t , A t , R t + 1 , S t + 1 , A t + 1 ) (S_t, A_t, R_{t+1},S_{t+1},A_{t+1}) (St,At,Rt+1,St+1,At+1)五元组(quintuple of events)。这几个元素字母构成了Sarsa这个词。根据这个更新公式可以容易地设计出on-policy控制算法。
选择的动作和评估的动作是一样的,且动作选择采用ε-greedy或ε-soft都行,但是要保证每个state-action pair被visit无数次,且policy逐渐收敛于贪婪(ε逐渐降低)。
example 6.5 Windy Gridworld
带侧风的GridWorld问题。网格图中下标的数字,表示一旦agent到达该列,则每个step向上额外移动多少步。从S出发,目标是到达G,每次我们可以选择上下左右四个方向移动一个小格。所有动作都得到-1的reward,直到到达G,不考虑折扣。如果向Grid外边移动,则状态不转移。曲线给出了steps和episodes之间的关系。最开始找到终点比较慢(策略差),所以episodes增长慢,然后策略逐渐变好,episodes开始快速增长。
取参数ε=0.1,α=0.5时,算法最好能得到一个17steps的策略,而该问题最优策略实际上是15steps。这主要是因为 ϵ \epsilon ϵ没有逐渐下降造成的。而MC方法难以应用到这个问题上,因为一些策略可能无法使episode终止(陷在某些状态),而Sarsa则不会(不佳的state-action对的值会逐渐下降)。
6.Q-learning: off-policy TD控制
watkins于1989提出的Q-learning算法(一种off-policy TD control算法),这是RL早期的重大突破。与Sarsa的区别是,在Q-learning中,action-value更新公式不管在 s ′ s' s′采取什么动作,都用 m a x a ( Q ( s ′ , a ) ) max_a(Q(s', a)) maxa(Q(s′,a))作为target更新。这样,学习到的Q函数直接估计 q ∗ q* q∗,而不管策略是什么。这极大简化了算法的分析,并使算法收敛的证明成为可能。
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ max a Q ( S t + 1 , a ) − Q ( S t , A t ) ] Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma \max _{a} Q\left(S_{t+1}, a\right)-Q\left(S_{t}, A_{t}\right)\right] Q(St,At)←Q(St,At)+α[Rt+1+γmaxaQ(St+1,a)−Q(St,At)]
注意,Q-learning是off-policy的,而Sarsa是on-policy的,因为Q-learning评估的策略与实际使用的策略不完全相同。Q-learning可以学到最优策略,而Sarsa则不能(除非ε逐渐降低)。
那么,Q-learning为什么不需要重要性采样呢?我们首先回顾下MC方法中增量off-policy算法:
可见,算法中对于每个 Q ( S t , A t ) Q(S_t, A_t) Q(St,At)的更新中的重要性采样比率,只连乘到了t-1步,而与t步时target policy和behavior policy所选择动作的概率无关,因此这里的重要性采样比率是1.0[2-3]。
只有behavior policy能够探索到所有的状态动作对,并且学习率 α \alpha α 足够小且满足收敛条件(第二章),那么可以证明Q学习算法以概率1收敛到 q ∗ q_* q∗ 。
Q-learning的backup diagram是什么样的呢?如下图所示。注意实心节点表示state,空心节点表示state-action pair,圆弧表示从中取最大。注意这与Sarsa的区别。
example 6.6 Cliff Walking
如图所示,目标是从S到G,动作是上下左右移动一个格子,任何跨入悬崖的动作导致 r e w a r d = − 100 reward = -100 reward=−100,且返回起点S,跨入G则终止episode,其它则导致 r e w a r d = − 1 reward=-1 reward=−1。
曲线图给出了固定 ϵ \epsilon ϵ时Sarsa和Q-learning的收敛曲线,注意最终收敛时,Q-learning是比Sarsa差的,因为它比较激进,会紧贴着悬崖走,而 ϵ \epsilon ϵ引入的随机性会导致有时agent踏入悬崖,导致较差的online performance;而Sarsa会绕远一些,保守但是online performance更好一点。如果逐渐减小 ϵ \epsilon ϵ,则都能收敛到最优策略。
7.期望Sarsa
Sarsa中,更新时考虑的target是包含 Q ( s ′ , a ) Q(s', a) Q(s′,a),a是实际采取的动作,而因为policy有随机性(ε-greedy),导致更新量的方差较大,Expected Sarsa更新时按概率取下个动作值,因此这个方法实际上是Sarsa的改进,但是遵循Q-learning框架(Q-leaning在t时刻就能更新,而Sarsa必须等到t+1时刻才能更新,Expected Sarsa也是在t时刻更新的)。Expected Sarsa比Sarsa计算复杂不少,但是降低了方差,效果比Sarsa和Q-learning都好。
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ E π [ Q ( S t + 1 , A t + 1 ) ∣ S t + 1 ] − Q ( S t , A t ) ] ← Q ( S t , A t ) + α [ R t + 1 + γ ∑ π ( a ∣ S t + 1 ) Q ( S t + 1 , a ) − Q ( S t , A t ) ] \begin{aligned} Q\left(S_{t}, A_{t}\right) & \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma \mathbb{E}_{\pi}\left[Q\left(S_{t+1}, A_{t+1}\right) | S_{t+1}\right]-Q\left(S_{t}, A_{t}\right)\right] \\ & \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma \sum \pi\left(a | S_{t+1}\right) Q\left(S_{t+1}, a\right)-Q\left(S_{t}, A_{t}\right)\right] \end{aligned} 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∣St+1)Q(St+1,a)−Q(St,At)]
顺便提一下,其实在机器学习中,偏差和方差权衡(bias variance trade-off)一直是一个难以两全其美的问题,因此大家也比较热衷于偏差和方差的讨论。对于估计来说,我们肯定是希望偏差小,方差也小。事实上,往往偏差小就方差大。比如MC估计是无偏的,但是方差很大。方差大带来的后果是什么呢?就是训练不稳定,甚至可能影响收敛性。TD估计方法的方差就小一些。下一章介绍的n步TD算法,就是为了综合MC和TD的优点,本质上也是在解决偏差方差平衡问题[2]。
下图展示了随着参数α变化,三种算法在Cliff Walking问题上的性能。叉子表示Expected Sarsa,三角表示Sarsa,方块表示Q-learning。实线表示asymptotic performance(前100,000个episodes的平均),虚线表示interim performance(前100个episodes的平均)。可以看到,Sarsa的asymptotic performance随着参数变大而快速下降,interim performance在0.9附近最好;Q-learning与Expected Sarsa的asymptotic performance不随参数变化,Q-learning的interim performance也是在0.9附近最好,而Expected Sarsa则在1.0附近最好。总体来看Expected Sarsa是最好的。
上面的情况之所以出现,是因为Cliff Walking问题本身没有随机性,所有的随机性都来自于policy,因此求期望的方法且设置α=1是没有任何问题的,而Sarsa由于方差太大,导致无法收敛,asymptotic performance很差;对于Sarsa,其interim performance表现不比Q-learning差,但是asymptotic performance曲线却剧烈变差,这可能与算法收敛到最佳值后会变差有关,具体见example 6.2 Random Walk中的曲线(具体原因还需要更多分析)。
这里讨论的Expected Sarsa是on-policy的,但是也可以用一个与target policy不同的策略生成behavior,就变成off-policy的了。例如,target policy是greedy但是behavior是更具探索性的,则Expected Sarsa就变成了Q-learning。
Expected Sarsa除了计算量大一些,比别的TD方法效果都要好。
8.最大化操作偏差及双学习的解决办法
Q-learning和Sarsa中都有maximization操作,而这个最大化是针对估计值的,这可能会导致引入严重的positive bias,叫做maximization bias,例如对于一个状态s,所有 q ( s , a ) = 0 q(s, a)=0 q(s,a)=0,但是 Q ( s , a ) Q(s, a) Q(s,a)不都得0,这样可能会有一些大于0一些小于0,从而估计的 m a x a Q ( s , a ) max_aQ(s, a) maxaQ(s,a)对 m a x a q ( s , a ) max_aq(s, a) maxaq(s,a)有偏差。
example 6.7 Maximization Bias Example:
只有两个nonterminal状态A和B,对于A,right返回0并终结,left也返回0,但是转移到B,B上可采取多个动作,每个动作的reward是 N ( − 0.1 , 1 ) N(-0.1, 1) N(−0.1,1)上的采样,因此如何不考虑折扣, q ( A , l e f t ) = − 0.1 q(A, left)=-0.1 q(A,left)=−0.1。选择ε=0.1,α=0.1,γ=1.0。
我们可以想到,总有一些Q(B, a)是正的,这是因为随机性的影响,而我们更新Q(A, left)时,Q-learning会考虑Q(B, a)中的最大值,从而使Q(A, left)向正数偏,从而出现maximization bias。后面也能逐渐收敛,是因为 Q ( B , a ) Q(B, a) Q(B,a)也都逐渐回归到真实的-0.1,但是由于α是固定的且比较大的数,因此 Q ( B , a ) Q(B, a) Q(B,a)是有波动的,总会有一些 Q ( B , a ) Q(B, a) Q(B,a)波动到0以上,因此到最后渐进时还是达不到最优(这里我们可以考虑 P ( m a x ( X 1 , X 2 ) ) > 0 P(max(X_1, X_2))>0 P(max(X1,X2))>0这类问题。这个问题中,最优就应该是5%选左边,因为有10%的随机选择。
解决办法是double learning。
首先分析为什么会有偏,因为我们用一组samples估计Q(s, *),注意估计的过程我们就始终在用最大化操作,这是有误差的,误差始终服从一个分布,然后我们在这个有误差的值函数估计上做最大化,这就导致了偏差的出现(对多个随机变量取最大值,就会出现偏差)。本质就是前后耦合,在t步选择最佳动作就利用了以前的信息,用t+1的值更新t步的值,选择t+1所采取的动作/t+1所采取动作的Q值都与历史信息有关,因此就耦合了。
我们可以把经验分成两组,设置两个Q函数, Q 1 Q_1 Q1决定哪个动作最好(greedy), Q 2 Q_2 Q2给出这个动作的值。而 E [ Q 2 ( s , a r g m a x a Q 1 ( a ) ) ] = q ( s , a r g m a x a Q 1 ( a ) ) E[Q_2(s, argmax_a Q_1(a))]=q(s, argmax_a Q_1(a)) E[Q2(s,argmaxaQ1(a))]=q(s,argmaxaQ1(a))。两个Q的角色以0.5的概率互换。这种做法增加了存储量,但是计算量没有增加。与Q-learning结合,可以得到Double Q-learning。更新公式下所示,注意按照50%的概率翻转两个Q的角色。
Q 1 ( S t , A t ) ← Q 1 ( S t , A t ) + α [ R t + 1 + γ Q 2 ( S t + 1 , arg max a Q 1 ( S t + 1 , a ) ) − Q 1 ( S t , A t ) ] Q_{1}\left(S_{t}, A_{t}\right) \leftarrow Q_{1}\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma Q_{2}\left(S_{t+1}, \underset{a}{\arg \max } Q_{1}\left(S_{t+1}, a\right)\right)-Q_{1}\left(S_{t}, A_{t}\right)\right] Q1(St,At)←Q1(St,At)+α[Rt+1+γQ2(St+1,aargmaxQ1(St+1,a))−Q1(St,At)]
如果不好理解,可以这样考虑:之所以会出现maximization bias,本质上因为max(a, b, c…)函数的期望会放大a, b, c(i.i.d)本身的期望,从而出现问题;double Q能有作用,是因为它打破了耦合,max操作所利用的数据与求 Q ( s , a ) Q(s,a) Q(s,a)所利用的数据无关,因此max操作与计算a, b, c的Q值所用的数据无关。
我们还可以同时使用这两个action-value估计设计behavior policy,例如我们可以根据两个action-value的均值决策。下面给出了Double Q-learning算法伪代码,从曲线图上看,确实很好地改善了maximization bias。
9.RL问题的特殊处理方法 :afterstates
本书致力于给出一种用来解决一类广泛问题的一致的方法,但是总有些例外问题用特殊化的方法处理更好一些。例如第一章的Tic-Tac-Toe问题,它更像基于state-value而不是action-value的,然而它连state-value都不是。
因为通常state-value函数是估计那些agent有动作可选择的states的值,而tic-tac-toe中,我们采用的方法没有显式的action,而是评估在agent做出决策之后的盘面。我们在从当前状态s出发,把棋子放到每个空着的位置,然后得到这个新的盘面(状态)的值,我们可以得到各种可能的新的盘面的值,然后选择最好的那个作为我们实际采取的动作。这里的值函数叫做afterstates value函数,得到afterstates是确定性的,也就是在s下执行动作a是直接转移到s’的,而不是依概率的,这让我们好处理得多,因为我们不必求期望,也不必记录 Q ( s , a ) Q(s, a) Q(s,a)这样大很多的值空间。
拿Tic-Tac-Toe举例,有时 s 1 + a 1 = s 2 + a 2 s_1+a_1=s_2+a_2 s1+a1=s2+a2,就是不同状态下,我们下棋在不同位置后,最后的结果 s ′ s' s′是一样的,这样通过afterstates就比action-value函数高效很多,大大降低了值函数空间,而action-value方法必须分别评估这两种pairs。
afterstates不仅仅在棋类游戏中有用,在很多地方都有用,例如:队列处理程序可以匹配customer和server,拒绝customer或者丢弃信息,这时动作的影响能立即知道(确定的状态转移),因此适合afterstates。
然而不太可能找到所有特殊问题的专门解法,而本书的内容覆盖得却比较广泛,例如afterstates方法也是符合GPI的,也会出现on-policy和off-policy问题。
10.总结
本章主要介绍了TD方法,我们和往常一样, 也把总的问题分割成prediction和control两个子问题。TD和MC都能解决预测问题,而控制问题的所有扩展方法都是基于GPI的(来自DP)。
当我们基于经验做prediction时,维持探索的难题就出现了,TD的control部分往往采用on-policy和off-policy解决。Sarsa是on-policy的,Q-learning是off-policy的,Expected Sarsa是on-policy或off-policy的,而另一种方法actor-cirtic则在后面章节单独讨论,actor-critic是目前state-of-the-art的RL算法中非常重要的思想。
本章介绍的方法是最常用的RL方法,可能主要是由于其简洁性吧:online、计算简单、公式简单、程序实现简单。后面我们会扩展一下,使之稍稍复杂些并更强大起来,但它们仍然可以online, 计算量小,且受TD误差驱动。本章的TD方法实际上是one-step, tabular, model-free的,后面我们会扩展到n-steps(结合MC),并结合模型(结合DP)。然后在part2,我们延伸到approximation形式替代table。
本章介绍了TD在RL中的应用,但是TD其实可以用于各种long-term动态系统预测问题,如金融数据、预期寿命、选举结果预测等。
- TD预测方法。
- TD方法相对于DP和MC方法的优势,及其收敛条件。Is learning a guess from a guess sound?
- batch updating下,TD与MC方法的对比分析,TD是求MLE,MC是求MSE。
- Sarsa。
- Q-learning。
- Expected Sarsa。
- Maximization Bias及其解决办法:Double Learning。
- Afterstates方法。不同问题也许有特化的解决方式。
参考文献
[1].Sutton书
[2].(知乎专栏)https://zhuanlan.zhihu.com/c_1060499676423471104
[3].(Q-learning重要性采样比率说明)https://stats.stackexchange.com/questions/335396/why-dont-we-use-importance-sampling-for-one-step-q-learning