Skip to content

Commit 66240bb

Browse files
committed
润色第六章部分
1 parent 71df085 commit 66240bb

7 files changed

Lines changed: 114 additions & 17 deletions

File tree

.history/README_20251028224725.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: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
title: 6.1 启发示例:期望值估计
3+
comments: true # 开启评论
4+
---
5+
期望值估计问题已经在上一章讨论过一次。下面我们从另一个角度再次研究这个问题,并且介绍如何用“增量式”的方法解决这个问题。
6+
7+
!!! note
8+
第一种非递增法是先收集所有样本,然后计算平均值。这种方法的缺点是,如果数据很多,我们可能需要等待很长时间才能收集到所有样本。第二种方法可可以克服这种问题,得到一次采样就更新一次,估计就会慢慢的变得准确。
9+
10+
考虑一个随机变量$X$,它取值于有限集$\mathcal{X}$。我们的目标是估计期望值$\mathbb{E}[X]$。假设有一个独立同分布的样本序列${x_i}_{i=1}^n$。那么$X$的期望值可以通过这些样本的平均值来近似:
11+
12+
$$\mathbb{E}[X]\approx\bar{x}\doteq\frac{1}{n}\sum_{i=1}^nx_i.\tag{6.1}$$
13+
14+
$(6.1)$就是是蒙特卡洛估计的基本思想,根据大数定律,当$n\to\infty$,$\bar{x}\to\mathbb{E}[X]$。
15+
16+
有两种方法可以用来计算$(6.1)$中的$\bar{x}$。第一种**非增量式** (non-incremental)是先收集所有样本,然后计算平均值。这种方法的缺点是,如果样本数量较多,我们可能需要等待很长时间才能收集到所有样本。第二种是**增量式**的 (incremental)。具体来说,令
17+
18+
$$w_{k+1}=\frac{1}{k}\sum_{i=1}^{k}x_{i},\quad k=1,2,\ldots$$
19+
20+
类似地
21+
22+
$$w_k=\frac{1}{k-1}\sum_{i=1}^{k-1}x_i,\quad k=2,3,\ldots$$
23+
24+
实际上,$w_{k+1}$可以用$w_k$表示为
25+
26+
$$w_{k+1}=\frac{1}{k}\sum_{i=1}^{k}x_{i}=\frac{1}{k}\left(\sum_{i=1}^{k-1}x_{i}+x_{k}\right)=\frac{1}{k}((k-1)w_{k}+x_{k})=w_{k}-\frac{1}{k}(w_{k}-x_{k}).$$
27+
28+
因此,我们得到了如下增量式算法:
29+
30+
$$w_{k+1}=w_{k}-\frac{1}{k}(w_{k}-x_{k}).\tag{6.2}$$
31+
32+
该算法可以以增量的方式计算均值$\bar{x}$
33+
34+
为了验证该算法,我们可以计算出$k=1,2,\ldots$次迭代的结果:
35+
36+
$$\begin{aligned}w_1&=x_1,\\w_2&=w_1-\frac{1}{1}(w_1-x_1)=x_1,\\w_3&=w_2-\frac{1}{2}(w_2-x_2)=x_1-\frac{1}{2}(x_1-x_2)=\frac{1}{2}(x_1+x_2),\\w_4&=w_3-\frac{1}{3}(w_3-x_3)=\frac{1}{3}(x_1+x_2+x_3),\\&\vdots\\w_{k+1}&=\frac{1}{k}\sum_{i=1}^kx_i.\end{aligned}\tag{6.3}$$
37+
38+
可以看出,由这个增量式算法得到的$w_{k+1}$确实是$\{x_i\}_{i=1}^k$的平均值。这里$w_1=x_1$是初始值。
39+
40+
算法$(6.2)$的优势在于,每次接收到一个样本时,就能立即计算出平均值,进而近似计算$\mathbb{E}[X]$。值得注意的是,由于样本不足,近似值在开始时可能并不准确,随着样本数量的增加,估计准确率会逐步提高。此外,还可以定义$w_{k+1}=\frac{1}{1+k} \sum_{i=1}^{k+1} x_i$和$w_k=\frac{1}{k} \sum_{i=1}^k x_i$。在这种情况下,相应的迭代算法为$w_{k+1}=w_{k}-\frac{1}{1+k}(w_{k}-x_{k+1}).$。
41+
42+
最后,我们可以把$(6.2)$推广到一个更一般化的算法:
43+
44+
$$w_{k+1}=w_k-\alpha_k(w_k-x_k).\tag{6.4}$$
45+
46+
除了系数$1/k$被$\alpha_k>0$取代之外,它与$(6.2)$相同。由于没有给出$\alpha_k$的表达式,我们无法得到如$(6.3)$所示的$w_k$的显式表达式。不过我们将在下一节证明,如果${\alpha_k}$满足一些**温和条件** (mild conditions)的话,当$k\to\infty$时,$w_k \rightarrow \mathbb{E}[X]$。在第$7$章中,我们将看到时序差分算法与$(6.4)$非常类似,这也是我们介绍该算法的主要原因。
47+
48+
!!! note
49+
可以发现,我们在上章和本章中均利用期望值估计作为示例,这是因为强化学习中的许多量,都以期望值的方式定义,所以需要用数据去估计。
50+
51+
---
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
上一章介绍了基于蒙特卡洛的无需模型的强化学习算法,下一章(第7章)将介绍另一种无需模型的强化学习算法——时序差分。然而,在开始介绍下一章的内容之前,我们需要按下暂停键,先学习本章关于随机近似算法的内容。为什么要这么做呢?我们到目前为止学习的算法都是非增量式的(non-incremental)。然而,时序差分算法是增量式的(incremental),它与我们之前学习过的算法看起来非常不同。许多读者在第一次看到时序差分算法时会有很多问题,例如这些算法为什么设计成这个样子、它们为什么能有效工作等。为了让大家能更容易地理解时序差分算法,我们在本章先来介绍随机近似算法。时序差分算法可以被视为特殊的随机近似算法;经典的随机梯度下降也是特殊的随机近似算法。

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
| [第四章 值迭代与策略迭代](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-4/intro/) | 值迭代算法、策略迭代算法、截断策略迭代算法 ||
2020
| [第五章 蒙特卡罗方法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-5/intro/) | MC Basic、MC Exploring Starts、MC-Greedy ||
2121
| [第六章 随机近似算法](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|(润色中) |
22+
| [第七章 时序差分算法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-7/intro/) | Sarsa、n步Sarsa、Q-learning、 Off-policy、On-policy||
2323
| [第八章 值函数方法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-8/intro/) | 基于值函数的TD算法、Sarsa、Q-learning | ✅(润色中) |
2424
| [第九章 策略梯度方法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-9/intro/) | 策略梯度、REINFORCE | ✅(润色中) |
2525
| [第十章 演员-评论家算法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-10/intro/) | 优势演员-评论家、异策略演员-评论家、确定性演员-评论家 | ✅(润色中) |

docs/Chapter-6/6-1.md

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,49 @@
11
---
2-
title: 6.1 启发性示例:期望值估计
2+
title: 6.1 启发示例:期望值估计
33
comments: true # 开启评论
44
---
5-
接下来,我们通过考察均值估计问题,来演示如何将一个非增量式(non-incremental)算法转换为增量式(incremental)算法
5+
期望值估计问题已经在上一章讨论过一次。下面我们从另一个角度再次研究这个问题,并且介绍如何用“增量式”的方法解决这个问题
66

77
!!! note
88
第一种非递增法是先收集所有样本,然后计算平均值。这种方法的缺点是,如果数据很多,我们可能需要等待很长时间才能收集到所有样本。第二种方法可可以克服这种问题,得到一次采样就更新一次,估计就会慢慢的变得准确。
99

10-
考虑一个取值于有限集合$\mathcal{X}$的随机变量$X$。我们的目标是估计$\mathbb{E}[X]$。假设我们有一系列独立同分布的样本${x_i}_{i=1}^n$。$X$的期望值可以通过以下方式近似计算
10+
考虑一个随机变量$X$,它取值于有限集$\mathcal{X}$。我们的目标是估计期望值$\mathbb{E}[X]$。假设有一个独立同分布的样本序列${x_i}_{i=1}^n$。那么$X$的期望值可以通过这些样本的平均值来近似
1111

1212
$$\mathbb{E}[X]\approx\bar{x}\doteq\frac{1}{n}\sum_{i=1}^nx_i.\tag{6.1}$$
1313

14-
$(6.1)$中的近似是蒙特卡罗估计的基本思想,如第$5$章所介绍。我们知道,根据大数定律,当$n\to\infty$,$\bar{x}\to\mathbb{E}[X]$。
14+
$(6.1)$就是是蒙特卡洛估计的基本思想,根据大数定律,当$n\to\infty$,$\bar{x}\to\mathbb{E}[X]$。
1515

16-
接下来,我们将说明有两种方法可以用来计算$(6.1)$中的$\bar{x}$。第一种非增量式是先收集所有样本,然后计算平均值。这种方法的缺点是,如果样本数量较多,我们可能需要等待很长时间才能收集到所有样本。第二种方法可以避免这一缺点,因为它是以递增的方式计算平均值的。具体来说,假设
16+
有两种方法可以用来计算$(6.1)$中的$\bar{x}$。第一种**非增量式** (non-incremental)是先收集所有样本,然后计算平均值。这种方法的缺点是,如果样本数量较多,我们可能需要等待很长时间才能收集到所有样本。第二种是**增量式**的 (incremental)。具体来说,
1717

1818
$$w_{k+1}=\frac{1}{k}\sum_{i=1}^{k}x_{i},\quad k=1,2,\ldots$$
1919

20-
因此
20+
类似地
2121

2222
$$w_k=\frac{1}{k-1}\sum_{i=1}^{k-1}x_i,\quad k=2,3,\ldots$$
2323

24-
那么,$w_{k+1}$可以用$w_k$表示为
24+
实际上,$w_{k+1}$可以用$w_k$表示为
2525

2626
$$w_{k+1}=\frac{1}{k}\sum_{i=1}^{k}x_{i}=\frac{1}{k}\left(\sum_{i=1}^{k-1}x_{i}+x_{k}\right)=\frac{1}{k}((k-1)w_{k}+x_{k})=w_{k}-\frac{1}{k}(w_{k}-x_{k}).$$
2727

28-
因此,我们得到了以下增量算法
28+
因此,我们得到了如下增量式算法
2929

3030
$$w_{k+1}=w_{k}-\frac{1}{k}(w_{k}-x_{k}).\tag{6.2}$$
3131

32-
这种算法可用于以递增方式计算平均值 $\bar{x}$。可以验证
32+
该算法可以以增量的方式计算均值$\bar{x}$
33+
34+
为了验证该算法,我们可以计算出$k=1,2,\ldots$次迭代的结果:
3335

3436
$$\begin{aligned}w_1&=x_1,\\w_2&=w_1-\frac{1}{1}(w_1-x_1)=x_1,\\w_3&=w_2-\frac{1}{2}(w_2-x_2)=x_1-\frac{1}{2}(x_1-x_2)=\frac{1}{2}(x_1+x_2),\\w_4&=w_3-\frac{1}{3}(w_3-x_3)=\frac{1}{3}(x_1+x_2+x_3),\\&\vdots\\w_{k+1}&=\frac{1}{k}\sum_{i=1}^kx_i.\end{aligned}\tag{6.3}$$
3537

36-
$(6.2)$的优势在于,每次收到样本时,我们都能立即计算出平均值。这个平均值可以用来近似计算$\bar{x}$,进而近似计算$\mathbb{E}[X]$。值得注意的是,由于样本不足,近似值在开始时可能并不准确。不过,有总比没有好。随着样本数量的增加,估计精度可以根据大数定律逐步提高。此外,还可以定义$w_{k+1}=\frac{1}{1+k} \sum_{i=1}^{k+1} x_i$和$w_k=\frac{1}{k} \sum_{i=1}^k x_i$。这样做不会有任何明显的区别。在这种情况下,相应的迭代算法为$w_{k+1}=w_{k}-\frac{1}{1+k}(w_{k}-x_{k+1}).$。
38+
可以看出,由这个增量式算法得到的$w_{k+1}$确实是$\{x_i\}_{i=1}^k$的平均值。这里$w_1=x_1$是初始值。
39+
40+
算法$(6.2)$的优势在于,每次接收到一个样本时,就能立即计算出平均值,进而近似计算$\mathbb{E}[X]$。值得注意的是,由于样本不足,近似值在开始时可能并不准确,随着样本数量的增加,估计准确率会逐步提高。此外,还可以定义$w_{k+1}=\frac{1}{1+k} \sum_{i=1}^{k+1} x_i$和$w_k=\frac{1}{k} \sum_{i=1}^k x_i$。在这种情况下,相应的迭代算法为$w_{k+1}=w_{k}-\frac{1}{1+k}(w_{k}-x_{k+1}).$。
3741

38-
此外,还可以考虑一种表达式更一般的算法
42+
最后,我们可以把$(6.2)$推广到一个更一般化的算法
3943

4044
$$w_{k+1}=w_k-\alpha_k(w_k-x_k).\tag{6.4}$$
4145

42-
这种算法非常重要,在本章中经常使用。除了系数$1/k$被$\alpha_k>0$取代之外,它与$(6.2)$相同。由于没有给出$\alpha_k$的表达式,我们无法得到如$(6.3)$所示的$w_k$的明确表达式。不过,我们将在下一节证明,如果${\alpha_k}$满足一些温和条件(mild conditions),当$k\to\infty$时,$w_k \rightarrow \mathbb{E}[X]$。在第$7$章中,我们将看到时序差分算法有类似(但更复杂)的表达式
46+
除了系数$1/k$被$\alpha_k>0$取代之外,它与$(6.2)$相同。由于没有给出$\alpha_k$的表达式,我们无法得到如$(6.3)$所示的$w_k$的显式表达式。不过我们将在下一节证明,如果${\alpha_k}$满足一些**温和条件** (mild conditions)的话,当$k\to\infty$时,$w_k \rightarrow \mathbb{E}[X]$。在第$7$章中,我们将看到时序差分算法与$(6.4)$非常类似,这也是我们介绍该算法的主要原因
4347

4448
!!! note
4549
可以发现,我们在上章和本章中均利用期望值估计作为示例,这是因为强化学习中的许多量,都以期望值的方式定义,所以需要用数据去估计。

docs/Chapter-6/intro.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
第$5$章介绍了基于蒙特卡洛估计的第一类无模型强化学习算法。在下一章(第$7$章),我们将介绍另一类无模型强化学习算法:时序差分学习。但在进入下一章之前,我们需要暂停一下做好准备。这是因为时序差分算法与我们迄今为止所学习的算法有很大不同。许多初次接触时序差分算法的读者常常会好奇,这些算法最初是如何设计出来的,以及为什么它们能够有效。事实上,前后两章之间存在知识上的断层:我们迄今为止所学习的算法是非增量式的,但我们将在后续章节中学习的算法则是增量式的。
2-
3-
本章旨在填补这一知识空白,介绍随机近似(stochastic aproximation)的基本概念。尽管本章并未介绍任何具体的强化学习算法,但它为后续章节的学习奠定了必要的基础。我们将在第$7$章看到,时序差分算法可以被视为特殊的随机近似算法。本章还将介绍在机器学习中广泛使用的随机梯度下降算法。
1+
上一章介绍了基于蒙特卡洛的无需模型的强化学习算法,下一章(第7章)将介绍另一种无需模型的强化学习算法——时序差分。然而,在开始介绍下一章的内容之前,我们需要按下暂停键,先学习本章关于随机近似算法的内容。为什么要这么做呢?我们到目前为止学习的算法都是非增量式的(non-incremental)。然而,时序差分算法是增量式的(incremental),它与我们之前学习过的算法看起来非常不同。许多读者在第一次看到时序差分算法时会有很多问题,例如这些算法为什么设计成这个样子、它们为什么能有效工作等。为了让大家能更容易地理解时序差分算法,我们在本章先来介绍随机近似算法。时序差分算法可以被视为特殊的随机近似算法;经典的随机梯度下降也是特殊的随机近似算法。

docs/overrides/hooks/test2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def __init__(self):
6868
'gemini': {
6969
'url': 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent',
7070
'model': 'gemini-pro',
71-
'api_key': os.getenv('GOOGLE_API_KEY', 'AIzaSyDwWgffCCyVFZVsRasX3B3arWFaCT1PzNI'),
71+
'api_key': os.getenv('GOOGLE_API_KEY', ''),
7272
'max_tokens': 150,
7373
'temperature': 0.3
7474
}

0 commit comments

Comments
 (0)