Chapter 7 n-step Bootstrapping
本章的n-step TD方法是前两章的Monte Carlo 方法和one-step TD方法的推广。它使自举法在多个时间步内进行,解决了前两章中的更新时间步不灵活的问题。
7.1 n-step TD Prediction
在用策略 π \pi π下生成的采样回合序列来估计 v π v_{\pi} vπ时,Monte Carlo方法根据从某一个状态开始到终止状态的整个奖励序列来对这个状态进行价值更新。而one-step TD方法则只根据下一个奖励,用下一个后继状态的价值作为其余奖励的近似的基础上进行自举更新。
所以,介于两者之间的方法根据多个中间时刻的奖励来进行更新:多于一个时刻的奖励,但又不是到终止状态的所有奖励。比如,two-step基于接下来的两步奖励和两步之后的状态的价值估计值。下图是
v
π
v_{\pi}
vπ的一个n-step更新的回溯图,最左边是one-step TD更新,最右边是Monte Carlo更新。
n-step更新属于TD方法,因为它们仍然根据一个状态与后继状态的估计值的差异来进行状态的更新。但这里的后继状态是n步后的状态,而不是后一步状态。将时序差分量被扩展成n步的方法称为n-step TD 方法。
现在使用更正式的方式来讨论状态的价值估计值的更新。假设有“状态-奖励”序列
S
t
,
R
t
+
1
,
S
t
+
1
,
R
t
+
2
,
⋯
,
R
T
,
S
T
S_t,R_{t+1},S_{t+1},R_{t+2},\cdots,R_T,S_T
St,Rt+1,St+1,Rt+2,⋯,RT,ST (这里为了简便,我们先忽略动作),我们的目的是更新状态
S
t
S_t
St的价值估计。在Monte Carlo的更新中,
v
π
(
S
t
)
v_{\pi}(S_t)
vπ(St)的估计值会沿着完整回报的方向进行更新,即(式中的T是终止状态的时刻,
G
t
G_t
Gt是更新的目标):
G
t
=
˙
R
t
+
1
+
γ
R
t
+
2
+
γ
2
R
t
+
3
+
⋯
+
γ
T
−
t
−
1
R
T
G_t \ \dot{=} \ R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3} + \cdots + \gamma^{T-t-1} R_T
Gt =˙ Rt+1+γRt+2+γ2Rt+3+⋯+γT−t−1RT
而对于one-step TD的更新的目标为下式,即用第一个奖励值加上折扣后继状态的价值估计,称其为one-step return:
G
t
:
t
+
1
=
˙
R
t
+
1
+
γ
V
t
(
S
t
+
1
)
G_{t:t+1} \ \dot{=} \ R_{t+1} + \gamma V_t(S_{t+1})
Gt:t+1 =˙ Rt+1+γVt(St+1)
上式中,
V
t
:
S
→
R
V_t: \mathcal{S} \rightarrow \mathbb{R}
Vt:S→R 是在t时刻
v
π
v_{\pi}
vπ的估计值。
G
t
:
t
+
1
G_{t:t+1}
Gt:t+1的下标表示它是一种截断回报,它由当前时刻到时刻t+1的累积奖励
R
t
+
1
R_{t+1}
Rt+1和折扣估计
γ
V
t
(
S
t
+
1
)
\gamma V_t(S_{t+1})
γVt(St+1)组成,
γ
V
t
(
S
t
+
1
)
\gamma V_t(S_{t+1})
γVt(St+1)很明显是代替了完整回报中的
γ
R
t
+
2
+
γ
2
R
t
+
3
+
⋯
+
γ
T
−
t
−
1
R
T
\gamma R_{t+2} + \gamma^2R_{t+3} + \cdots + \gamma^{T-t-1} R_T
γRt+2+γ2Rt+3+⋯+γT−t−1RT。
我们将这种想法扩展到两步的情况,两步更新的目标被称为two-step return:
G
t
:
t
+
2
=
˙
R
t
+
1
+
γ
R
t
+
2
+
γ
2
V
t
+
1
(
S
t
+
2
)
G_{t:t+2} \ \dot{=} \ R_{t+1} + \gamma R_{t+2} + \gamma^2 V_{t+1}(S_{t+2})
Gt:t+2 =˙ Rt+1+γRt+2+γ2Vt+1(St+2)
显然,两步更新中的
γ
V
t
+
1
(
S
t
+
2
)
\gamma V_{t+1}(S_{t+2})
γVt+1(St+2)替代了完整回报中的
γ
2
R
t
+
3
+
γ
3
R
t
+
4
+
⋯
+
γ
T
−
t
−
1
R
T
\gamma^2R_{t+3} + \gamma^3R_{t+4} + \cdots + \gamma^{T-t-1} R_T
γ2Rt+3+γ3Rt+4+⋯+γT−t−1RT。 类似地,对于n-step更新的n-step return为:
G
t
:
t
+
n
=
˙
R
t
+
1
+
γ
R
t
+
2
+
⋯
+
γ
n
−
1
R
t
+
n
+
γ
n
V
t
+
n
−
1
(
S
t
+
n
)
G_{t:t+n} \ \dot{=} \ R_{t+1} + \gamma R_{t+2} + \cdots + \gamma^{n-1}R_{t+n} + \gamma^n V_{t+n-1}(S_{t+n})
Gt:t+n =˙ Rt+1+γRt+2+⋯+γn−1Rt+n+γnVt+n−1(St+n)
其中,
n
≥
1
n \ge 1
n≥1,
0
≤
t
<
T
−
n
0 \le t < T-n
0≤t<T−n,如果
t
+
n
≥
T
t+n \ge T
t+n≥T(即n-step return 超出了终止状态),则其余部分为0,即n-step回报等于完整的回报。
n-step TD算法: 基于n-step回报的状态价值函数的更新算法为:
V
t
+
n
(
S
t
)
=
˙
V
t
+
n
−
1
(
S
t
)
+
α
[
G
t
:
t
+
n
−
V
t
+
n
−
1
(
S
t
)
]
,
0
≤
t
<
T
(
7.2
)
V_{t+n}(S_t) \dot{=} V_{t+n-1}(S_t) + \alpha [G_{t:t+n} - V_{t+n-1}(S_t)], \ \ 0 \le t < T \ \qquad (7.2)
Vt+n(St)=˙Vt+n−1(St)+α[Gt:t+n−Vt+n−1(St)], 0≤t<T (7.2)
而对于任意其他状态s(
s
≠
S
t
s \neq S_t
s=St)的价值估计保持不变:
V
t
+
n
(
s
)
=
V
t
+
n
−
1
(
s
)
V_{t+n}(s) = V_{t+n-1}(s)
Vt+n(s)=Vt+n−1(s)。注意,在每一个回合的前n-1个时刻,价值函数不会被更新,为了弥补这个损失,在终止时刻后还将执行对应次数的更新,完整的伪代码如下图:
n-step回报的一个重要的性质是:在最坏情况下,它们的期望作为
v
π
v_{\pi}
vπ的估计可以保证比
V
t
+
n
−
1
V_{t+n-1}
Vt+n−1更好,也就是说n-step回报的期望的最坏误差能够保证不大于
V
t
+
n
−
1
V_{t+n-1}
Vt+n−1最坏误差的
γ
n
\gamma^n
γn倍:
m
a
x
s
∣
E
π
[
G
t
:
t
+
n
∣
S
t
=
s
]
−
v
π
(
s
)
∣
≤
γ
n
m
a
x
s
∣
V
t
+
n
−
1
(
s
)
−
v
π
(
s
)
∣
\mathop{max}_s \left\lvert \mathbb{E}_{\pi}[G_{t:t+n}|S_t=s] - v_{\pi}(s) \right\rvert \le \gamma^n \mathop{max}_s \left| V_{t+n-1}(s) - v_{\pi}(s) \right|
maxs∣Eπ[Gt:t+n∣St=s]−vπ(s)∣≤γnmaxs∣Vt+n−1(s)−vπ(s)∣
上式中,
n
≥
1
n \ge 1
n≥1,被称为n-step回报的误差减少性质(error reduction property),因为误差减少性质,可以证明在合适的条件下,n-step方法可以收敛到正确的预测。
7.2 n-step Sarsa
Sarsa算法的n-step版本被称为n-step Sarsa,在第6章 的初始版本被称为one-step Sarsa,或Sarsa(0)。
n-step Sarsa方法的回溯图如下图(注意对比一下本章的第一个图,类似但是Sarsa的首末两端都是动作)。
这里用动作价值估计来重新定义一下 n-step回报:
G
t
:
t
+
n
=
˙
R
t
+
1
+
γ
R
t
+
2
+
⋯
+
γ
n
−
1
R
t
+
n
+
γ
n
Q
t
+
n
−
1
(
S
t
+
n
,
A
t
+
n
)
,
n
≥
1
,
0
≤
t
<
T
−
n
(
7.4
)
G_{t:t+n} \ \dot{=} \ R_{t+1} + \gamma R_{t+2} + \cdots + \gamma^{n-1}R_{t+n} + \gamma^n Q_{t+n-1}(S_{t+n}, A_{t+n}), n \ge 1, 0 \le t < T-n \ \qquad (7.4)
Gt:t+n =˙ Rt+1+γRt+2+⋯+γn−1Rt+n+γnQt+n−1(St+n,At+n),n≥1,0≤t<T−n (7.4)
上式中,当
t
+
n
≥
T
t+n \ge T
t+n≥T时,有
G
t
:
t
+
n
=
˙
G
t
G_{t:t+n} \dot{=} G_t
Gt:t+n=˙Gt。
n-step Sarsa算法:
Q
t
+
n
(
S
t
,
A
t
)
=
˙
Q
t
+
n
−
1
(
S
t
,
A
t
)
+
α
[
G
t
:
t
+
n
−
Q
t
+
n
−
1
(
S
t
,
A
t
)
]
,
0
≤
t
<
T
(
7.5
)
Q_{t+n}(S_t,A_t) \dot{=} Q_{t+n-1}(S_t, A_t) + \alpha [G_{t:t+n} - Q_{t+n-1}(S_t, A_t)], \ \ 0 \le t < T \ \qquad (7.5)
Qt+n(St,At)=˙Qt+n−1(St,At)+α[Gt:t+n−Qt+n−1(St,At)], 0≤t<T (7.5)
而对于任意其他状态s(
s
≠
S
t
s \neq S_t
s=St)或动作a(
a
≠
A
t
a \neq A_t
a=At)的价值估计保持不变:
Q
t
+
n
(
s
,
a
)
=
Q
t
+
n
−
1
(
s
,
a
)
Q_{t+n}(s,a) = Q_{t+n-1}(s,a)
Qt+n(s,a)=Qt+n−1(s,a)。其伪代码如下图。
公式(7.4)Sarsa的n-step回报可以被写作TD error的形式:
G
t
:
t
+
n
=
Q
t
−
1
(
S
t
,
A
t
)
+
∑
k
=
t
m
i
n
(
t
+
n
,
T
)
−
1
γ
k
−
t
[
R
k
+
1
+
γ
Q
k
(
S
k
+
1
,
A
k
+
1
)
−
Q
k
−
1
(
S
k
,
A
k
)
]
(
7.6
)
G_{t:t+n} = Q_{t-1}(S_t, A_t) + \mathop{\sum}_{k=t}^{min(t+n, T)-1} \gamma^{k-t} [R_{k+1} + \gamma Q_k(S_{k+1}, A_{k+1}) - Q_{k-1}(S_k, A_k)] \ \qquad (7.6)
Gt:t+n=Qt−1(St,At)+∑k=tmin(t+n,T)−1γk−t[Rk+1+γQk(Sk+1,Ak+1)−Qk−1(Sk,Ak)] (7.6)
n-step Expected Sarsa的回溯图如下图,它的更新公式与公式(7.5)一致,只是它的n-step回报定义如下:
G
t
:
t
+
n
=
˙
R
t
+
1
+
γ
R
t
+
2
+
⋯
+
γ
n
−
1
R
t
+
n
+
γ
n
V
‾
t
+
n
−
1
(
S
t
+
n
)
,
t
+
n
<
T
(
7.7
)
G_{t:t+n} \ \dot{=} \ R_{t+1} + \gamma R_{t+2} + \cdots + \gamma^{n-1}R_{t+n} + \gamma^n \overline{V}_{t+n-1}(S_{t+n}),\ t+n < T \ \qquad (7.7)
Gt:t+n =˙ Rt+1+γRt+2+⋯+γn−1Rt+n+γnVt+n−1(St+n), t+n<T (7.7)
上式中,当
t
+
n
≥
T
t+n \ge T
t+n≥T时,有
G
t
:
t
+
n
=
˙
G
t
G_{t:t+n} \dot{=} G_t
Gt:t+n=˙Gt, 而
V
‾
t
(
s
)
\overline{V}_{t}(s)
Vt(s) 是状态s的期望近似价值(expected approximate value),它采用了在目标策略下,时刻t的动作价值估计来计算:
V
‾
t
(
s
)
=
˙
∑
a
π
(
a
∣
s
)
Q
t
(
s
,
a
)
,
f
o
r
a
l
l
s
∈
S
(
7.8
)
\overline{V}_{t}(s) \ \dot{=} \ \sum_a \pi(a|s)Q_t(s, a),\ \ for\ all\ s\in \mathcal{S} \ \qquad (7.8)
Vt(s) =˙ a∑π(a∣s)Qt(s,a), for all s∈S (7.8)
如果s是终止状态,那么期望近似价值被定义为0。
7.3 n-step Off-policy Learning
在本书的5.5节中学习过off-policy有两个策略:目标策略
π
\pi
π和行为策略
b
b
b,为了使用遵循策略
b
b
b得到的数据,我们必须考虑两种策略之间的不同,使用它们对应动作的相对概率。对于off-policy的n-step TD版本,对于时刻t的更新,可以使用
ρ
t
:
t
+
n
−
1
\rho_{t:t+n-1}
ρt:t+n−1来加权:
V
t
+
n
(
S
t
)
=
˙
V
t
+
n
−
1
(
S
t
)
+
α
ρ
t
:
t
+
n
−
1
[
G
t
:
t
+
n
−
V
t
+
n
−
1
(
S
t
)
]
,
0
≤
t
<
T
(
7.9
)
V_{t+n}(S_t) \dot{=} V_{t+n-1}(S_t) + \alpha \ \rho_{t:t+n-1}[G_{t:t+n} - V_{t+n-1}(S_t)], \ \ 0 \le t < T \ \qquad (7.9)
Vt+n(St)=˙Vt+n−1(St)+α ρt:t+n−1[Gt:t+n−Vt+n−1(St)], 0≤t<T (7.9)
ρ
t
:
t
+
n
−
1
\rho_{t:t+n-1}
ρt:t+n−1是重要度采样率(importance sampling ratio),是两种策略下采取
A
t
A_t
At到
A
t
+
n
−
1
A_{t+n-1}
At+n−1的n个动作的相对概率(参考本书的5.5节的式5.3)。
ρ
t
:
h
=
˙
∏
k
=
t
m
i
n
(
h
,
T
−
1
)
π
(
A
k
∣
S
t
)
b
(
A
k
∣
S
t
)
(
7.10
)
\rho_{t:h}\ \dot{=} \ \prod_{k=t}^{min(h, T-1)} \frac {\pi(A_k|S_t)}{b(A_k|S_t)} \qquad (7.10)
ρt:h =˙ k=t∏min(h,T−1)b(Ak∣St)π(Ak∣St)(7.10)
如果策略
π
\pi
π永远都不会采取某个特定动作(
π
(
A
k
∣
S
k
)
=
0
)
\pi(A_k|S_k)=0)
π(Ak∣Sk)=0),则n-step回报的权重应该为0,即完全忽略。另一方面,如果某个动作在策略
π
\pi
π下被采取的概率远远大于行为策略b,那么将增加对应回报的权重。
如果两种策略实际上是一样的,那么重要度采样率总是为1,故更新是之前的n步时序差分学习方法的推广,并且可以完整代替它,前面的n-step Sarsa更新可以用下面的off-policy形式代替,对于
0
≤
t
<
T
0 \le t <T
0≤t<T:
Q
t
+
n
(
S
t
,
A
t
)
=
˙
Q
t
+
n
−
1
(
S
t
,
A
t
)
+
α
ρ
t
+
1
:
t
+
n
[
G
t
:
t
+
n
−
Q
t
+
n
−
1
(
S
t
,
A
t
)
]
,
(
7.11
)
Q_{t+n}(S_t, A_t) \ \dot{=} \ Q_{t+n-1}(S_t, A_t) + \alpha \rho_{t+1:t+n} [G_{t:t+n} - Q_{t+n-1}(S_t, A_t)], \ \qquad (7.11)
Qt+n(St,At) =˙ Qt+n−1(St,At)+αρt+1:t+n[Gt:t+n−Qt+n−1(St,At)], (7.11)
注意上式中的重要度采样率,其起点和终点比公式(7.9)都要晚一步,因为这里我们更新的是“状态-动作”对:不关心这些动作有多大概率被选择,既然我们已经选择了这些动作,那么我们想要的是充分学习发生的事情,通过后继动作的重要度采样率来实现的。
对于off-policy版本的n-step 期望Sarsa使用与上式一样的更新公式,不过重要度采样率是 ρ t + 1 : t + n − 1 \rho_{t+1:t+n-1} ρt+1:t+n−1,并且使用式(7.7)的期望Sarsa版本的n-step回报。这是因为在期望Sarsa方法中,所有可能的动作都会在最后一个状态中被考虑,实际采取的那个具体动作对期望Sarsa的计算没有影响,所以不需要去修正。
7.4 *Per-decision Methods with Control Variates
TODO
7.5 Off-policy Learning Without Importance Sampling: The n-step Tree Backup Algorithm
有不需要重要度采样的off-policy学习方法吗?在第6章的Q-learning和期望Sarsa因为是one-step,所以不需要重要度采样,那对于multi-step算法呢?树回溯算法(tree-backup algorithm)是一个答案。
下图是一个3-step的树回溯图,在初始“状态-动作”对 S t S_t St、 A t A_t At后面,有三个采样状态和奖励、两个采样动作。连接在每个状态侧边的是没有被采样选择的动作(对于最后一个状态,所有的动作都被认为是没有被选择的)。因为没有未被选择的动作的样本数据,所以我们采用自举法并且使用它们的估计值来构建用于价值函数更新的目标。在树回溯中,目标包含了沿途所有的奖励(加上折扣)和底部节点的估计价值以及每一层悬挂在两侧的动作节点的估计价值。这是为什么它被称为树回溯:它的更新来源于整个树的动作价值的估计。
n-step 树回溯算法的one-step回报与期望Sarsa一样:
G
t
:
t
+
1
=
˙
R
t
+
1
+
γ
∑
a
π
(
a
∣
S
t
+
1
)
Q
t
(
S
t
+
1
,
a
)
,
f
o
r
t
<
T
−
1
(
7.15
)
G_{t:t+1} \dot{=} R_{t+1} + \gamma \sum_a \pi(a|S_{t+1})Q_t(S_{t+1}, a),\ for \ t<T-1 \ \qquad (7.15)
Gt:t+1=˙Rt+1+γa∑π(a∣St+1)Qt(St+1,a), for t<T−1 (7.15)
two-step 树回溯的回报为:
G
t
:
t
+
2
=
˙
R
t
+
1
+
γ
∑
a
≠
A
t
+
1
π
(
a
∣
S
t
+
1
)
Q
t
+
1
(
S
t
+
1
,
a
)
+
γ
π
(
A
t
+
1
∣
S
t
+
1
)
(
R
t
+
2
+
γ
∑
a
π
(
a
∣
S
t
+
2
)
Q
t
+
1
(
S
t
+
2
,
a
)
)
=
R
t
+
1
+
γ
∑
a
≠
A
t
+
1
π
(
a
∣
S
t
+
1
)
Q
t
+
1
(
S
t
+
1
,
a
)
+
γ
π
(
A
t
+
1
∣
S
t
+
1
)
G
t
+
1
:
t
+
2
,
f
o
r
t
<
T
−
2
\begin {aligned} G_{t:t+2} & \dot{=} R_{t+1} + \gamma \sum_{a \neq A_{t+1}} \pi(a|S_{t+1})Q_{t+1}(S_{t+1}, a) + \gamma \pi(A_{t+1}|S_{t+1}) \left(R_{t+2} + \gamma \sum_a \pi(a|S_{t+2})Q_{t+1}(S_{t+2}, a) \right) \\ & = R_{t+1} + \gamma \sum_{a \neq A_{t+1}} \pi(a|S_{t+1})Q_{t+1}(S_{t+1}, a) + \gamma \pi(A_{t+1}|S_{t+1}) G_{t+1:t+2}, \ \ for \ t<T-2 \end {aligned}
Gt:t+2=˙Rt+1+γa=At+1∑π(a∣St+1)Qt+1(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+1(St+1,a)+γπ(At+1∣St+1)Gt+1:t+2, for t<T−2
上式显示了树回溯的n-step回报的递归形式的一般形式:
G
t
:
t
+
n
=
R
t
+
1
+
γ
∑
a
≠
A
t
+
1
π
(
a
∣
S
t
+
1
)
Q
t
+
n
−
1
(
S
t
+
1
,
a
)
+
γ
π
(
A
t
+
1
∣
S
t
+
1
)
G
t
+
1
:
t
+
n
,
f
o
r
t
<
T
−
1
,
n
≥
2
,
(
7.16
)
G_{t:t+n} = R_{t+1} + \gamma \sum_{a \neq A_{t+1}} \pi(a|S_{t+1})Q_{t+n-1}(S_{t+1}, a) + \gamma \pi(A_{t+1}|S_{t+1}) G_{t+1:t+n}, \ \ for \ t<T-1, n\ge 2, \ \qquad (7.16)
Gt:t+n=Rt+1+γa=At+1∑π(a∣St+1)Qt+n−1(St+1,a)+γπ(At+1∣St+1)Gt+1:t+n, for t<T−1,n≥2, (7.16)
除了
G
T
−
1
:
t
+
n
=
˙
R
T
G_{T-1:t+n} \dot{=} R_T
GT−1:t+n=˙RT之外n=1时可以用公式(7.15)来解决。这个目标可以用于n-step Sarsa的动作-价值更新规则(不需要重要性采样率了):
Q
t
+
n
(
S
t
,
A
t
)
=
˙
Q
t
+
n
−
1
(
S
t
,
A
t
)
+
α
[
G
t
:
t
+
n
−
Q
t
+
n
−
1
(
S
t
,
A
t
)
]
,
f
o
r
0
≤
t
<
T
Q_{t+n}(S_t, A_t) \ \dot{=} \ Q_{t+n-1}(S_t, A_t) + \alpha [G_{t:t+n} - Q_{t+n-1}(S_t, A_t)],\ for \ 0 \le t < T
Qt+n(St,At) =˙ Qt+n−1(St,At)+α[Gt:t+n−Qt+n−1(St,At)], for 0≤t<T
而对于任意其他状态s(
s
≠
S
t
s \neq S_t
s=St)或动作a(
a
≠
A
t
a \neq A_t
a=At)的价值估计保持不变:
Q
t
+
n
(
s
,
a
)
=
Q
t
+
n
−
1
(
s
,
a
)
Q_{t+n}(s,a) = Q_{t+n-1}(s,a)
Qt+n(s,a)=Qt+n−1(s,a)。其伪代码如下图。
7.6 *A Unifing Algorithm: n-step Q()
TODO
参考资料
- 《Reinforcement Learning: An Introduction》Sutton, Richard S. and Andrew G. Barto. 第2版, 书籍网站,文中图片全部来自书籍。
- https://github.com/ShangtongZhang/reinforcement-learning-an-introduction
- https://github.com/YunlianMoon/reinforcement-learning-an-introduction-2nd-edition/tree/master