如何使用勘误?首先找到你的书的印次,接下来对着下表索引印次,该印次之后所有的勘误都是你的书中所要注意的勘误,印次前的所有勘误在当印次和之后印次均已印刷修正。为方便读者,所有修订内容都列举在此。其中部分修订是为了更便于读者理解,并非原文有误。
-
135页,第一段1~2行:我们来看一下 PPO1 算法,即近端策略优化惩罚算法。它先初始化一个策略的参数
$\theta^{0}$ 。在每一个迭代中 → 我们先看一下近端策略优化惩罚算法,其先初始化一个策略的参数$\theta^{0}$ ,在每一个迭代中 -
135页,第二段第2行:这里会遇到一个问题就,即
$\beta$ 要设置为多少?→ 这里会有一个问题:$\beta$ 要设置为多少。 -
135页,倒数第一段:如果我们觉得计算 KL 散度很复杂,那么还有一个 PPO2 算法,PPO2 即近端策略优化裁剪算法。→ 如果我们觉得计算 KL 散度很复杂,可以使用近端策略优化裁剪算法。
-
136页,式(5.19) 改为:
-
封面(后)推荐辞:李宏毅老师职称改为:台湾大学教授
-
推荐辞:李宏毅老师职称改为:台湾大学教授
-
主要符号表在
$r$ 后面添加 4 行:-
$\mathcal{S}$ 所有非终止状态的集合 -
$\mathcal{S}^{+}$ 所有状态的集合 -
$\mathcal{A}(s)$ 在状态$s$ 可执行动作的集合 -
$\mathcal{R}$ 所有可能奖励的集合
-
-
前勒口作者简介:
- 王琦:
- 主要研究方向为深度学习、数据挖掘 → 主要研究方向为强化学习、计算机视觉
- 王琦:
-
36页,式(2.4) 改为:
- 36页,式(2.4) 以下部分改为:其中,$T$ 是最终时刻。对于持续性任务(比如长期运行的机器人),$T=\infty$。如果使用式 (2.4) 的定义,当每个时刻获得的都是正奖励时,回报会趋于无穷。因此,我们需要引入折扣回报(discounted return):
其中,$G_t$ 是之前定义的折扣回报。我们对
-
96页,
- 图3.33(a)、图3.33(b)的第2行:
-
$s \in S^{+}, a \in A(s)$ →$s \in \mathcal{S}^{+}, a \in \mathcal{A}(s)$ - 终点 → 终止状态
-
- 图3.33(a)、图3.33(b)的第7行:观测 → 得到
- 图3.33(a)、图3.33(b)的第2行:
-
36页,第三段改为:其中,$T$ 是最终时刻,$\gamma$ 是折扣因子,越往后得到的奖励,折扣越多。这说明我们更希望得到现有的奖励,对未来的奖励要打折扣。但式 (2.4) 定义有些问题,当任务为持续性任务时,$T=\infty$,如果智能体每个时刻都收到正的奖励,回报也就会趋于无穷。当我们有了回报之后,就可以定义状态的价值了,就是状态价值函数(state-value function)。对于马尔可夫奖励过程,状态价值函数被定义成回报的期望,即
-
147页,图6.7左下角:动作值 → 动作价值,图6.7替换成下图:
- 217页,倒数第一段:
- 黄金状态(gold state) → 目标状态(goal state)
- 黄金状态 → 目标状态
- 218页,第一段:黄金状态 → 目标状态
- 218页,倒数第一段:黄金状态 → 目标状态
- 221页,倒数第一段:我们称之为黄金状态(gold state)→ 目标状态(goal state)
- 222页,第一段:黄金状态 → 目标状态
-
前勒口作者简介:
- 王琦:
- 上海交通大学计算机系人工智能教育部重点实验室博士生 → 上海交通大学人工智能教育部重点实验室博士生
- 王琦:
-
21页,倒数第一段第2行:**多臂赌博机(multi-armed bandit)**→ 多臂赌博机(multi-armed bandit,MAB)
-
23页,倒数第二段上面加上一段文字: 此外,为了显示图形界面,我们还需要安装 pygame 库。
pip install pygame
- 27页,第二段改为:Gym 库已注册的环境可以通过以下代码查看。
- 27页,第三段和第四段改为:Gym 库中的每个环境都定义了观测空间和动作空间。观测空间和动作空间可以是离散的(取值为有限个离散的值),也可以是连续的(取值为连续的值)。
- 28页,第一个代码框的第1行:观测空间 = Box(2,) → 观测空间 = Box([-1.2 -0.07], [0.6 0.07], (2,), float32)
- 28页,第二段改为:在 Gym 库中,环境的观测空间用 env.observation_space 表示,动作空间用 env.action_space 表示。离散空间用 gym.spaces.Discrete 类表示,连续空间用 gym.spaces.Box 类表示。对于离散空间,Discrete (n) 表示可能取值的数量为 n;对于连续空间,Box类实例成员中的 low 和 high 表示每个浮点数的取值范围。MountainCar-v0 中的观测是长度为 2 的 numpy 数组,数组中值的类型为 float。MountainCar-v0 中的动作是整数,取值范围为 {0,1,2}。
- 28页,第三段改为:接下来实现智能体来控制小车移动,对应代码如下。
- 28页,第二个代码框第1行和倒数第1行:BespokeAgent → SimpleAgent
- 28页,倒数第一段改为:SimpleAgent 类的 decide()方法用于决策,learn() 方法用于学习,该智能体不是强化学习智能体,不能学习,只能根据给定的数学表达式进行决策。
- 29页,第一个代码框第1行:play_montecarlo → play
- 29页,第一个代码框第2行:初始化 → 初始值
- 29页,第一个代码框第6行:显示图形界面,图形界面可以用 env.close() 语句关闭 → 显示图形界面
- 29页,第二段改为:上面代码中的 play() 函数可以让智能体和环境交互一个回合,该函数有 4 个参数。env 是环境类。agent 是智能体类。render 是 bool 型变量,其用于判断是否需要图形化显示。如果 render 为 True,则在交互过程中会调用 env.render() 以显示图形界面,通过调用 env.close() 可关闭图形界面。train 是 bool 型变量,其用于判断是否训练智能体,在训练过程中设置为 True,让智能体学习;在测试过程中设置为 False,让智能体保持不变。该函数的返回值 episode_reward 是 float 型的数值,其表示智能体与环境交互一个回合的回合总奖励。
- 29页,第三段:并在交互过程中进行图形化显示,可用 env.close()语句关闭图形界面 → 并显示图形界面
- 29页,倒数第一个代码框的第1行改为:env.seed(3) # 设置随机种子,让结果可复现
- 29页,倒数第一个代码框第2行:play_montecarlo → play
- 29页,倒数第一个代码框的倒数第1行改为:此语句可关闭图形界面 → 关闭图形界面
- 30页,第一段改为:为了评估智能体的性能,需要计算出连续交互 100 回合的平均回合奖励,代码如下。
- 30页,第二个代码框第1行:play_montecarlo → play
- 30页,第三个代码框:-102.61 → -106.63
- 30页,第三段改为:SimpleAgent 类对应策略的平均回合奖励在 $-$110 左右,而对于小车上山任务,只要连续 100 个回合的平均回合奖励大于 $-$110,就可以认为该任务被解决了。
- 30页,第四段改为:测试智能体在 Gym 库中某个任务的性能时,出于习惯使然,学术界一般最关心 100 个回合的平均回合奖励。对于有些任务,还会指定一个参考的回合奖励值,当连续 100 个回合的奖励大于指定的值时,则认为该任务被解决了。而对于没有指定值的任务,就无所谓任务被解决了或没有被解决[6]。
- 137页,第一段第1行:虽然式 (5.19) 看起来有点儿复杂,但实现起来是比较简单的 → 式 (5.19) 看起来复杂,但其实现比较简单
- 156页,第二段第1行:第一个好处是,→ 第一个好处是提高采样效率。
- 156页,第二段第6行:第二个好处是,→ 第二个好处是增加样本多样性。
-
前勒口作者简介:
- 王琦:
- 中国科学院大学硕士 → 上海交通大学计算机系人工智能教育部重点实验室博士生,中国科学院大学硕士
- 曾获中国大学生计算机设计大赛二等奖 → 曾获“中国光谷·华为杯”第十九届中国研究生数学建模竞赛二等奖、中国大学生计算机设计大赛二等奖
- 杨毅远:
- 整体替换为:牛津大学计算机系博士生,清华大学硕士,Datawhale成员。主要研究方向为时空数据挖掘、智能传感系统、深度学习。曾获全国大学生智能汽车竞赛总冠军、中国国家奖学金、北京市优秀毕业生、克拉伦登学者等荣誉,发表SCI/EI论文多篇。
- 王琦:
-
10页,图1.11上面一段第2行:图1.12左边的智能体 → 图1.11左边的智能体
-
23页,图1.23下面一段:我们可以通过 pip 来安装 Gym 库。 → 我们可以通过 pip 来安装 Gym 库,由于 Gym 库 0.26.0 及其之后的版本对之前的代码不兼容,所以我们安装 0.26.0 之前的 Gym,比如 0.25.2。
pip install gym==0.25.2
- 31页,第三段:开发(exploitation)→ 利用(exploitation)
- 35页的图2.2 和 41页的图2.5(a)添加从
$s_1$ 到$s_4$ 的箭头,替换成下图:
- 38页,式(2.7)下面一段第1行:$s^{\prime}$ 可以看成未来的所有状态 →
$s^{\prime}$ 可以看成未来的某个状态 - 38页,式(2.7)下面一段第2行:未来某一个状态的价值 → 未来某个状态的价值
- 52页,第二段修改为:
举一个例子来说明预测与控制的区别。首先是预测问题。在图 2.16(a)的方格中,智能体可以采取上、下、左、右4个动作。如果采取的动作让智能体走出网格,则其会在原位置不动,并且得到 -1 的奖励。除了将智能体从
-
55页,第2段的第1行:$p(2 \mid 6, \mathrm{u})=2$ →
$p(2 \mid 6, \mathrm{u})=1$ -
96页,删除图3.33上面一段文字:事实上,Q 学习算法被提出的时间更早,Sarsa 算法是 Q 学习算法的改进。
-
96页,删除图3.33上面一段文字的参考文献:邱锡鹏. 神经网络与深度学习 [M]. 北京:机械工业出版社, 2020.
-
105页,删除参考文献:[5] 邱锡鹏. 神经网络与深度学习 [M]. 北京:机械工业出版社, 2020.
-
116页,图4.10替换成下图:
-
116页,图4.10的标题替换为:理想情况下动作概率的变化
-
116页,图4.10下面一段的第5行:我们可能只采样到动作b或者只采样到动作c → 我们可能只采样到动作b和动作c
-
116页,图4.11替换成下图:
- 116页,图4.11的标题替换为:实际情况下动作概率的变化
- 121页,图4.14上面一段的第4行:每个动作计算梯度
$\nabla \ln \pi\left(a_{t} \mid s_{t}, \theta\right)$ → 每个动作计算梯度$\nabla \log \pi\left(a_{t} \mid s_{t}, \theta\right)$ - 121页,图4.14上面一段的倒数第1行:$\nabla \ln \pi\left(a_{t} \mid s_{t}, \theta\right)$ →
$\nabla \log \pi\left(a_{t} \mid s_{t}, \theta\right)$ - 121页,图4.14替换成下图:
- 123页,倒数第2段的第2行:$\ln \pi\left(a_{t} \mid s_{t}, \theta\right)$ →
$\log \pi\left(a_{t} \mid s_{t}, \theta\right)$ - 124页,图4.19替换成下图:
- 127页,5.1节的标题:从同策略到异策略 → 重要性采样
- 131页,式(5.8):$\nabla \log p_\theta\left(a_t^n \mid s_t^n\right)$ →
$\nabla \log p_\theta\left(a_t \mid s_t\right)$ - 131页,式(5.8)下面一段的倒数第2行:$\nabla \log p_\theta\left(a_t^n \mid s_t^n\right)$ →
$\nabla \log p_\theta\left(a_t \mid s_t\right)$ - 131页,式(5.9):$\nabla \log p_\theta\left(a_t^n \mid s_t^n\right)$ →
$\nabla \log p_\theta\left(a_t \mid s_t\right)$ - 132页,式(5.11) 和 式(5.12):$\nabla \log p_\theta\left(a_t^n \mid s_t^n\right)$ →
$\nabla \log p_\theta\left(a_t \mid s_t\right)$ - 133页,5.2节第二段的第1行到第3行:注意,由于在 PPO 中
$\theta'$ 是$\theta_{\text{old}}$ ,即行为策略也是$\pi_{\theta}$ ,因此 PPO 是同策略的算法。如式(5.15) 所示,PPO 实际上做的事情就是这样,在异策略的方法里优化目标函数$J^{\theta^{\prime}}(\theta)$ 。→ 如式(5.15)所示,PPO 需要优化目标函数$J^{\theta^{\prime}}(\theta)$ 。 - 133页,5.2节第二段的倒数第1行加入以下内容:注意,虽然 PPO 的优化目标涉及到了重要性采样,但其只用到了上一轮策略
$\theta^{\prime}$ 的数据。PPO 目标函数中加入了 KL 散度的约束,行为策略$\theta^{\prime}$ 和目标策略$\theta$ 非常接近,PPO 的行为策略和目标策略可认为是同一个策略,因此 PPO 是同策略算法。 - 134页,式(5.16)下面一段第2行:最大化式 (5.16) → 最大化式 (5.15)
- 165页,第一段的第4行到第5行:归一化的向量为
$[3,-1,2]^{\mathrm{T}}$ → 归一化的向量为$[3,-1,-2]^{\mathrm{T}}$ - 165页,第二段的第1行:向量
$[3,-1,2]^{\mathrm{T}}$ 中的每个元素 → 向量$[3,-1,-2]^{\mathrm{T}}$ 中的每个元素 - 189页,图9.4替换成下图:
- 203页,倒数第二段的第一行:clipped dobule Q-learning → clipped double Q-learning
前勒口作者简介:
- 王琦:
- 中国科学院大学硕士在读 → 中国科学院大学硕士
- 杨毅远:清华大学硕士在读 → 清华大学硕士
- 江季:北京大学硕士在读 → 北京大学硕士
- 1页,图1.1删除参考文献:SUTTON R S, BARTO A G. Reinforcement learning: An introduction (second edition)[M]. London: The MIT Press, 2018
- 7页的图1.9和8页的图1.10加参考文献:Sergey Levine的课程“Deep Reinforcement Learning”
- 19页,图1.19删除参考文献:David Silver 的课程“UCL Course on RL”
- 24页,第一段下面的代码下面加入注解:
上面这段代码只是示例,其目的是让读者了解强化学习算法代码实现的框架,并非完整代码,load_agent 函数并未定义,所以运行这段代码会报错。
-
33页,图2.1删除参考文献:SUTTON R S, BARTO A G. Reinforcement learning: An introduction(second edition)[M]. London:The MIT Press, 2018
-
36页,式(2.4)上面一段第2行和第3行:**回报(return)**是指把奖励进行折扣后所获得的奖励。回报可以定义为奖励的逐步叠加,即 → **回报(return)**可以定义为奖励的逐步叠加,假设时刻$t$后的奖励序列为$r_{t+1},r_{t+2},r_{t+3},\cdots$,则回报为
-
36页,式(2.4)下面一段第1行:这里有一个折扣因子,→ 其中,$T$是最终时刻,$\gamma$ 是折扣因子,
-
100页,第2段的第2行:0、1、2、3 这 4 个数对应上、下、左、右 → 0、1、2、3 这 4 个数对应上、右、下、左
-
108页,图4.4替换成下图:
- 151页,第2段的倒数第1行:均方误差(mean square error)→ 均方误差(mean square error,MSE)
- 201页,第3段的倒数第2行:均方误差(mean squared error,MSE)→ 均方误差
- 223页,第1段的第4行删除参考文献:周志华. 机器学习 [M]. 北京:清华大学出版社, 2016
- 241页,第1段的第3行和第4行:均方误差(mean square error,MSE)→ 均方误差
- 2页,2.1.2节的标题:马尔可夫过程/马尔可夫链 → 马尔可夫链
- 17页,第一段的倒数第4行:策略梯度 → 策略梯度(policy gradient,PG)
- 34页,2.1.2节的标题:马尔可夫过程/马尔可夫链 → 马尔可夫链
- 34页,2.1.2节的第2段的第1行:也称为马尔可夫链(Markov chain)。 → 也称为马尔可夫链(Markov chain)。马尔可夫链是最简单的马尔可夫过程,其状态是有限的。
- 35页的图2.2 和 41页的图2.5(a)替换成下图:
-
47页,2.3.5节的第3行:称为备份图(backup diagram) → 称为备份图(backup diagram)或回溯图
-
61页,2.3.12节的第1小节的第2段的第1行:$\pi(s|a)$ →
$\pi(a|s)$ -
62页,式(2.55) 前第2行:$H$ 是迭代次数 →
$H$ 是让$V(s)$ 收敛所需的迭代次数 -
62页,式(2.57) 改为 $$ \pi(s)=\underset{a}{\arg \max } \left[R(s, a)+\gamma \sum_{s^{\prime} \in S} p\left(s^{\prime} \mid s, a\right) V_{H+1}\left(s^{\prime}\right)\right] $$
-
70页,第一段修改为:
策略最简单的表示是查找表(look-up table),即表格型策略(tabular policy)。使用查找表的强化学习方法称为表格型方法(tabular method),如蒙特卡洛、Q学习和Sarsa。本章通过最简单的表格型方法来讲解如何使用基于价值的方法求解强化学习问题。
- 76页,式(3.1) 中
$G$ 和$r$ 后面的数字改为下标,即
- 89页,图3.25的倒数第4行:如果$(s_t,a_t)$没有出现 → 如果$(s_t,a_t)$ 出现
- 101页中间一段下面的代码和102页最上面的代码的缩进有问题,改为
rewards = []
ma_rewards = [] # 滑动平均奖励
for i_ep in range(cfg.train_eps):
ep_reward = 0 # 记录每个回合的奖励
state = env.reset() # 重置环境, 重新开始(开始一个新的回合)
while True:
action = agent.choose_action(state) # 根据算法选择一个动作
next_state, reward, done, _ = env.step(action) # 与环境进行一次动作交互
agent.update(state, action, reward, next_state, done) # Q学习算法更新
state = next_state # 存储上一个观察值
ep_reward += reward
if done:
break
rewards.append(ep_reward)
if ma_rewards:
ma_rewards.append(ma_rewards[-1]*0.9+ep_reward*0.1)
else:
ma_rewards.append(ep_reward)
- 103页,图3.37上面一段:具体可以查看 GitHub 上的源码 → 具体可以查看本书配套代码
- 106页,4.1节上面添加以下文字:
策略梯度算法是基于策略的方法,其对策略进行了参数化。假设参数为
- 140页,6.1节上面一段的第1行:深度 Q 网络(Deep Q-network,DQN)→ 深度 Q 网络(deep Q-network,DQN)
- 140页,6.1节上面添加以下文字:
深度 Q 网络算法的核心是维护 Q 函数并使用其进行决策。$Q_{\pi}(s,a)$ 为在该策略
- 140页后的公式编号需要进行更新。
- 145页,式(6.6) 下面一段的第1行:所以状态
$s_b$ 的奖励等于 → 所以状态$s_a$ 的奖励等于 - 149页,式(6.15) 改为
- 154页,6.5节第1段的第5行:每一笔数据就是记得说,我们之前 → 每一笔数据是一个四元组(状态、动作、奖励、下一状态),即我们之前
- 156页,6.6节第1段的第2行:一开始目标 Q 网络 → 一开始目标网络
$\hat{Q}$ - 156页,式(6.22) 下面一段的第1行:在状态
$s_{i+1}$ 会采取的动作$a$ 就是可以让 Q → 在状态$s_{i+1}$ 会采取的动作$a$ 就是可以让$\hat{Q}$ - 176页,第1行:全连接网络 → 全连接神经网络
- 176页,第1行下面的代码块:初始化 Q 网络,为全连接网络 → 初始化 Q 网络为全连接神经网络
- 187页,图9.2的标题:深度 Q 网络 → 深度 Q 网络的两种评论员
- 187页,9.3节的标题:演员-评论员算法 → 优势演员-评论员算法
- 187页,倒数第1行:$Q_{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right)-V_{\pi_{\theta}}\left(s_{t}^{n}\right)$。→ 优势函数$A^{\theta}\left(s^{n}{t}, a^{n}{t}\right)$,即
$Q_{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right)-V_{\pi_{\theta}}\left(s_{t}^{n}\right)$ 。因此该算法称为优势演员-评论员算法。 - 188页,图9.3的标题:演员-评论员算法 → 优势演员-评论员算法
- 188页,删除9.4节的标题,目录对应的部分也需要修改
- 188页,9.4节的第一段的第1行:原始的演员-评论员算法 → 原始的优势演员-评论员算法
- 188页,式(9.5)的上面一行:可得 → 可得时序差分误差
- 189页,删除第4行到第5行的文字:因为
$r_{t}^{n}+V_{\pi}\left(s_{t+1}^{n}\right)-V_{\pi}\left(s_{t}^{n}\right)$ 被称为优势函数,所以该算法被称为优势演员-评论员算法。 - 190页,9.5节第2段的第3行:也是不好实现的。我们可以实现优势演员-评论员算法就可以。 → 不好实现异步优势演员-评论员算法,但可以实现优势演员-评论员算法。
- 191页,第4和第5行:要用梯度去更新参数......就把梯度传 → 要用梯度去更新全局网络的参数。每个进程算出梯度以后,要把梯度传
- 191页,图9.6的上面一段的倒数第1行:变成
$\theta_2$ 了 → 变成$\theta_2$ 了(其他进程也会更新模型) - 191页,图9.6的上面一段的末尾添加文字:虽然A3C看起来属于异策略算法,但它其实是一种同策略算法。因为A3C的演员和评论员只使用当前策略采样的数据来计算梯度。因此,A3C不存储历史数据,其主要通过平行探索(parallel exploration)来保持训练的稳定性。
- 191页,图9.6替换成下图:
-
191页,图9.6加参考文献:Arthur Juliani的文章“Simple Reinforcement Learning with Tensorflow Part 8: Asynchronous Actor-Critic Agents (A3C)”
-
195页,9.7节的第1段的第1行:生产对抗网络 → 生成对抗网络
-
200页,第6行:它的目标是要让每一场表演都获得观众尽可能多的欢呼声与掌声,也就是要最大化未来的总奖励 → 评论员的最终目标是让演员的表演获得观众尽可能多的欢呼声和掌声,从而最大化未来的总收益
-
201页,图10.7的上面一段的倒数第1行:均方差 → 均方误差(mean squared error,MSE)
-
201页,图10.7的下面一段的第3行:之间的一个均方差 → 之间的均方误差
-
202页,图10.8的下面一段的第4行:时间相关的 OU 噪声 → 时间相关的奥恩斯坦-乌伦贝克(Ornstein-Uhlenbeck,OU)噪声
-
203页,式(10.1)上面一段的第2行:均方差 → 均方误差
-
207页,10.4.3节的标题:Ornstein-Uhlenbeck 噪声 → OU 噪声
-
207页,10.4.3节的第1段的第1行:奥恩斯坦-乌伦贝克(Ornstein-Uhlenbeck,OU)噪声 → OU 噪声
-
229页,第2行:很强的序列 → 很长的序列
-
242页,13.4.3节上面一段的第1行:均方差损失 → 均方误差损失