Skip to content

Commit fa899d0

Browse files
committed
笔记主要部分更新至main分支
1 parent 50b9812 commit fa899d0

135 files changed

Lines changed: 127006 additions & 508 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/Appendix/1.md

Whitespace-only changes.

docs/Box/Box-7-1.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
接下来我们证明,$(7.1)$中的TD算法可通过应用RM算法求解$(7.4)$获得。
2+
3+
对于状态$s_t$,我们定义一个函数为
4+
5+
$g(v_\pi(s_t))= v_\pi(s_t)-\mathbb{E}\left[R_{t+1}+\gamma v_\pi(S_{t+1})|S_t=s_t\right].$
6+
7+
那么,$(7.4)$式等价于
8+
9+
$$g(v_\pi(s_t))=0.$$
10+
11+
我们的目标是通过RM算法求解上述方程以获得$v_\pi(s_t)$。由于可以获得$r_{t+1}$和$s_{t+1}$(它们分别是$R_{t+1}$和$S_{t+1}$的样本),因此可获得的$g(v_\pi(s_t))$噪声观测值为
12+
13+
$$\begin{aligned}\tilde{g}(v_{\pi}(s_{t}))&=v_{\pi}(s_{t})-\begin{bmatrix}r_{t+1}+\gamma v_{\pi}(s_{t+1})\end{bmatrix}\\&=\underbrace{\left(v_{\pi}(s_{t})-\mathbb{E}\left[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_{t}=s_{t}\right]\right)}_{g(v_{\pi}(s_{t}))}\\&+\underbrace{\left(\mathbb{E}\left[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_{t}=s_{t}\right]-\left[r_{t+1}+\gamma v_{\pi}(s_{t+1})\right]\right).}_{\eta}\end{aligned}$$
14+
15+
因此,用于求解$g(v_\pi(s_t)) =0$的 RM算法(第$6.2$节)
16+
17+
$$\begin{aligned}v_{t+1}(s_{t})&=v_{t}(s_{t})-\alpha_{t}(s_{t})\tilde{g}(v_{t}(s_{t}))\\&=v_{t}(s_{t})-\alpha_{t}(s_{t})\left(v_{t}(s_{t})-\left[r_{t+1}+\gamma v_{\pi}(s_{t+1})\right]\right)\end{aligned},\tag{7.5}$$
18+
19+
其中$v_t(s_t)$表示时刻$t$时$v_\pi(s_t)$的估计值,$\alpha_t(s_t)$为学习率。
20+
21+
!!! note
22+
7.1中的式子为$v_{t+1}(s_t) = v_t(s_t) - \alpha_t(s_t) \left[ v_t(s_t) - \left( r_{t+1} + \gamma v_t(s_{t+1}) \right) \right]$
23+
24+
$(7.5)$式中的算法与$(7.1)$式TD算法具有相似的表达式,唯一区别在于$(7.5)$式右侧包含$v_\pi(s_{t+1})$,而$(7.1)$式包含$v_t(s_{t+1})$。这是因为$(7.5)$式在设计时仅需估计状态$s_t$的价值,并假设其他状态价值已知。若需估计所有状态的价值,则应将右侧的$v_\pi(s_{t+1})$替换为$v_t(s_{t+1})$。此时,$(7.5)$式将与$(7.1)$式完全等同。但这样的替换是否仍能保证收敛性?答案是肯定的,这将在定理$7.1$中予以证明。

docs/Box/Box-7-4.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
给定策略 $\pi$,其行动值可通过Expected Sarsa算法进行评估,该算法是Sarsa的一种变体。Expected Sarsa算法的表达式为
2+

docs/Box/intro.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
这一章主要是讲解书中涉及的对定理证明的部分,我在学习的过程中并没有将其放在笔记部分,是因为我认为,在第一遍学习的过程中过于注重细节会使整体内容失去顺畅性,个人认为第一遍的学习可以先忽略对于定理的严格证明,而是对所学的东西有一个宏观的把握,在之后若干遍的学习中,逐渐掌握对于定理的严格化证明。
2+
3+
本书中所有Box中的证明我都汇总于这一章节中,并附上了我个人的补充与理解。
4+

docs/Chapter-7/7-1.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,47 @@
11
## 7.1 状态值估计: 时序查分算法
22

3+
<<<<<<< HEAD
4+
例如,本章介绍的所有算法都属于时序差分(TD)学习的范畴。然而,本节所述的时序差分学习特指一种用于估计状态值的经典算法。
5+
6+
!!! note
7+
本节核心在于用TD算法求解一个给定的策略$\pi$的状态值,之所以要求解状态值,是因为求解出来状态值后就相当于policy evaluation,之后和policy improvement结合,就可以寻找最优策略。
8+
9+
### 7.1.1算法描述
10+
11+
给定策略$\pi$,我们的目标是估计所有状态$s \in \mathcal{S}$对应的 $v_\pi(s)$。假设我们拥有遵循$\pi$生成的若干经验样本$(s_0, r_1, s_1, \ldots, s_t, r_{t+1}, s_{t+1}, \ldots)$(也可写为$\{(s_t,r_{t+1},s_{t+1})\}_t$),其中$t$表示时间步。以下时序差分(TD)算法可利用这些样本来估计状态值:
12+
13+
!!! note
14+
TD算法基于数据而非模型,这些数据都是由一个给定的策略$\pi$产生的,TD算法就是要利用这些数据估计$\pi$所对应的状态值。
15+
=======
316
例如,本章介绍的所有算法都属于时序差分(TD)学习的范畴。然而,本节所述的时序差分学习特指一种用于估计状态值的经典算法。
417

518
### 7.1.1算法描述
619

720
给定策略 $\pi$,我们的目标是估计所有状态 $s \in S$对应的 $v_\pi(s)$。假设我们拥有遵循 $\pi$生成的若干经验样本 $(s_0, r_1, s_1, \ldots, s_t, r_{t+1}, s_{t+1}, \ldots)$,其中 $t$表示时间步。以下时序差分(TD)算法可利用这些样本来估计状态值:
21+
>>>>>>> 50b98123eef511e961e9c05b37b46f2a667dafb0
822
923
$$v_{t+1}(s_t) = v_t(s_t) - \alpha_t(s_t) \left[ v_t(s_t) - \left( r_{t+1} + \gamma v_t(s_{t+1}) \right) \right],\tag{7.1}$$
1024

1125
$$v_{t+1}(s) = v_t(s),s \neq s_t,\tag{7.2}$$
1226

27+
<<<<<<< HEAD
28+
其中$t =0,1,2, \ldots$。此处$v_t(s_t)$表示时刻$t$时$v_\pi(s_t)$的估计值;$\alpha_t(s_t)$为状态$s_t$在时刻$t$的学习率。
29+
30+
需要注意的是,在时刻$t$时,仅更新已访问状态$s_t$的值。未访问状态$s \neq s_t$的值保持不变,如式$(7.2)$所示。为简洁起见,式$(7.2)$常被省略,但应牢记这一公式,因为缺少该式会导致算法在数学上不完整。
31+
32+
!!! note
33+
回想一下,TD算法在数学上的作用是什么?答案就是它求解给定策略$\pi$的贝尔曼方程,但是之前的课程我们学了封闭解和迭代解,这里的TD算法与他的区别是什么呢?答案是显而易见的,之前的方法是基于模型的方法,而TD算法并不依赖于模型。
34+
35+
初次接触TD学习算法的读者可能会好奇其设计原理。实际上,该算法可视为求解贝尔曼方程的一种特殊随机近似算法。为理解这一点,首先回顾状态值的定义:
36+
37+
$$v_\pi(s) = \mathbb{E}\left[ R_{t+1} + \gamma G_{t+1} \mid S_t = s \right], \quad s \in \mathcal{S}.\tag{7.3}$$
38+
39+
40+
由于
41+
42+
$$\mathbb{E}[G_{t+1}|S_{t}=s]=\sum_{a}\pi(a|s)\sum_{s^{\prime}}p(s^{\prime}|s,a)v_{\pi}(s^{\prime})=\mathbb{E}[v_{\pi}(S_{t+1})|S_{t}=s].$$
43+
44+
=======
1345
其中 $t =0,1,2, \ldots$。此处 $v_t(s_t)$表示时刻 $t$时 $v_\pi(s_t)$的估计值;$\alpha_t(s_t)$为状态 $s_t$在时刻 $t$的学习率。
1446

1547
需要注意的是,在时刻 $t$时,仅更新已访问状态 $s_t$的值。未访问状态 $s \neq s_t$的值保持不变,如式$(7.2)$所示。为简洁起见,式$(7.2)$常被省略,但应牢记这一公式,因为缺少该式会导致算法在数学上不完整。
@@ -18,10 +50,25 @@ $$v_{t+1}(s) = v_t(s),s \neq s_t,\tag{7.2}$$
1850

1951
$$v_\pi(s) = \mathbb{E}\left[ R_{t+1} + \gamma G_{t+1} \mid S_t = s \right], \quad s \in \mathcal{S}.\tag{7.3}$$
2052

53+
>>>>>>> 50b98123eef511e961e9c05b37b46f2a667dafb0
2154
我们可以将式$(7.3)$改写为
2255

2356
$$v_\pi(s) = \mathbb{E}[R_{t+1} + \gamma v_\pi(S_{t+1})|S_t = s], s\in \mathcal{S}.\tag{7.4}$$
2457

58+
<<<<<<< HEAD
59+
在这里$S^{t+1}$是下一个状态,方程$(7.4)$是贝尔曼方程的另一种表达形式,有时也被称为**贝尔曼期望方程**
60+
61+
TD算法可通过将Robbins-Monro算法(第6章)应用于求解式$(7.4)$中的Bellman方程推导得出。感兴趣的读者可参阅Box 7.1了解具体细节。
62+
63+
!!! note
64+
建议读者读一下Box7.1,否则对于这个算法很可能云里雾里。
65+
66+
### 7.1.2 性质分析
67+
68+
TD算法的一些重要特性讨论如下。首先,我们更详细地考察TD算法的表达式。具体而言,$(7.1)$式可表述为
69+
70+
$$\underbrace{v_{t+1}(s_t)}_{\text{new estimate}}=\underbrace{v_t(s_t)}_{\text{current estimate}}-\alpha_t(s_t)\left[\overbrace{v_t(s_t)-\left(\underbrace{r_{t+1}+\gamma v_t(s_{t+1})}_{\text{TD target }\tilde{v}_t}\right)}^{\text{TD error }\delta_t}\right],\tag{7.6}$$
71+
=======
2572
这是因为 $\mathbb{E}[G_{t+1}|S_t = s] = \sum_a \pi(a|s) \sum_{s'} p(s'|s, a)v_\pi(s') = \mathbb{E}[v_\pi(S_{t+1})|S_t = s]$。方程$(7.4)$是贝尔曼方程的另一种表达形式,有时也被称为**贝尔曼期望方程**
2673

2774
TD算法可通过将Robbins-Monro算法(第6章)应用于求解式$(7.4)$中的Bellman方程推导得出。感兴趣的读者可参阅Box 7.1了解具体细节。
@@ -31,11 +78,23 @@ TD算法可通过将Robbins-Monro算法(第6章)应用于求解式$(7.4)$中
3178
TD算法的一些重要特性讨论如下。首先,我们更详细地考察TD算法的表达式。具体而言,(7.1)式可表述为
3279

3380
$$v_{t+1}(s_t) = v_t(s_t) - \alpha_t(s_t) \left[ v_t(s_t) - \left( r_{t+1} + \gamma v_{t+1}(s_{t+1}) \right) \right]$$
81+
>>>>>>> 50b98123eef511e961e9c05b37b46f2a667dafb0
3482
3583
在这里
3684

3785
$$\bar{v}_t = r_{t+1} + \gamma v_t(s_{t+1})$$
3886

87+
<<<<<<< HEAD
88+
称为**TD目标值(TD target)**
89+
90+
$$\delta_t = v(s_t) - \bar{v}_t = v(s_t) - \left( r_{t+1} + \gamma v(s_{t+1}) \right)$$
91+
92+
称为**TD误差(TD error)**。可以看出,新估计值$v_{t+1}(s_t)$是当前估计值$v_t(s_t)$与时序差分误差$\delta_t$的加权组合。
93+
94+
- 为什么$\bar{v}_t$被叫做TD目标值
95+
96+
这是因为算法驱使$v(s_t)$趋向于$\bar{v}_t$。为验证这一点,将 (7.6)式两边同时减去$\bar{v}_t$可得
97+
=======
3998
称为TD目标值(TD target)
4099

41100
$$\delta_t = v(s_t) - \tilde{v}_t = v(s_t) - \left( r_{t+1} + \gamma v(s_{t+1}) \right)$$
@@ -45,6 +104,7 @@ $$\delta_t = v(s_t) - \tilde{v}_t = v(s_t) - \left( r_{t+1} + \gamma v(s_{t+1})
45104
- 为什么$\bar{v}_t$被叫做TD目标值
46105

47106
这是因为$\bar{v}_t$是算法试图驱使$v(s_t)$趋近的目标值。为验证这一点,将 (7.6)式两边同时减去$\bar{v}_t$可得
107+
>>>>>>> 50b98123eef511e961e9c05b37b46f2a667dafb0
48108
49109
$$\begin{gathered}v_{t+1}(s_{t})-\bar{v}_{t}=\left[v_{t}(s_{t})-\bar{v}_{t}\right]-\alpha_{t}(s_{t})\left[v_{t}(s_{t})-\bar{v}_{t}\right]\\=[1-\alpha_{t}(s_{t})]\left[v_{t}(s_{t})-\bar{v}_{t}\right].\end{gathered}$$
50110

@@ -60,12 +120,30 @@ $$\delta_t = v(s_t) - \tilde{v}_t = v(s_t) - \left( r_{t+1} + \gamma v(s_{t+1})
60120

61121
- TD误差的解释是什么?
62122

123+
<<<<<<< HEAD
124+
首先,这一误差之所以被称为TD误差,是因为 $\delta_t = v_t(s_t) - (r_{t+1} + \gamma v_t(s_{t+1}))$反映了时间步 $t$与 $t +1$之间的差异。其次,当状态价值估计准确时,时序差分误差在期望意义上为零。具体而言,当 $v_t = v_\pi$时,时序差分误差的期望值为
125+
=======
63126
首先,这一误差之所以被称为时序差分(temporal-difference),是因为 $\delta_t = v_t(s_t) - (r_{t+1} + \gamma v_t(s_{t+1}))$反映了时间步 $t$与 $t +1$之间的差异。其次,当状态价值估计准确时,时序差分误差在期望意义上为零。具体而言,当 $v_t = v_\pi$时,时序差分误差的期望值为
127+
>>>>>>> 50b98123eef511e961e9c05b37b46f2a667dafb0
64128
65129
$$\begin{aligned}\mathbb{E}[\delta_{t}|S_{t}=s_{t}]&=\mathbb{E}\left[v_{\pi}(S_{t})-(R_{t+1}+\gamma v_{\pi}(S_{t+1}))|S_{t}=s_{t}\right]\\&=v_{\pi}(s_{t})-\mathbb{E}\left[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_{t}=s_{t}\right]\\&=0.\quad\mathrm{(due~to~(7.3))}\end{aligned}$$
66130

67131
因此,时序差分误差不仅反映两个时间步之间的差异,更重要的是反映了估计值$v_t$与真实状态值$v_\pi$之间的差异。
68132

133+
<<<<<<< HEAD
134+
在更抽象的层面上,TD误差可解释为**新息**(innovation),它表示从经验样本 $(s_t, r_{t+1}, s_{t+1})$中获得的新信息。TD学习的核心思想是基于新获得的信息来修正当前对状态值的估计。新息是卡尔曼滤波[33,34]等众多估计问题中的基础概念。
135+
136+
其次,$(7.1)$中的 TD算法只能估计给定策略的状态值。为了寻找最优策略,我们仍需进一步计算行动值并执行策略改进,这将在第$7.2$节中介绍。尽管如此,本节介绍的TD算法对于理解本章其他算法具有基础性和重要性。
137+
138+
第三,虽然时序差分(TD)学习和蒙特卡洛(MC)学习均属于无模型方法,但二者各有哪些优劣?答案总结于表$7.1$。
139+
140+
| **TD学习** | **MC学习** |
141+
|--------------------|----------------------|
142+
| **增量**: TD学习是增量的。它可以在接收到经验样本后立即更新状态/动作值。 | **非增量**: MC学习是非增量的。它必须等到一个回合(episode)完全收集完毕才能更新。这是因为它必须计算回合的折扣回报。 |
143+
| **持续任务**: 由于TD学习是增量的,它可以处理回合制和持续任务。持续任务可能没有终止状态。 | **回合任务**: 由于MC学习是非增量的,它只能处理回合任务,即回合在有限的步骤后终止。 |
144+
| **自助法**: TD学习采用自助法,因为状态/行动值的更新依赖于该值的前一估计。因此,TD学习需要初始值猜测。 | **非自助法**: MC学习不是自助法,因为它可以直接估计状态/行动值,而无需初始猜测。 |
145+
| **低估计方差**: TD的估计方差低于MC,因为它涉及较少的随机变量。例如,估计一个动作值 \( q_\pi(s_t, a_t) \),Sarsa 仅需要三个随机变量的样本:\( R_{t+1} \), \( S_{t+1} \), \( A_{t+1} \)。 | **高估计方差**: MC的估计方差较高,因为涉及更多的随机变量。例如,为了估计一个行动值 \( q_\pi(s_t, a_t) \),我们需要样本 \( R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots \)。假设每个回合的长度为 \( L \),并且每个状态的动作数量相同,记作 \( |A| \),那么每个回合有 \( |A|^L \) 种可能的序列。如果我们仅估计少数几个回合,估计方差高是很自然的。
146+
=======
69147
在更抽象的层面上,时序差分(TD)误差可解释为**新息**(innovation),它表示从经验样本 $(s_t, r_{t+1}, s_{t+1})$中获得的新信息。时序差分学习的核心思想是基于新获得的信息来修正当前对状态值的估计。新息是卡尔曼滤波[33,34]等众多估计问题中的基础概念。
70148

71149
其次,$(7.1)$中的 TD算法只能估计给定策略的状态值。为了寻找最优策略,我们仍需进一步计算动作值并执行策略改进,这将在第$7.2$节中介绍。尽管如此,本节介绍的 TD算法对于理解本章其他算法具有基础性和重要性。
@@ -78,6 +156,7 @@ $$\delta_t = v(s_t) - \tilde{v}_t = v(s_t) - \left( r_{t+1} + \gamma v(s_{t+1})
78156
| **持续任务**: 由于TD学习是增量的,它可以处理回合制和持续任务。持续任务可能没有终止状态。 | **回合任务**: 由于MC学习是非增量的,它只能处理回合任务,即回合在有限的步骤后终止。 |
79157
| **自助法**: TD学习采用自助法,因为状态/动作值的更新依赖于该值的前一估计。因此,TD学习需要初始值猜测。 | **非自助法**: MC学习不是自助法,因为它可以直接估计状态/动作值,而无需初始猜测。 |
80158
| **低估计方差**: TD的估计方差低于MC,因为它涉及较少的随机变量。例如,估计一个动作值 \( q_n(s_t, a_t) \),Sarsa 仅需要三个随机变量的样本:\( R_{t+1} \), \( S_{t+1} \), \( A_{t+1} \)。 | **高估计方差**: MC的估计方差较高,因为涉及更多的随机变量。例如,为了估计一个动作值 \( q_n(s_t, a_t) \),我们需要样本 \( R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots \)。假设每个回合的长度为 \( L \),并且每个状态的动作数量相同,记作 \( |A| \),那么每个回合有 \( |A|^L \) 种可能的序列。如果我们仅估计少数几个回合,估计方差高是很自然的。
159+
>>>>>>> 50b98123eef511e961e9c05b37b46f2a667dafb0
81160
82161
> 表7.1: TD学习与MC学习的比较。
83162

0 commit comments

Comments
 (0)