From 4f2a548fd9e7206115063a7f2569a1f87c9138a6 Mon Sep 17 00:00:00 2001 From: Zhiqing Xiao Date: Sun, 3 Mar 2024 16:27:22 +0800 Subject: [PATCH] Update codes --- en2023/README.md | 10 +- en2023/gym_zh.md | 181 ------ en2023/notation.html | 746 ------------------------- en2023/notation_zh.html | 746 ------------------------- en2023/setup/setupmac_zh.md | 162 ------ en2023/setup/setupwin_zh.md | 155 ----- zh2023/README.md | 10 +- zh2023/{errata/202307.md => errata.md} | 60 +- zh2023/notation.html | 746 ------------------------- zh2023/setup/setupmac.md | 12 +- zh2023/setup/setupwin.md | 8 +- 11 files changed, 81 insertions(+), 2755 deletions(-) delete mode 100644 en2023/gym_zh.md delete mode 100644 en2023/notation.html delete mode 100644 en2023/notation_zh.html delete mode 100644 en2023/setup/setupmac_zh.md delete mode 100644 en2023/setup/setupwin_zh.md rename zh2023/{errata/202307.md => errata.md} (97%) delete mode 100644 zh2023/notation.html diff --git a/en2023/README.md b/en2023/README.md index 15567ad..e1b5d39 100644 --- a/en2023/README.md +++ b/en2023/README.md @@ -42,8 +42,8 @@ All chapters are accompanied with Python codes. ### Resources - Reference answers of multiple choices: [link](https://zhiqingxiao.github.io/rl-book/en2023/choice.html) -- Guide to set up developing environment: [link](https://github.com/ZhiqingXiao/rl-book/blob/master/en2023/setup/setupwin.md) -- Table of notations: [link](https://zhiqingxiao.github.io/rl-book/en2023/notation.html) +- Guide to set up developing environment: [Windows](https://github.com/ZhiqingXiao/rl-book/blob/master/en2023/setup/setupwin.md) [macOS](https://github.com/ZhiqingXiao/rl-book/blob/master/en2023/setup/setupmac.md) +- Table of notations: [link](https://github.com/ZhiqingXiao/rl-book/blob/master/en2023/notation.md) - Table of abbreviations: [link](https://github.com/zhiqingxiao/rl-book/blob/master/en2023/abbreviation.md) - Gym Internal: [link](https://github.com/ZhiqingXiao/rl-book/blob/master/en2023/gym.md) - Bibliography: [link](https://github.com/zhiqingxiao/rl-book/blob/master/en2023/bibliography.md) @@ -135,10 +135,10 @@ Note: ### 中英双语资源 - 习题参考答案:[链接](https://zhiqingxiao.github.io/rl-book/en2023/choice.html) -- 开发环境搭建:[链接](https://github.com/ZhiqingXiao/rl-book/blob/master/en2023/setupwin_zh.html) -- 字母表:[链接](https://zhiqingxiao.github.io/rl-book/en2023/notation_zh.html) +- 开发环境搭建:[Windows](https://github.com/ZhiqingXiao/rl-book/blob/master/zh2023/setup/setupwin.md) [macOS](https://github.com/ZhiqingXiao/rl-book/blob/master/zh2023/setup/setupmac.md) +- 字母表:[链接](https://github.com/ZhiqingXiao/rl-book/blob/master/en2023/notation_zh.md) - 缩略语表:[链接](https://github.com/zhiqingxiao/rl-book/blob/master/en2023/abbreviation_zh.md) -- Gym源码解读:[链接](https://github.com/ZhiqingXiao/rl-book/blob/master/en2023/gym_zh.md) +- Gym源码解读:[链接](https://github.com/ZhiqingXiao/rl-book/blob/master/zh2023/gym.md) - 参考文献:[链接](https://github.com/zhiqingxiao/rl-book/blob/master/en2023/bibliography.md) **QQ群** diff --git a/en2023/gym_zh.md b/en2023/gym_zh.md deleted file mode 100644 index 7f60c81..0000000 --- a/en2023/gym_zh.md +++ /dev/null @@ -1,181 +0,0 @@ -# Gym源码解读 - -- Gym代码: https://github.com/openai/gym -- Gym官方文档: https://www.gymlibrary.dev - - -## 随书解读索引 - -| 章节 | \# | 类 | 源代码 | 解读 | -| --- | --- | --- | --- | --- | -| 1.6.2节 | Gym源码解读1-1 | 环境类`gym.Env` | [core.py](https://github.com/openai/gym/blob/master/gym/core.py) | [解读](#环境类) | -| 1.6.2节 | Gym源码解读1-2 | 空间类`gym.space.Space` | [space.py](https://github.com/openai/gym/blob/master/gym/spaces/space.py) | [解读](#空间类) | -| 1.6.2节 | Gym源码解读1-3 | 空间类`gym.space.Box` | [box.py](https://github.com/openai/gym/blob/master/gym/spaces/box.py) | [解读](#空间类Box) | -| 1.6.2节 | Gym源码解读1-4 | 空间类`gym.space.Discrete` | [discrete.py](https://github.com/openai/gym/blob/master/gym/spaces/discrete.py) | [解读](#空间类Discrete) | -| 1.6.2节 | Gym源码解读1-5 | 包装类`gym.Wrapper` | [core.py](https://github.com/openai/gym/blob/master/gym/core.py) | [解读](#包装类) | -| 1.6.2节 | Gym源码解读1-6 | 包装类`gym.wrapper.TimeLimit` | [time_limit.py](https://github.com/openai/gym/blob/master/gym/wrappers/time_limit.py) | [解读](#包装类TimeLimit) | -| 4.3.1节 | Gym源码解读4-1 | 空间类`gym.space.Tuple` | [tuple.py](https://github.com/openai/gym/blob/master/gym/spaces/tuple.py) | [解读](#空间类Tuple) | -| 11.3.1节 | Gym源码解读11-1 | 包装类`gym.wrapper.TransformReward` | [transform_reward.py](https://github.com/openai/gym/blob/master//gym/wrappers/transform_reward.py) | [解读](#包装类TransformReward) | -| 12.6.3节 | Gym源码解读12-1 | 包装类`gym.wrapper.AtariPreprocessing` | [atari_preprocessing.py](https://github.com/openai/gym/blob/master/gym/wrappers/atari_preprocessing.py) | [解读](#包装类AtariPreprocessing) | -| 12.6.3节 | Gym源码解读12-2 | 包装类`gym.wrapper.FrameStack` | [frame_stack.py](https://github.com/openai/gym/blob/master/gym/wrappers/frame_stack.py) | [解读](#包装类FrameStack) | - - -## 环境类 - -环境类的成员函数: -- `reset()`:用于初始化新回合。这个成员的参数有回合使用的随机种子`seed`、提供其他初始化信息的参数`options`。返回观测`observation`和额外信息`info`。 -- `step()`:用于前进一步。参数是动作`action`,返回观测`observation`、奖励信号`reward`、回合结束指示`terminated`、回合截断指示`truncated`和额外信息`info`。 -- `render()`:用于绘制环境。绘制方式由属性`render_mode`确定。 -- `close()`:用于关闭环境,释放资源。 - -环境类的属性: -- `action_space`:动作空间。是空间类对象。 -- `observation_space`:观测空间。是空间类对象。 -- `reward_range`:奖励的范围。类型为`tuple[float, float]`。 -- `spec`:和任务有关的信息,比如每个回合最多有多少步等等。 -- `metadata`:一些基本信息。例如,`metadata['render_modes']` 给出了支持的显示模式。类型为`dict[str, Any]`。 -- `render_mode`:显示模式。它的取值需取自`metadata['render_modes']`。 -- `np_random`:维护随机数发生器。 -- `unwrapped`:这和包装类有关。一个环境类对象可以被包装类包装起来成为一个新的环境类对象。新对象的`unwrapped`属性可以取出包装前的类的对象。 - - -### 环境类基类`Env` - -环境类的基类是`gym.Env`. - -查看源码:https://github.com/openai/gym/blob/master/gym/core.py#L35 - -### 本书用到的环境的环境类 - -| 章 | 环境 | 源代码 | -| --- | --- | --- | -| 2 | CliffWalking | [cliffwalking.py](https://github.com/openai/gym/blob/master/gym/envs/toy_text/cliffwalking.py) | -| 3 | FrozenLake | [frozen_lake.py](https://github.com/openai/gym/blob/master/gym/envs/toy_text/frozen_lake.py) | -| 4 | Blackjack | [blackjack.py](https://github.com/openai/gym/blob/master/gym/envs/toy_text/blackjack.py) | -| 5 | Taxi | [taxi.py](https://github.com/openai/gym/blob/master/gym/envs/toy_text/taxi.py) | -| 1 & 6 | MountainCar | [mountain_car.py](https://github.com/openai/gym/blob/master/gym/envs/classic_control/mountain_car.py) | -| 1 | MountainCarContinuous | [continuous_mountain_car.py](https://github.com/openai/gym/blob/master/gym/envs/classic_control/continuous_mountain_car.py) | -| 7 | CartPole | [cartpole.py](https://github.com/openai/gym/blob/master/gym/envs/classic_control/cartpole.py) | -| 8 | Acrobot | [acrobot.py](https://github.com/openai/gym/blob/master/gym/envs/classic_control/acrobot.py) | -| 9 | Pendulum | [pendulum.py](https://github.com/openai/gym/blob/master/gym/envs/classic_control/pendulum.py) | -| 10 | LunarLander | [lunar_lander.py](https://github.com/openai/gym/blob/master/gym/envs/box2d/lunar_lander.py) | -| 10 | LunarLanderContinuous | [lunar_lander.py](https://github.com/openai/gym/blob/master/gym/envs/box2d/lunar_lander.py) | -| 11 | BipedalWalker | [bipedal_walker.py](https://github.com/openai/gym/blob/master/gym/envs/box2d/bipedal_walker.py) | - - -## 空间类 - -空间类的作用: -- 表示观测或动作的类型。这个功能类似于Python 3的类型系统,但是它还能维护上下界等更丰富的信息。 -- 随机生成空间内的样本。该功能通过成员函数`seed()`提供。实现为了实现这个功能,它维护了随机数发生器`_np_random`。成员函数`seed()`可以使用这个随机数发生器来生成随机样本。随机数发生器的构造和设置种子可参见`gym.utils.seeding`模块。 - - -环境类中的成员`observation_space`和`action_space`需要是空间类的对象。 - -空间类文档(英文):https://www.gymlibrary.dev/api/spaces/ - -内置的空间类: - -| 空间类 | 元素类型 | 源代码 | -| --- | --- | --- | -| `Space` | 不适用 | [space.py](https://github.com/openai/gym/blob/master/gym/spaces/space.py) | -| `Box` | `np.ndarray` | [box.py](https://github.com/openai/gym/blob/master/gym/spaces/box.py) | -| `Dict` | `dict` | [dict.py](https://github.com/openai/gym/blob/master/gym/spaces/dict.py) | -| `Discrete` | `int` | [discrete.py](https://github.com/openai/gym/blob/master/gym/spaces/discrete.py) | -| `Graph` | `GraphInstance` | [graph.py](https://github.com/openai/gym/blob/master/gym/spaces/graph.py) | -| `MultiBinary` | `np.ndarray` | [multi_binary.py](https://github.com/openai/gym/blob/master/gym/spaces/multi_binary.py) | -| `MultiDiscrete` | `np.ndarray` | [multi_discrete.py](https://github.com/openai/gym/blob/master/gym/spaces/multi_discrete.py) | -| `Sequence` | `tuple` | [box.py](https://github.com/openai/gym/blob/master/gym/spaces/sequence.py) | -| `Text` | `str` | [sequence.py](https://github.com/openai/gym/blob/master/gym/spaces/text.py) | -| `Tuple` | `tuple` | [tuple.py](https://github.com/openai/gym/blob/master/gym/spaces/tuple.py) | - - -### 空间类基类`Space` - -空间类的基类是`gym.spaces.Space`. - -查看源码:https://github.com/openai/gym/blob/master/gym/spaces/space.py - - -### 空间类`Box` - -查看源码:https://github.com/openai/gym/blob/master/gym/spaces/box.py - -`Box`类是最常用的空间类之一。它用来表示形如 $\mathbb{R}^n$ 、 $\mathbb{N}^n$ 、 ${[i,j]}^n$ 、 ${\lbrace i,i+1,\ldots,j\rbrace}^n$ 这样的空间,其中 $n$ 表示形状(用成员`shape`指示,可以为(3,)、(4,3)这样的)。 - -当某个空间为`Box`类对象时,空间上的每一个值都是`np.array`对象,并且`np.array`对象的形状就是`Box`类成员`shape`指定的形状,`np.array`的`dtype`就是`Box`类成员`dtype`指定的类型。成员`low`和`high`表示每个维度的下界和上界。`low`和`high`也可以为`-float('inf')`和`float('inf')`,表示没有上下界。 - -可以通过构造函数设置`shape`、`dtype`、`low`和`high`等。具体的确定空间的方法可以通过阅读源码得到。 - -它重载了随机抽样的成员函数`sample()`。在抽取样本时,根据每个维度是否有界,选择均匀分布、指数分布、正态分布中的一种。如果`dtype`是整数类型的,用`floor()`函数向下取整。 - -### 空间类`Discrete` - -查看源码:https://github.com/openai/gym/blob/master/gym/spaces/discrete.py - -`Discrete`类是最常用的空间类之一。它用来表示形如 $\lbrace\text{start},\ldots,\text{start}+n-1\rbrace$ 的有限集。 - -当空间类型为`Discrete`类时,空间内的取值为`int`型数值。 - -### 空间类`Tuple` - -查看源码:https://github.com/openai/gym/blob/master/gym/spaces/tuple.py - -空间类为`gym.spaces.Tuple`对应的值是`tuple`类型的。 - -这个类的构造函数参数`spaces`可以是`gym.space.Spaces`的列表,用来表示每个分量的空间类型。 - - -## 包装类 - -包装类的作用: -- 包装类可以它把一个环境类对象包装为另外一个环境类对象,起到修改环境的效果。可能的包装包括:限制回合最大步数、限制观测值范围等等。 - - -可以用包装类的属性`unwrapped`获得包装前的环境对象。 - -包装类文档(英文):https://www.gymlibrary.dev/api/wrappers/ - -### 包装类基类`Wrapper` - -空间类的基类是`gym.Wrapper`. - -查看源码:https://github.com/openai/gym/blob/master/gym/core.py#L213 - -它的构造函数的参数为环境类对象`env`。 - -### 包装类`TimeLimit` - -查看源码:https://github.com/openai/gym/blob/master/gym/wrappers/time_limit.py - -包装类`TimeLimit`限制每个回合的最大步数。当当前回合步数达到规定步数时,`step()`函数的返回值`truncated`为`True`。 - -它的构造函数参数为环境类对象`env`和步数`max_episode_steps`。 - -对于注册在Gym上的环境,每个回合的最大步数记录在成员`env.spec.max_episode_steps`上。 - -### 包装类`TransformReward` - -查看源码:https://github.com/openai/gym/blob/master/gym/wrappers/transform_reward.py - -包装类`TransformReward`的作用是把奖励用函数`f`进行变换。 - -它的构造函数参数为环境类对象`env`和转换函数`f`。 - - -## Atari相关 - -Atari环境各版本区别可参见源代码: -https://github.com/mgbellemare/Arcade-Learning-Environment/blob/master/src/python/gym.py - -### 包装类`AtariPreprocessing` - -查看源码:https://github.com/openai/gym/blob/master/gym/wrappers/atari_preprocessing.py - -包装类`AtariPreprocessing`提供Atari游戏的常见包装。 - -### 包装类`FrameStack` - -查看源码:https://github.com/openai/gym/blob/master/gym/wrappers/frame_stack.py - -在Atari游戏中,单幅图像只能获得位置信息,而不能获得运动信息。为了捕获图像的运动信息,可以把多幅图像堆叠在一起当作状态。`FrameStack`类就实现了图像堆叠功能。对于Atari游戏,一般把4幅图像堆叠在一起。 diff --git a/en2023/notation.html b/en2023/notation.html deleted file mode 100644 index 9f19dc1..0000000 --- a/en2023/notation.html +++ /dev/null @@ -1,746 +0,0 @@ - - - - - -Notations - -
-

Notation

General rules

  • Upper-case letters are random events or random numbers, while lower-case letters are deterministic events or deterministic variables.
  • The serif typeface, such as X, denotes numerical values. The sans typeface, such as X, denotes events in general, which can be either numerical or not numerical.
  • Bold letters denote vectors (such as w) or matrices (such as F), where matrices are always upper-case, even they are deterministic matrices.
  • Calligraph letters, such as X, denote sets.
  • Fraktur letters, such as 𝔣, denote mappings.

Table

In the sequel are notations throughout the book. We also occasionally follow other notations defined locally.

English LettersDescription
A, aadvantage
A, aaction
Aaction space
B, bbaseline in policy gradient; numerical belief in partially observable tasks; (lower case only) bonus; behavior policy in off-policy learning
B, bbelief in partially observable tasks
𝔅π, 𝔟πBellman expectation operator of policy π (upper case only used in distributional RL)
𝔅, 𝔟Bellman optimal operator (upper case only used in distributional RL)
Ba batch of transition generated by experience replay; belief space in partially observable tasks
B+belief space with terminal belief in partially observable tasks
ccounting; coefficients in linear programming
d, dmetrics
dff-divergence
dKLKL divergence
dJSJS divergence
dTVtotal variation
Dtindicator of episode end
Dset of experience
eeligibility trace
Eexpectation
𝔣a mapping
FFisher information matrix
G, greturn
ggradient vector
haction preference
Hentropy
kindex of iteration
loss
pprobability, dynamics
Ptransition matrix
oobservation probability in partially observable tasks; infinitesimal in asymptotic notations
O, O~infinite in asymptotic notations
O, oobservation
Prprobability
Q, qaction value
Qπ, qπaction value of policy π (upper case only used in distributional RL)
Q, qoptimal action values (upper case only used in distributional RL)
qvector representation of action values
R, rreward
Rreward space
S, sstate
Sstate space
S+state space with terminal state
Tsteps in an episode
T, Ttrajectory
𝔲belief update operator in partially observable tasks
U, uTD target; (lower case only) upper bound
V, vstate value
Vπ, vπstate value of the policy π (upper case only used in distributional RL)
V, voptimal state values (upper case only used in distributional RL)
vvector representation of state values
Varvariance
wparameters of value function estimate
X, xan event
Xevent space
zparameters for eligibility trace
Greek LettersDescription
αlearning rate
βreinforce strength in eligibility trace; distortion function in distributional RL
γdiscount factor
Δ, δTD error
εparameters for exploration
λdecay strength of eligibility trace
Π, πpolicy
πoptimal policy
πEexpert policy in imitation learning
θparameters for policy function estimates
ϑthreshold for value iteration
ρvisitation frequency; important sampling ratio in off-policy learning
ρvector representation of visitation frequency
τ, τsojourn time of SMDP
Ω, ωaccumulated probability in distribution RL; (lower case only) conditional probability for partially observable tasks
ΨGeneralized Advantage Estimate (GAE)
Other NotationsDescription
=dshare the same distribution
=a.e.equal almost everywhere
<, , , >compare numbers; element-wise comparison
, , , partial order of policy
absolute continuous
empty set
gradient
obey a distribution
||absolute value of a real number; element-wise absolute values of a vector or a matrix; the number of elements in a set
- - \ No newline at end of file diff --git a/en2023/notation_zh.html b/en2023/notation_zh.html deleted file mode 100644 index 304407b..0000000 --- a/en2023/notation_zh.html +++ /dev/null @@ -1,746 +0,0 @@ - - - - - -《强化学习:原理与Python实现》数学记号 - -
-

《强化学习:原理与Python实现》数学记号

一般规律

  • 大写是随机事件或随机变量,小写是确定性事件或确定性变量。
  • 衬线体(如Times New Roman字体,如X)是数值,非衬线体(如Open Sans字体,如X)则不一定是数值。
  • 粗体是向量(如w)或矩阵(如F)(矩阵用大写,即使是确定量也是如此)。
  • 花体(如X)是集合。
  • 哥特体(如 𝔣 )是映射。

数学记号表

下表列出常用记号。部分小节会有局部定义的记号,以该局部定义为准。

英语字母含义英文含义
A, a优势advantage
A, a动作action
A动作空间action space
B, b策略梯度算法中的基线;部分可观测任务中的数值化信念;(仅小写)额外量;异策学习时的行为策略baseline in policy gradient; numerical belief in partially observable tasks; (lower case only) bonus; behavior policy in off-policy learning
B, b部分可观测任务中的信念belief in partially observable tasks
𝔅π, 𝔟π策略π的Bellman期望算子(大写只用于值分布学习)Bellman expectation operator of policy π (upper case only used in distributional RL)
𝔅, 𝔟Bellman最优算子(大写只用于值分布学习)Bellman optimal operator (upper case only used in distributional RL)
B经验回放中抽取的一批经验;部分可观测任务中的信念空间a batch of transition generated by experience replay; belief space in partially observable tasks
B+部分可观测任务中带终止信念的信念空间belief space with terminal belief in partially observable tasks
c计数值;线性规划的目标系数counting; coefficients in linear programming
d, d度量metrics
dff散度f-divergence
dKLKL散度KL divergence
dJSJS散度JS divergence
dTV全变差total variation
Dt回合结束指示indicator of episode end
D经验集set of experience
e资格迹eligibility trace
E期望expectation
𝔣一般的映射a mapping
FFisher信息矩阵Fisher information matrix
G, g回报return
g梯度向量gradient vector
h动作偏好action preference
Hentropy
k迭代次数指标index of iteration
损失loss
p概率值,动力probability, dynamics
P转移矩阵transition matrix
o部分可观测环境的观测概率;渐近无穷小observation probability in partially observable tasks; infinitesimal in asymptotic notations
O, O~渐近无穷大infinite in asymptotic notations
O, o观测observation
Pr概率probability
Q, q动作价值action value
Qπ, qπ策略π的动作价值(大写只用于值分布学习)action value of policy π (upper case only used in distributional RL)
Q, q最优动作价值(大写只用于值分布学习)optimal action values (upper case only used in distributional RL)
q动作价值的向量表示vector representation of action values
R, r奖励reward
R奖励空间reward space
S, s状态state
S状态空间state space
S+带终止状态的状态空间state space with terminal state
T回合步数steps in an episode
T, T轨迹trajectory
𝔲部分可观测任务中的信念更新算子belief update operator in partially observable tasks
U, u用自益得到的回报估计随机变量;小写的u还表示置信上界TD target; (lower case only) upper bound
V, v状态价值state value
Vπ, vπ策略π的状态价值(大写只用于值分布学习)state value of the policy π (upper case only used in distributional RL)
V, v最优状态价值(大写只用于值分布学习)optimal state values (upper case only used in distributional RL)
v状态价值的向量表示vector representation of state values
Var方差variance
w价值估计参数parameters of value function estimate
X, x一般的事件an event
X一般的事件空间event space
z资格迹参数parameters for eligibility trace
希腊字母含义英文含义
α学习率learning rate
β资格迹算法中的强化强度;值分布学习中的扭曲函数reinforce strength in eligibility trace; distortion function in distributional RL
γ折扣因子discount factor
Δ, δ时序差分误差TD error
ε探索参数parameters for exploration
λ资格迹衰减强度decay strength of eligibility trace
Π, π策略policy
π最优策略optimal policy
πE模仿学习中的专家策略expert policy in imitation learning
θ策略估计参数parameters for policy function estimates
ϑ价值迭代终止阈值threshold for value iteration
ρ访问频次;异策算法中的重要性采样比率visitation frequency; important sampling ratio in off-policy learning
ρ访问频次的向量表示vector representation of visitation frequency
τ, τ半Markov决策过程中的逗留时间sojourn time of SMDP
Ω, ω值分布学习中的累积概率;(仅小写)部分可观测任务中的条件概率accumulated probability in distribution RL; (lower case only) conditional probability for partially observable tasks
Ψ扩展的优势估计Generalized Advantage Estimate (GAE)
其他符号含义英文含义
=d分布相同share the same distribution
=a.e.几乎处处相等equal almost everywhere
<, , , >普通数值比较;向量逐元素比较compare numbers; element-wise comparison
, , , 策略的偏序关系partial order of policy
绝对连续absolute continuous
空集empty set
梯度gradient
服从分布obey a distribution
||实数的绝对值;向量或矩阵的逐元素求绝对值;集合的元素个数absolute value of a real number; element-wise absolute values of a vector or a matrix; the number of elements in a set

 

- - \ No newline at end of file diff --git a/en2023/setup/setupmac_zh.md b/en2023/setup/setupmac_zh.md deleted file mode 100644 index 3642a35..0000000 --- a/en2023/setup/setupmac_zh.md +++ /dev/null @@ -1,162 +0,0 @@ -# 搭建开发环境 - -本文介绍如何在MacOS (含M芯片版MacBook)上搭建开发环境。 - -## 第1部分:最小安装 - -本部分介绍搭建最小环境的方法。完成本步后,你可以运行第1-5章、第13章、第16章代码。 - -#### 安装Anaconda 3 - -**步骤:** - -- 从https://www.anaconda.com/products/distribution 下载Anaconda 3安装包(选择MacOS Graphical版的安装包)。安装包名字像 `Anaconda3-2023.09-0-MacOSX-x86_64.pkg`(M芯片版安装包名字像`Anaconda3-2023.09-0-MacOSX-amd64.pkg`),大小约0.6 GB。 -- 双击安装包启动安装向导完成安装。需要安装在剩余空间大于13GB的硬盘上。(如果空间小于这个数,虽然也能完成Anaconda 3的安装,但是后续步骤的空间就不够了。13GB是后续所有步骤需要的空间。)安装过程中记下Anaconda的安装路径。默认路径为:`/opt/anaconda3`。后续操作会用到这个路径。 - -#### 新建conda环境 - -本步非必须,但是强烈推荐您执行本步骤。 - -**步骤:** - -- 运行“终端”,执行下列命令:(其中`py311`是conda环境名, 你也可以取其他名称) - ``` - conda create --name py311 python=3.11 - conda activate py311 - ``` -- 在新的conda目标环境中可以用下列命令安装jupyter: - ``` - conda install jupyter - ``` - -#### 安装Python扩展包:numpy、pandas等 - -**步骤:** - -- 在目标conda环境中(你可以在终端中用`conda activate py311`进入名为`py311`的conda环境)执行下列命令: - ``` - conda install numpy pandas scipy sympy matplotlib - ``` - -#### 安装`gym[classic_control]`、`gym[toy_text]`、 `gym[atari]` - -**步骤:** - -- 在目标conda环境中执行下列命令: - ``` - pip install --upgrade 'gym[classic_control,toy_text,atari,accept-rom-license,other]' - ``` - -#### 运行Jupyter Notebook - -**步骤:** - -- 确认Anaconda的安装路径。默认路径为:`/opt/anaconda3`。 -- 选择代码的根目录。比如,我可以选择`~/Documents/Anaconda`。(如果目录事先不存在,可以先创建它。) -- 改变目录为代码的根目录: - ``` - C: - cd C:%HOMEPATH%\Documents\Anaconda - ``` -- 运行下列代码(用到了conda环境名,例如`py311`): - ``` - /opt/anaconda3/envs/py311/bin/jupyter-notebook - ``` - -- 等待默认浏览器弹出。推荐您使用Chrome作为默认浏览器。 - -## 第2部分:安装TensorFlow和PyTorch - -本部分介绍TensorFlow和PyTorch的安装。书中第6-10章、第12章、第14章、第15章需要使用TensorFlow和PyTorch。安装需要基于第1部分已经安装好的环境。完成本部分后,你可以运行第1-9章、第13章和第16章的代码。 - -请在App Store里安装Xcode。 - -本书涉及TensorFlow或PyTorch的代码都提供了TensorFlow和PyTorch的1:1对照版本。你可以只学习其中一种,也可以两种都学习。如果您在纠结于学哪一种,那建议您两种都学。 - -本书代码只需要CPU版本的TensorFlow和PyTorch。当然您也可以用更快更强的GPU版本。 - -#### 在conda环境中安装TensorFlow - -**步骤:** - -- 安装TensorFlow(CPU版)和TensorFlow probability:在目标conda环境中执行下列命令 - ``` - pip install --upgrade tensorflow-macos tensorflow_probability - ``` - -#### 在conda环境中安装PyTorch - -**步骤:** - -- 安装PyTorch(CPU版):在目标conda环境中执行下列命令 - ``` - conda install pytorch cpuonly -c pytorch - ``` - -## 第3.1部分:安装`gym[box2d]` - -第10-11章代码需要用到`gym[box2d]`,这个部分安装`gym[box2d]`。如果您不想看这两章代码,可以略过此步,不影响其他部分。 - -该安装需要基于第2部分装好的环境。完成此步后可以运行第1-13章和第16章代码。 - -请从App Store里安装Xcode。 - -#### 安装SWIG - -**步骤:** - -- 在conda环境外执行下列命令(可以用`conda deactivate`退出conda环境): - ``` - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - ``` - (中国内地用户如果遇到网络链接困难,可以先去 `https://github.com/Homebrew/install`下载文件`install.sh`并执行它:`/bin/bash -c ./install.sh`。)然后为Homebrew添加路径: - ``` - echo '# Set PATH, MANPATH, etc., for Homebrew.' >> /Users/apple/.zprofile - echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/apple/.zprofile - eval "$(/opt/homebrew/bin/brew shellenv)" - ``` -- 用Homebrew安装SWIG: - ``` - brew install swig - ``` - - -#### 在conda环境中安装`gym[box2d]` - -**步骤:** - -- 在目标conda环境中执行下列命令: - ``` - pip install --upgrade 'gym[box2d]' - ``` - -## 第3.2部分:安装boardgame2 - -`boardgame2` 是第14章将开发的环境。第14章会介绍如何一步步开发这个环境。当然也可有开发好的现成版本,可以用下列步骤安装。如果您不想看这章代码,可以略过此步,不影响其他部分。 - -该安装需要基于第2部分装好的环境。 - -**步骤:** - -- 在目标conda环境中执行下列命令以安装`boardgame2`: - ``` - pip install --upgrade pybullet - ``` - -## 第3.3部分:安装PyBullet - -第15章代码需要PyBullet,本部分安装PyBullet。如果您不想看这章代码,可以略过此步,不影响其他部分。 - -由于PyBullet需要用到旧版的Gym,所以最好为PyBullet单独建一个环境,以免污染现有环境。 - -**步骤:** - -- 新建Anaconda环境。 - -- 在新Anaconda环境里安装Gym等。 - -- 在目标conda环境中执行下列命令: - ``` - pip install --upgrade pybullet - ``` - diff --git a/en2023/setup/setupwin_zh.md b/en2023/setup/setupwin_zh.md deleted file mode 100644 index a32639b..0000000 --- a/en2023/setup/setupwin_zh.md +++ /dev/null @@ -1,155 +0,0 @@ -# 搭建开发环境 - -本文介绍如何在Windows 10或11电脑上搭建开发环境。 - -## 第1部分:最小安装 - -本部分介绍搭建最小环境的方法。完成本步后,你可以运行第1-5章、第13章、第16章代码。 - -#### 安装Anaconda 3 - -**步骤:** - -- 从https://www.anaconda.com/products/distribution 下载Anaconda 3安装包(选择Windows版的安装包)。安装包名字像 `Anaconda3-2023.09-0-Windows-x86_64.exe`,大小约0.9GB。 -- 双击安装包启动安装向导完成安装。需要安装在剩余空间大于13GB的硬盘上。(如果空间小于这个数,虽然也能完成Anaconda 3的安装,但是后续步骤的空间就不够了。13GB是后续所有步骤(除了安装Visual Studio以外)需要的空间。)安装过程中记下Anaconda的安装路径。默认路径为:`C:%HOMEPATH%\anaconda3`。后续操作会用到这个路径。 - -#### 新建conda环境 - -本步非必须,但是强烈推荐您执行本步骤。 - -**步骤:** - -- 以管理员身份运行Anaconda Prompt,执行下列命令:(其中`py311`是conda环境名, 你也可以取其他名称) - ``` - conda create --name py311 python=3.11 - conda activate py311 - ``` - -#### 安装Python扩展包:numpy、pandas等 - -**步骤:** - -- 以管理员身份运行Anaconda Prompt,在目标conda环境中(你可以用`conda activate py311`进入名为`py311`的conda环境)执行下列命令: - ``` - conda install numpy pandas scipy sympy matplotlib - ``` - -#### 安装`gym[classic_control]`、`gym[toy_text]`、 `gym[atari]` - -**步骤:** - -- 以管理员身份运行Anaconda Prompt,在目标conda环境中执行下列命令: - ``` - pip install --upgrade gym[classic_control,toy_text,atari,accept-rom-license,other] - ``` - -#### 运行Jupyter Notebook - -**步骤:** - -- 确认Anaconda的安装路径。默认路径为:`C:%HOMEPATH%\anaconda3`。 -- 选择代码的根目录。比如,我可以选择`C:%HOMEPATH%\Documents\Anaconda`。 -- 打开命令提示符(不是Anaconda Prompt),改变目录为代码的根目录: - ``` - C: - cd C:%HOMEPATH%\Documents\Anaconda - ``` -- 运行下列代码(用到了conda环境名,例如`py311`): - ``` - C:%HOMEPATH%\anaconda3\python.exe C:%HOMEPATH%\anaconda3\cwp.py C:%HOMEPATH%\anaconda3\envs\py311 C:%HOMEPATH%\anaconda3\envs\py311\python.exe C:%HOMEPATH%\anaconda3\Scripts\jupyter-notebook-script.py C:%HOMEPATH%\Documents\Anaconda - ``` - -- 等待默认浏览器弹出。推荐您使用Chrome作为默认浏览器。 - -## 第2部分:安装TensorFlow和PyTorch - -本部分介绍TensorFlow和PyTorch的安装。书中第6-10章、第12章、第14章、第15章需要使用TensorFlow和PyTorch。安装需要基于第1部分已经安装好的环境。完成本部分后,你可以运行第1-9章、第13章和第16章的代码。 - -#### 安装Visual Studio - -TensorFlow和PyTorch都需要Visual Studio运行时。我们并不需要Visual Studio的图形界面,我们只需要运行时。 - -Visual Studio社区版是免费的,而且够用。装社区版就好了。 - -如果您的电脑上有老版本的Visual Studio,推荐先卸载老版本然后装最新版。 - -**步骤:** - -- 访问`https://visualstudio.microsoft.com/downloads/`下载Visual Studio社区版安装包。 -- 双击运行安装想到完成安装。具体安装什么组件不太重要,因为我们需要的核心功能肯定是会安装的。在C盘需要8GB的空间。如果你还想装别的组件,可以选择其他盘,选的组件越多占用空间越多,比如15GB。 - -#### 在conda环境中安装TensorFlow和PyTorch - -本书涉及TensorFlow或PyTorch的代码都提供了TensorFlow和PyTorch的1:1对照版本。你可以只学习其中一种,也可以两种都学习。如果您在纠结于学哪一种,那建议您两种都学。 - -本书代码只需要CPU版本的TensorFlow和PyTorch。当然您也可以用更快更强的GPU版本。 - -请在运行下列步骤前确保最新版本的Visual Studio已经成功安装。否则,看似也可以装好TensorFlow和PyTorch,实际上是不能用的。 - -**步骤:**(CPU版) - -- 安装TensorFlow和TensorFlow probability:以管理员身份运行Anaconda Prompt,在目标conda环境中执行下列命令 - ``` - pip install --upgrade tensorflow tensorflow_probability - ``` - -- 安装PyTorch:以管理员身份运行Anaconda Prompt,在目标conda环境中执行下列命令 - ``` - conda install pytorch cpuonly -c pytorch - ``` - -## 第3.1部分:安装`gym[box2d]` - -第10-11章代码需要用到`gym[box2d]`,这个部分安装`gym[box2d]`。如果您不想看这两章代码,可以略过此步,不影响其他部分。 - -该安装需要基于第2部分装好的环境。完成此步后可以运行第1-13章和第16章代码。完成了全部的第3.1-3.3部分后可以运行所有章节的代码。 - -#### 安装SWIG - -**步骤:** - -- 访问`http://www.swig.org/download.html`下载SWIG安装包。安装包的URL可能为 - http://prdownloads.sourceforge.net/swig/swigwin-4.1.1.zip,大小约11MB。 -- 将安装包解压到永久位置,例如`%PROGRAMFILE%\swig` (该位置需要管理员权限)。 -- 将解压后得到的文件中`swig.exe`所在的目录(如`%PROGRAMFILE%\swig\swigwin-4.1.1`)加到系统环境变量`PATH`中。(添加环境变量的方法是:用Windows+R打开“运行”窗口,输入`sysdm.cpl`并回车打开“系统属性”。然后在“高级”选项卡下找到“环境变量”,找到`PATH`并设置。 -- 重启电脑确保环境变量生效。 - -#### 在conda环境中安装`gym[box2d]` - -**步骤:** - -- 以管理员身份运行Anaconda Prompt,在目标conda环境中执行下列命令: - ``` - pip install --upgrade gym[box2d] - ``` - -## 第3.2部分:安装boardgame2 - -`boardgame2` 是第14章将开发的环境。第14章会介绍如何一步步开发这个环境。当然也可有开发好的现成版本,可以用下列步骤安装。如果您不想看这章代码,可以略过此步,不影响其他部分。 - -该安装需要基于第2部分装好的环境。 - -**步骤:** - -- 以管理员身份运行Anaconda Prompt,在目标conda环境中执行下列命令以安装`boardgame2`: - ``` - pip install --upgrade pybullet - ``` - -## 第3.3部分:安装PyBullet - -第15章代码需要PyBullet,本部分安装PyBullet。如果您不想看这章代码,可以略过此步,不影响其他部分。 - -由于PyBullet需要用到旧版的Gym,所以最好为PyBullet单独建一个环境,以免污染现有环境。 - -**步骤:** - -- 新建Anaconda环境。 - -- 在新Anaconda环境里安装Gym等。 - -- 以管理员身份运行Anaconda Prompt,在目标conda环境中执行下列命令: - ``` - pip install --upgrade pybullet - ``` - diff --git a/zh2023/README.md b/zh2023/README.md index 7a4ca21..90ee212 100644 --- a/zh2023/README.md +++ b/zh2023/README.md @@ -1,18 +1,20 @@ # 强化学习:原理与Python实战 -**全球第一本配套 TensorFlow 2 和 PyTorch 1/2 对照代码的强化学习教程书** +**全球首本配套 TensorFlow 2 和 PyTorch 1/2 对照代码的强化学习教程书** + +**剖析 ChatGPT 关键技术 PPO 和 RLHF ** ![Book](https://zhiqingxiao.github.io/images/book/rlzh2023.jpg) **配套资源** - 习题参考答案:[链接](https://zhiqingxiao.github.io/rl-book/zh2023/choice.html) -- 开发环境搭建:[链接](https://github.com/ZhiqingXiao/rl-book/blob/master/zh2023/setup/setupwin.md) -- 数学字母表:[链接](https://zhiqingxiao.github.io/rl-book/zh2023/notation.html) +- 开发环境搭建:[Windows](https://github.com/ZhiqingXiao/rl-book/blob/master/zh2023/setupwin.md) [macOS](https://github.com/ZhiqingXiao/rl-book/blob/master/zh2023/setupmac.md) +- 数学字母表:[链接](https://github.com/ZhiqingXiao/rl-book/blob/master/zh2023/notation.md) - 缩略语表:[链接](https://github.com/zhiqingxiao/rl-book/blob/master/zh2023/abbreviation.md) - Gym源码解读:[链接](https://github.com/ZhiqingXiao/rl-book/blob/master/zh2023/gym.md) - 参考文献:[链接](https://github.com/zhiqingxiao/rl-book/blob/master/zh2023/bibliography.md) -- 勘误更新:[链接](https://github.com/zhiqingxiao/rl-book/blob/master/zh2023/errata/202307.md) +- 勘误更新:[链接](https://github.com/zhiqingxiao/rl-book/blob/master/zh2023/errata.md) **代码** diff --git a/zh2023/errata/202307.md b/zh2023/errata.md similarity index 97% rename from zh2023/errata/202307.md rename to zh2023/errata.md index bde2a24..6532c2b 100644 --- a/zh2023/errata/202307.md +++ b/zh2023/errata.md @@ -30,6 +30,7 @@ $\gamma+\gamma\sum\limits_ {\tau=1}^{+\infty}{\gamma^\tau R_ {\left(t+1\right)+\ $\gamma+\gamma\sum\limits_ {\tau=0}^{+\infty}{\gamma^\tau R_ {\left(t+1\right)+\tau+1}}$ + ## 第37页最后1行和第38页前3行(共4处) $\sum\limits_ {t=1}^{+\infty}$ @@ -56,6 +57,7 @@ $\rho\left(\mathsfit{s}'\right)=\sum\limits_ {t=0}^{+\infty}{\sum\limits_ {\math ## 第41页第1组通栏数学表达式倒数第3行 + #### 它和倒数第4行重复了,删去重复的行。 @@ -78,6 +80,7 @@ $\mathbfit{y}\ge0$ $\mathbfit{y}\ge\mathbf{0}$ + ## 第62页第2组通栏数学表达式 $\pi\left(\mathsfit{a}\middle\vert\mathsfit{s}'\right)\left(q'\left(\mathsfit{s},\mathsfit{a}\right)-q''\left(\mathsfit{s},\mathsfit{a}\right)\right)$ @@ -86,6 +89,7 @@ $\pi\left(\mathsfit{a}\middle\vert\mathsfit{s}'\right)\left(q'\left(\mathsfit{s} $\pi\left(\mathsfit{a}'\middle\vert\mathsfit{s}'\right)\left(q'\left(\mathsfit{s}',\mathsfit{a}'\right)-q''\left(\mathsfit{s}',\mathsfit{a}'\right)\right)$ + ## 第61页最后1组通栏数学表达式第1行 $\max\limits_ {\mathsfit{s}'}\left|v'\left(\mathsfit{s}'\right)-v''\left(\mathsfit{s}'\right)\right|$ @@ -94,6 +98,7 @@ $\max\limits_ {\mathsfit{s}'}\left|v'\left(\mathsfit{s}'\right)-v''\left(\mathsf $\max\limits_ {\mathsfit{s}''}\left|v'\left(\mathsfit{s}''\right)-v''\left(\mathsfit{s}''\right)\right|$ + ## 第62页第3组通栏数学表达式 $\le\gamma\sum\limits_ {\mathsfit{s}'}p\left(\mathsfit{s}'\middle\vert\mathsfit{s},\mathsfit{a}\right)\sum\limits_ {\mathsfit{a}'}\pi\left(\mathsfit{a}\middle\vert\mathsfit{s}'\right)\max\limits_ {\mathsfit{s}',\mathsfit{a}'}\left|q'\left(\mathsfit{s},\mathsfit{a}\right)-q''\left(\mathsfit{s},\mathsfit{a}\right)\right|$ @@ -108,6 +113,7 @@ $=\gamma\sum\limits_ {\mathsfit{s}'}p\left(\mathsfit{s}'\middle\vert\mathsfit{s} ## 第62页最后一组数学表达式第3行和第4行(共2处) + $p\left(\mathsfit{s}'\middle\vert\mathsfit{s},\mathsfit{a}'\right)$ #### 改为 @@ -116,25 +122,28 @@ $p\left(\mathsfit{s}'\middle\vert\mathsfit{s},\mathsfit{a}\right)$ ## 第66页算法3.3第1.2步 + $\pi\left(\mathsfit{s}\right)=\arg\max_ \mathsfit{\mathsfit{a}}{q\left(\mathsfit{s},\mathsfit{a}\right)}$ -#### 改成 +#### 改为 $\pi\left(\mathsfit{s}\right)\leftarrow\arg\max_ \mathsfit{\mathsfit{a}}{q\left(\mathsfit{s},\mathsfit{a}\right)}$ ## 第67页算法3.4第2.2步 + $\mathsfit{a}'=\arg\max_ \mathsfit{\mathsfit{a}}{q\left(\mathsfit{s},\mathsfit{a}\right)}$ -#### 改成 +#### 改为 $\mathsfit{a}'\leftarrow\arg\max_ \mathsfit{\mathsfit{a}}{q\left(\mathsfit{s},\mathsfit{a}\right)}$ ## 第73页正文第2行 + $\pi\left(\mathsfit{s},\mathsfit{a}\right)=\frac{1}{\left|\mathcal{A}\right|}$ -#### 改成 +#### 改为 $\pi\left(\mathsfit{a}\middle\vert\mathsfit{s}\right)=\frac{1}{\left|\mathcal{A}\right|}$ @@ -149,6 +158,7 @@ $\alpha_ k\mathrm{E}\left[\left|F\left(X_ {k-1}\right)\right|^2\middle\vert{X}_ ## 第89页算法4.8第2.1步 + 策略 $\pi$ 来生成 #### 改为 @@ -157,6 +167,7 @@ $\alpha_ k\mathrm{E}\left[\left|F\left(X_ {k-1}\right)\right|^2\middle\vert{X}_ ## 第91页第1个通栏数学表达式第2行 + $p\left(\mathsfit{S}_ T,R_ T\middle\vert\mathsfit{S}_ {T-1},A_ {T-1}\right)$ #### 改为 @@ -165,6 +176,7 @@ $p\left(\mathsfit{S}_ T,R_ T\middle\vert\mathsfit{S}_ {T-1},\mathsfit{A}_ {T-1}\ ## 第113页算法5.4第2.2.3步 + $q\left(\mathsfit{S},\mathsfit{A}\right)\leftarrow q\left(\mathsfit{S},\mathsfit{A}\right)+\alpha\left[U-q\left(\mathsfit{S},\mathsfit{A}\right)\right]$ #### 改为 @@ -173,6 +185,7 @@ $q\left(\mathsfit{S}_ t,\mathsfit{A}_ t\right)\leftarrow q\left(\mathsfit{S}_ t, ## 第113页算法5.5第2.2.2步 + 更新 $v\left(\mathsfit{S}\right)$ 以减小 $\left[U-v\left(\mathsfit{S}\right)\right]^2$ . #### 改为 @@ -181,6 +194,7 @@ $q\left(\mathsfit{S}_ t,\mathsfit{A}_ t\right)\leftarrow q\left(\mathsfit{S}_ t, ## 第115页正文第一段 + 它也仅仅是在多步时序差分动作价值估计算法的基础上加入了策略改进的步骤。 #### 改为 @@ -189,6 +203,7 @@ $q\left(\mathsfit{S}_ t,\mathsfit{A}_ t\right)\leftarrow q\left(\mathsfit{S}_ t, ## 第117页算法5-10第2.2.3步 + 需要根据 $q\left(\mathsfit{S}\right)$ 修改 $\pi\left(\cdot\middle\vert\mathsfit{S}\right)$ . #### 改为 @@ -197,6 +212,7 @@ $q\left(\mathsfit{S}_ t,\mathsfit{A}_ t\right)\leftarrow q\left(\mathsfit{S}_ t, ## 第117页算法5-10第2.2.4步第2行 + $q\left(\mathsfit{S}_ {t+n}\middle\vert\cdot\right)$ #### 改为 @@ -223,6 +239,7 @@ $\gamma^2\mathrm{E}_ {\pi\left(\boldsymbol\theta\right)}\left[\nabla{v_ {\pi\lef ## 第271页最后一组通栏数学表达式最后一行 + $v_ \pi^\left(\text{H}\right)\left(\mathsfit{s},\mathsfit{a}\right)$ #### 改为 @@ -239,6 +256,7 @@ $\pi$ ## 第276页最后一组通栏数学表达式(两处) + $\mathrm{E}_ {\pi\left(\theta\right)}$ #### 改为 @@ -247,6 +265,7 @@ $\mathrm{E}_ {\pi\left(\boldsymbol\theta\right)}$ ## 第277页第2组通栏数学表达式最后一行 + $\mathrm{E}_ \pi$ #### 改为 @@ -273,6 +292,7 @@ $\nabla\left(\alpha^\left(\mathrm{H}\right)\mathrm{H}\left[\pi\left(\cdot\middle $\mathrm{E}_ {\pi\left(\boldsymbol\theta\right)}\left[\sum\limits_ \mathsfit{a}q_ {\pi\left(\boldsymbol\theta\right)}^\left(\mathrm{H}\right)\left(\mathsfit{S}_ t,\mathsfit{a}\right)\nabla\pi\left(\mathsfit{a}\middle\vert{\mathsfit{S}_ t};\boldsymbol\theta\right)+\nabla\left(\alpha^\left(\mathrm{H}\right)\mathrm{H}\left[\pi\left(\cdot\middle\vert\mathsfit{S}_ t;\boldsymbol\theta\right)\right]\right)\right]$ + ## 第279页第6行 $\mathrm{E}_ {\pi\left(\boldsymbol\theta\right)}\left[\sum\limits_ \mathsfit{a}q_ {\pi\left(\boldsymbol\theta\right)}^\left(\mathrm{H}\right)\left(\mathsfit{S}_ t,\mathsfit{a}\right)\nabla\pi\left(\mathsfit{a}\middle\vert{\mathsfit{S}_ t};\boldsymbol\theta\right)\right]+\nabla\left(\alpha^\left(\mathrm{H}\right)\mathrm{H}\left[\pi\left(\cdot\middle\vert\mathsfit{S}_ t\right)\right]\right)$ @@ -283,12 +303,14 @@ $\mathrm{E}_ {\pi\left(\boldsymbol\theta\right)}\left[\sum\limits_ \mathsfit{a}q ## 第280页第1个通栏数学表达式最后1行 + $\mathrm{E}_ {\pi\left(\boldsymbol\theta\right)}\left[\left(q_ {\pi\left(\boldsymbol\theta\right)}^{\left(柔\right)}\left(\mathsfit{s},\mathsfit{a}\right)-\alpha^{\left(\text{H}\right)}\left(\ln\pi\left(\mathsfit{a}\middle\vert\mathsfit{s};\boldsymbol\theta\right)+1\right)\right)\nabla\ln\pi\left(\mathsfit{a}\middle\vert\mathsfit{s};\boldsymbol\theta\right)\right]$ #### 改为 $\mathrm{E}_ {\mathsfit{A}\sim\pi\left(\cdot\middle\vert\mathsfit{s};\boldsymbol\theta\right)}\left[\left(q_ {\pi\left(\boldsymbol\theta\right)}^{\left(柔\right)}\left(\mathsfit{s},\mathsfit{A}\right)-\alpha^{\left(\text{H}\right)}\left(\ln\pi\left(\mathsfit{A}\middle\vert\mathsfit{s};\boldsymbol\theta\right)+1\right)\right)\nabla\ln\pi\left(\mathsfit{A}\middle\vert\mathsfit{s};\boldsymbol\theta\right)\right]$ + ## 第284页算法10-2第2.2.2.2步,第285页算法10-3第2.2.2.3步(共2处) $U_ t^{\left(q\right)}\leftarrow R_ {t+1}+$ @@ -297,6 +319,7 @@ $U_ t^{\left(q\right)}\leftarrow R_ {t+1}+$ $U^{\left(q\right)}\leftarrow R+$ + ## 第284页算法10-2第2.2.2.3步,第285页算法10-3第2.2.2.4步(共2处) $U_ t^{\left(q\right)}$ @@ -305,6 +328,7 @@ $U_ t^{\left(q\right)}$ $U^{\left(q\right)}$ + ## 第284页算法10-2第2.2.2.2步和第2.2.2.3步,第285页算法10-3第2.2.2.3步,第286页算法10-3第2.2.2.4步(共4处) $U_ t^{\left(v\right)}$ @@ -443,6 +467,15 @@ $c_ \kappa\left(\mathsfit{a}\right)\ge\underline{c}_ \kappa\left(\mathsfit{a}\ri $c_ \kappa\left(\mathsfit{a}\right)>\underline{c}_ \kappa\left(\mathsfit{a}\right)$ +## 第367页算法13-3第1.1步最后一行 + +$\text{normal}\left(\mu\left(\mathsfit{a}\right),\sigma\left(\mathsfit{a}\right)\right)$ + +#### 改为 + +$\text{normal}\left(\mu\left(\mathsfit{a}\right),\sigma^2\left(\mathsfit{a}\right)\right)$ + + ## 第368页算法13-4第2.3步 动作 $A$ @@ -480,6 +513,7 @@ $\Pr\left[\left|\sum\limits_ {\mathsfit{s'}}{p_ {\kappa,t}\left(\mathsfit{s'}\mi $\Pr\left[\left|\sum\limits_ {\mathsfit{s'}}{p_ {\kappa,t}\left(\mathsfit{s'}\middle\vert\mathsfit{s},\mathsfit{a}\right)v_ \ast\left(\mathsfit{s'}\right)}-\sum\limits_ {\mathsfit{s'}}{p\left(\mathsfit{s'}\middle\vert\mathsfit{s},\mathsfit{a}\right)v_ \ast\left(\mathsfit{s'}\right)}\right| \ge{g_ \max}\sqrt{\frac{\ln 2\left|\mathcal{S}\right|\left|\mathcal{A}\right|{k^2}t_ \max^2}{2c_ {\kappa,t}\left(\mathsfit{s},\mathsfit{a}\right)}}\right]$ + ## 第372页倒数第4行 $\sqrt{\ln 2\left|\mathcal{S}\right|\left|\mathcal{A}\right|{k^2}t_ \max^2}\le 2\sqrt{\ln\left|\mathcal{S}\right|\left|\mathcal{A}\right|{k^2}t_ \max^2}$ @@ -524,7 +558,7 @@ $\quad=b_ {\kappa,t}\left(\mathsfit{S}_ {\kappa,t},\mathsfit{A}_ {\kappa,t}\righ $\quad\quad\gamma\sum\limits_ {\mathsfit{s'}}{p\left(\mathsfit{s'}\middle\vert\mathsfit{S}_ {\kappa,t},\mathsfit{A}_ {\kappa,t}\right)\left(u_ {\kappa,t+1}^\left(v\right)\left(\mathsfit{s'}\right)-v_ {\pi_ \kappa}\left(\mathsfit{s'}\right)\right)}$ -## 第362页本章要点第2点 +## 第382页本章要点第2点 Gaussien @@ -533,6 +567,15 @@ Gaussien Gaussian +## 392页正文第4行 + +$\left(R-r\left(\mathsfit{s},\mathsfit{a}\right)\right)^2$ + +#### 改为 + +$\left(R-r\left(\mathsfit{S},\mathsfit{A}\right)\right)^2$ + + ## 第424页最后一行 $\ge\mathop\sup\limits_ {\psi:\mathcal{X}\to\mathbb{R}}\sum\limits_ \mathsfit{x}{q\left(\mathsfit{x}\right)\left(\psi\left(\mathsfit{x}\right)\frac{p\left(\mathsfit{x}\right)}{q\left(\mathsfit{x}\right)}-f^\ast\left(\psi\left(\mathsfit{x}\right)\right)\right)}$ @@ -542,6 +585,15 @@ $\ge\mathop\sup\limits_ {\psi:\mathcal{X}\to\mathbb{R}}\sum\limits_ \mathsfit{x} $=\mathop\sup\limits_ {\psi:\mathcal{X}\to\mathbb{R}}\sum\limits_ \mathsfit{x}{q\left(\mathsfit{x}\right)\left(\psi\left(\mathsfit{x}\right)\frac{p\left(\mathsfit{x}\right)}{q\left(\mathsfit{x}\right)}-f^\ast\left(\psi\left(\mathsfit{x}\right)\right)\right)}$ +## 第425页正文倒数第2个通栏数学表达式最后一行 + +$d_ \text{TV}\left(\rho_ {\pi'}\left(\cdot,\cdot\right)\middle\|\rho_ {\pi'}\left(\cdot,\cdot\right)\right)$ + +#### 改为 + +$d_ \text{TV}\left(\rho_ {\pi'}\left(\cdot,\cdot\right)\middle\|\rho_ {\pi''}\left(\cdot,\cdot\right)\right)$ + + ## 第427页第5行 $d_ \rm{TV}\left(\rho_ {\pi'}\left(\cdot,\cdot\right)\middle\|\rho_ {\pi''}\left(\cdot,\cdot\right)\right)\le\frac{\gamma}{1-\gamma}\mathrm{E}_ {\mathsfit{S}\sim\rho_ {\pi''}}\left[d_ \mathrm{TV}\left(\pi'\left(\cdot\middle\vert\mathsfit{S}\right)\middle\|\pi''\left(\cdot\middle\vert\mathsfit{S}\right)\right)\right]$ diff --git a/zh2023/notation.html b/zh2023/notation.html deleted file mode 100644 index a8db2cf..0000000 --- a/zh2023/notation.html +++ /dev/null @@ -1,746 +0,0 @@ - - - - - -《强化学习:原理与Python实战》数学记号 - -
-

《强化学习:原理与Python实战》数学记号

一般规律

  • 大写是随机事件或随机变量,小写是确定性事件或确定性变量。
  • 衬线体(如X)是数值,非衬线体(如X)则不一定是数值。为概率计算统计量的算子(包括EPrVarH)不斜体。
  • 粗体是向量(如w)或矩阵(如F)(矩阵用大写,即使是确定量也是如此)。
  • 花体(如X)是集合。
  • 哥特体(如 f )是映射。

数学记号表

下表列出常用记号。部分小节会有局部定义的记号,以该局部定义为准。

英语字母含义英文含义
A, a优势advantage
A, a动作action
A动作空间action space
B, b策略梯度算法中的基线;部分可观测任务中的数值化信念;(仅小写)额外量;异策学习时的行为策略baseline in policy gradient; numerical belief in partially observable tasks; (lower case only) bonus; behavior policy in off-policy learning
B, b部分可观测任务中的信念belief in partially observable tasks
Bπ, bπ策略π的Bellman期望算子(大写只用于值分布学习)Bellman expectation operator of policy π (upper case only used in distributional RL)
B, bBellman最优算子(大写只用于值分布学习)Bellman optimal operator (upper case only used in distributional RL)
B经验回放中抽取的一批经验;部分可观测任务中的信念空间a batch of transition generated by experience replay; belief space in partially observable tasks
B+部分可观测任务中带终止信念的信念空间belief space with terminal belief in partially observable tasks
c计数值;线性规划的目标系数counting; coefficients in linear programming
d, d度量metrics
dff散度f-divergence
dKLKL散度KL divergence
dJSJS散度JS divergence
dTV全变差total variation
D回合结束指示indicator of episode end
D经验集set of experience
e资格迹eligibility trace
e自然对数the constant e (2.72)
E期望expectation
f一般的映射a mapping
FFisher信息矩阵Fisher information matrix
G, g回报return
g梯度向量gradient vector
h动作偏好action preference
Hentropy
k迭代次数指标index of iteration
损失loss
p概率值,动力probability, dynamics
P转移矩阵transition matrix
o部分可观测环境的观测概率;渐近无穷小observation probability in partially observable tasks; infinitesimal in asymptotic notations
O, O~渐近无穷大infinite in asymptotic notations
O, o观测observation
Pr概率probability
Q, q动作价值action value
Qπ, qπ策略π的动作价值(大写只用于值分布学习)action value of policy π (upper case only used in distributional RL)
Q, q最优动作价值(大写只用于值分布学习)optimal action values (upper case only used in distributional RL)
q动作价值的向量表示vector representation of action values
R, r奖励reward
R奖励空间reward space
S, s状态state
S状态空间state space
S+带终止状态的状态空间state space with terminal state
T回合步数steps in an episode
T, t轨迹trajectory
u部分可观测任务中的信念更新算子belief update operator in partially observable tasks
U, u用自益得到的回报估计随机变量;小写的u还表示置信上界TD target; (lower case only) upper bound
V, v状态价值state value
Vπ, vπ策略π的状态价值(大写只用于值分布学习)state value of the policy π (upper case only used in distributional RL)
V, v最优状态价值(大写只用于值分布学习)optimal state values (upper case only used in distributional RL)
v状态价值的向量表示vector representation of state values
Var方差variance
w价值估计参数parameters of value function estimate
X, x一般的事件an event
X一般的事件空间event space
z资格迹参数parameters for eligibility trace
希腊字母含义英文含义
α学习率learning rate
β资格迹算法中的强化强度;值分布学习中的扭曲函数reinforce strength in eligibility trace; distortion function in distributional RL
γ折扣因子discount factor
Δ, δ时序差分误差TD error
ε探索参数parameters for exploration
λ资格迹衰减强度decay strength of eligibility trace
Π, π策略policy
π最优策略optimal policy
π圆周率the constant π (3.14)
θ策略估计参数parameters for policy function estimates
ϑ价值迭代终止阈值threshold for value iteration
ρ访问频次;异策算法中的重要性采样比率visitation frequency; important sampling ratio in off-policy learning
ρ访问频次的向量表示vector representation of visitation frequency
τ, τ半Markov决策过程中的逗留时间sojourn time of SMDP
Ω, ω值分布学习中的累积概率;(仅小写)部分可观测任务中的条件概率accumulated probability in distribution RL; (lower case only) conditional probability for partially observable tasks
Ψ扩展的优势估计Generalized Advantage Estimate (GAE)
其他符号含义英文含义
=d分布相同share the same distribution
=几乎处处几乎处处相等equal almost everywhere
<, , , >普通数值比较;向量逐元素比较compare numbers; element-wise comparison
, , , 策略的偏序关系partial order of policy
绝对连续absolute continuous
空集empty set
梯度gradient
服从分布obey a distribution
||实数的绝对值;向量或矩阵的逐元素求绝对值;集合的元素个数absolute value of a real number; element-wise absolute values of a vector or a matrix; the number of elements in a set

 

- - \ No newline at end of file diff --git a/zh2023/setup/setupmac.md b/zh2023/setup/setupmac.md index 337f497..3642a35 100644 --- a/zh2023/setup/setupmac.md +++ b/zh2023/setup/setupmac.md @@ -10,8 +10,8 @@ **步骤:** -- 从https://www.anaconda.com/products/distribution 下载Anaconda 3安装包(选择MacOS Graphical版的安装包)。安装包名字像 `Anaconda3-2023.07-2-MacOSX-x86_64.pkg`(M芯片版安装包名字像`Anaconda3-2023.07-2-MacOSX-amd64.pkg`),大小约0.9 GB(Mx芯片版约0.9 GB)。 -- 双击安装包启动安装向导完成安装。需要安装在剩余空间大于13 GB的硬盘上。(如果空间小于这个数,虽然也能完成Anaconda 3的安装,但是后续步骤的空间就不够了。13GB是后续所有步骤需要的空间。)安装过程中记下Anaconda的安装路径。默认路径为:`/opt/anaconda3`。后续操作会用到这个路径。 +- 从https://www.anaconda.com/products/distribution 下载Anaconda 3安装包(选择MacOS Graphical版的安装包)。安装包名字像 `Anaconda3-2023.09-0-MacOSX-x86_64.pkg`(M芯片版安装包名字像`Anaconda3-2023.09-0-MacOSX-amd64.pkg`),大小约0.6 GB。 +- 双击安装包启动安装向导完成安装。需要安装在剩余空间大于13GB的硬盘上。(如果空间小于这个数,虽然也能完成Anaconda 3的安装,但是后续步骤的空间就不够了。13GB是后续所有步骤需要的空间。)安装过程中记下Anaconda的安装路径。默认路径为:`/opt/anaconda3`。后续操作会用到这个路径。 #### 新建conda环境 @@ -97,7 +97,7 @@ 第10-11章代码需要用到`gym[box2d]`,这个部分安装`gym[box2d]`。如果您不想看这两章代码,可以略过此步,不影响其他部分。 -该安装需要基于第2部分装好的环境。完成此步后可以运行第1-13章和第16章代码。完成了全部的第3.1-3.3部分后可以运行所有章节的代码。 +该安装需要基于第2部分装好的环境。完成此步后可以运行第1-13章和第16章代码。 请从App Store里安装Xcode。 @@ -147,10 +147,14 @@ 第15章代码需要PyBullet,本部分安装PyBullet。如果您不想看这章代码,可以略过此步,不影响其他部分。 -本步骤可基于第2部分安装好的环境。完成此步后可以运行第1-9章、第12-13章、第15-16章代码。完成了全部的第3.1-3.3部分后可以运行所有章节的代码。 +由于PyBullet需要用到旧版的Gym,所以最好为PyBullet单独建一个环境,以免污染现有环境。 **步骤:** +- 新建Anaconda环境。 + +- 在新Anaconda环境里安装Gym等。 + - 在目标conda环境中执行下列命令: ``` pip install --upgrade pybullet diff --git a/zh2023/setup/setupwin.md b/zh2023/setup/setupwin.md index 4c371a1..a32639b 100644 --- a/zh2023/setup/setupwin.md +++ b/zh2023/setup/setupwin.md @@ -10,7 +10,7 @@ **步骤:** -- 从https://www.anaconda.com/products/distribution 下载Anaconda 3安装包(选择Windows版的安装包)。安装包名字像 `Anaconda3-2023.07-2-Windows-x86_64.exe`,大小约0.9GB。 +- 从https://www.anaconda.com/products/distribution 下载Anaconda 3安装包(选择Windows版的安装包)。安装包名字像 `Anaconda3-2023.09-0-Windows-x86_64.exe`,大小约0.9GB。 - 双击安装包启动安装向导完成安装。需要安装在剩余空间大于13GB的硬盘上。(如果空间小于这个数,虽然也能完成Anaconda 3的安装,但是后续步骤的空间就不够了。13GB是后续所有步骤(除了安装Visual Studio以外)需要的空间。)安装过程中记下Anaconda的安装路径。默认路径为:`C:%HOMEPATH%\anaconda3`。后续操作会用到这个路径。 #### 新建conda环境 @@ -140,10 +140,14 @@ Visual Studio社区版是免费的,而且够用。装社区版就好了。 第15章代码需要PyBullet,本部分安装PyBullet。如果您不想看这章代码,可以略过此步,不影响其他部分。 -本步骤可基于第2部分安装好的环境。完成此步后可以运行第1-9章、第12-13章、第15-16章代码。完成了全部的第3.1-3.3部分后可以运行所有章节的代码。 +由于PyBullet需要用到旧版的Gym,所以最好为PyBullet单独建一个环境,以免污染现有环境。 **步骤:** +- 新建Anaconda环境。 + +- 在新Anaconda环境里安装Gym等。 + - 以管理员身份运行Anaconda Prompt,在目标conda环境中执行下列命令: ``` pip install --upgrade pybullet