From 92ffb0d4f968657465e2ae494adeb6f825a05890 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Wed, 23 Dec 2020 22:35:13 +0800 Subject: [PATCH] 2020-12-23 22:35:13 --- new/handson-rl-py/01.md | 4 ++-- new/handson-rl-py/05.md | 2 +- new/handson-rl-py/08.md | 4 ++-- new/handson-rl-py/09.md | 6 +++--- new/handson-rl-py/10.md | 4 ++-- new/handson-rl-py/11.md | 38 +++++++++++++++++++------------------- new/handson-rl-py/12.md | 12 ++++++------ new/handson-rl-py/13.md | 18 +++++++++--------- new/handson-rl-py/14.md | 8 ++++---- new/intel-proj-py/09.md | 2 +- 10 files changed, 49 insertions(+), 49 deletions(-) diff --git a/new/handson-rl-py/01.md b/new/handson-rl-py/01.md index 2f4baf8f..c66a1383 100644 --- a/new/handson-rl-py/01.md +++ b/new/handson-rl-py/01.md @@ -39,13 +39,13 @@ RL 代理可以**探索**可能提供良好奖励的不同动作,也可以** 1. 首先,代理通过执行操作与环境进行交互 2. 代理执行动作并从一种状态转移到另一种状态 -3. 然后,座席将根据其执行的动作获得奖励 +3. 然后,智能体将根据其执行的动作获得奖励 4. 根据奖励,代理将了解该操作是好是坏 5. 如果该动作是好的,即如果该代理收到了积极的报酬,则该代理将更喜欢执行该动作,否则该代理将尝试执行导致积极报酬的其他动作。 所以这基本上是一个反复试验的学习过程 # RL 与其他 ML 范例有何不同 -在监督学习中,机器(代理)从训练数据中学习,该训练数据具有一组标记的输入和输出。 目的是模型外推并概括其学习,以便可以很好地应用于看不见的数据。 有一个外部主管,他具有完整的环境知识基础并监督座席以完成一项任务。 +在监督学习中,机器(代理)从训练数据中学习,该训练数据具有一组标记的输入和输出。 目的是模型外推并概括其学习,以便可以很好地应用于看不见的数据。 有一个外部主管,他具有完整的环境知识基础并监督智能体以完成一项任务。 考虑一下我们刚才讨论的狗类比; 在监督学习中,要教狗接球,我们将通过指定向左转,向右走,前进五个步骤,接球等等来明确地教它。 但是在 RL 中,我们只是扔一个球,每当狗抓到球时,我们都会给它一个曲奇(奖励)。 因此,狗将学会接球,这意味着它收到了饼干。 diff --git a/new/handson-rl-py/05.md b/new/handson-rl-py/05.md index fcab893a..6aeac8be 100644 --- a/new/handson-rl-py/05.md +++ b/new/handson-rl-py/05.md @@ -182,7 +182,7 @@ Q ( (4,2), right) = 0.8 + 0.1 (0.3 + 1 max [ 0.1,0.3] - 0.8) # 使用 Q 学习解决出租车问题 -为了演示该问题,我们假设代理是驱动程序。 有四个地点,代理商必须在一个地点接客并在另一地点下车。 座席将获得 +20 积分作为成功下车的奖励,而每走一步便获得 -1 积分。 该代理商还将因非法取送丢掉 -10 分。 因此,我们代理商的目标是学会在短时间内在正确的位置上落客而不增加非法乘客。 +为了演示该问题,我们假设代理是驱动程序。 有四个地点,代理商必须在一个地点接客并在另一地点下车。 智能体将获得 +20 积分作为成功下车的奖励,而每走一步便获得 -1 积分。 该代理商还将因非法取送丢掉 -10 分。 因此,我们代理商的目标是学会在短时间内在正确的位置上落客而不增加非法乘客。 这里显示的环境中,字母(`R`,`G`,`Y`,`B`)代表不同的位置,并且是一个小矩形 是驾驶出租车的代理商: diff --git a/new/handson-rl-py/08.md b/new/handson-rl-py/08.md index 681ce3db..0139e6a5 100644 --- a/new/handson-rl-py/08.md +++ b/new/handson-rl-py/08.md @@ -52,7 +52,7 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧 我们知道,在 RL 环境中,我们通过执行某些操作`a`,从一个状态`s`转移到下一状态`s'`,并获得奖励`r`。 我们将此转移信息作为![](img/00250.jpeg)保存在称为回放缓冲区或经验回放的缓冲区中。 这些转移称为代理的经验。 -经验回放的关键思想是,我们使用从回放缓冲区采样的转移来训练深度 Q 网络,而不是使用最后的转移进行训练。 座席的经历一次相关,因此从回放缓冲区中随机选择一批训练样本将减少座席的经历之间的相关性,并有助于座席更好地从广泛的经验中学习。 +经验回放的关键思想是,我们使用从回放缓冲区采样的转移来训练深度 Q 网络,而不是使用最后的转移进行训练。 智能体的经历一次相关,因此从回放缓冲区中随机选择一批训练样本将减少智能体的经历之间的相关性,并有助于智能体更好地从广泛的经验中学习。 而且,神经网络将过拟合相关经验,因此通过从答复缓冲区中选择随机的经验批次,我们将减少过拟合。 我们可以使用统一采样来采样经验。 我们可以将经验回放视为队列而不是列表。 回放缓冲区将仅存储固定数量的最新经验,因此,当出现新信息时,我们将删除旧信息: @@ -200,7 +200,7 @@ def epsilon_greedy(action, step): 现在,我们初始化长度为 20000 的经验回放缓冲区,其中包含该经验。 -我们将座席的所有经验(状态,动作,奖励)存储在经验回放缓冲区中,并抽样此小批经验来训练网络: +我们将智能体的所有经验(状态,动作,奖励)存储在经验回放缓冲区中,并抽样此小批经验来训练网络: ```py def sample_memories(batch_size): diff --git a/new/handson-rl-py/09.md b/new/handson-rl-py/09.md index 3e096b02..47909203 100644 --- a/new/handson-rl-py/09.md +++ b/new/handson-rl-py/09.md @@ -34,7 +34,7 @@ # 训练特工玩《毁灭战士》 -毁灭战士是一款非常受欢迎的第一人称射击游戏。 游戏的目标是杀死怪物。 末日是部分可观察的 MDP 的另一个示例,因为座席(玩家)的视角限制为 90 度。 该代理对其余环境一无所知。 现在,我们将看到如何使用 DRQN 来训练我们的经纪人玩《毁灭战士》。 +毁灭战士是一款非常受欢迎的第一人称射击游戏。 游戏的目标是杀死怪物。 末日是部分可观察的 MDP 的另一个示例,因为智能体(玩家)的视角限制为 90 度。 该代理对其余环境一无所知。 现在,我们将看到如何使用 DRQN 来训练我们的经纪人玩《毁灭战士》。 代替 OpenAI Gym,我们将使用 ViZDoom 软件包来模拟 Doom 环境以训练我们的代理。 要了解有关 ViZDoom 软件包的更多信息,[请访问其官方网站](http://vizdoom.cs.put.edu.pl/)。 我们可以使用以下命令简单地安装 ViZDoom: @@ -322,7 +322,7 @@ class DRQN(): ``` -现在,我们定义`ExperienceReplay`类以实现经验回放缓冲区。 我们将座席的所有经验(即状态,动作和奖励)存储在经验回放缓冲区中,并且我们抽取了这一小批量经验来训练网络: +现在,我们定义`ExperienceReplay`类以实现经验回放缓冲区。 我们将智能体的所有经验(即状态,动作和奖励)存储在经验回放缓冲区中,并且我们抽取了这一小批量经验来训练网络: ```py class ExperienceReplay(): @@ -583,7 +583,7 @@ DARQN 的架构如下所示: 在本章中,我们学习了如何使用 DRQN 记住有关先前状态的信息,以及它如何克服部分可观察的 MDP 问题。 我们已经看到了如何训练我们的特工使用 DRQN 算法玩《毁灭战士》游戏。 我们还了解了 DARQN 作为 DRQN 的改进,它在卷积层的顶部增加了一个关注层。 在此之后,我们看到了两种类型的注意力机制: 即软硬关注。 -在下一章第 10 章,“异步优势参与者评论者网络”中,我们将学习另一种有趣的深度强化学习算法,称为异步优势演员评论家网络。 +在下一章第 10 章,“异步优势演员评论家网络”中,我们将学习另一种有趣的深度强化学习算法,称为异步优势演员评论家网络。 # 问题 diff --git a/new/handson-rl-py/10.md b/new/handson-rl-py/10.md index fdc0527d..5ca0f9cd 100644 --- a/new/handson-rl-py/10.md +++ b/new/handson-rl-py/10.md @@ -23,7 +23,7 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外 第二个 A 是**优势**; 在讨论 DQN 的决斗网络架构时,我们已经看到了优势功能。 优势函数可以定义为 Q 函数和值函数之间的差。 我们知道 Q 函数指定状态下动作的状态,而值函数指定状态下状态的状态。 现在,凭直觉思考; 两者之间的区别意味着什么? 它告诉我们,与其他所有动作相比,代理在状态`s`下执行动作`a`有多好。 -第三个 A 是**演员评论家**; 该架构具有两种类型的网络,即参与者和评论者。 演员的角色是学习策略,评论家的角色是评估演员学习的策略有多好。 +第三个 A 是**演员评论家**; 该架构具有两种类型的网络,即演员和评论家。 演员的角色是学习策略,评论家的角色是评估演员学习的策略有多好。 # A3C 的架构 @@ -441,7 +441,7 @@ tensorboard --logdir=logs --port=6007 --host=127.0.0.1 # 概要 -在本章中,我们学习了 A3C 网络的工作方式。 在 A3C 中,“异步”表示多个代理通过与环境的多个副本进行交互而独立工作,“优势”表示“优势”功能,即 Q 函数和值函数之间的差异,“演员评论家”是指演员评论家网络,其中行为者 网络负责生成策略,评论家网络评估由参与者网络生成的策略。 我们已经了解了 A3C 的工作原理,并了解了如何使用该算法解决山地车问题。 +在本章中,我们学习了 A3C 网络的工作方式。 在 A3C 中,“异步”表示多个代理通过与环境的多个副本进行交互而独立工作,“优势”表示“优势”功能,即 Q 函数和值函数之间的差异,“演员评论家”是指演员评论家网络,其中行为者 网络负责生成策略,评论家网络评估由演员网络生成的策略。 我们已经了解了 A3C 的工作原理,并了解了如何使用该算法解决山地车问题。 在下一章第 11 章,“策略梯度和优化”中,我们将看到无需 Q 函数即可直接优化策略的策略梯度方法。 diff --git a/new/handson-rl-py/11.md b/new/handson-rl-py/11.md index 716daecb..03c1dc5d 100644 --- a/new/handson-rl-py/11.md +++ b/new/handson-rl-py/11.md @@ -1,6 +1,6 @@ # 策略梯度和优化 -在最后三章中,我们学习了各种深度强化学习算法,例如**深度 Q 网络**(**DQN**),**深度循环 Q 网络**([HTG6 DRQN )和**异步优势演员评论家**(**A3C**)网络。 在所有算法中,我们的目标是找到正确的策略,以便我们能够最大化回报。 我们使用 Q 函数来找到最佳策略,因为 Q 函数告诉我们哪个动作是在某种状态下执行的最佳动作。 您认为我们不使用 Q 函数就能直接找到最优策略吗? 是。 我们可以。 在策略梯度方法中,我们无需使用 Q 函数就可以找到最优策略。 +在最后三章中,我们学习了各种深度强化学习算法,例如**深度 Q 网络**(**DQN**),**深度循环 Q 网络**(DRQN)和**异步优势演员评论家**(**A3C**)网络。 在所有算法中,我们的目标是找到正确的策略,以便我们能够最大化回报。 我们使用 Q 函数来找到最佳策略,因为 Q 函数告诉我们哪个动作是在某种状态下执行的最佳动作。 您认为我们不使用 Q 函数就能直接找到最优策略吗? 是。 我们可以。 在策略梯度方法中,我们无需使用 Q 函数就可以找到最优策略。 在本章中,我们将详细了解策略梯度。 我们还将研究不同类型的策略梯度方法,例如深度确定性策略梯度,然后是最新的策略优化方法,例如信任区域策略优化和近端策略优化。 @@ -220,24 +220,24 @@ class PolicyGradient: 在第 8 章,“深度 Q 网络和 Atari 游戏”中,我们研究了 DQN 的工作原理,并应用了 DQN 玩 Atari 游戏。 但是,在那些离散的环境中,我们只有一组有限的动作。 想象一个连续的环境空间,例如训练机器人走路; 在那些环境中,应用 Q 学习是不可行的,因为要找到一个贪婪的策略将需要在每一步进行很多优化。 即使我们使连续的环境离散,我们也可能会失去重要的功能并最终获得大量的动作空间。 当我们拥有巨大的行动空间时,很难实现融合。 -因此,我们使用称为 Actor Critic 的新架构,该架构具有两个网络-Actor 和 Critic。 Actor Critic 架构结合了策略梯度和状态操作值功能。 **演员**网络的作用是通过调整参数![](img/00310.jpeg)来确定**状态**中的最佳动作,而**评论家**的作用是评估**演员**产生的动作。 **评论家**通过计算时间差异误差来评估演员的行动。 也就是说,我们在**演员**网络上执行策略梯度以选择操作, **评论家**网络使用 TD 误差评估由**演员**网络产生的操作。 下图显示了演员评论家架构: +因此,我们使用称为演员评论家的新架构,该架构具有两个网络:演员和评论家。 演员评论家架构结合了策略梯度和状态操作值功能。 **演员**网络的作用是通过调整参数![](img/00310.jpeg)来确定**状态**中的最佳动作,而**评论家**的作用是评估**演员**产生的动作。 **评论家**通过计算时间差异误差来评估演员的行动。 也就是说,我们在**演员**网络上执行策略梯度以选择操作, **评论家**网络使用 TD 误差评估由**演员**网络产生的操作。 下图显示了演员评论家架构: ![](img/00311.gif) -与 DQN 相似,这里我们使用经验缓冲区,通过采样少量的经验来训练 Actor 和 Critic 网络。 我们还使用单独的目标 Actor 和 Critic 网络来计算损失。 +与 DQN 相似,这里我们使用经验缓冲区,通过采样少量的经验来训练演员和评论家网络。 我们还使用单独的目标演员和评论家网络来计算损失。 -例如,在乒乓游戏中,我们将具有不同比例的不同特征,例如位置,速度等。 因此,我们以所有要素都处于相同比例的方式来缩放要素。 我们使用一种称为批归一化的方法来缩放要素。 它将所有特征归一化以具有单位均值和方差。 我们如何探索新的行动? 在连续环境中,将有`n`个动作。 为了探索新动作,我们在 Actor 网络产生的动作中添加了一些噪声`N`。 我们使用称为 Ornstein-Uhlenbeck 随机过程的过程来生成此噪声。 +例如,在乒乓游戏中,我们将具有不同比例的不同特征,例如位置,速度等。 因此,我们以所有要素都处于相同比例的方式来缩放要素。 我们使用一种称为批归一化的方法来缩放要素。 它将所有特征归一化以具有单位均值和方差。 我们如何探索新的行动? 在连续环境中,将有`n`个动作。 为了探索新动作,我们在演员网络产生的动作中添加了一些噪声`N`。 我们使用称为 Ornstein-Uhlenbeck 随机过程的过程来生成此噪声。 现在,我们将详细介绍 DDPG 算法。 -假设我们有两个网络:Actor 网络和 Critic 网络。 我们用输入为状态的![](img/00312.jpeg)表示 Actor 网络 -,并以![](img/00313.jpeg)作为 Actor 网络权重的结果进行操作。 我们将 Critic 网络表示为![](img/00314.jpeg),它将输入作为状态和动作并返回`Q`值,其中![](img/00315.jpeg)是 Critic 网络权重。 +假设我们有两个网络:演员网络和评论家网络。 我们用输入为状态的![](img/00312.jpeg)表示演员网络 +,并以![](img/00313.jpeg)作为演员网络权重的结果进行操作。 我们将评论家网络表示为![](img/00314.jpeg),它将输入作为状态和动作并返回`Q`值,其中![](img/00315.jpeg)是评论家网络权重。 -同样,我们将 Actor 网络和 Critic 网络的目标网络分别定义为![](img/00316.jpeg)和![](img/00317.jpeg),其中![](img/00318.jpeg)和![](img/00319.jpeg)是目标 Actor 和 Critic 网络的权重。 +同样,我们将演员网络和评论家网络的目标网络分别定义为![](img/00316.jpeg)和![](img/00317.jpeg),其中![](img/00318.jpeg)和![](img/00319.jpeg)是目标演员和评论家网络的权重。 -我们使用策略梯度更新 Actor 网络权重,并使用根据 TD 误差计算得出的梯度更新 Critic 网络权重。 +我们使用策略梯度更新演员网络权重,并使用根据 TD 误差计算得出的梯度更新评论家网络权重。 -首先,我们通过将探索噪声`N`添加到 Actor 网络产生的动作(例如![](img/00320.jpeg))来选择动作。 我们在`s`状态下执行此操作,获得`r`奖励,然后移至新状态`s'`。 我们将此转移信息存储在经验回放缓冲区中。 +首先,我们通过将探索噪声`N`添加到演员网络产生的动作(例如![](img/00320.jpeg))来选择动作。 我们在`s`状态下执行此操作,获得`r`奖励,然后移至新状态`s'`。 我们将此转移信息存储在经验回放缓冲区中。 经过一些迭代后,我们从回放缓冲区采样转移并训练网络,然后计算目标`Q`值![](img/00321.jpeg)。 我们将 TD 误差计算为: @@ -245,7 +245,7 @@ class PolicyGradient: 其中`M`是来自回放缓冲区的用于训练的样本数。 我们使用根据此损耗`L`计算出的梯度来更新评论网络的权重。 -同样,我们使用策略梯度更新策略网络权重。 然后,我们在目标网络中更新 Actor 和 Critic 网络的权重。 我们会缓慢更新目标网络的权重,从而提高稳定性。 它称为软替换: +同样,我们使用策略梯度更新策略网络权重。 然后,我们在目标网络中更新 Actor 和评论家网络的权重。 我们会缓慢更新目标网络的权重,从而提高稳定性。 它称为软替换: ![](img/00323.jpeg) @@ -406,7 +406,7 @@ class DDPG(object): self.learn() ``` -我们定义了`build_actor_network`函数来构建 Actor 网络: +我们定义了`build_actor_network`函数来构建演员网络: ```py def build_actor_network(self, s, scope, trainable): @@ -533,7 +533,7 @@ for i in range(no_of_episodes): 在 TRPO 中,我们迭代地改进了该策略,并施加了一个约束,以使旧策略和新策略之间的 **Kullback-Leibler**(**KL**)差异要小于某个常数。 ![](img/00326.jpeg)。 该约束称为信任区域约束。 -那么什么是 KL 分歧? KL 散度告诉我们两个概率分布如何彼此不同。 由于我们的策略是针对行动的概率分布,因此 KL 差异告诉我们新策略与旧策略有多远。 为什么我们必须使旧策略和新策略之间的距离保持小于恒定值![](img/00327.jpeg)? 因为我们不希望我们的新策略与旧策略脱节。 因此,我们施加了约束以使新策略接近旧策略。 同样,为什么我们必须保持旧策略呢? 当新策略与旧策略相距甚远时,它将影响代理的学习绩效,并导致完全不同的学习行为。 简而言之,在 TRPO 中,我们朝着改善策略的方向迈出了一步,即使报酬最大化,但我们还应确保满足信任区域约束。 [它使用共轭梯度下降](http://www.idi.ntnu.no/~elster/tdt24/tdt24-f09/cg.pdf)优化网络参数![](img/00328.jpeg),同时满足约束条件。 该算法保证了单调策略的改进,并且在各种连续环境中也取得了出色的效果。 +那么什么是 KL 散度? KL 散度告诉我们两个概率分布如何彼此不同。 由于我们的策略是针对行动的概率分布,因此 KL 差异告诉我们新策略与旧策略有多远。 为什么我们必须使旧策略和新策略之间的距离保持小于恒定值![](img/00327.jpeg)? 因为我们不希望我们的新策略与旧策略脱节。 因此,我们施加了约束以使新策略接近旧策略。 同样,为什么我们必须保持旧策略呢? 当新策略与旧策略相距甚远时,它将影响代理的学习绩效,并导致完全不同的学习行为。 简而言之,在 TRPO 中,我们朝着改善策略的方向迈出了一步,即使报酬最大化,但我们还应确保满足信任区域约束。 [它使用共轭梯度下降](http://www.idi.ntnu.no/~elster/tdt24/tdt24-f09/cg.pdf)优化网络参数![](img/00328.jpeg),同时满足约束条件。 该算法保证了单调策略的改进,并且在各种连续环境中也取得了出色的效果。 现在,我们将了解 TRPO 的数学原理。 如果您对数学不感兴趣,可以跳过本节。 @@ -570,19 +570,19 @@ Kakade 和 Langford 提出了一种新的策略更新方法,称为保守策略 ![](img/00355.jpeg),即![](img/00356.jpeg),是最大化![](img/00357.jpeg)的策略。 -Kakade 和 Langford 从(1)得出以下方程式: +Kakade 和 Langford 从`(1)`得出以下方程式: ![](img/00358.jpeg) ----(2) -`C`是惩罚系数,等于![](img/00359.jpeg),![](img/00360.jpeg)表示旧策略与新策略之间的 KL 分歧。 +`C`是惩罚系数,等于![](img/00359.jpeg),![](img/00360.jpeg)表示旧策略与新策略之间的 KL 散度。 -如果我们仔细观察前面的方程式(2),我们会注意到,只要右侧最大化,我们的预期长期回报![](img/00361.jpeg)就会单调增加。 +如果我们仔细观察前面的方程式`(2)`,我们会注意到,只要右侧最大化,我们的预期长期回报![](img/00361.jpeg)就会单调增加。 让我们将此右侧术语定义为![](img/00362.jpeg),如下所示: ![](img/00363.jpeg) ----(3) -将公式(3)代入(2),我们得到: +将公式`(3)`代入`(2)`,我们得到: ![](img/00364.jpeg) ----(4) @@ -590,7 +590,7 @@ Kakade 和 Langford 从(1)得出以下方程式: ![](img/00365.jpeg) ----(5) -结合方程式(4)和(5),我们可以写: +结合方程式`(4)`和`(5)`,我们可以写: ![](img/00366.jpeg) @@ -598,7 +598,7 @@ Kakade 和 Langford 从(1)得出以下方程式: ![](img/00370.jpeg) -但是,在前面的公式中具有惩罚系数`C`将导致步长非常小,从而减慢了更新速度。 因此,我们对 KL 分歧的旧策略和新策略施加了约束,即信任区域约束,这将有助于我们找到最佳步长: +但是,在前面的公式中具有惩罚系数`C`将导致步长非常小,从而减慢了更新速度。 因此,我们对 KL 散度的旧策略和新策略施加了约束,即信任区域约束,这将有助于我们找到最佳步长: ![](img/00371.jpeg) @@ -674,7 +674,7 @@ Kakade 和 Langford 从(1)得出以下方程式: 1. 什么是策略梯度? 2. 策略梯度为何有效? -3. DDPG 中的 Actor Critic 网络有什么用途? +3. DDPG 中的演员评论家网络有什么用途? 4. 约束优化问题是什么? 5. 什么是信任区域? 6. PPO 如何克服 TRPO 的缺点? diff --git a/new/handson-rl-py/12.md b/new/handson-rl-py/12.md index 7e8668ad..588d0c0f 100644 --- a/new/handson-rl-py/12.md +++ b/new/handson-rl-py/12.md @@ -1,6 +1,6 @@ # Capstone 项目–使用 DQN 进行赛车 -在最后几章中,我们通过使用神经网络逼近 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了**深度 Q 网络**(**DQN**)的各种改进,例如 Double Q 学习,决斗网络架构和深度循环 Q 网络。 我们已经了解了 DQN 如何利用回放缓冲区来存储座席的经验,并使用缓冲区中的小批样本来训练网络。 我们还实现了用于玩 Atari 游戏的 DQN 和一个用于玩 Doom 游戏的**深度循环 Q 网络**(**DRQN**)。 在本章中,让我们进入对决 DQN 的详细实现,它与常规 DQN 基本相同,除了最终的全连接层将分解为两个流,即值流和优势流,而这些流 两个流将合并在一起以计算 Q 函数。 我们将看到如何训练决斗的 DQN 来赢得赛车比赛的代理商。 +在最后几章中,我们通过使用神经网络逼近 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了**深度 Q 网络**(**DQN**)的各种改进,例如双重 Q 学习,决斗网络架构和深度循环 Q 网络。 我们已经了解了 DQN 如何利用回放缓冲区来存储智能体的经验,并使用缓冲区中的小批样本来训练网络。 我们还实现了用于玩 Atari 游戏的 DQN 和一个用于玩 Doom 游戏的**深度循环 Q 网络**(**DRQN**)。 在本章中,让我们进入对决 DQN 的详细实现,它与常规 DQN 基本相同,除了最终的全连接层将分解为两个流,即值流和优势流,而这些流 两个流将合并在一起以计算 Q 函数。 我们将看到如何训练决斗的 DQN 来赢得赛车比赛的代理商。 在本章中,您将学习如何实现以下内容: @@ -155,9 +155,9 @@ class EnvWrapper: 现在,我们构建对决 DQN; 我们先构建三个卷积层,然后是两个全连接层,最后一个全连接层将被分为两个单独的层,用于价值流和优势流。 我们将使用将值流和优势流结合在一起的聚合层来计算 q 值。 这些层的尺寸如下: -* **第 1 层**:32 个 8x8 滤镜,步幅为 4 + RELU -* **第 2 层**:64 个 4x4 滤镜,步幅为 2 + RELU -* **第 3 层**:64 个 3x3 滤镜,步幅为 1 + RELU +* **第 1 层**:32 个`8x8`滤镜,步幅为 4 + RELU +* **第 2 层**:64 个`4x4`滤镜,步幅为 2 + RELU +* **第 3 层**:64 个`3x3`滤镜,步幅为 1 + RELU * **第 4a 层**:512 个单元的全连接层 + RELU * **第 4b 层**:512 个单元的全连接层 + RELU * **第 5a 层**:1 个 FC + RELU(状态值) @@ -247,7 +247,7 @@ class QNetworkDueling(QNetwork): # 回放记忆 -现在,我们构建经验回放缓冲区,该缓冲区用于存储所有座席的经验。 我们从重放缓冲区中抽取了少量经验来训练网络: +现在,我们构建经验回放缓冲区,该缓冲区用于存储所有智能体的经验。 我们从重放缓冲区中抽取了少量经验来训练网络: ```py class ReplayMemoryFast: @@ -444,7 +444,7 @@ class DQN(object): ``` -接下来,我们使用 RMS prop 优化器执行优化: +接下来,我们使用 RMSProp 优化器执行优化: ```py with tf.name_scope("optimization_step"): diff --git a/new/handson-rl-py/13.md b/new/handson-rl-py/13.md index 9e2b2c05..fc5bd9c9 100644 --- a/new/handson-rl-py/13.md +++ b/new/handson-rl-py/13.md @@ -68,9 +68,9 @@ I2A 的架构如下: 我们已经了解了很多有关 DQN 的知识。 我们从香草 DQN 开始,然后看到了各种改进,例如双重 DQN,决斗的网络架构和优先级的经验回放。 我们还学会了构建 DQN 来玩 Atari 游戏。 我们将代理与环境的交互存储在经验缓冲区中,并使代理从这些经验中学习。 但是问题是,我们花了很多培训时间来提高性能。 对于在模拟环境中学习,这很好,但是当我们让代理在现实环境中学习时,会引起很多问题。 为了克服这个问题,谷歌公司 DeepMind 的研究人员在演示(**DQfd**)的基础上,对 DQN 进行了改进,称为**深度 Q 学习**。 -如果我们已经有了一些演示数据,则可以将这些演示直接添加到经验回放缓冲区中。 例如,考虑一个学习玩 Atari 游戏的特工。 如果我们已经有了一些演示数据来告诉我们的代理,哪个状态更好,哪个动作可以提供良好的回报,那么代理可以直接使用此数据进行学习。 即使是少量的演示,也可以提高座席的表现并最大程度地减少培训时间。 由于演示的数据将直接添加到优先经验重放缓冲区中,因此代理可以从演示数据中使用的数据量以及代理可以从其自己的交互中用于学习的数据量将由优先经验重放来控制 缓冲,因为经验将被优先考虑。 +如果我们已经有了一些演示数据,则可以将这些演示直接添加到经验回放缓冲区中。 例如,考虑一个学习玩 Atari 游戏的特工。 如果我们已经有了一些演示数据来告诉我们的代理,哪个状态更好,哪个动作可以提供良好的回报,那么代理可以直接使用此数据进行学习。 即使是少量的演示,也可以提高智能体的表现并最大程度地减少培训时间。 由于演示的数据将直接添加到优先经验重放缓冲区中,因此代理可以从演示数据中使用的数据量以及代理可以从其自己的交互中用于学习的数据量将由优先经验重放来控制 缓冲,因为经验将被优先考虑。 -DQfd 中的损失函数将是各种损失的总和。 为了防止我们的代理人过度适合演示数据,我们在网络权重上计算 L2 正则化损失。 我们像往常一样计算 TD 损失,也计算监督损失,以了解我们的特工如何从演示数据中学习。 本文的作者在 DQfd 和各种环境下进行了实验,并且 DQfd 的性能比对决 Double DQN 优先排序的性能更好,更快。 +DQfd 中的损失函数将是各种损失的总和。 为了防止我们的代理人过度适合演示数据,我们在网络权重上计算 L2 正则化损失。 我们像往常一样计算 TD 损失,也计算监督损失,以了解我们的特工如何从演示数据中学习。 本文的作者在 DQfd 和各种环境下进行了实验,并且 DQfd 的性能比双重决斗 DQN 优先排序的性能更好,更快。 您可以观看此视频,[以了解 DQfd 如何学会玩“私眼”游戏](https://youtu.be/4IFZvqBHsFY)。 @@ -82,7 +82,7 @@ DQfd 中的损失函数将是各种损失的总和。 为了防止我们的代 ![](img/00434.jpeg) -在最初的几次尝试中,代理商不一定能实现目标。 因此,座席只收到-1 作为奖励,这告诉座席他做错了,没有达到目标: +在最初的几次尝试中,代理商不一定能实现目标。 因此,智能体只收到 -1 作为奖励,这告诉智能体他做错了,没有达到目标: ![](img/00435.jpeg) @@ -100,7 +100,7 @@ HRL 中使用了不同的方法,例如状态空间分解,状态抽象和时 MAXQ 值函数分解是 HRL 中最常用的算法之一。 让我们看看 MAXQ 的工作原理。 在 MAXQ 值函数分解中,我们将值函数分解为每个子任务的一组值函数。 让我们以本文中给出的相同示例为例。 还记得我们使用 Q 学习和 SARSA 解决的出租车问题吗? -总共有四个地点,代理商必须在一个地点接客并在另一地点下车。 座席将获得+20 积分作为成功下车的奖励,而每走一步便获得-1 积分。 该代理商还将因非法取送丢掉-10 分。 因此,我们代理商的目标是学会在短时间内在正确的位置上落客而不增加非法乘客。 +总共有四个地点,代理商必须在一个地点接客并在另一地点下车。 智能体将获得 +20 积分作为成功下车的奖励,而每走一步便获得 -1 积分。 该代理商还将因非法取送丢掉 -10 分。 因此,我们代理商的目标是学会在短时间内在正确的位置上落客而不增加非法乘客。 接下来显示的是环境,其中的字母(`R`,`G`,`Y`,`B`)代表不同的位置, 黄色矩形是由我们的代理商驾驶的出租车: @@ -108,7 +108,7 @@ MAXQ 值函数分解是 HRL 中最常用的算法之一。 让我们看看 MAXQ 现在,我们将目标分为以下四个子任务: -* **导航**:这里的目标是将出租车从当前位置驾驶到目标位置之一。 Navigate(t)子任务应使用北,南,东和西四个原始动作。 +* **导航**:这里的目标是将出租车从当前位置驾驶到目标位置之一。 导航子任务应使用北,南,东和西四个原始动作。 * **获取**:这里的目标是将出租车从当前位置驾驶到乘客的位置并接客。 * **放置**:这里的目标是将出租车从当前位置驾驶到乘客的目的地位置并下车。 * **根**:根是整个任务。 @@ -133,17 +133,17 @@ MAXQ 值函数分解是 HRL 中最常用的算法之一。 让我们看看 MAXQ 现在,我们可以按贝尔曼方程形式重写前面的值函数,如下所示: -![](img/00452.jpeg)-(1) +![](img/00452.jpeg) ----(1) 我们将状态动作值函数`Q`表示如下: -![](img/00453.jpeg)-(2) +![](img/00453.jpeg) ----(2) 现在,我们再定义一个称为完成功能的函数,它是完成子任务![](img/00454.jpeg)的预期折现累积奖励: -![](img/00455.jpeg)-(3) +![](img/00455.jpeg) ----(3) -对于方程式(2)和(3),我们可以将 Q 函数写为: +对于方程式`(2)`和`(3)`,我们可以将 Q 函数写为: ![](img/00456.jpeg) diff --git a/new/handson-rl-py/14.md b/new/handson-rl-py/14.md index a10be604..271e3c0e 100644 --- a/new/handson-rl-py/14.md +++ b/new/handson-rl-py/14.md @@ -58,7 +58,7 @@ 1. MAB 实际上是一台老虎机,是一种在赌场玩的赌博游戏,您可以拉动手臂(杠杆)并根据随机生成的概率分布获得支出(奖励)。 一台老虎机称为单臂老虎机,当有多台老虎机时,称为多臂老虎机或 k 臂老虎机。 2. 当业务代表不确定是使用以前的经验来探索新动作还是利用最佳动作时,就会出现探索-利用困境。 -3. ε用于确定代理是否应使用 1-ε进行探索或利用我们选择最佳作用的作用,而使用ε则探索新作用。 +3. ε用于确定代理是否应使用`1-ε`进行探索或利用我们选择最佳作用的作用,而使用ε则探索新作用。 4. 我们可以使用各种算法(例如`ε`贪婪策略,softmax 探索,UCB,Thompson 采样)解决探索-利用难题。 5. UCB 算法可帮助我们根据置信区间选择最佳分支。 6. 在 Thomson 抽样中,我们使用先验分布进行估算,而在 UCB 中,我们使用置信区间进行估算。 @@ -76,7 +76,7 @@ # 第八章 1. **深度 Q 网络**(**DQN**)是用于逼近 Q 函数的神经网络。 -2. 经验回放用于删除座席经验之间的相关性。 +2. 经验回放用于删除智能体经验之间的相关性。 3. 当我们使用同一网络来预测目标值和预测值时,会有很多差异,因此我们使用单独的目标网络。 4. 由于最大运算符,DQN 高估了 Q 值。 5. 通过具有两个单独的 Q 函数,每个学习都独立地加倍 DQN,从而避免了高估 Q 值的情况。 @@ -95,7 +95,7 @@ # 第 10 章 -1. A3C 是“异步优势参与者关键网络”,它使用多个代理进行并行学习。 +1. A3C 是“异步优势演员评论家网络”,它使用多个代理进行并行学习。 2. 三个 A 是异步,优势,演员评论家。 3. 与 DQN 相比,A3C 需要更少的计算能力和训练时间。 4. 所有代理(员工)都在环境副本中工作,然后全球网络汇总他们的经验。 @@ -106,7 +106,7 @@ 1. 策略梯度是 RL 中令人惊奇的算法之一,在该算法中,我们直接优化由某些参数设置参数的策略。 2. 策略梯度是有效的,因为我们无需计算 Q 函数即可找到最佳策略。 -3. Actor 网络的作用是通过调整参数来确定状态中的最佳动作,而 Critic 的作用是评估 Actor 产生的动作。 +3. 演员网络的作用是通过调整参数来确定状态中的最佳动作,而评论家的作用是评估演员产生的动作。 4. 请参阅“信任区域策略优化”部分 5. 我们迭代地改进了该策略,并施加了一个约束,即旧策略和新策略之间的 **Kullback-Leibler**(**KL**)差异要小于某个常数。 该约束称为信任区域约束。 diff --git a/new/intel-proj-py/09.md b/new/intel-proj-py/09.md index ac8f098f..f07f4ebe 100644 --- a/new/intel-proj-py/09.md +++ b/new/intel-proj-py/09.md @@ -20,7 +20,7 @@ 任何强化学习问题都可以看作是**马尔可夫决策过程**,我们在第 1 章“基于人工智能的系统基础”中进行了简要介绍。 为了您的利益,我们将再次详细研究。 在马尔可夫决策过程中,我们有一个与环境交互的主体。 在任何给定的情况下,`t`代理处于多种状态之一:`s[t] = s ∈ S`。 根据主体的动作`a[t] = a ∈ A`处于状态`s[t]`具有新状态`s[t + 1] = s' ∈ S`。 在这里,`S`表示代理可能会暴露的所有状态,而`A`则表示代理可以参与的可能动作。 -您现在可能想知道座席如何采取行动。 应该是随机的还是基于启发式的? 好吧,这取决于代理与相关环境的交互程度。 在初始阶段,代理可能会采取随机行动,因为他们不了解环境。 但是,一旦代理与环境进行了足够的交互(基于奖励和惩罚),代理就会了解在给定状态下采取哪种适当的措施。 类似于人们倾向于采取有益于长期奖励的行动一样,RL 代理商也采取行动,最大限度地提高了长期奖励。 +您现在可能想知道智能体如何采取行动。 应该是随机的还是基于启发式的? 好吧,这取决于代理与相关环境的交互程度。 在初始阶段,代理可能会采取随机行动,因为他们不了解环境。 但是,一旦代理与环境进行了足够的交互(基于奖励和惩罚),代理就会了解在给定状态下采取哪种适当的措施。 类似于人们倾向于采取有益于长期奖励的行动一样,RL 代理商也采取行动,最大限度地提高了长期奖励。 数学上,代理尝试为每个状态动作对`s ∈ S, a ∈ A`学习 Q 值`Q(s, a)`。 对于给定状态`s[t]`,RL 代理选择动作`a`,该动作给出最大 Q 值。 代理采取的动作`a[t]`可以表示如下: -- GitLab