Skip to content

Commit b36d098

Browse files
committed
📝 第十章润色完成
1 parent 6ca688d commit b36d098

21 files changed

Lines changed: 1326 additions & 118 deletions

.history/README_20260416080245.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<div align="center">
2+
3+
<h2>
4+
<a href="https://wgyhhh.top/Mathematical-Foundations-of-Reinforcement-Learning-Notes/">
5+
🚀 立即在线阅读
6+
</a>
7+
</h2>
8+
<h3>🤖 《强化学习中的数学原理》-个人笔记与思考总结</h3>
9+
<p><em>理解强化学习的数学原理,并通过实例深入掌握核心算法</em></p>
10+
</div>
11+
12+
<!-- ### &#8627; Stargazers -->
13+
<!-- [![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) -->
14+
15+
## 🎯 笔记介绍
16+
17+
&emsp;&emsp;本笔记是对赵世钰老师所著《强化学习中的数学原理》的个人思考与总结,**笔者将其做成了网页模式,方便大家随时随地在掌上设备阅读**。在此基础上,我还补充了对书中核心算法的实现,以便读者能获得更直观的理解。书中首先从基础概念入手,讲解Bellman公式和Bellman最优公式,接着扩展到基于模型(model-based)和无模型(model-free)的强化学习算法,最终推广到基于函数逼近的强化学习算法。若读者在强化学习方面没有背景知识,只需具备一定的线性代数和概率论基础即可阅读本书。而对于已有一些强化学习知识背景的读者,本笔记则可以帮助深入理解相关问题。
18+
19+
## 📖 内容导航
20+
21+
| 章节 | 关键内容 | 状态 |
22+
| --- | --- | --- |
23+
| [前言](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Preface1/) | 本笔记的缘起、背景及阅读建议 ||
24+
| [第一章 基本概念](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-1/intro/) | 强化学习的基本概念 ||
25+
| [第二章 状态值与贝尔曼方程](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-2/intro/) | 回报、状态值、Bellman方程 ||
26+
| [第三章 最优状态值与贝尔曼最优方程](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-3/intro/) | 最优状态值、最优策略、Bellman最优方程 ||
27+
| [第四章 值迭代与策略迭代](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-4/intro/) | 值迭代算法、策略迭代算法、截断策略迭代算法 ||
28+
| [第五章 蒙特卡罗方法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-5/intro/) | MC Basic、MC Exploring Starts、MC-Greedy ||
29+
| [第六章 随机近似算法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-6/intro/) | Robbins-Monro算法、Dvoretzky定理、随机梯度下降 ||
30+
| [第七章 时序差分算法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-7/intro/) | Sarsa、n步Sarsa、Q-learning、 Off-policy、On-policy||
31+
| [第八章 值函数方法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-8/intro/) | 基于值函数的TD算法、Sarsa、Q-learning ||
32+
| [第九章 策略梯度方法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-9/intro/) | 策略梯度、REINFORCE ||
33+
| [第十章 演员-评论家算法](https://wgyhhhh.github.io/Mathematical-Foundations-of-Reinforcement-Learning-Notes/Chapter-10/intro/) | 优势演员-评论家、异策略演员-评论家、确定性演员-评论家 ||
34+
| 算法实现详解 | 核心算法Python实现 | 🚧 |
35+
36+
### 🚧 算法实现详解
37+
38+
笔者正在使用Python实现本书中的部分核心算法,读者可以通过结合阅读,获得更直观的理解。同时笔者正在同步实现近年来RL4LLM的一些算法理论知识和代码复现的讲解。
39+
40+
41+
## 🤝 如何贡献
42+
43+
如果你对强化学习感兴趣,可以参与到该笔记的完善中!❤️
44+
45+
- 💡**内容完善** - 帮助改进笔记内容
46+
- 📝**报告问题** - 发现问题请提交 Issue
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
title: 10.1 最简单的演员-评论家算法:QAC
3+
comments: true # 开启评论
4+
---
5+
本节将介绍最简单的Actor-Critic算法。我们可以推广式$(9.32)$的策略梯度算法很容易得到该算法。
6+
7+
首先,让我们回顾一下。策略梯度方法的基本思想是通过最大化一个目标函数$J(\theta)$来得到最优策略。用于最大化$J(\theta)$的梯度上升算法是
8+
9+
$$\begin{aligned}\theta_{t+1}&=\theta_t+\alpha\nabla_\theta J(\theta_t)\\&=\theta_{t}+\alpha\mathbb{E}_{S\sim\eta,A\sim\pi}\left[\nabla_{\theta}\ln\pi(A|S,\theta_{t})q_{\pi}(S,A)\right],\end{aligned}\tag{10.1}$$
10+
11+
其中$\eta$表是态分布(详见定理$9.1$)。由于真实梯度是无法得到的,我们可采用随机梯度进行近似:
12+
13+
$$\theta_{t+1}=\theta_t+\alpha\nabla_\theta\ln\pi(a_t|s_t,\theta_t)q_t(s_t,a_t).\tag{10.2}$$
14+
15+
!!! note
16+
把一个含有期望的算法,变为一个采样的不含期望的算法
17+
18+
该算法由上一章式$(9.32)$给出。
19+
20+
方程$(10.2)$具有重要意义,因为它清楚地展示了如何融合基于策略的方法和基于价值的方法。一方面,它是一个*基于策略*的算法,因为它直接更新策略参数$\theta$。另一方面,该方程的更新需要知道$q_t(s_t, a_t)$,即对行动值 $q_\pi(s_t, a_t)$的估计量。因此,需要另一个*基于价值*的算法来得到$q_t(s_t, a_t)$。
21+
22+
截至目前,本书已探讨了两种估计行动值的方法:第一种是基于蒙特卡洛的方法,第二种是时序差分的方法。
23+
24+
- 若通过蒙特卡洛来估计$q_\pi(s_t, a_t)$,则对应算法称为REINFORCE或蒙特卡洛策略梯度,该算法已在第$9$章介绍过了。
25+
26+
- 若通过时序差分方法来估计$q_t(s_t, a_t)$,那么相应算法通常称为Actor-Critic。换句话说,当我们把基于时序差分的价值估计融入策略梯度方法时,就得到了Actor-Critic方法。
27+
28+
最简单的Actor-Critic算法流程如算法$10.1$所示。其中Actor对应于$(8.35)$给出的Sarsa算法,用于估计策略对应的值。其中行动值通过函数$q(s,a,\mathbf{w})$表示;Actor则对应于$(10.2)$给出的策略更新步骤。该算法有时被称为Q Actor-Critic(QAC)。虽然结构简单,但QAC揭示了Actor-Critic算法的核心思想,我们将在后续章节展示多种进阶算法都可以通过推广QAC得到。
29+
30+
![](../img/10/1.png)
31+
32+
> 算法$10.1$:最简单的演员-评论性算法(QAC)
33+
34+
---
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
title: 10.2 优势演员-评论家方法
3+
comments: true # 开启评论
4+
---
5+
现在我们介绍优势演员-评论家算法(advantage actor-critic, A2C)。该算法的核心思想是通过引入一个基准来降低估计的方差。
6+
7+
### 10.2.1 基准不变性
8+
9+
策略梯度有一个重要性质:它对额外的*基线*(baseline)是不变的,即
10+
11+
$$\mathbb{E}_{S\sim\eta,A\sim\pi}\left[\nabla_{\theta}\ln\pi(A|S,\theta_{t})q_{\pi}(S,A)\right]=\mathbb{E}_{S\sim\eta,A\sim\pi}\left[\nabla_{\theta}\ln\pi(A|S,\theta_{t})(q_{\pi}(S,A)-b(S))\right],\tag{10.3}$$
12+
13+
其中$b(S)$是基准函数,它是状态$S$的一个标量函数。上式表明了添加或者去掉基准函数$b(S)$不会影响策略梯度。下面回答两个重要问题。
14+
15+
- 第一,为什么式$(10.3)$成立?
16+
17+
$(10.3)$成立的充分必要条件如下:
18+
19+
$$\mathbb{E}_{S\sim\eta,A\sim\pi}\left[\nabla_\theta\ln\pi(A|S,\theta_t)b(S)\right]=0.$$
20+
21+
该方程成立的条件是
22+
23+
$$\begin{aligned}\mathbb{E}_{S\sim\eta,A\sim\pi}\left[\nabla_{\theta}\ln\pi(A|S,\theta_{t})b(S)\right]&=\sum_{s\in\mathcal{S}}\eta(s)\sum_{a\in\mathcal{A}}\pi(a|s,\theta_{t})\nabla_{\theta}\ln\pi(a|s,\theta_{t})b(s)\\&=\sum_{s\in\mathcal{S}}\eta(s)\sum_{a\in\mathcal{A}}\nabla_{\theta}\pi(a|s,\theta_{t})b(s)\\&=\sum_{s\in\mathcal{S}}\eta(s)b(s)\sum_{a\in\mathcal{A}}\nabla_{\theta}\pi(a|s,\theta_{t})\\&=\sum_{s\in\mathcal{S}}\eta(s)b(s)\nabla_\theta\sum_{a\in\mathcal{A}}\pi(a|s,\theta_t)\\&=\sum_{s\in\mathcal{S}}\eta(s)b(s)\nabla_{\theta}1=0.\end{aligned}$$
24+
25+
- 第二,为什么我们要引入基准函数?它有什么用?
26+
27+
基准函数的作用在于其能够降低我们使用随机样本近似真实梯度时的近似方差。具体而言,定义
28+
29+
$$X(S,A)\doteq\nabla_\theta\ln\pi(A|S,\theta_t)[q_\pi(S,A)-b(S)].\tag{10.4}$$
30+
31+
此时真实的梯度为$\mathbb{E}[X(S, A)]$。由于我们需要使用一个随机样本$x$来近似$\mathbb{E}[X]$的值,我们希望方差$\operatorname{var}(X)$越小越好。如果$\operatorname{var}(X)$接近0,那么任何样本$x$都可以准确地近似$\mathbb{E}[X]$;相反,如果$\operatorname{var}(X)$很大,样本$x$的值可能与$\mathbb{E}[X]$有较大差距,此时用$x$来近似$\mathbb{E}[X]$可能很不准确。
32+
33+
尽管$\mathbb{E}[X]$对于基线是不变的,但方差$\text{var}(X)$却是会随着基准变化的。因此,我们可以设计一个好的基线从而最小化$\text{var}(X)$。在REINFORCE和QAC算法中,我们设置了$b =0$,而这不一定是一个好的基准函数。
34+
35+
事实上,能够最小化$\text{var}(X)$的最优基线为
36+
37+
$$b^*(s)=\frac{\mathbb{E}_{A\sim\pi}\left[\|\nabla_\theta\ln\pi(A|s,\theta_t)\|^2q_\pi(s,A)\right]}{\mathbb{E}_{A\sim\pi}\left[\|\nabla_\theta\ln\pi(A|s,\theta_t)\|^2\right]},\quad s\in\mathcal{S}.\tag{10.5}$$
38+
39+
证明过程见Box 10.1。
40+
41+
尽管$(10.5)$中的基线是最优的,但由于其复杂度过高而难以实际应用。如果从$(10.5)$中移除权重$\|\nabla_\theta \ln \pi(A|s, \theta_t)\|^2$,就可以得到一个次优的基准,它有一个简洁的表达式:
42+
43+
$$b^\dagger(s)=\mathbb{E}_{A\sim\pi}[q_\pi(s,A)]=v_\pi(s),\quad s\in\mathcal{S}.$$
44+
45+
值得注意的是,这个次优的基准函数就是状态值函数。
46+
47+
### 10.2.2 算法描述
48+
49+
当$b(s) = v_\pi(s)$时,$(10.1)$中的梯度上升算法就变为可
50+
51+
$$\begin{gathered}\theta_{t+1}=\theta_{t}+\alpha\mathbb{E}\left[\nabla_{\theta}\ln\pi(A|S,\theta_{t})[q_{\pi}(S,A)-v_{\pi}(S)]\right]\\\doteq\theta_t+\alpha\mathbb{E}\left[\nabla_\theta\ln\pi(A|S,\theta_t)\delta_\pi(S,A)\right].\end{gathered}\tag{10.7}$$
52+
53+
其中
54+
55+
$$\delta_\pi(S,A)\doteq q_\pi(S,A)-v_\pi(S)$$
56+
57+
该函数被称为**优势函数**(advantage function),它反应了一个行动相比于其他行动的优势。具体来说,由于状态值$v_\pi(s) = \sum_{a\in\mathcal{A}} \pi(a|s)q_\pi(s, a)$表示平均行动值。因此$\delta_\pi(s, a) >0$,表明响应的行动值大于均值,具有一定的优势。
58+
59+
如果把$(10.7)$式中的真实梯度替换成随机梯度,可以得到
60+
61+
$$\begin{aligned}\theta_{t+1}&=\theta_t+\alpha\nabla_\theta\ln\pi(a_t|s_t,\theta_t)[q_t(s_t,a_t)-v_t(s_t)]\\&=\theta_t+\alpha\nabla_\theta\ln\pi(a_t|s_t,\theta_t)\delta_t(s_t,a_t),\\&=\theta_t+\alpha\underbrace{\left(\frac{\delta_t(s_t,a_t)}{\pi(a_t|s_t,\theta_t)}\right)}_{\mathrm{step~size}}\nabla_\theta\pi(a_t|s_t,\theta_t)\end{aligned}\tag{10.8}$$
62+
63+
64+
!!! note
65+
可以看到,这种stochastic gradient的方法可以很好的平衡探索和利用
66+
67+
步长与$\delta_t$成比例,而不是与绝对值$q_t$成比例,当$\delta_t$较大时,步长也会变大,那么朝着那个方向走的也会变多,因此$\pi(a_t|s_t)$也会变大。通俗来说就是,我知道当前这个动作会有比较大的动作值,那么下个时刻就要给更大的概率去选择它,这就是充分利用。
68+
69+
如果分母对应的策略较小,那么步长也会变大,所得到下一时刻的$\pi$的概率也会比较大,通俗来说,上一时刻我选择这个行动的概率较小,但下一时刻我会给选择这个行动更大的概率,从而增加探索。
70+
71+
其中$s_t$,$a_t$分别为时刻$t$时状态空间$\mathcal{S}$与动作空间$\mathcal{A}$的采样值。这里$q_t(s_t,a_t)$和 $v_t(s_t)$分别是$q_{\pi(\theta_t)}(s_t,a_t)$和$v_{\pi(\theta_t)}(s_t)$的估计值。式$(10.8)$中的算法是基于$q_t-v_t$这个*相对值*(而非$q_t$的绝对值)更新策略的。这种设计从直观上是合理的,因为当我们在一个状态下选择一个行动时,我们只关注哪个动作相对于其他动作的具有更大的价值。而不关心其绝对行动值
72+
73+
如果通过蒙特卡洛方法估计$q_t(s_t, a_t)$和$v_t(s_t)$,那么式$(10.8)$中的算法被称为带基准的REINFORCE(REINFORCE with baseline)。如果通过时序差分方法估计$q_t(s_t, a_t)$和$v_t(s_t)$,该算法通常称为Advantage Actor-Critic(A2C)。算法$10.2$给出了A2C算法的流程。应该注意的是,算法$10.2$中的优势函数是通过时序差分误差近似的,即:
74+
75+
$$q_t(s_t,a_t)-v_t(s_t)\approx r_{t+1}+\gamma v_t(s_{t+1})-v_t(s_t).$$
76+
77+
这个近似是合理的,因为
78+
79+
$$q_\pi(s_t,a_t)-v_\pi(s_t)=\mathbb{E}\left[R_{t+1}+\gamma v_\pi(S_{t+1})-v_\pi(S_t)|S_t=s_t,A_t=a_t\right],$$
80+
81+
上式根据$q_\pi(s_t, a_t)$的定义而得到。使用时序差分(TD)误差的一个优势在于,我们仅需使用一个神经网络来表示 $v_\pi(s)$。相反,若设 $\delta_t = q_t(s_t, a_t) - v_t(s_t)$,则需要使用两个网络分别表示 $v_\pi(s)$和 $q_\pi(s, a)$。当我们使用时序差分误差时,该算法也可称为TD Actor-Critic。此外需要注意的是,策略 $\pi(\theta_t)$是一个随机策略,因此它具有一定的探索性,所以它可以直接用来生成经验样本,而无需依赖外部机制(如$\varepsilon$-贪婪)。A2C存在若干变体,例如asynchronous advantage actor-critic(A3C)。感兴趣的读者可参阅[71,72]
82+
83+
![](../img/10/2.png)
84+
85+
> 算法$10.2$:Advantage Actor-Critic或TD Actor-Critic
86+
87+
---

0 commit comments

Comments
 (0)