Skip to content

Commit 8bea7a5

Browse files
committed
第五章润色版本更新
1 parent 1108520 commit 8bea7a5

23 files changed

Lines changed: 646 additions & 133 deletions

.history/README_20251024143936.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<div align="center">
2+
<p><a href="https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Preface1/">📚 在线阅读地址</a></p>
3+
<h3>🤖 《强化学习中的数学原理》-个人笔记与思考总结</h3>
4+
<p><em>理解强化学习的数学原理,并通过实例深入掌握核心算法</em></p>
5+
</div>
6+
7+
## 🎯 笔记介绍
8+
9+
&emsp;&emsp;本笔记是对赵世钰老师所著《强化学习中的数学原理》的个人思考与总结,**笔者将其做成了网页模式,方便大家随时随地在掌上设备阅读**。在此基础上,我还补充了对书中核心算法的实现,以便读者能获得更直观的理解。书中首先从基础概念入手,讲解Bellman公式和Bellman最优公式,接着扩展到基于模型(model-based)和无模型(model-free)的强化学习算法,最终推广到基于函数逼近的强化学习算法。若读者在强化学习方面没有背景知识,只需具备一定的线性代数和概率论基础即可阅读本书。而对于已有一些强化学习知识的读者,本笔记则可以帮助他们深入理解相关问题。
10+
11+
## 📖 内容导航
12+
13+
| 章节 | 关键内容 | 状态 |
14+
| --- | --- | --- |
15+
| [前言](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Preface1/) | 本笔记的缘起、背景及阅读建议 ||
16+
| [第一章 基本概念](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-1/intro/) | 强化学习的基本概念 ||
17+
| [第二章 状态值与贝尔曼方程](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-2/intro/) | 回报、状态值、Bellman方程 ||
18+
| [第三章 最优状态值与贝尔曼最优方程](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-3/intro/) | 最优状态值、最优策略、Bellman最优方程 ||
19+
| [第四章 值迭代与策略迭代](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-4/intro/) | 值迭代算法、策略迭代算法、截断策略迭代算法 ||
20+
| [第五章 蒙特卡罗方法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-5/intro/) | MC Basic、MC Exploring Starts、MC-Greedy ||
21+
| [第六章 随机近似算法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-6/intro/) | Robbins-Monro算法、Dvoretzky定理、随机梯度下降 | ✅(润色中) |
22+
| [第七章 时序差分算法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-7/intro/) | Sarsa、n步Sarsa、Q-learning、 Off-policy、On-policy| ✅(润色中) |
23+
| [第八章 值函数方法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-8/intro/) | 基于值函数的TD算法、Sarsa、Q-learning | ✅(润色中) |
24+
| [第九章 策略梯度方法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-9/intro/) | 策略梯度、REINFORCE | ✅(润色中) |
25+
| [第十章 演员-评论家算法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-10/intro/) | 优势演员-评论家、异策略演员-评论家、确定性演员-评论家 | ✅(润色中) |
26+
| 算法实现详解 | 核心算法Python实现 | 🚧 |
27+
28+
### 🚧 算法实现详解
29+
30+
笔者正在使用Python实现本书中的部分核心算法,读者可以通过结合阅读,获得更直观的理解。
31+
32+
## 🤝 如何贡献
33+
34+
如果你对强化学习感兴趣,可以参与到该笔记的完善中!❤️
35+
36+
- 💡**内容完善** - 帮助改进笔记内容
37+
- 📝**报告问题** - 发现问题请提交 Issue
38+
39+
### &#8627; Stargazers
40+
[![Stargazers repo roster for @wgyhhhh/Mathematical-Foundations-of-Reinforcement-Learning-Notes](https://reporoster.com/stars/wgyhhhh/Mathematical-Foundations-of-Reinforcement-Learning-Notes)](https://github.com/wgyhhhh/Mathematical-Foundations-of-Reinforcement-Learning-Notes/stargazers)
41+
42+
### &#8627; Forkers
43+
[![Forkers repo roster for @wgyhhhh/Mathematical-Foundations-of-Reinforcement-Learning-Notes](https://reporoster.com/forks/wgyhhhh/Mathematical-Foundations-of-Reinforcement-Learning-Notes)](https://github.com/wgyhhhh/Mathematical-Foundations-of-Reinforcement-Learning-Notes/network/members)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
本书的前三章都是在介绍基础工具。从本章开始,我们将介绍用于求解最优策略的算法。本章将介绍三个密切相关的方法。第一,**值迭代** (value iteration)算法。该算法实际上就是第3章中压缩映射定理给出的求解贝尔曼最优方程的算法,具体细节将在本章给出。第二,**策略迭代** (policy iteration)算法,该算法的基本思路在强化学习中被广泛使用。第三,**截断策略迭代** (truncated policy iteration)算法。值迭代和策略迭代是该算法的两个特殊情况,因此截断策略迭代更加一般化。
2+
3+
本章介绍的算法也称为**动态规划算法** (dynamic programming)[[10](https://press.princeton.edu/books/paperback/9780691146683/dynamic-programming), [11](https://press.princeton.edu/books/hardcover/9780691651873/applied-dynamic-programming)],它们需要系统模型。这些算法是后续章节中介绍的无模型强化学习算法的重要基础。例如,第$5$章介绍的蒙特卡洛算法可以通过扩展本章介绍的策略迭代算法而获得。
4+
5+
![](../img/chapter/chapter-4.png)
6+
> 图$4.1$: 本章在全书中的位置。
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
## 5.1 启发性示例: 期望值估计
2+
3+
接下来我们将通过例子来展示如何利用**蒙特卡洛方法** (Monte Carlo, MC)来解决一个期望值估计问题,蒙特卡洛方法是使用随机样本随机解决估计问题的典型方法。读者可能会好奇为什么要关注“期望值估计”这个问题。这是因为状态值和行动值的定义都是期望值。所以估计状态值或行动值实际上就是期望估计问题。通过本节,我们将知道如何使用“数据而非模型”来估计期望值。
4+
5+
考虑一个随机变量$X$,它可以在一个有限的实数集合内取值,令该集合为$\mathcal{X}$。我们的目标是计算$X$的期望值:$\mathbb{E}[X]$,有两种方法可以计算$\mathbb{E}[X]$。
6+
7+
- 第一种方法是基于模型的。这里的模型指的是$X$的概率分布。如果模型已知,那么可以根据期望值的定义直接计算出均值:
8+
9+
$$\mathbb{E}[X]=\sum_{x\in\mathcal{X}}p(x)x.$$
10+
11+
- 第二种方法是无模型的。当$X$的概率分(即模型)未知时,假设我们有一些$X$的样本$\{x_1,x_2,...,x_n\}$。那么这些样本可以被用于估计期望值:
12+
13+
$$\mathbb{E}[X]\approx\bar{x}=\frac{1}{n}\sum_{j=1}^{n}x_{j}.$$
14+
15+
当$n$较小时,这种近似可能不够准确。然而随着$n$的增加,这种近似会变得越来越准确。当$n\to\infty$,我们有$\bar{x}\to E[X]$。这实际上就是大数定律(law of large numbers)。详情参见Box 5.1。
16+
17+
下面通过抛硬币游戏来解释上面两种方法。在投掷硬币的游戏中,令随机变量$X$表示硬币落地时朝上的面。$X$有两个可能的取值:当正面朝上时,$X = 1$;当反面朝上时,$X=−1$。假设$X$的真实概率分布(即模型)为:
18+
19+
$$p(X=1)=0.5,\quad p(X=-1)=0.5.$$
20+
21+
如果概率分布已知,我们可以直接利用定义计算期望值:
22+
23+
$$\mathbb{E}[X]=0.5\cdot1+0.5\cdot(-1)=0.$$
24+
25+
如果概率分布未知,那么我们可以多次抛掷硬币并记录采样结果$\{x_i\}_{i=1}^n$。通过计算样本的平均值,我们可以得到期望值的估计。如图$5.2$所示,随着样本数量的增加,估计的均值会变得越来越准确。
26+
27+
值得一提的是,用于均值估计的样本必须是**独立同分布** (independent and identically distributed, $i.i.d.$或$iid$)。否则可能无法正确估计期望值。例如,所有样本值都与第一个样本强相关,一个极端的情况是所有样本与第一个样本完全相同,此时无论我们使用多少样本,样本的平均值始终等于第一个样本,而无法接近真实的期望值。
28+
29+
30+
![](../img/05/1.png)
31+
> 图$5.2$:一个演示大数定律的例子。这里,样本是从{+1,−1}中按照均匀分布抽取的。随着样本数量的增加,样本的平均值逐渐收敛到零,即真实的期望值。
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
## 5.2 MC-Basic: 最简单的基于蒙特卡洛的算法
2+
3+
本节介绍第一个基于蒙特卡洛(MC)的强化学习算法。该算法可以通过修改上一章介绍的策略迭代算法得到,即将其中的基于模型的模型策略评估步骤替换为一个无需模型的策略估计步骤;此外该算法可以帮助我们理解究竟如何使用数据代替模型来实现强化学习,这也是本章后续算法的直接基础。
4+
5+
### 5.2.1 将策略迭代算法转化为无模型方法
6+
7+
在上一章我们详细介绍过,策略迭代算法的每次迭代包含两个步骤(见第$4.2$节)。第一步是策略评估,其目的是通过求解方程$v_{\pi_k} = r_{\pi_k} + \gamma P_{\pi_k}v_{\pi_k}$来计算$v_{\pi_k}$。第二步是策略改进,其目的是计算贪婪策略$\pi_{k+1} = \arg\max_{\pi} \left( r_{\pi} + \gamma P_{\pi} v_{\pi k} \right).$以得到一个更好的策略。具体来说,策略改进步骤的元素展开形式是:
8+
9+
$$\begin{aligned}\pi_{k+1}(s) &= \arg\max_{\pi} \sum_a \pi(a|s) \left[ \sum_r p(r|s,a)r + \gamma \sum_{s'} p(s'|s,a)v_{\pi k}(s') \right] \\&= \arg\max_{\pi} \sum_a \pi(a|s)q_{\pi_k}(s,a), \quad s \in S.\end{aligned}$$
10+
11+
从上式能看出,行动值$q_{\pi_k}(s,a)$是策略迭代算法的核心。第一步策略评估就是在计算状态值后进而计算行动值;第二步策略改进就是选取行动值最大的动作作为新的策略。
12+
13+
在明白行动值的核心作用之后,让我们重新审视计算行动值的方法,实际有两种方法。
14+
15+
- 第一,基于模型的方法。首先求解贝尔曼方程来计算状态值$v_{\pi_k}$,然后基于下式得到行动值:
16+
17+
$$q_{\pi_k}(s,a) = \sum_r p(r|s,a)r + \gamma \sum_{s'} p(s'|s,a)v_{\pi k}(s').\tag{5.1}$$
18+
19+
这种方法需要知道模型$p(r|s,a), p(s^\prime|s,a)$,策略迭代算法就是采用的这种方法。
20+
21+
- 第二,无需模型的方法。让我们回忆一下行动值的原始定义:
22+
23+
$$\begin{aligned}q_{\pi_k}(s,a) &= \mathbb{E}[G | S_t = s, A_t = a]\\&= \mathbb{E}[R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + ... | S_t = s, A_t = a],\end{aligned}$$
24+
25+
值得注意的是,因为$q_{\pi_k}(s,a)$是一个期望值,所以可以通过蒙特卡洛方法用数据进行估计。首先,从$(s,a)$开始,智能体可以执行策略$\pi_k$,进而获得$n$个回合,假设第$i$条回合的回报为$g^{(i)}_{\pi_k}(s,a)$,那么这些回合的回报的平均值可以用来近似$q_{\pi_k}(s,a)$,即:
26+
27+
$$q_{\pi k}(s,a) = \mathbb{E}[G | S_t = s, A_t = a] \approx \frac{1}{n} \sum_{i=1}^{n} g_{\pi_k}^{(i)}(s,a).\tag{5.2}$$
28+
29+
根据大数定律,如果$n$足够大,上面的近似将会足够精确。
30+
31+
基于蒙特卡洛的强化学习的基本思想是使用$(5.2)$来估计行动值,从而代替策略迭代算法中需要模型的模块。
32+
33+
### 5.2.2 MC Basic算法
34+
35+
有了上一节的准备,下面介绍MC Basic算法。
36+
37+
从初始策略$\pi_0$开始,该算法在第$k$次迭代$(k=0,1,2,...)$中包含两个步骤。
38+
39+
- 步骤一. **策略评估**。此步骤用于估计所有状态-行动对$(s,a)$的$q_{\pi_k}(s,a)$。具体而言,对于每个$(s,a)$,收集足够多的回合进而求其回报的平均值$q_k(s,a)$来近似$q_{\pi_k}(s, a)$。
40+
41+
- 步骤二. **策略改进**。 这一步骤通过求解$\pi_{k+1}(s)=\arg\max_\pi \sum_a\pi(a|s)q_k(s,a)$来得到所有$s\in \mathcal{S}$的新策略。即$\pi_{k+1}(a_{k}^{*}|s)=1$,其中$a_{k}^{*}=\arg\max_{a}q_{k}(s,a)$。
42+
43+
MC Basic算法的伪代码在算法$5.1$中给出,它与策略迭代算法非常相似,唯一的区别在于它直接从经验样本中估计行动值,而策略迭代需要用模型先计算状态值再计算行动值。需要注意的是,MC Basic算法是直接估计行动值。否则,如果它先估计状态值,那么仍然需要利用$(5.1)$将状态值转换到行动值,而$(5.1)$还是需要模型的,因此MC Basic是直接估计行动值。
44+
45+
!!! note
46+
注: 与策略迭代相比,第一步有所不同,即对于行动值的估计有所不同,而第二步是相同的
47+
48+
由于策略迭代是收敛的,因此在给定足够样本的情况下,MC Basic算法是可以确保收敛的。也就是说,对于每个$(s,a)$,假设从$(s,a)$开始有足够多的回合,那么这些回合回报的平均值可以准确地近似$(s,a)$的行动值。在实际应用中,通常无法为每以一个$(s,a)$收集足够多的回合,此时行动值的近似可能并不准确。不过该算法仍然可以正常运行。这与截断策略迭代或者广义策略迭代的思想类似:每一个行动值不需要非常准确地估计。
49+
50+
MC Basic由于其样本效率较低,过于简单而难以实际应用。我们介绍这个算法的主要原因是想让读者掌握基于蒙特卡洛的强化学习中的核心思想。在后面我们会看到,通过推广MC Basic算法可以很容易地得到样本效率更高也更复杂的算法。届时读者就会明白,很多算法最核心的思想其实是很简单的,只是添加了很多技巧性的东西让其看起来很复杂。
51+
52+
算法5.1:MC Basic算法(一种无模型的策略迭代变体)
53+
54+
![](../img/05/4.png)
55+
> 算法$5.1$:MC Basis算法(一种无模型的策略迭代变体)
56+
57+
### 5.2.3 示例
58+
59+
#### 一个简单的例子: 算法细节
60+
61+
![](../img/05/2.png)
62+
> 图$5.3$: 用于展示MC Basic算法的示例。
63+
64+
我们通过一个例子来演示MC Basic算法的细节。奖励设置为 $r_\text{boundary} = r_\text{forbidden} = −1,r_\text{target} = 1$,折扣因子为 $\gamma = 0.9$。初始策略$\pi_0$如图$5.3$所示。这个初始策略在状态$s_1$或$s_3$不是最优的。
65+
66+
!!! note
67+
注: 在这个例子中有$9$个状态,每个状态对应$5$个行动,有$45$个状态行动对,所以要找到$45$个$q_{\pi_k} (s,a)$,假设从每一个$(s,a)$出发都有$N$个回合,最后要求$N$条回合的平均的$return$,那么一共有$45\times N$个回合。
68+
69+
虽然所有行动值都应该被计算出来,但由于篇幅限制,我们仅展示了如何得到状态$s_1$的行动值。在$s_1$,有五种可能的行动。我们需要从$(s_1, a_1),(s_1,a_2),...,(s_1,a_5)$开始执行当前策略$\pi_0$,得到足够多且足够长的回合,不过因为这个示例是确定性的,多次运行将得到相同的回合,因此只需要对每个行动收集一个回合。
70+
71+
- 从$(s_1,a_1)$开始,该回合为$s_1\xrightarrow{a_1}s_1\xrightarrow{a_1}s_1\xrightarrow{a_1}\ldots$。对应的行动值等于该回合的折扣回报:
72+
73+
$$q_{\pi_0}(s_1,a_1)=-1+\gamma(-1)+\gamma^2(-1)+\cdots=\frac{-1}{1-\gamma}.$$
74+
75+
- 从$(s_1,a_2)$开始,该回合为$s_1\xrightarrow{a_2}s_2\xrightarrow{a_3}s_5\xrightarrow{a_3}\ldots$。对应的行动值等于该回合的折扣回报:
76+
77+
$$q_{\pi_0}(s_1,a_2)=0+\gamma0+\gamma^20+\gamma^3(1)+\gamma^4(1)+\cdots=\frac{\gamma^3}{1-\gamma}.$$
78+
79+
- 从$(s_1,a_3)$开始,该回合为$s_1\xrightarrow{a_3}s_4\xrightarrow{a_2}s_5\xrightarrow{a_3}\ldots$。对应的行动值等于该回合的折扣回报:
80+
81+
$$q_{\pi_0}(s_1,a_3)=0+\gamma0+\gamma^20+\gamma^3(1)+\gamma^4(1)+\cdots=\frac{\gamma^3}{1-\gamma}.$$
82+
83+
- 从$(s_1,a_4)$开始,该回合为$s_1\xrightarrow{a_4}s_1\xrightarrow{a_1}s_1\xrightarrow{a_1}\ldots$。对应的行动值等于该回合的折扣回报:
84+
85+
$$q_{\pi_0}(s_1,a_4)=-1+\gamma(-1)+\gamma^2(-1)+\cdots=\frac{-1}{1-\gamma}.$$
86+
87+
- 从$(s_1,a_5)$开始,该回合为$s_1\xrightarrow{a_5}s_1\xrightarrow{a_1}s_1\xrightarrow{a_1}\ldots$。对应的行动值等于该回合的折扣回报:
88+
89+
$$q_{\pi_0}(s_1,a_5)=0+\gamma(-1)+\gamma^2(-1)+\cdots=\frac{-\gamma}{1-\gamma}.$$
90+
91+
通过比较上面五个行动值,我们发现:
92+
93+
$$q_{\pi_0}(s_1,a_2)=q_{\pi_0}(s_1,a_3)=\frac{\gamma^3}{1-\gamma}>0$$
94+
95+
相比其他行动值是最大值。因此,可以得到新的策略是选择$a_2$或者$a_3$:
96+
97+
$$\pi_1(a_2|s_1)=1\quad\mathrm{or}\quad\pi_1(a_3|s_1)=1.$$
98+
99+
很明显,在状态$s_1$处选择$a_2$或$a_3$是最佳的。因此,在这个简单例子中,我们只需要经过一次迭代就可以成功得到最优策略。更复杂的场景则需要更多次的迭代。
100+
101+
!!! note
102+
注: 这个地方大家可以再计算一下状态$s_3$处的行动值,从$a_1$到$a_5$,行动值依次为$-10,-10,8,7.29,-9$
103+
104+
#### 一个综合示例:回合长度与稀疏奖励
105+
106+
下面我们考虑一个更复杂的例子。我们不再关注算法的实施过程,而是讨论MC Basic算法得到的结果的一些性质。该例子是一个$5\times5$的网格世界(图$5.4$)。奖励设置为:$r_\text{boundary} = −1,r_\text{forbidden} = −10,r_\text{target} = 1$。折扣因子为$\gamma = 0.9$。
107+
108+
首先,回合的长度(episode length)能极大地影响最优策略。图$5.4$展示了MC Basic算法在使用不同回合长度下得到的最终结果。其中状态值是通过MC Basic算法得给出的行动值计算得到的。当设置的回合的长度过短时,用MC Basic算法得到的策略和价值都不是最优的(见图$5.4(a)-(d)$)。在回合长度为$1$的极端情况下,此时仅与目标相邻的状态有非零值,所有其他状态的值都为$0$(图$5.4(a)$),这是因为每个回合都太短而无法达到目标从而获得正奖励(见图$5.4(a)$)。随着回合长度的增加,得到的策略和价值估计会逐渐接近最优值(见图$5.4(h)$)。
109+
110+
其次,随着回合长度的增加,出现了一种有趣的现象:距离目标较近的状态会比距离目标较远的状态更早拥有一个非零值。原因如下:智能体从某个状态出发至少需要经过一定数量的步数才能到达目标状态;如果回合长度小于需要的最小步数,那么回报一定为0,估计的状态值也是0。在这个例子中,回合长度必须不少于$15$步,这是从左下角状态出发到达目标状态所需的最少步数。虽然每个回合必须足够长,但是也不需要无限长。如图$5.4(g)$所示,当回合长度为$30$时,该算法已经可以找到最优策略,尽管此时的价值估计还不是最优的。
111+
112+
上述分析涉及一种重要的奖励设计问题,即**稀疏奖励** (sparse reward)。稀疏奖励指的是除非到达目标,否则无法获得任何正奖励。稀疏奖励要求回合必须到达目标。当状态空间比较大或者系统随机性比较强时,在一个回合内到达目标的概率是比较低的。因此,稀疏奖励降低了学习效率。解决这个问题的一个简单方法是设计非稀疏奖励或者稠密奖励。例如,在上述网格世界中,我们可以重新设计奖励,使得智能体在靠近目标时就可以获得少量的正奖励。通过这种方式,可以在目标周围形成一个“吸引场”,从而更容易地找到目标。感兴趣的读者可以查看更多关于稀疏奖励的文献[[17](https://arxiv.org/abs/1802.10567),[18](https://arxiv.org/abs/2102.02915),[19](https://arxiv.org/abs/2003.04960)]
113+
114+
![](../img/05/3.png)
115+
> 图$5.4$: 当给定不同的回合长度时,MC基本算法所获得的策略和状态值。

0 commit comments

Comments
 (0)