[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. 蒙特卡洛方法
蒙特卡洛方法使用下式对状态价值进行更新。
\begin{equation} V(S_t) \leftarrow V(S_t) + \alpha [G_t – V(S_t)] \tag{1} \end{equation}
本例中取 \alpha = 1。蒙特卡洛方法使用 G_t 更新估计值,G_t 只有在一幕结束时才能获得。也就是说,必须要等到家后才能更新对各个状态的估计。
将各个时刻 t 下个状态 S_t、回报 G_t(从 S_t 开始到回家实际消耗的总时间)和状态价值的估计 V(S_t)(即表 1 中的估计剩余时间)列出如表 2 所示。
表 2
t | S_t | G_t | V(S_t) |
---|---|---|---|
0 | 离开办公室 | 43 | 30 |
1 | 到车旁,开始下雨 | 38 | 35 |
2 | 下高速 | 23 | 15 |
3 | 在路上堵在卡车后面 | 13 | 10 |
4 | 开到居住的街道 | 3 | 3 |
5 | 到家 | 0 | 0 |
如表 2 所示,G_0 表示从离开办公室到抵达家中所消耗的时间,故有
\begin{equation} G_0 = 5 + 15 + 10 + 10 + 3 = 43 \end{equation}
由式 (1),更新 V(S_0) 为
\begin{equation} V(S_0) \leftarrow V(S_0) + \alpha [G_0 – V(S_0)] = 30 + (43 – 30) = 43 \\ \end{equation}
类似地,计算其他状态的更新如下
\begin{align} V(S_1) &\leftarrow V(S_1) + \alpha [G_1 – V(S_1)] = 35 + (38 – 35) = 38 \\ V(S_2) &\leftarrow V(S_2) + \alpha [G_2 – V(S_2)] = 15 + (23 – 15) = 23 \\ V(S_3) &\leftarrow V(S_3) + \alpha [G_3 – V(S_3)] = 10 + (13 – 10) = 13 \\ V(S_4) &\leftarrow V(S_4) + \alpha [G_4 – V(S_4)] = 3 + (3 – 3) = 3 \end{align}
3. 时序差分
实际上,我们并不需要等到家后再更新对各个状态的估计。
时序差分使用下式对状态价值进行更新。
\begin{equation} V(S_t) \leftarrow V(S_t) + \alpha [R_{t+1} + \gamma V(S_{t+1}) – V(S_t)] \tag{2} \end{equation}
本例中取 \alpha = 1,\gamma = 1。
将各个时刻 t 下个状态 S_t、收益 R_t(该步骤消耗的时间)和状态价值的估计 V(S_t)(即表 1 中的估计剩余时间)列出如表 3 所示。注意表 3 中并没有 G_t。
表 3
t | S_t | R_t | V(S_t) |
---|---|---|---|
0 | 离开办公室 | 0 | 30 |
1 | 到车旁,开始下雨 | 5 | 35 |
2 | 下高速 | 15 | 15 |
3 | 在路上堵在卡车后面 | 10 | 10 |
4 | 开到居住的街道 | 10 | 3 |
5 | 到家 | 3 | 0 |
由式 (2),在到达状态 S_1 后,即可更新 S_0 的估计,此时
\begin{equation} V(0) \leftarrow V(S_0) + \alpha [R_1 + \gamma V(S_1) – V(S_0)] = 30 + (5 + 35 – 30) = 40 \end{equation}
这在直观上也容易理解:从离开办公室(S_0)到抵达车旁(S_1)花了 5 分钟(R_1),发现下雨,估计到家还要花费 35 分钟(V(S_1))。再次回到 S_0,由于掌握了 S_1 的信息,此时应该估计到家的时间为 5 + 35 = 40 分钟,更新估计值 V(S_t) 为 30 + (40 – 30) = 40 分钟。
类似地,计算其他状态的更新如下
\begin{align} V(S_1) &\leftarrow V(S_1) + \alpha [R_2 + \gamma V(S_2) – V(S_1)] = 35 + (15 + 15 – 35) = 30 \\ V(S_2) &\leftarrow V(S_2) + \alpha [R_3 + \gamma V(S_3) – V(S_2)] = 15 + (10 + 10 – 15) = 20 \\ V(S_3) &\leftarrow V(S_3) + \alpha [R_4 + \gamma V(S_4) – V(S_3)] = 10 + (10 + 3 – 10) = 13 \\ V(S_4) &\leftarrow V(S_4) + \alpha [R_5 + \gamma V(S_5) – V(S_4)] = 3 + (3 + 0 – 3) = 3 \end{align}
可见时序差分方法的更新只需要下一个状态,而不需要等到一幕结束。