[RL Notes] 时序差分学习——一个例子
Contents [show]
1. 问题
使用《强化学习》(第二版)例 6.1 中开车回家的例子,在下班开车回家的路途中,不断地记录路上消耗的时间和估计到家的时间:
- 18:00 – 离开办公室的时间记为时刻 0,估计 30 分钟后到家。
- 18:05 – 5 分钟后到达车旁,发现开始下雨,估计路上会花更多时间,于是估计还要花 35 分钟到家(算上已经花费的 5 分钟,估计到家花费的总时间为 40 分钟)。
- 18:20 – 开了 15 分钟下了高速,高速比往常顺畅,比预期少花了 5 分钟,于是将估计总时间减少到 35 分钟,估计剩余时间为 15 分钟。
- 18:30 – 又开了 10 分钟,被堵在一辆缓慢的卡车后面,道路狭窄无法超车,估计到家要多花些时间,于是将估计总时间增加到 40 分钟,估计剩余时间为 10 分钟。
- 18:40 – 又堵了 10 分钟终于抵达了居住的街道,估计还要花 3 分钟才能到家,于是将估计总时间增加到 43 分钟,估计剩余时间为 3 分钟。
- 18:43 – 终于到家。
将上述过程记录如表 1 所示。
表 1
状态 | 消耗的总时间(分钟) | 估计剩余时间 | 估计总时间 |
---|---|---|---|
离开办公室 | 0 | 30 | 30 |
到车旁,开始下雨 | 5 | 35 | 40 |
下高速 | 20 | 15 | 35 |
在路上被堵在卡车后面 | 30 | 10 | 40 |
开到居住的街道 | 40 | 3 | 43 |
到家 | 43 | 0 | 43 |
定义每个状态的收益为该步骤消耗的时间,过程不加折扣(γ=1),则每个状态的回报就是从这个状态开始到回家实际消耗的总时间。
下面分别使用蒙特卡洛方法和时序差分方法对状态价值进行更新。
2. 蒙特卡洛方法
蒙特卡洛方法使用下式对状态价值进行更新。
V(St)←V(St)+α[Gt–V(St)]
本例中取 α=1。蒙特卡洛方法使用 Gt 更新估计值,Gt 只有在一幕结束时才能获得。也就是说,必须要等到家后才能更新对各个状态的估计。
将各个时刻 t 下个状态 St、回报 Gt(从 St 开始到回家实际消耗的总时间)和状态价值的估计 V(St)(即表 1 中的估计剩余时间)列出如表 2 所示。
表 2
t | St | Gt | V(St) |
---|---|---|---|
0 | 离开办公室 | 43 | 30 |
1 | 到车旁,开始下雨 | 38 | 35 |
2 | 下高速 | 23 | 15 |
3 | 在路上堵在卡车后面 | 13 | 10 |
4 | 开到居住的街道 | 3 | 3 |
5 | 到家 | 0 | 0 |
如表 2 所示,G0 表示从离开办公室到抵达家中所消耗的时间,故有
G0=5+15+10+10+3=43
由式 (1),更新 V(S0) 为
V(S0)←V(S0)+α[G0–V(S0)]=30+(43–30)=43
类似地,计算其他状态的更新如下
V(S1)←V(S1)+α[G1–V(S1)]=35+(38–35)=38V(S2)←V(S2)+α[G2–V(S2)]=15+(23–15)=23V(S3)←V(S3)+α[G3–V(S3)]=10+(13–10)=13V(S4)←V(S4)+α[G4–V(S4)]=3+(3–3)=3
3. 时序差分
实际上,我们并不需要等到家后再更新对各个状态的估计。
时序差分使用下式对状态价值进行更新。
V(St)←V(St)+α[Rt+1+γV(St+1)–V(St)]
本例中取 α=1,γ=1。
将各个时刻 t 下个状态 St、收益 Rt(该步骤消耗的时间)和状态价值的估计 V(St)(即表 1 中的估计剩余时间)列出如表 3 所示。注意表 3 中并没有 Gt。
表 3
t | St | Rt | V(St) |
---|---|---|---|
0 | 离开办公室 | 0 | 30 |
1 | 到车旁,开始下雨 | 5 | 35 |
2 | 下高速 | 15 | 15 |
3 | 在路上堵在卡车后面 | 10 | 10 |
4 | 开到居住的街道 | 10 | 3 |
5 | 到家 | 3 | 0 |
由式 (2),在到达状态 S1 后,即可更新 S0 的估计,此时
V(0)←V(S0)+α[R1+γV(S1)–V(S0)]=30+(5+35–30)=40
这在直观上也容易理解:从离开办公室(S0)到抵达车旁(S1)花了 5 分钟(R1),发现下雨,估计到家还要花费 35 分钟(V(S1))。再次回到 S0,由于掌握了 S1 的信息,此时应该估计到家的时间为 5+35=40 分钟,更新估计值 V(St) 为 30+(40–30)=40 分钟。
类似地,计算其他状态的更新如下
V(S1)←V(S1)+α[R2+γV(S2)–V(S1)]=35+(15+15–35)=30V(S2)←V(S2)+α[R3+γV(S3)–V(S2)]=15+(10+10–15)=20V(S3)←V(S3)+α[R4+γV(S4)–V(S3)]=10+(10+3–10)=13V(S4)←V(S4)+α[R5+γV(S5)–V(S4)]=3+(3+0–3)=3
可见时序差分方法的更新只需要下一个状态,而不需要等到一幕结束。