Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lzh_me
apachecn-dl-zh
提交
663d02d9
A
apachecn-dl-zh
项目概览
lzh_me
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
663d02d9
编写于
12月 27, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-12-27 13:47:28
上级
0871b3bb
变更
21
展开全部
隐藏空白更改
内联
并排
Showing
21 changed file
with
165 addition
and
165 deletion
+165
-165
new/handson-meta-learn-py/06.md
new/handson-meta-learn-py/06.md
+1
-1
new/handson-rl-py/00.md
new/handson-rl-py/00.md
+7
-7
new/handson-rl-py/01.md
new/handson-rl-py/01.md
+34
-34
new/handson-rl-py/02.md
new/handson-rl-py/02.md
+6
-6
new/handson-rl-py/03.md
new/handson-rl-py/03.md
+14
-14
new/handson-rl-py/04.md
new/handson-rl-py/04.md
+4
-4
new/handson-rl-py/05.md
new/handson-rl-py/05.md
+2
-2
new/handson-rl-py/06.md
new/handson-rl-py/06.md
+2
-2
new/handson-rl-py/07.md
new/handson-rl-py/07.md
+1
-1
new/handson-rl-py/08.md
new/handson-rl-py/08.md
+7
-7
new/handson-rl-py/09.md
new/handson-rl-py/09.md
+6
-6
new/handson-rl-py/10.md
new/handson-rl-py/10.md
+9
-9
new/handson-rl-py/11.md
new/handson-rl-py/11.md
+4
-4
new/handson-rl-py/12.md
new/handson-rl-py/12.md
+5
-5
new/handson-rl-py/13.md
new/handson-rl-py/13.md
+26
-26
new/handson-rl-py/14.md
new/handson-rl-py/14.md
+9
-9
new/intel-proj-py/01.md
new/intel-proj-py/01.md
+1
-1
new/intel-proj-py/08.md
new/intel-proj-py/08.md
+1
-1
new/intel-proj-py/09.md
new/intel-proj-py/09.md
+24
-24
new/whats-new-tf2/4.md
new/whats-new-tf2/4.md
+1
-1
new/whats-new-tf2/7.md
new/whats-new-tf2/7.md
+1
-1
未找到文件。
new/handson-meta-learn-py/06.md
浏览文件 @
663d02d9
...
...
@@ -457,7 +457,7 @@ Sampling Next Batch of Tasks
# MAML 强化学习
如何在
**强化学习**
(
**RL**
)设置中应用 MAML? 在 RL 中,我们的目标是找到正确的策略函数,该功能将告诉我们在每种状态下要执行哪些操作。 但是我们如何在 RL 中应用元学习呢? 假设我们训练了
代理商以解决两臂老虎机问题。 但是,我们不能使用相同的代理来解决四臂老虎机问题。 我们必须再次从头开始训练特工,以解决这个新的四臂老虎机问题。 当另一名
`n`
臂老虎机进来时,情况也是如此。我们一直在从头训练代理以解决新问题,即使它与代理已经学会解决的问题密切相关。 因此,代替执行此操作,我们可以应用元学习并在一组相关任务上对代理进行培训,以便代理
可以利用其先前的知识在最短的时间内学习新的相关任务,而无需从头开始进行培训。
如何在
**强化学习**
(
**RL**
)设置中应用 MAML? 在 RL 中,我们的目标是找到正确的策略函数,该功能将告诉我们在每种状态下要执行哪些操作。 但是我们如何在 RL 中应用元学习呢? 假设我们训练了
智能体以解决两臂老虎机问题。 但是,我们不能使用相同的智能体来解决四臂老虎机问题。 我们必须再次从头开始训练特工,以解决这个新的四臂老虎机问题。 当另一名
`n`
臂老虎机进来时,情况也是如此。我们一直在从头训练智能体以解决新问题,即使它与智能体已经学会解决的问题密切相关。 因此,代替执行此操作,我们可以应用元学习并在一组相关任务上对智能体进行培训,以便智能体
可以利用其先前的知识在最短的时间内学习新的相关任务,而无需从头开始进行培训。
在 RL 中,我们可以将轨迹称为包含一系列观察和动作的元组。 因此,我们在这些轨迹上训练模型以学习最佳策略。 但是,同样,我们应该使用哪种算法来训练我们的模型? 对于 MAML,我们可以使用可以通过梯度下降训练的任何 RL 算法。 我们使用策略梯度来训练我们的模型。 策略梯度通过直接将带有某些参数
`θ`
的策略
`π`
参数化为
`π[θ]`
来找到最佳策略。 因此,使用 MAML,我们尝试找到可在各个任务之间推广的最佳参数
`θ`
。
...
...
new/handson-rl-py/00.md
浏览文件 @
663d02d9
...
...
@@ -8,9 +8,9 @@
# 本书涵盖的内容
第 1 章,“强化学习简介”帮助我们了解强化学习是什么以及它如何工作。 我们将学习强化学习的各种要素,例如
代理
,环境,策略和模型,并且还将看到用于强化学习的不同类型的环境,平台和库。 在本章的后面,我们将看到强化学习的一些应用。
第 1 章,“强化学习简介”帮助我们了解强化学习是什么以及它如何工作。 我们将学习强化学习的各种要素,例如
智能体
,环境,策略和模型,并且还将看到用于强化学习的不同类型的环境,平台和库。 在本章的后面,我们将看到强化学习的一些应用。
第 2 章和 “OpenAI 和 TensorFlow 入门”可帮助我们为各种强化学习任务设置机器。 我们将学习如何通过安装 Anaconda,Docker,OpenAI Gym,Universe 和 TensorFlow 来设置机器。 然后,我们将学习如何在 OpenAI Gym 中模拟
代理
,并且将了解如何构建视频游戏机器人。 我们还将学习 TensorFlow 的基础知识,并了解如何使用 TensorBoard 进行可视化。
第 2 章和 “OpenAI 和 TensorFlow 入门”可帮助我们为各种强化学习任务设置机器。 我们将学习如何通过安装 Anaconda,Docker,OpenAI Gym,Universe 和 TensorFlow 来设置机器。 然后,我们将学习如何在 OpenAI Gym 中模拟
智能体
,并且将了解如何构建视频游戏机器人。 我们还将学习 TensorFlow 的基础知识,并了解如何使用 TensorBoard 进行可视化。
第 3 章,“马尔可夫决策过程和动态规划”首先说明什么是马尔可夫链和马尔可夫过程,然后我们将了解如何将强化学习问题建模为马尔可夫决策过程。 我们还将学习一些基本概念,例如值函数,Q 函数和贝尔曼方程。 然后,我们将了解什么是动态规划以及如何使用价值和策略迭代来解决冻湖问题。
...
...
@@ -22,17 +22,17 @@
第 7 章,“深度学习基础知识”涵盖了深度学习的各种基本概念。 首先,我们将学习神经网络是什么,然后我们将看到不同类型的神经网络,例如 RNN,LSTM 和 CNN。 我们将通过构建一些应用程序来学习,这些应用程序执行诸如生成歌曲歌词和对时尚产品进行分类等任务。
第 8 章,“使用深度 Q 网络玩 Atari 游戏”涵盖了最广泛使用的深度强化学习算法之一,称为深度 Q 网络(DQN)。 我们将通过探索 DQN 的各个组成部分来学习 DQN,然后我们将了解如何构建一个
代理
来使用 DQN 玩 Atari 游戏。 然后,我们将研究 DQN 架构的一些升级,例如双 DQN 和决斗 DQN。
第 8 章,“使用深度 Q 网络玩 Atari 游戏”涵盖了最广泛使用的深度强化学习算法之一,称为深度 Q 网络(DQN)。 我们将通过探索 DQN 的各个组成部分来学习 DQN,然后我们将了解如何构建一个
智能体
来使用 DQN 玩 Atari 游戏。 然后,我们将研究 DQN 架构的一些升级,例如双 DQN 和决斗 DQN。
第 9 章,“使用深度循环 Q 网络玩末日游戏”,介绍了深度循环 Q 网络(DRQN)及其与 DQN 的区别。 我们将看到如何构建使用 DRQN 播放 Doom 的
代理
。 在本章的后面,我们将学习深度注意力循环 Q 网络,该网络将注意力机制添加到 DRQN 架构中。
第 9 章,“使用深度循环 Q 网络玩末日游戏”,介绍了深度循环 Q 网络(DRQN)及其与 DQN 的区别。 我们将看到如何构建使用 DRQN 播放 Doom 的
智能体
。 在本章的后面,我们将学习深度注意力循环 Q 网络,该网络将注意力机制添加到 DRQN 架构中。
第 10 章,“异步优势演员评论家网络”解释了异步优势演员评论家(A3C)网络的工作方式。 我们将详细探讨 A3C 架构,然后将学习如何构建使用 A3C 上山的
代理
。
第 10 章,“异步优势演员评论家网络”解释了异步优势演员评论家(A3C)网络的工作方式。 我们将详细探讨 A3C 架构,然后将学习如何构建使用 A3C 上山的
智能体
。
第 11 章,“策略梯度和优化”涵盖了策略梯度如何帮助我们找到合适的策略而无需 Q 函数。 我们还将探索深度确定性策略梯度方法。 在本章的后面,我们将看到最新的策略优化方法,例如信任区域策略优化和近端策略优化。
第 12 章,“Capstone 项目–使用 DQN 进行赛车”提供了逐步的方法,以使用决斗 DQN 构建
代理
以赢得赛车游戏。
第 12 章,“Capstone 项目–使用 DQN 进行赛车”提供了逐步的方法,以使用决斗 DQN 构建
智能体
以赢得赛车游戏。
第 13 章,“最近的进展和后续步骤”提供了有关强化学习的各种进展的信息,例如想象力增强
代理
,从人的偏好中学习,从示威活动中进行深度学习以及事后 ,然后我们将研究不同类型的强化学习方法,例如分层强化学习和逆强化学习。
第 13 章,“最近的进展和后续步骤”提供了有关强化学习的各种进展的信息,例如想象力增强
智能体
,从人的偏好中学习,从示威活动中进行深度学习以及事后 ,然后我们将研究不同类型的强化学习方法,例如分层强化学习和逆强化学习。
# 充分利用这本书
...
...
new/handson-rl-py/01.md
浏览文件 @
663d02d9
...
...
@@ -6,7 +6,7 @@
*
RL 的基本概念
*
RL 算法
*
代理
环境接口
*
智能体
环境接口
*
RL 环境的类型
*
RL 平台
*
RL 的应用
...
...
@@ -15,7 +15,7 @@
考虑到您正在教狗接球,但是您不能明确地教狗接球; 取而代之的是,您将只扔一个球,每次狗抓到球时,您都将给它一个曲奇。 如果无法接住球,则不会提供曲奇。 狗将找出使它收到 Cookie 的动作,然后重复这些动作。
同样,在 RL 环境中,您不会教
代理做什么或如何做,而是会针对代理执行的每个操作给予奖励。 奖励可以是正面的或负面的。 然后,代理将开始执行使其获得正面奖励的操作。 因此,这是一个反复试验的过程。 在先前的类比中,狗代表代理
。 接球时给狗送饼干是一种积极的奖励,而不送饼干则是一种消极的奖励。
同样,在 RL 环境中,您不会教
智能体做什么或如何做,而是会针对智能体执行的每个操作给予奖励。 奖励可以是正面的或负面的。 然后,智能体将开始执行使其获得正面奖励的操作。 因此,这是一个反复试验的过程。 在先前的类比中,狗代表智能体
。 接球时给狗送饼干是一种积极的奖励,而不送饼干则是一种消极的奖励。
奖励可能会延迟。 您可能无法在每一步都获得奖励。 只有在任务完成后才能给予奖励。 在某些情况下,您会在每一步中获得奖励,以查明您是否犯了任何错误。
...
...
@@ -31,51 +31,51 @@
![](
img/00007.gif
)
RL
代理可以
**探索**
可能提供良好奖励的不同动作,也可以
**利用**
(使用)导致良好奖励的先前动作。 如果 RL 代理探索不同的行动,则该代理很可能会收到较差的报酬,因为所有行动都不会成为最佳行动。 如果 RL 代理
仅利用已知的最佳动作,那么也有可能会错过最佳动作,这可能会提供更好的回报。 勘探与开发之间总是要权衡取舍。 我们不能同时进行勘探和开发。 在接下来的章节中,我们将详细讨论勘探与开发难题。
RL
智能体可以
**探索**
可能提供良好奖励的不同动作,也可以
**利用**
(使用)导致良好奖励的先前动作。 如果 RL 智能体探索不同的行动,则该智能体很可能会收到较差的报酬,因为所有行动都不会成为最佳行动。 如果 RL 智能体
仅利用已知的最佳动作,那么也有可能会错过最佳动作,这可能会提供更好的回报。 勘探与开发之间总是要权衡取舍。 我们不能同时进行勘探和开发。 在接下来的章节中,我们将详细讨论勘探与开发难题。
# RL 算法
典型的 RL 算法涉及的步骤如下:
1.
首先,
代理
通过执行操作与环境进行交互
2.
代理
执行动作并从一种状态转移到另一种状态
1.
首先,
智能体
通过执行操作与环境进行交互
2.
智能体
执行动作并从一种状态转移到另一种状态
3.
然后,智能体将根据其执行的动作获得奖励
4.
根据奖励,
代理
将了解该操作是好是坏
5.
如果该动作是好的,即如果该
代理收到了积极的报酬,则该代理将更喜欢执行该动作,否则该代理
将尝试执行导致积极报酬的其他动作。 所以这基本上是一个反复试验的学习过程
4.
根据奖励,
智能体
将了解该操作是好是坏
5.
如果该动作是好的,即如果该
智能体收到了积极的报酬,则该智能体将更喜欢执行该动作,否则该智能体
将尝试执行导致积极报酬的其他动作。 所以这基本上是一个反复试验的学习过程
# RL 与其他 ML 范
例
有何不同
# RL 与其他 ML 范
式
有何不同
在监督学习中,机器(
代理
)从训练数据中学习,该训练数据具有一组标记的输入和输出。 目的是模型外推并概括其学习,以便可以很好地应用于看不见的数据。 有一个外部主管,他具有完整的环境知识基础并监督智能体以完成一项任务。
在监督学习中,机器(
智能体
)从训练数据中学习,该训练数据具有一组标记的输入和输出。 目的是模型外推并概括其学习,以便可以很好地应用于看不见的数据。 有一个外部主管,他具有完整的环境知识基础并监督智能体以完成一项任务。
考虑一下我们刚才讨论的狗类比; 在监督学习中,要教狗接球,我们将通过指定向左转,向右走,前进五个步骤,接球等等来明确地教它。 但是在 RL 中,我们只是扔一个球,每当狗抓到球时,我们都会给它一个曲奇(奖励)。 因此,狗将学会接球,这意味着它收到了饼干。
在无监督学习中,我们为模型提供只有一组输入的训练数据。 模型学习确定输入中的隐藏模式。 有一个普遍的误解,认为 RL 是一种无监督的学习,但事实并非如此。 在无监督学习中,模型学习隐藏的结构,而在 RL 中,模型通过最大化奖励来学习。 假设我们想向用户推荐新电影。 无监督学习会分析用户观看过的相似电影并建议电影,而 RL 会不断从用户那里收到反馈,了解他的电影偏好,并在此基础上建立知识库并建议新电影。
还有另一种称为半监督学习的学习,它基本上是有监督学习和无监督学习的结合。 它涉及对标记和未标记数据的功能估计,而 RL 本质上是
代理
与其环境之间的相互作用。 因此,RL 与所有其他机器学习范例完全不同。
还有另一种称为半监督学习的学习,它基本上是有监督学习和无监督学习的结合。 它涉及对标记和未标记数据的功能估计,而 RL 本质上是
智能体
与其环境之间的相互作用。 因此,RL 与所有其他机器学习范例完全不同。
# RL 的要素
RL 的元素在以下各节中显示。
#
代理商
#
智能体
代理
是做出明智决策的软件程序,它们基本上是 RL 的学习者。 特工通过与环境互动来采取行动,他们会根据自己的行动获得奖励,例如,在视频游戏中导航的超级马里奥。
智能体
是做出明智决策的软件程序,它们基本上是 RL 的学习者。 特工通过与环境互动来采取行动,他们会根据自己的行动获得奖励,例如,在视频游戏中导航的超级马里奥。
# 策略功能
策略定义环境中
代理的行为。 代理
决定执行哪种操作的方式取决于策略。 假设您想在家中到达办公室; 到达办公室的路线会有所不同,有些路线是捷径,有些路线很长。 这些路线被称为策略,因为它们代表了我们选择采取行动以达到目标的方式。 策略通常用符号π表示。 策略可以采用查找表或复杂的搜索过程的形式。
策略定义环境中
智能体的行为。 智能体
决定执行哪种操作的方式取决于策略。 假设您想在家中到达办公室; 到达办公室的路线会有所不同,有些路线是捷径,有些路线很长。 这些路线被称为策略,因为它们代表了我们选择采取行动以达到目标的方式。 策略通常用符号π表示。 策略可以采用查找表或复杂的搜索过程的形式。
# 价值功能
值函数表示
代理处于特定状态的程度如何。 它取决于策略,通常用
`v(s)`
表示。 它等于代理
从初始状态开始收到的总预期奖励。 可以有多个值函数。 最优值函数是与其他值函数相比在所有状态下具有最高值的函数。 同样,最优策略是具有最优价值功能的策略。
值函数表示
智能体处于特定状态的程度如何。 它取决于策略,通常用
`v(s)`
表示。 它等于智能体
从初始状态开始收到的总预期奖励。 可以有多个值函数。 最优值函数是与其他值函数相比在所有状态下具有最高值的函数。 同样,最优策略是具有最优价值功能的策略。
# 模型
模型是
代理程序对环境的表示。 学习可以分为两种类型:基于模型的学习和无模型的学习。 在基于模型的学习中,代理利用先前学习的信息来完成任务,而在无模型的学习中,代理
仅依靠反复试验的经验来执行正确的操作。 假设您想在家中更快地到达办公室。 在基于模型的学习中,您只需使用以前学习的经验(地图)即可更快地到达办公室,而在无模型的学习中,您将不会使用以前的经验,而是尝试所有不同的路线并选择更快的路线。
模型是
智能体程序对环境的表示。 学习可以分为两种类型:基于模型的学习和无模型的学习。 在基于模型的学习中,智能体利用先前学习的信息来完成任务,而在无模型的学习中,智能体
仅依靠反复试验的经验来执行正确的操作。 假设您想在家中更快地到达办公室。 在基于模型的学习中,您只需使用以前学习的经验(地图)即可更快地到达办公室,而在无模型的学习中,您将不会使用以前的经验,而是尝试所有不同的路线并选择更快的路线。
#
代理
环境接口
#
智能体
环境接口
代理是指一次执行
`A[t]`
,
`t`
移动的动作的软件代理
。 从一种状态
`S[t]`
,到另一种状态
`S[t + 1]`
。 基于行为,特工从环境中获得数值奖励
`R`
。 最终,RL 就是寻找可以增加数值奖励的最佳行动:
智能体是指一次执行
`A[t]`
,
`t`
移动的动作的软件智能体
。 从一种状态
`S[t]`
,到另一种状态
`S[t + 1]`
。 基于行为,特工从环境中获得数值奖励
`R`
。 最终,RL 就是寻找可以增加数值奖励的最佳行动:
![](
img/00008.gif
)
...
...
@@ -85,16 +85,16 @@ RL 的元素在以下各节中显示。
迷宫的目的是到达目的地而不会卡在障碍物上。 这是工作流程:
*
代理人
是穿越迷宫的人,这是我们的软件程序/ RL 算法
*
智能体
是穿越迷宫的人,这是我们的软件程序/ RL 算法
*
环境是迷宫
*
状态是
代理
当前位于迷宫中的位置
*
代理
通过从一种状态转移到另一种状态来执行动作
*
当
代理人的动作没有遇到任何障碍时,它会获得正向奖励;当代理人
的行为没有遇到任何障碍时,它会得到负向奖励,因此它无法到达目的地
*
状态是
智能体
当前位于迷宫中的位置
*
智能体
通过从一种状态转移到另一种状态来执行动作
*
当
智能体的动作没有遇到任何障碍时,它会获得正向奖励;当智能体
的行为没有遇到任何障碍时,它会得到负向奖励,因此它无法到达目的地
*
目的是清除迷宫并到达目的地
# RL 环境的类型
代理与之交互的所有事物都称为环境。 环境是外部世界。 它包含代理
之外的所有内容。 有不同类型的环境,将在下一节中介绍。
智能体与之交互的所有事物都称为环境。 环境是外部世界。 它包含智能体
之外的所有内容。 有不同类型的环境,将在下一节中介绍。
# 确定性环境
...
...
@@ -106,11 +106,11 @@ RL 的元素在以下各节中显示。
# 完全可观察的环境
当
代理
可以始终确定系统状态时,称为完全可观察。 例如,在国际象棋游戏中,系统状态,即所有玩家在国际象棋棋盘上的位置始终可用,因此玩家可以做出最佳决策。
当
智能体
可以始终确定系统状态时,称为完全可观察。 例如,在国际象棋游戏中,系统状态,即所有玩家在国际象棋棋盘上的位置始终可用,因此玩家可以做出最佳决策。
# 部分可观察的环境
当
代理
无法始终确定系统状态时,称为部分可观察。 例如,在扑克游戏中,我们不知道对手拥有的牌。
当
智能体
无法始终确定系统状态时,称为部分可观察。 例如,在扑克游戏中,我们不知道对手拥有的牌。
# 离散环境
...
...
@@ -124,9 +124,9 @@ RL 的元素在以下各节中显示。
情景环境也称为
**非顺序**
环境。 在情景环境中,主体的当前动作不会影响将来的动作,而在非周期性环境中,主体的当前动作会影响未来的动作,也称为
**顺序**
环境。 也就是说,主体在情节环境中执行独立的任务,而在非周期性环境中,所有主体的动作都是相关的。
# 单
代理和多代理
环境
# 单
智能体和多智能体
环境
顾名思义,单
代理环境只有一个代理,多代理环境有多个代理。 在执行复杂任务时,广泛使用多代理环境。 在完全不同的环境中将存在不同的代理。 不同环境中的代理
将彼此通信。 由于多主体环境具有更大的不确定性,因此它几乎是随机的。
顾名思义,单
智能体环境只有一个智能体,多智能体环境有多个智能体。 在执行复杂任务时,广泛使用多智能体环境。 在完全不同的环境中将存在不同的智能体。 不同环境中的智能体
将彼此通信。 由于多主体环境具有更大的不确定性,因此它几乎是随机的。
# RL 平台
...
...
@@ -134,17 +134,17 @@ RL 平台用于在环境中模拟,构建,渲染和试验我们的 RL 算法
# OpenAI 体育馆和宇宙
OpenAI Gym 是用于构建,评估和比较 RL 算法的工具包。 它与在 TensorFlow,Theano,Keras 等任何框架中编写的算法兼容。 它很容易理解。 它不对
代理
的结构做任何假设,并提供了所有 RL 任务的接口。
OpenAI Gym 是用于构建,评估和比较 RL 算法的工具包。 它与在 TensorFlow,Theano,Keras 等任何框架中编写的算法兼容。 它很容易理解。 它不对
智能体
的结构做任何假设,并提供了所有 RL 任务的接口。
OpenAI Universe 是 OpenAI Gym 的扩展。 它提供了在各种简单到实时复杂环境中训练和评估
代理
的能力。 它可以无限制地访问许多游戏环境。 使用 Universe,可以通过在虚拟网络计算远程桌面后自动启动程序来将任何程序转换为 Gym 环境,而无需访问程序内部,源代码或 API,因为 Universe 可以工作。
OpenAI Universe 是 OpenAI Gym 的扩展。 它提供了在各种简单到实时复杂环境中训练和评估
智能体
的能力。 它可以无限制地访问许多游戏环境。 使用 Universe,可以通过在虚拟网络计算远程桌面后自动启动程序来将任何程序转换为 Gym 环境,而无需访问程序内部,源代码或 API,因为 Universe 可以工作。
# 深度实验室
DeepMind Lab 是另一个基于 AI
代理
的惊人研究平台。 它提供了一个丰富的模拟环境,可以作为运行几种 RL 算法的实验室。 它是高度可定制和可扩展的。 视觉效果非常丰富,科幻风格且逼真。
DeepMind Lab 是另一个基于 AI
智能体
的惊人研究平台。 它提供了一个丰富的模拟环境,可以作为运行几种 RL 算法的实验室。 它是高度可定制和可扩展的。 视觉效果非常丰富,科幻风格且逼真。
# RLGlue
RL-Glue 提供了一个接口,用于将
代理,环境和程序连接在一起,即使它们是用不同的编程语言编写的。 它具有与他人共享您的代理
和环境以在您的工作之上进行构建的能力。 由于这种兼容性,可重用性大大提高了。
RL-Glue 提供了一个接口,用于将
智能体,环境和程序连接在一起,即使它们是用不同的编程语言编写的。 它具有与他人共享您的智能体
和环境以在您的工作之上进行构建的能力。 由于这种兼容性,可重用性大大提高了。
# 马尔默计划
...
...
@@ -152,7 +152,7 @@ RL-Glue 提供了一个接口,用于将代理,环境和程序连接在一起
# ViZDoom
顾名思义,ViZDoom 是一个基于 Doom 的 AI 平台。 它为多
代理提供支持,并提供竞争环境来测试代理
。 但是,ViZDoom 仅支持 Doom 游戏环境。 它提供了屏幕外渲染以及单人和多人游戏支持。
顾名思义,ViZDoom 是一个基于 Doom 的 AI 平台。 它为多
智能体提供支持,并提供竞争环境来测试智能体
。 但是,ViZDoom 仅支持 Doom 游戏环境。 它提供了屏幕外渲染以及单人和多人游戏支持。
# RL 的应用
...
...
@@ -168,7 +168,7 @@ RL 在医学和卫生保健方面有无数的应用; 其中一些包括个性
# 制造业
在制造中,智能机器人用于将物体放置在正确的位置。 如果它失败或无法成功将对象放置在正确的位置,它将记住该对象并训练自己以更高的精度执行此操作。 使用智能
代理
将减少人工成本并提高性能。
在制造中,智能机器人用于将物体放置在正确的位置。 如果它失败或无法成功将对象放置在正确的位置,它将记住该对象并训练自己以更高的精度执行此操作。 使用智能
智能体
将减少人工成本并提高性能。
# 库存管理
...
...
@@ -186,7 +186,7 @@ RL 被广泛用于金融投资组合管理,这是将资金不断重新分配
在本章中,我们学习了 RL 的基础知识以及一些关键概念。 我们了解了 RL 的不同元素和 RL 环境的不同类型。 我们还介绍了各种可用的 RL 平台以及 RL 在各个领域中的应用。
在下一章第 2 章,“OpenAI 和 TensorFlow 入门”中,我们将学习 OpenAI 和 TensorFlow 的基础知识以及如何安装 OpenAI 和 TensorFlow,然后模拟环境并教给
代理
如何在环境中学习。
在下一章第 2 章,“OpenAI 和 TensorFlow 入门”中,我们将学习 OpenAI 和 TensorFlow 的基础知识以及如何安装 OpenAI 和 TensorFlow,然后模拟环境并教给
智能体
如何在环境中学习。
# 问题
...
...
@@ -194,7 +194,7 @@ RL 被广泛用于金融投资组合管理,这是将资金不断重新分配
1.
什么是强化学习?
2.
RL 与其他 ML 范例有何不同?
3.
什么是
代理商,代理商
如何学习?
3.
什么是
智能体,智能体
如何学习?
4.
策略功能和价值功能有什么区别?
5.
基于模型的学习与基于模型的学习有什么区别?
6.
RL 中有哪些不同类型的环境?
...
...
new/handson-rl-py/02.md
浏览文件 @
663d02d9
# OpenAI 和 TensorFlow 入门
OpenAI 是由 Elon Musk 和 Sam Altman 创立的非营利性,开源
**人工智能**
(
**AI**
)研究公司,旨在构建通用 AI。 他们是由顶级行业领导者和顶尖公司赞助的。 OpenAI 具有 Gym 和 Universe 两种样式,我们可以使用它们模拟现实环境,构建
**强化学习**
(
**RL**
)算法,并在这些环境中测试我们的
代理
。 TensorFlow 是 Google 的开源机器学习库,已广泛用于数值计算。 在接下来的章节中,我们将使用 OpenAI 和 TensorFlow 来构建和评估强大的 RL 算法。
OpenAI 是由 Elon Musk 和 Sam Altman 创立的非营利性,开源
**人工智能**
(
**AI**
)研究公司,旨在构建通用 AI。 他们是由顶级行业领导者和顶尖公司赞助的。 OpenAI 具有 Gym 和 Universe 两种样式,我们可以使用它们模拟现实环境,构建
**强化学习**
(
**RL**
)算法,并在这些环境中测试我们的
智能体
。 TensorFlow 是 Google 的开源机器学习库,已广泛用于数值计算。 在接下来的章节中,我们将使用 OpenAI 和 TensorFlow 来构建和评估强大的 RL 算法。
在本章中,您将了解以下内容:
...
...
@@ -255,7 +255,7 @@ for _ in range(1000):
![](
img/00012.gif
)
OpenAI Gym 提供了许多模拟环境,用于培训,评估和构建我们的
代理
。 我们可以通过检查其网站或输入以下内容来检查可用的环境,这些将列出可用的环境:
OpenAI Gym 提供了许多模拟环境,用于培训,评估和构建我们的
智能体
。 我们可以通过检查其网站或输入以下内容来检查可用的环境,这些将列出可用的环境:
```
py
from
gym
import
envs
...
...
@@ -291,7 +291,7 @@ env = gym.make('BipedalWalker-v2')
```
然后,对于每个情节(初始状态和最终状态之间的
代理
程序-环境交互),我们将使用
`reset`
方法初始化环境:
然后,对于每个情节(初始状态和最终状态之间的
智能体
程序-环境交互),我们将使用
`reset`
方法初始化环境:
```
py
for
episode
in
range
(
100
):
...
...
@@ -358,7 +358,7 @@ for i_episode in range(100):
# OpenAI 宇宙
OpenAI Universe 提供了广泛的现实游戏环境。 它是 OpenAI Gym 的扩展。 它提供了在各种简单到实时复杂环境中训练和评估
代理
的能力。 它可以无限制地访问许多游戏环境。
OpenAI Universe 提供了广泛的现实游戏环境。 它是 OpenAI Gym 的扩展。 它提供了在各种简单到实时复杂环境中训练和评估
智能体
的能力。 它可以无限制地访问许多游戏环境。
# 构建一个视频游戏机器人
...
...
@@ -411,7 +411,7 @@ buffer_size = 100
action
=
forward
```
现在,让我们的游戏
代理
在无限循环中玩,该循环基于与环境的交互持续执行动作:
现在,让我们的游戏
智能体
在无限循环中玩,该循环基于与环境的交互持续执行动作:
```
py
while
True
:
...
...
@@ -748,7 +748,7 @@ with tf.Session() as sess:
# 总结
在本章中,我们学习了如何通过安装 Anaconda,Docker,OpenAI Gym,Universe 和 TensorFlow 来设置机器。 我们还学习了如何使用 OpenAI 创建模拟,以及如何训练
代理
在 OpenAI 环境中学习。 然后,我们了解了 TensorFlow 的基础知识,然后在 TensorBoard 中可视化了图形。
在本章中,我们学习了如何通过安装 Anaconda,Docker,OpenAI Gym,Universe 和 TensorFlow 来设置机器。 我们还学习了如何使用 OpenAI 创建模拟,以及如何训练
智能体
在 OpenAI 环境中学习。 然后,我们了解了 TensorFlow 的基础知识,然后在 TensorBoard 中可视化了图形。
在下一章第 3 章,“马尔可夫决策过程和动态规划”中,我们将学习马尔可夫决策过程和动态规划以及如何使用价值和策略迭代来解决冻湖问题。
...
...
new/handson-rl-py/03.md
浏览文件 @
663d02d9
...
...
@@ -62,26 +62,26 @@ MDP 是马尔可夫链的延伸。 它提供了用于建模决策情况的数学
MDP 由五个重要元素表示:
*
代理
实际上可以处于的一组状态
`(S)`
。
*
代理
可以执行的一组动作
`(A)`
,用于从一种状态转移到另一种状态。
*
智能体
实际上可以处于的一组状态
`(S)`
。
*
智能体
可以执行的一组动作
`(A)`
,用于从一种状态转移到另一种状态。
*
转移概率(
`P[ss']^a`
),是通过执行某些操作
`a`
从一种状态
`s`
转移到另一种状态
`s'`
的概率。
*
奖励概率(
`R[ss']^a`
),是
代理商
通过执行某些动作
`a`
从一种状态
`s`
转移到另一种状态
`s'`
所获得的奖励的概率。
*
奖励概率(
`R[ss']^a`
),是
智能体
通过执行某些动作
`a`
从一种状态
`s`
转移到另一种状态
`s'`
所获得的奖励的概率。
*
折扣因子(
`γ`
),用于控制立即和将来奖励的重要性。 我们将在接下来的部分中详细讨论。
# 奖励与退货
如我们所知,在 RL 环境中,
代理
通过执行操作与环境交互,并从一种状态转移到另一种状态。 根据其执行的动作,它会获得奖励。 奖励不过是一个数字值,例如,一个好动作为 +1,而一个坏动作为 -1。 我们如何确定一个动作是好是坏? 在迷宫游戏中,好动作是指特工进行移动以使其不会撞到迷宫壁的地方,而不好的动作是指特工进行移动并撞到迷宫壁的地方。
如我们所知,在 RL 环境中,
智能体
通过执行操作与环境交互,并从一种状态转移到另一种状态。 根据其执行的动作,它会获得奖励。 奖励不过是一个数字值,例如,一个好动作为 +1,而一个坏动作为 -1。 我们如何确定一个动作是好是坏? 在迷宫游戏中,好动作是指特工进行移动以使其不会撞到迷宫壁的地方,而不好的动作是指特工进行移动并撞到迷宫壁的地方。
代理试图最大化从环境而不是即时奖励中获得的奖励(累积奖励)总量。 代理商从环境中获得的总奖励金额称为回报。 因此,我们可以将代理商
收到的奖励(回报)总额计算如下:
智能体试图最大化从环境而不是即时奖励中获得的奖励(累积奖励)总量。 智能体从环境中获得的总奖励金额称为回报。 因此,我们可以将智能体
收到的奖励(回报)总额计算如下:
![](
img/00031.jpeg
)
`r[t + 1]`
是
代理在执行操作
`a[0]`
从一种状态转换到另一种状态时在时间步骤
`t[0]`
时收到的奖励。
`r[t + 2]`
是代理
在执行从一个状态到另一状态的动作时,在
步骤
`t[1]`
时收到的奖励。 类似地,
`r[T]`
是
代理
在执行从一个状态到另一状态的动作时,在最后时间步骤
`T`
所收到的奖励。
`r[t + 1]`
是
智能体在执行操作
`a[0]`
从一种状态转换到另一种状态时在时间步骤
`t[0]`
时收到的奖励。
`r[t + 2]`
是智能体
在执行从一个状态到另一状态的动作时,在
步骤
`t[1]`
时收到的奖励。 类似地,
`r[T]`
是
智能体
在执行从一个状态到另一状态的动作时,在最后时间步骤
`T`
所收到的奖励。
# 间歇性和连续性任务
情景任务是具有终端状态(结束)的任务。 在 RL 中,情节被视为从初始状态到最终状态的
代理人
与环境的相互作用。
情景任务是具有终端状态(结束)的任务。 在 RL 中,情节被视为从初始状态到最终状态的
智能体
与环境的相互作用。
例如,在赛车视频游戏中,您启动游戏(初始状态)并玩游戏直到游戏结束(最终状态)。 这称为情节。 游戏结束后,您可以通过重新启动游戏来开始下一个情节,并且无论您在上一个游戏中所处的位置如何,都将从初始状态开始。 因此,每个情节彼此独立。
...
...
@@ -89,7 +89,7 @@ MDP 由五个重要元素表示:
# 折现系数
我们已经看到,
代理商
的目标是使回报最大化。 对于一项临时任务,我们可以将返回定义为
`R[t] = r[t + 1] + r[t + 2] + ... + r[T]`
,其中
`T`
是情节的最终状态,我们尝试最大化回报
`R[t]`
。
我们已经看到,
智能体
的目标是使回报最大化。 对于一项临时任务,我们可以将返回定义为
`R[t] = r[t + 1] + r[t + 2] + ... + r[T]`
,其中
`T`
是情节的最终状态,我们尝试最大化回报
`R[t]`
。
由于连续任务没有任何最终状态,因此我们可以将连续任务的收益定义为
`R[t] = r[t + 1] + r[t + 2] + ...`
,总和为无穷大。 但是,如果永不止息,我们如何才能最大化回报呢?
...
...
@@ -113,7 +113,7 @@ MDP 由五个重要元素表示:
# 状态值功能
状态值函数也简称为值函数。 它通过策略
`π`
指定
代理
处于特定状态的状态如何。 值函数通常由
`V(s)`
表示。 它表示遵循策略的状态的值。
状态值函数也简称为值函数。 它通过策略
`π`
指定
智能体
处于特定状态的状态如何。 值函数通常由
`V(s)`
表示。 它表示遵循策略的状态的值。
我们可以定义一个状态值函数,如下所示:
...
...
@@ -125,7 +125,7 @@ MDP 由五个重要元素表示:
请注意,状态值函数取决于策略,并且取决于我们选择的策略而有所不同。
我们可以在表中查看值函数。 假设我们有两个状态,并且这两个状态都遵循策略π。 根据这两个状态的值,我们可以判断出执行策略后,我们的
代理
处于该状态有多好。 值越大,状态越好:
我们可以在表中查看值函数。 假设我们有两个状态,并且这两个状态都遵循策略π。 根据这两个状态的值,我们可以判断出执行策略后,我们的
智能体
处于该状态有多好。 值越大,状态越好:
|
**状态**
|
**值**
|
| --- | --- |
...
...
@@ -136,7 +136,7 @@ MDP 由五个重要元素表示:
# 状态作用值功能(Q 功能)
状态作用值函数也称为
`Q`
函数。 它指定
代理
在具有策略
`π`
的状态下执行特定操作的效果如何。
`Q`
函数由
`Q(s)`
表示。 它表示在遵循策略
`π`
的状态下执行操作的值。
状态作用值函数也称为
`Q`
函数。 它指定
智能体
在具有策略
`π`
的状态下执行特定操作的效果如何。
`Q`
函数由
`Q(s)`
表示。 它表示在遵循策略
`π`
的状态下执行操作的值。
我们可以定义
`Q`
函数,如下所示:
...
...
@@ -436,12 +436,12 @@ policy_iteration():
*
`H`
是孔,您必须非常小心
*
`G`
是目标(办公室)
好的,现在让我们代替您使用我们的
代理来找到到达办公室的正确方法。 该代理的目标是找到从
`S`
到
`G`
的最佳路径,而不会陷入
`H`
的陷阱。 代理商如何做到这一点? 如果代理正确地在冰冻的湖面上行走,我们给 +1 分作为奖励,如果代理正确落入洞中,则给 0 分,以便代理确定正确的行动。 代理现在将尝试找到最佳策略。 最优策略意味着采取正确的道路,这将最大化代理商的报酬。 如果代理人正在使报酬最大化,则显然代理人
正在学习跳过漏洞并到达目的地。
好的,现在让我们代替您使用我们的
智能体来找到到达办公室的正确方法。 该智能体的目标是找到从
`S`
到
`G`
的最佳路径,而不会陷入
`H`
的陷阱。 智能体如何做到这一点? 如果智能体正确地在冰冻的湖面上行走,我们给 +1 分作为奖励,如果智能体正确落入洞中,则给 0 分,以便智能体确定正确的行动。 智能体现在将尝试找到最佳策略。 最优策略意味着采取正确的道路,这将最大化智能体的报酬。 如果智能体正在使报酬最大化,则显然智能体
正在学习跳过漏洞并到达目的地。
我们可以将问题建模为我们先前研究的 MDP。 MDP 包含以下内容:
*
**状态**
:状态集。 在这里,我们有 16 个状态(网格中的每个小方框)。
*
**动作**
:所有可能动作的集合(左,右,上,下;这是我们的
代理商
在冰冻湖面环境中可以采取的所有四种可能动作)。
*
**动作**
:所有可能动作的集合(左,右,上,下;这是我们的
智能体
在冰冻湖面环境中可以采取的所有四种可能动作)。
*
**转移概率**
:通过执行动作
`a`
从一种状态(
`F`
)转换为另一种状态(
`H`
)的概率。
*
**奖励概率**
:这是执行动作
`a`
从一种状态(
`F`
)迁移到另一种状态(
`H`
)时获得奖励的概率。
...
...
new/handson-rl-py/04.md
浏览文件 @
663d02d9
...
...
@@ -188,11 +188,11 @@ print("Approximate value of pi is {}" .format(calculate_pi(points_inside_circle,
# 第一次访问蒙特卡洛
如我们所见,在蒙特卡洛方法中,我们通过取平均收益来近似值函数。 但是在首次访问 MC 方法中,我们仅在情节中首次访问状态时才对返回值进行平均。 例如,假设一个
代理正在玩蛇和梯子游戏,那么如果该代理被蛇咬伤,它很有可能会返回到该状态。 当代理商重新访问状态时,我们不考虑平均回报。 我们仅在代理商
首次访问该州时才考虑平均回报。
如我们所见,在蒙特卡洛方法中,我们通过取平均收益来近似值函数。 但是在首次访问 MC 方法中,我们仅在情节中首次访问状态时才对返回值进行平均。 例如,假设一个
智能体正在玩蛇和梯子游戏,那么如果该智能体被蛇咬伤,它很有可能会返回到该状态。 当智能体重新访问状态时,我们不考虑平均回报。 我们仅在智能体
首次访问该州时才考虑平均回报。
# 每次访问蒙特卡洛
在蒙特卡洛的每次访问中,我们平均将情节中每次访问州的收益均值化。 考虑相同的蛇和梯子游戏示例:如果特工在蛇咬之后返回到相同的状态,尽管特工正在重新访问状态,但我们可以将其视为平均收益。 在这种情况下,我们平均每次
代理商
访问该州时的回报。
在蒙特卡洛的每次访问中,我们平均将情节中每次访问州的收益均值化。 考虑相同的蛇和梯子游戏示例:如果特工在蛇咬之后返回到相同的状态,尽管特工正在重新访问状态,但我们可以将其视为平均收益。 在这种情况下,我们平均每次
智能体
访问该州时的回报。
# 让我们和蒙特卡洛一起玩二十一点
...
...
@@ -577,9 +577,9 @@ def epsilon_greedy_policy(state, epsilon):
# 脱离策略的蒙特卡洛控制
非策略性蒙特卡洛是另一种有趣的蒙特卡洛控制方法。 在这种方法中,我们有两种策略:一种是行为策略,另一种是目标策略。 在非策略方法中,
代理遵循一项策略,但与此同时,它会尝试学习和改进另一种策略。 代理遵循的策略称为行为策略,代理
尝试评估和改进的策略称为目标策略。 行为与目标策略完全无关。 行为策略探索所有可能的状态和动作,这就是为什么将行为策略称为软策略,而将目标策略称为贪心策略(它选择具有最大值的策略)的原因。
非策略性蒙特卡洛是另一种有趣的蒙特卡洛控制方法。 在这种方法中,我们有两种策略:一种是行为策略,另一种是目标策略。 在非策略方法中,
智能体遵循一项策略,但与此同时,它会尝试学习和改进另一种策略。 智能体遵循的策略称为行为策略,智能体
尝试评估和改进的策略称为目标策略。 行为与目标策略完全无关。 行为策略探索所有可能的状态和动作,这就是为什么将行为策略称为软策略,而将目标策略称为贪心策略(它选择具有最大值的策略)的原因。
我们的目标是为目标策略π估计
`Q`
函数,但我们的
代理
使用完全不同的策略(称为行为策略
`μ`
)进行操作。 我们现在能做什么? 我们可以通过使用
`μ`
中发生的常见事件来估计
`π`
的值。 我们如何估算这两个策略之间的共同点? 我们使用一种称为重要性抽样的新技术。 这是一种在给定来自另一个分布的样本的情况下从一个分布估计值的技术。
我们的目标是为目标策略π估计
`Q`
函数,但我们的
智能体
使用完全不同的策略(称为行为策略
`μ`
)进行操作。 我们现在能做什么? 我们可以通过使用
`μ`
中发生的常见事件来估计
`π`
的值。 我们如何估算这两个策略之间的共同点? 我们使用一种称为重要性抽样的新技术。 这是一种在给定来自另一个分布的样本的情况下从一个分布估计值的技术。
重要抽样有两种类型:
...
...
new/handson-rl-py/05.md
浏览文件 @
663d02d9
...
...
@@ -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`
)代表不同的位置,并且一个小矩形是驾驶出租车的智能体:
...
...
@@ -558,7 +558,7 @@ Q 学习和 SARSA 对许多人来说总是很困惑。 让我们分解一下两
1.
TD 学习与蒙特卡洛方法有何不同?
2.
TD 错误到底是什么?
3.
TD 预测和控制之间有什么区别?
4.
如何使用 Q 学习构建智能
代理
?
4.
如何使用 Q 学习构建智能
智能体
?
5.
Q 学习和 SARSA 有什么区别?
# 进一步阅读
...
...
new/handson-rl-py/06.md
浏览文件 @
663d02d9
...
...
@@ -21,7 +21,7 @@ MAB 如下所示:
![](
img/00143.jpeg
)
由于每台老虎机都通过自己的概率分布为我们提供奖励,因此我们的目标是找出哪台老虎机将在一段时间内为我们提供最大的累积奖励。 因此,
代理在每个时间步
`t`
上执行动作
`a[t]`
,即从投币游戏机中拉出一条手臂并获得奖励
`R[t]`
<sub
class=
"calibre24"
>
和
</sub>
,我们代理商
的目标是使累积奖励最大化。
由于每台老虎机都通过自己的概率分布为我们提供奖励,因此我们的目标是找出哪台老虎机将在一段时间内为我们提供最大的累积奖励。 因此,
智能体在每个时间步
`t`
上执行动作
`a[t]`
,即从投币游戏机中拉出一条手臂并获得奖励
`R[t]`
<sub
class=
"calibre24"
>
和
</sub>
,我们智能体
的目标是使累积奖励最大化。
我们将手臂
`Q(a)`
的值定义为通过拉动手臂获得的平均奖励:
...
...
@@ -31,7 +31,7 @@ MAB 如下所示:
![](
img/00145.jpeg
)
我们
代理人
的目标是找到最佳手臂,并最大程度地减少后悔,这可以定义为了解
`k`
哪个手臂是最佳手臂的代价。 现在,我们如何找到最好的手臂? 我们应该探索所有武器还是选择已经给予我们最大累积奖励的武器? 这就是勘探与开发的困境。 现在,我们将看到如何使用以下各种探索策略来解决这个难题:
我们
智能体
的目标是找到最佳手臂,并最大程度地减少后悔,这可以定义为了解
`k`
哪个手臂是最佳手臂的代价。 现在,我们如何找到最好的手臂? 我们应该探索所有武器还是选择已经给予我们最大累积奖励的武器? 这就是勘探与开发的困境。 现在,我们将看到如何使用以下各种探索策略来解决这个难题:
*
厄普西隆贪婪策略
*
Softmax 探索
...
...
new/handson-rl-py/07.md
浏览文件 @
663d02d9
...
...
@@ -1056,7 +1056,7 @@ with tf.Session() as sess:
在本章中,我们学习了神经网络的实际工作原理,然后使用 TensorFlow 构建了一个神经网络来对手写数字进行分类。 我们还看到了不同类型的神经网络,例如 RNN,可以记住内存中的信息。 然后,我们看到了 LSTM 网络,该网络用于通过保持多个门来将信息保留在内存中(只要需要)来克服消失的梯度问题。 我们还看到了另一个有趣的神经网络,用于识别图像,称为 CNN。 我们看到了 CNN 如何使用不同的图层来理解图像。 之后,我们学习了如何使用 TensorFlow 构建 CNN 以识别时尚产品。
在下一章第 8 章,“使用深度 Q 网络玩 Atari 游戏”中,我们将看到神经网络实际上将如何帮助我们的 RL
代理商
更有效地学习。
在下一章第 8 章,“使用深度 Q 网络玩 Atari 游戏”中,我们将看到神经网络实际上将如何帮助我们的 RL
智能体
更有效地学习。
# 问题
...
...
new/handson-rl-py/08.md
浏览文件 @
663d02d9
...
...
@@ -8,7 +8,7 @@
*
**深度 Q 网络**
(
**DQN**
)
*
DQN 的架构
*
建立
代理
来玩 Atari 游戏
*
建立
智能体
来玩 Atari 游戏
*
双 DQN
*
优先经验回放
...
...
@@ -52,7 +52,7 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧
# 经验回放
我们知道,在 RL 环境中,我们通过执行某些操作
`a`
,从一个状态
`s`
转移到下一状态
`s'`
,并获得奖励
`r`
。 我们将此转移信息作为
`<s, a, r, s'>`
保存在称为回放缓冲区或经验回放的缓冲区中。 这些转移称为
代理
的经验。
我们知道,在 RL 环境中,我们通过执行某些操作
`a`
,从一个状态
`s`
转移到下一状态
`s'`
,并获得奖励
`r`
。 我们将此转移信息作为
`<s, a, r, s'>`
保存在称为回放缓冲区或经验回放的缓冲区中。 这些转移称为
智能体
的经验。
经验回放的关键思想是,我们使用从回放缓冲区采样的转移来训练深度 Q 网络,而不是使用最后的转移进行训练。 智能体的经历一次相关,因此从回放缓冲区中随机选择一批训练样本将减少智能体的经历之间的相关性,并有助于智能体更好地从广泛的经验中学习。
...
...
@@ -94,9 +94,9 @@ DQN 的第一层是卷积网络,网络的输入将是游戏屏幕的原始帧
8.
在每个
`k`
个步骤之后,我们将实际网络权重
`θ`
复制到目标网络权重
`θ'`
。
9.
对于
`M`
个情节,我们重复这些步骤。
# 建立
代理
来玩 Atari 游戏
# 建立
智能体
来玩 Atari 游戏
现在,我们将看到如何建立一个
代理
来玩任何 Atari 游戏。
[
您可以在此处获得 Jupyter 笔记本的完整代码及其说明
](
https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/08.%20Atari%20Games%20with%20DQN/8.8%20Building%20an%20Agent%20to%20Play%20Atari%20Games.ipynb
)
。
现在,我们将看到如何建立一个
智能体
来玩任何 Atari 游戏。
[
您可以在此处获得 Jupyter 笔记本的完整代码及其说明
](
https://github.com/sudharsan13296/Hands-On-Reinforcement-Learning-With-Python/blob/master/08.%20Atari%20Games%20with%20DQN/8.8%20Building%20an%20Agent%20to%20Play%20Atari%20Games.ipynb
)
。
首先,我们导入所有必需的库:
...
...
@@ -436,9 +436,9 @@ with tf.Session() as sess:
# 决斗网络架构
我们知道
`Q`
函数指定
代理在状态
`s`
下执行动作
`a`
有多好,而值函数则指定使代理处于
`s`
状态有多好。 现在,我们引入一个称为优势函数的新函数,该函数可以定义为值函数和优势函数之间的差。 优势功能指定与其他动作相比,代理
执行一个动作
`a`
有多好。
我们知道
`Q`
函数指定
智能体在状态
`s`
下执行动作
`a`
有多好,而值函数则指定使智能体处于
`s`
状态有多好。 现在,我们引入一个称为优势函数的新函数,该函数可以定义为值函数和优势函数之间的差。 优势功能指定与其他动作相比,智能体
执行一个动作
`a`
有多好。
因此,值函数指定状态的优劣,而优势函数指定动作的优劣。 如果我们将价值功能和优势功能结合起来会发生什么? 这将告诉我们
代理
在状态
`s`
实际上是我们的
`Q`
功能下执行动作
`a`
有多好。 因此,我们可以像
`Q(s, a) = V(s) + A(a)`
中那样将
`Q`
函数定义为值函数和优势函数的和。
因此,值函数指定状态的优劣,而优势函数指定动作的优劣。 如果我们将价值功能和优势功能结合起来会发生什么? 这将告诉我们
智能体
在状态
`s`
实际上是我们的
`Q`
功能下执行动作
`a`
有多好。 因此,我们可以像
`Q(s, a) = V(s) + A(a)`
中那样将
`Q`
函数定义为值函数和优势函数的和。
现在,我们将看到决斗网络架构是如何工作的。 下图显示了决斗 DQN 的架构:
...
...
@@ -455,7 +455,7 @@ with tf.Session() as sess:
# 总结
在本章中,我们学习了一种非常流行的深度强化学习算法,称为 DQN。 我们看到了如何使用深度神经网络来近似 Q 函数。 我们还学习了如何建立
代理
来玩 Atari 游戏。 后来,我们研究了 DQN 的一些改进,例如双 DQN,它用于避免高估 Q 值。 然后,我们研究了优先级经验重放,优先级经验和决斗的网络架构,该架构将 Q 函数计算分为两个流,分别称为值流和优势流。
在本章中,我们学习了一种非常流行的深度强化学习算法,称为 DQN。 我们看到了如何使用深度神经网络来近似 Q 函数。 我们还学习了如何建立
智能体
来玩 Atari 游戏。 后来,我们研究了 DQN 的一些改进,例如双 DQN,它用于避免高估 Q 值。 然后,我们研究了优先级经验重放,优先级经验和决斗的网络架构,该架构将 Q 函数计算分为两个流,分别称为值流和优势流。
在下一章第 9 章,“实用深度循环 Q 网络玩末日之战”中,我们将介绍一种称为 DRQN 的非常酷的 DQN 变体,它利用 RNN 近似于一个 Q 功能。
...
...
new/handson-rl-py/09.md
浏览文件 @
663d02d9
# 用深度循环 Q 网络玩世界末日
在上一章中,我们介绍了如何使用
**深度 Q 网络**
(
**DQN**
)构建
代理以玩 Atari 游戏。 我们利用神经网络来近似 Q 函数,使用了
**卷积神经网络**
(
**CNN**
)来理解输入游戏画面,并利用过去的四个游戏画面来更好地理解当前的游戏状态。 在本章中,我们将学习如何利用
**循环神经网络**
(
**RNN**
)来提高 DQN 的性能。 我们还将研究
**马尔可夫决策过程**
(
**MDP**
)的部分可观察之处,以及如何使用
**深度循环 Q 网络**
(
**DRQN**
)。 接下来,我们将学习如何构建一个代理
来使用 DRQN 玩《毁灭战士》游戏。 最后,我们将看到 DRQN 的一种变体,称为
**深度注意力循环 Q 网络**
(
**DARQN**
),它增强了 DRQN 架构的注意力机制。
在上一章中,我们介绍了如何使用
**深度 Q 网络**
(
**DQN**
)构建
智能体以玩 Atari 游戏。 我们利用神经网络来近似 Q 函数,使用了
**卷积神经网络**
(
**CNN**
)来理解输入游戏画面,并利用过去的四个游戏画面来更好地理解当前的游戏状态。 在本章中,我们将学习如何利用
**循环神经网络**
(
**RNN**
)来提高 DQN 的性能。 我们还将研究
**马尔可夫决策过程**
(
**MDP**
)的部分可观察之处,以及如何使用
**深度循环 Q 网络**
(
**DRQN**
)。 接下来,我们将学习如何构建一个智能体
来使用 DRQN 玩《毁灭战士》游戏。 最后,我们将看到 DRQN 的一种变体,称为
**深度注意力循环 Q 网络**
(
**DARQN**
),它增强了 DRQN 架构的注意力机制。
在本章中,您将学习以下主题:
*
DRQN
*
部分可观察的 MDP
*
DRQN 的架构
*
如何建立
代理
以使用 DRQN 玩《毁灭战士》游戏
*
如何建立
智能体
以使用 DRQN 玩《毁灭战士》游戏
*
DARQN
# DRQN
那么,当我们在 Atari 游戏中以人为水平执行 DQN 时,为什么我们需要 DRQN? 为了回答这个问题,让我们理解
**部分可观察的马尔可夫决策过程**
(
**POMDP**
)的问题。 当我们可获得的关于环境的信息有限时,该环境称为部分可观察的 MDP。 到目前为止,在前面的章节中,我们已经看到了一个完全可观察的 MDP,在其中我们了解所有可能的动作和状态-尽管该
代理可能不知道转移和奖励的可能性,但它对环境有完整的了解,例如,冰冻的湖泊环境,我们清楚地知道了环境的所有状态和行为; 我们轻松地将该环境建模为一个完全可观察的 MDP。 但是大多数现实世界环境只能部分观察到。 我们看不到所有状态。 考虑代理学习如何在现实环境中行走; 显然,代理将不会完全了解环境,它将无法获得任何信息。 在 POMDP 中,状态仅提供部分信息,但是将有关过去状态的信息保留在内存中可能会帮助代理
更好地了解环境的性质并改善策略。 因此,在 POMDP 中,我们需要保留有关先前状态的信息,以便采取最佳措施。
那么,当我们在 Atari 游戏中以人为水平执行 DQN 时,为什么我们需要 DRQN? 为了回答这个问题,让我们理解
**部分可观察的马尔可夫决策过程**
(
**POMDP**
)的问题。 当我们可获得的关于环境的信息有限时,该环境称为部分可观察的 MDP。 到目前为止,在前面的章节中,我们已经看到了一个完全可观察的 MDP,在其中我们了解所有可能的动作和状态-尽管该
智能体可能不知道转移和奖励的可能性,但它对环境有完整的了解,例如,冰冻的湖泊环境,我们清楚地知道了环境的所有状态和行为; 我们轻松地将该环境建模为一个完全可观察的 MDP。 但是大多数现实世界环境只能部分观察到。 我们看不到所有状态。 考虑智能体学习如何在现实环境中行走; 显然,智能体将不会完全了解环境,它将无法获得任何信息。 在 POMDP 中,状态仅提供部分信息,但是将有关过去状态的信息保留在内存中可能会帮助智能体
更好地了解环境的性质并改善策略。 因此,在 POMDP 中,我们需要保留有关先前状态的信息,以便采取最佳措施。
为了回顾我们在前几章中学到的知识,请考虑以下所示的乒乓游戏。 仅通过查看当前的游戏屏幕,我们就可以知道球的位置,但是我们还需要知道球的运动方向和球的速度,以便采取最佳行动。 但是,仅查看当前的游戏屏幕并不能告诉我们球的方向和速度:
...
...
@@ -20,7 +20,7 @@
为了克服这个问题,我们将不仅仅考虑当前的游戏屏幕,而将使用过去的四个游戏屏幕来了解球的方向和速度。 这就是我们在 DQN 中看到的。 我们将过去的四个游戏屏幕以及当前的游戏屏幕作为输入输入到卷积层,并接收该状态下所有可能动作的 Q 值。 但是,您认为仅使用过去的四个屏幕将有助于我们了解不同的环境吗? 在某些环境下,我们甚至可能需要过去的 100 个游戏屏幕来更好地了解当前游戏状态。 但是,堆叠过去的
`n`
游戏画面会减慢我们的训练过程,而且还会增加我们的经验回放缓冲区的大小。
因此,只要需要,我们就可以利用 RNN 的优势来理解和保留有关先前状态的信息。 在第 7 章“深度学习基础知识”中,我们了解了如何通过保留,忘记和更新所需的信息,将
**长短期记忆循环神经网络**
(
**LSTM RNN**
)用于生成文本以及了解文本的上下文。 我们将通过扩展 LSTM 层来修改 DQN 架构,以了解先前的信息。 在 DQN 架构中,我们用 LSTM RNN 替换了第一卷积后全连接层。 这样,我们也可以解决部分可观察性的问题,因为现在我们的
代理
可以记住过去的状态并可以改进策略。
因此,只要需要,我们就可以利用 RNN 的优势来理解和保留有关先前状态的信息。 在第 7 章“深度学习基础知识”中,我们了解了如何通过保留,忘记和更新所需的信息,将
**长短期记忆循环神经网络**
(
**LSTM RNN**
)用于生成文本以及了解文本的上下文。 我们将通过扩展 LSTM 层来修改 DQN 架构,以了解先前的信息。 在 DQN 架构中,我们用 LSTM RNN 替换了第一卷积后全连接层。 这样,我们也可以解决部分可观察性的问题,因为现在我们的
智能体
可以记住过去的状态并可以改进策略。
# DRQN 的架构
...
...
@@ -34,9 +34,9 @@
# 训练特工玩《毁灭战士》
毁灭战士是一款非常受欢迎的第一人称射击游戏。 游戏的目标是杀死怪物。 末日是部分可观察的 MDP 的另一个示例,因为智能体(玩家)的视角限制为 90 度。 该
代理
对其余环境一无所知。 现在,我们将看到如何使用 DRQN 来训练我们的经纪人玩《毁灭战士》。
毁灭战士是一款非常受欢迎的第一人称射击游戏。 游戏的目标是杀死怪物。 末日是部分可观察的 MDP 的另一个示例,因为智能体(玩家)的视角限制为 90 度。 该
智能体
对其余环境一无所知。 现在,我们将看到如何使用 DRQN 来训练我们的经纪人玩《毁灭战士》。
代替 OpenAI Gym,我们将使用 ViZDoom 软件包来模拟 Doom 环境以训练我们的
代理
。 要了解有关 ViZDoom 软件包的更多信息,
[
请访问其官方网站
](
http://vizdoom.cs.put.edu.pl/
)
。 我们可以使用以下命令简单地安装 ViZDoom:
代替 OpenAI Gym,我们将使用 ViZDoom 软件包来模拟 Doom 环境以训练我们的
智能体
。 要了解有关 ViZDoom 软件包的更多信息,
[
请访问其官方网站
](
http://vizdoom.cs.put.edu.pl/
)
。 我们可以使用以下命令简单地安装 ViZDoom:
```
py
pip
install
vizdoom
...
...
new/handson-rl-py/10.md
浏览文件 @
663d02d9
# 异步优势演员评论网络
在前面的章节中,我们已经看到了
**深度 Q 网络**
(
**DQN**
)多么酷,以及它如何成功地推广了学习玩具有人类水平性能的 Atari 系列游戏的方法 。 但是我们面临的问题是它需要大量的计算能力和训练时间。 因此,Google 的 DeepMind 引入了一种称为
**异步优势演员评论家**
(
**A3C**
)的新算法,该算法在其他深度强化学习算法中占主导地位,因为它需要较少的计算能力和训练时间。 A3C 的主要思想是,它使用多个
代理并行学习并汇总其整体经验。 在本章中,我们将了解 A3C 网络如何工作。 接下来,我们将学习如何使用 A3C 构建代理
以推动一座山。
在前面的章节中,我们已经看到了
**深度 Q 网络**
(
**DQN**
)多么酷,以及它如何成功地推广了学习玩具有人类水平性能的 Atari 系列游戏的方法 。 但是我们面临的问题是它需要大量的计算能力和训练时间。 因此,Google 的 DeepMind 引入了一种称为
**异步优势演员评论家**
(
**A3C**
)的新算法,该算法在其他深度强化学习算法中占主导地位,因为它需要较少的计算能力和训练时间。 A3C 的主要思想是,它使用多个
智能体并行学习并汇总其整体经验。 在本章中,我们将了解 A3C 网络如何工作。 接下来,我们将学习如何使用 A3C 构建智能体
以推动一座山。
在本章中,您将学习以下内容:
...
...
@@ -13,15 +13,15 @@
# 异步优势演员评论家
A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外,与其他算法相比,它还具有良好的准确性。 它在连续和离散动作空间中都可以很好地工作。 它使用多个
代理,每个代理在实际环境的副本中与不同的探索策略并行学习。 然后,将从这些代理获得的经验汇总到全局代理。 全局代理也称为主网络或全局网络,其他代理
也称为工作器。 现在,我们将详细了解 A3C 的工作原理以及与 DQN 算法的区别。
A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外,与其他算法相比,它还具有良好的准确性。 它在连续和离散动作空间中都可以很好地工作。 它使用多个
智能体,每个智能体在实际环境的副本中与不同的探索策略并行学习。 然后,将从这些智能体获得的经验汇总到全局智能体。 全局智能体也称为主网络或全局网络,其他智能体
也称为工作器。 现在,我们将详细了解 A3C 的工作原理以及与 DQN 算法的区别。
# 三成
潜水之前,A3C 是什么意思? 这三个 As 代表什么?
在 A3C 中,第一个 A,
**异步**
表示其工作方式。 在这里,我们有多个与环境交互的
代理,而不是像 DQN 那样有单个代理尝试学习最佳策略。 由于我们有多个代理同时与环境交互,因此我们将环境的副本提供给每个代理,以便每个代理可以与自己的环境副本进行交互。 因此,所有这些多个代理都称为辅助代理,我们有一个单独的代理,称为全局网络,所有代理
都向其报告。 全球网络汇集了学习内容。
在 A3C 中,第一个 A,
**异步**
表示其工作方式。 在这里,我们有多个与环境交互的
智能体,而不是像 DQN 那样有单个智能体尝试学习最佳策略。 由于我们有多个智能体同时与环境交互,因此我们将环境的副本提供给每个智能体,以便每个智能体可以与自己的环境副本进行交互。 因此,所有这些多个智能体都称为辅助智能体,我们有一个单独的智能体,称为全局网络,所有智能体
都向其报告。 全球网络汇集了学习内容。
第二个 A 是
**优势**
; 在讨论 DQN 的决斗网络架构时,我们已经看到了优势功能。 优势函数可以定义为 Q 函数和值函数之间的差。 我们知道 Q 函数指定状态下动作的状态,而值函数指定状态下状态的状态。 现在,凭直觉思考; 两者之间的区别意味着什么? 它告诉我们,与其他所有动作相比,
代理
在状态
`s`
下执行动作
`a`
有多好。
第二个 A 是
**优势**
; 在讨论 DQN 的决斗网络架构时,我们已经看到了优势功能。 优势函数可以定义为 Q 函数和值函数之间的差。 我们知道 Q 函数指定状态下动作的状态,而值函数指定状态下状态的状态。 现在,凭直觉思考; 两者之间的区别意味着什么? 它告诉我们,与其他所有动作相比,
智能体
在状态
`s`
下执行动作
`a`
有多好。
第三个 A 是
**演员评论家**
; 该架构具有两种类型的网络,即演员和评论家。 演员的角色是学习策略,评论家的角色是评估演员学习的策略有多好。
...
...
@@ -31,11 +31,11 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
![](
img/00292.gif
)
仅通过查看上图就可以了解 A3C 的工作原理。 正如我们所讨论的,我们可以看到有多个工作程序
代理,每个工作代理都与自己的环境副本进行交互。 然后,工作人员将学习策略并计算策略损失的梯度,并将该梯度更新到全局网络。 每个代理商都会同时更新此全球网络。 A3C 的优点之一是,与 DQN 不同,我们在这里不使用经验回放内存。 实际上,这是 A3C 网络的最大优势之一。 由于我们有多个与环境交互并将信息聚合到全球网络的代理
,因此经验之间的相关性很低甚至没有。 经验回放需要占用所有经验的大量内存。 由于 A3C 不需要它,因此我们的存储空间和计算时间将减少。
仅通过查看上图就可以了解 A3C 的工作原理。 正如我们所讨论的,我们可以看到有多个工作程序
智能体,每个工作智能体都与自己的环境副本进行交互。 然后,工作人员将学习策略并计算策略损失的梯度,并将该梯度更新到全局网络。 每个智能体都会同时更新此全球网络。 A3C 的优点之一是,与 DQN 不同,我们在这里不使用经验回放内存。 实际上,这是 A3C 网络的最大优势之一。 由于我们有多个与环境交互并将信息聚合到全球网络的智能体
,因此经验之间的相关性很低甚至没有。 经验回放需要占用所有经验的大量内存。 由于 A3C 不需要它,因此我们的存储空间和计算时间将减少。
# A3C 如何运作
首先,辅助
代理重置全局网络,然后它们开始与环境进行交互。 每个工人遵循不同的勘探策略以学习最佳策略。 然后,他们计算价值和策略损失,然后计算损失的梯度并将梯度更新到全球网络。 随着工作人员代理
开始重置全局网络并重复相同的过程,该循环继续进行。 在查看价值和策略损失函数之前,我们将了解优势函数的计算方式。 众所周知,优点是
`Q`
函数和值函数之间的区别:
首先,辅助
智能体重置全局网络,然后它们开始与环境进行交互。 每个工人遵循不同的勘探策略以学习最佳策略。 然后,他们计算价值和策略损失,然后计算损失的梯度并将梯度更新到全球网络。 随着工作人员智能体
开始重置全局网络并重复相同的过程,该循环继续进行。 在查看价值和策略损失函数之前,我们将了解优势函数的计算方式。 众所周知,优点是
`Q`
函数和值函数之间的区别:
![](
img/00293.jpeg
)
...
...
@@ -55,11 +55,11 @@ A3C 网络风起云涌,并接管了 DQN。 除了前面提到的优点之外
![](
img/00297.jpeg
)
好的,新项目
`H(π)`
是什么? 它是熵项。 它用于确保充分探索策略。 熵告诉我们行动概率的扩散。 当熵值高时,每个动作的概率都将相同,因此
代理将不确定要执行哪个动作,而当熵值降低时,一个动作将比其他动作具有更高的概率,并且代理可以选取这个可能性很高的动作。 因此,将熵添加到损失函数中会鼓励代理
进一步探索并避免陷入局部最优状态。
好的,新项目
`H(π)`
是什么? 它是熵项。 它用于确保充分探索策略。 熵告诉我们行动概率的扩散。 当熵值高时,每个动作的概率都将相同,因此
智能体将不确定要执行哪个动作,而当熵值降低时,一个动作将比其他动作具有更高的概率,并且智能体可以选取这个可能性很高的动作。 因此,将熵添加到损失函数中会鼓励智能体
进一步探索并避免陷入局部最优状态。
# 驾驶 A3C 上山
让我们通过山车示例了解 A3C。 我们的
代理人是汽车,它被放置在两座山之间。 我们代理人
的目标是向右上方爬。 但是,汽车不能一口气上山。 它必须来回驱动以建立动力。 如果我们的经纪人在开车上花费更少的精力,将获得高额奖励。 本节使用的代码归功于
[
Stefan Boschenriedter
](
https://github.com/stefanbo92/A3C-Continuous
)
。 环境如下所示:
让我们通过山车示例了解 A3C。 我们的
智能体是汽车,它被放置在两座山之间。 我们智能体
的目标是向右上方爬。 但是,汽车不能一口气上山。 它必须来回驱动以建立动力。 如果我们的经纪人在开车上花费更少的精力,将获得高额奖励。 本节使用的代码归功于
[
Stefan Boschenriedter
](
https://github.com/stefanbo92/A3C-Continuous
)
。 环境如下所示:
![](
img/00298.jpeg
)
...
...
@@ -441,7 +441,7 @@ tensorboard --logdir=logs --port=6007 --host=127.0.0.1
# 总结
在本章中,我们学习了 A3C 网络的工作方式。 在 A3C 中,“异步”表示多个
代理
通过与环境的多个副本进行交互而独立工作,“优势”表示“优势”功能,即 Q 函数和值函数之间的差异,“演员评论家”是指演员评论家网络,其中演员网络负责生成策略,评论家网络评估由演员网络生成的策略。 我们已经了解了 A3C 的工作原理,并了解了如何使用该算法解决山地车问题。
在本章中,我们学习了 A3C 网络的工作方式。 在 A3C 中,“异步”表示多个
智能体
通过与环境的多个副本进行交互而独立工作,“优势”表示“优势”功能,即 Q 函数和值函数之间的差异,“演员评论家”是指演员评论家网络,其中演员网络负责生成策略,评论家网络评估由演员网络生成的策略。 我们已经了解了 A3C 的工作原理,并了解了如何使用该算法解决山地车问题。
在下一章第 11 章,“策略梯度和优化”中,我们将看到无需 Q 函数即可直接优化策略的策略梯度方法。
...
...
new/handson-rl-py/11.md
浏览文件 @
663d02d9
...
...
@@ -25,7 +25,7 @@
假设我们的经纪人正在驾驶航天器,而我们的经纪人的目标是正确着陆在着陆垫上。 如果我们的特工(着陆器)从着陆点着陆,则它会失去奖励,并且如果特工崩溃或休息,情节将终止。 在环境中可用的四个离散动作是“不执行任何操作”,“点火向左的引擎”,“点火主引擎”和“点火向右的引擎”。
现在,我们将看到如何训练我们的
代理商
以策略梯度正确降落在降落区。 本节中使用的代码属于
[
Gabriel
](
https://github.com/gabrielgarza/openai-gym-policy-gradient
)
:
现在,我们将看到如何训练我们的
智能体
以策略梯度正确降落在降落区。 本节中使用的代码属于
[
Gabriel
](
https://github.com/gabrielgarza/openai-gym-policy-gradient
)
:
![](
img/00308.jpeg
)
...
...
@@ -533,11 +533,11 @@ for i in range(no_of_episodes):
# 信任区域策略优化
在了解
**信任区域策略优化**
(
**TRPO**
)之前,我们需要了解受约束的策略优化。 我们知道,在 RL
代理商中,通过反复试验来学习,以使报酬最大化。 为了找到最佳策略,我们的代理商将探索所有不同的行动,并选择能获得良好回报的行动。 在探索不同的动作时,我们的代理商很有可能也会探索不良的动作。 但是最大的挑战是,当我们允许代理商在现实世界中学习以及奖励功能设计不当时。 例如,考虑一个学习走路而没有遇到任何障碍的特工。 如果代理商被任何障碍物击中,它将获得负奖励;而如果没有被任何障碍物击中,则将获得正奖励。 为了找出最佳策略,代理会探索不同的操作。 代理还采取行动,例如撞到障碍物以检查它是否给出了良好的回报。 但这对我们的经纪人来说并不安全; 当代理在现实环境中学习时,这尤其不安全。 因此,我们介绍了基于约束的学习。 我们设置一个阈值,如果碰到障碍物的可能性小于该阈值,则我们认为我们的代理人是安全的,否则我们认为我们的代理人是不安全的。 添加了约束以确保我们的代理
位于安全区域内。
在了解
**信任区域策略优化**
(
**TRPO**
)之前,我们需要了解受约束的策略优化。 我们知道,在 RL
智能体中,通过反复试验来学习,以使报酬最大化。 为了找到最佳策略,我们的智能体将探索所有不同的行动,并选择能获得良好回报的行动。 在探索不同的动作时,我们的智能体很有可能也会探索不良的动作。 但是最大的挑战是,当我们允许智能体在现实世界中学习以及奖励功能设计不当时。 例如,考虑一个学习走路而没有遇到任何障碍的特工。 如果智能体被任何障碍物击中,它将获得负奖励;而如果没有被任何障碍物击中,则将获得正奖励。 为了找出最佳策略,智能体会探索不同的操作。 智能体还采取行动,例如撞到障碍物以检查它是否给出了良好的回报。 但这对我们的经纪人来说并不安全; 当智能体在现实环境中学习时,这尤其不安全。 因此,我们介绍了基于约束的学习。 我们设置一个阈值,如果碰到障碍物的可能性小于该阈值,则我们认为我们的智能体是安全的,否则我们认为我们的智能体是不安全的。 添加了约束以确保我们的智能体
位于安全区域内。
在 TRPO 中,我们迭代地改进了该策略,并施加了一个约束,以使旧策略和新策略之间的
**Kullback-Leibler**
(
**KL**
)差异要小于某个常数。 !
[](
img/00326.jpeg
)
。 该约束称为信任区域约束。
那么什么是 KL 散度? KL 散度告诉我们两个概率分布如何彼此不同。 由于我们的策略是针对行动的概率分布,因此 KL 差异告诉我们新策略与旧策略有多远。 为什么我们必须使旧策略和新策略之间的距离保持小于恒定值
`δ`
? 因为我们不希望我们的新策略与旧策略脱节。 因此,我们施加了约束以使新策略接近旧策略。 同样,为什么我们必须保持旧策略呢? 当新策略与旧策略相距甚远时,它将影响
代理
的学习绩效,并导致完全不同的学习行为。 简而言之,在 TRPO 中,我们朝着改善策略的方向迈出了一步,即使报酬最大化,但我们还应确保满足信任区域约束。
[
它使用共轭梯度下降
](
http://www.idi.ntnu.no/~elster/tdt24/tdt24-f09/cg.pdf
)
优化网络参数
`θ`
,同时满足约束条件。 该算法保证了单调策略的改进,并且在各种连续环境中也取得了出色的效果。
那么什么是 KL 散度? KL 散度告诉我们两个概率分布如何彼此不同。 由于我们的策略是针对行动的概率分布,因此 KL 差异告诉我们新策略与旧策略有多远。 为什么我们必须使旧策略和新策略之间的距离保持小于恒定值
`δ`
? 因为我们不希望我们的新策略与旧策略脱节。 因此,我们施加了约束以使新策略接近旧策略。 同样,为什么我们必须保持旧策略呢? 当新策略与旧策略相距甚远时,它将影响
智能体
的学习绩效,并导致完全不同的学习行为。 简而言之,在 TRPO 中,我们朝着改善策略的方向迈出了一步,即使报酬最大化,但我们还应确保满足信任区域约束。
[
它使用共轭梯度下降
](
http://www.idi.ntnu.no/~elster/tdt24/tdt24-f09/cg.pdf
)
优化网络参数
`θ`
,同时满足约束条件。 该算法保证了单调策略的改进,并且在各种连续环境中也取得了出色的效果。
现在,我们将了解 TRPO 的数学原理。 如果您对数学不感兴趣,可以跳过本节。
...
...
@@ -678,7 +678,7 @@ Kakade 和 Langford 从`(1)`得出以下方程式:
然后,我们研究了诸如 TRPO 之类的策略优化算法,该算法通过对新旧策略之间的 KL 差异实现不大于
`δ`
的限制来确保单调策略的改进。
我们还研究了近端策略优化,该优化通过惩罚大型策略更新将约束变为惩罚。 在下一章第 12 章, “Capstone 项目 – 使用 DQN 进行赛车”,我们将了解如何构建能够赢得赛车游戏的
代理
。
我们还研究了近端策略优化,该优化通过惩罚大型策略更新将约束变为惩罚。 在下一章第 12 章, “Capstone 项目 – 使用 DQN 进行赛车”,我们将了解如何构建能够赢得赛车游戏的
智能体
。
# 问题
...
...
new/handson-rl-py/12.md
浏览文件 @
663d02d9
# Capstone 项目–使用 DQN 进行赛车
在最后几章中,我们通过使用神经网络近似 q 函数来了解 Deep Q 学习的工作原理。 在此之后,我们看到了
**深度 Q 网络**
(
**DQN**
)的各种改进,例如双重 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 来赢得赛车比赛的
智能体
。
在本章中,您将学习如何实现以下内容:
...
...
@@ -612,7 +612,7 @@ logger = tf.train.SummaryWriter(LOG_DIR)
session
=
tf
.
InteractiveSession
()
```
构建
代理
:
构建
智能体
:
```
py
agent
=
DQN
(
state_size
=
env
.
observation_space
.
shape
,
...
...
@@ -676,7 +676,7 @@ while num_frames <= TOTAL_FRAMES+1:
state
=
next_state
```
培训
代理商
:
培训
智能体
:
```
py
if
num_frames
>=
TRAIN_AFTER_FRAMES
:
...
...
@@ -730,13 +730,13 @@ while num_frames <= TOTAL_FRAMES+1:
env
.
monitor
.
close
()
```
我们可以看到
代理
如何学习赢得赛车游戏,如以下屏幕截图所示:
我们可以看到
智能体
如何学习赢得赛车游戏,如以下屏幕截图所示:
![](
img/00407.gif
)
# 总结
在本章中,我们学习了如何详细实现决斗 DQN。 我们从用于游戏画面预处理的基本环境包装器功能开始,然后定义了
`QNetworkDueling`
类。 在这里,我们实现了决斗 Q 网络,该网络将 DQN 的最终全连接层分为值流和优势流,然后将这两个流组合以计算
`q`
值。 之后,我们看到了如何创建回放缓冲区,该缓冲区用于存储经验并为网络训练提供经验的小批量样本,最后,我们使用 OpenAI 的 Gym 初始化了赛车环境并训练了我们的
代理
。 在下一章第 13 章,“最新进展和后续步骤”中,我们将看到 RL 的一些最新进展。
在本章中,我们学习了如何详细实现决斗 DQN。 我们从用于游戏画面预处理的基本环境包装器功能开始,然后定义了
`QNetworkDueling`
类。 在这里,我们实现了决斗 Q 网络,该网络将 DQN 的最终全连接层分为值流和优势流,然后将这两个流组合以计算
`q`
值。 之后,我们看到了如何创建回放缓冲区,该缓冲区用于存储经验并为网络训练提供经验的小批量样本,最后,我们使用 OpenAI 的 Gym 初始化了赛车环境并训练了我们的
智能体
。 在下一章第 13 章,“最新进展和后续步骤”中,我们将看到 RL 的一些最新进展。
# 问题
...
...
new/handson-rl-py/13.md
浏览文件 @
663d02d9
此差异已折叠。
点击以展开。
new/handson-rl-py/14.md
浏览文件 @
663d02d9
...
...
@@ -4,11 +4,11 @@
1.
强化学习(
**RL**
)是机器学习的一个分支,其中学习是通过与环境交互来进行的。
2.
与其他 ML 范例不同,RL 通过训练和错误方法工作。
3.
代理
是做出明智决策的软件程序,它们基本上是 RL 的学习者。
3.
智能体
是做出明智决策的软件程序,它们基本上是 RL 的学习者。
4.
策略函数指定在每个状态下要执行的操作,而值函数指定每个状态的值。
5.
在基于模型的
代理
中,使用以前的经验,而在无模型的学习中,则不会有任何以前的经验。
5.
在基于模型的
智能体
中,使用以前的经验,而在无模型的学习中,则不会有任何以前的经验。
6.
确定性的,随机的,完全可观察的,部分可观察的,离散的连续的,事件的和非事件的。
7.
OpenAI Universe 为培训 RL
代理
提供了丰富的环境。
7.
OpenAI Universe 为培训 RL
智能体
提供了丰富的环境。
8.
请参阅 RL 的“应用”部分。
# 第 2 章
...
...
@@ -58,7 +58,7 @@
1.
MAB 实际上是一台老虎机,是一种在赌场玩的赌博游戏,您可以拉动手臂(杠杆)并根据随机生成的概率分布获得支出(奖励)。 一台老虎机称为单臂老虎机,当有多台老虎机时,称为多臂老虎机或 k 臂老虎机。
2.
当业务代表不确定是使用以前的经验来探索新动作还是利用最佳动作时,就会出现探索-利用困境。
3.
ε用于确定
代理
是否应使用
`1-ε`
进行探索或利用我们选择最佳作用的作用,而使用ε则探索新作用。
3.
ε用于确定
智能体
是否应使用
`1-ε`
进行探索或利用我们选择最佳作用的作用,而使用ε则探索新作用。
4.
我们可以使用各种算法(例如
`ε`
贪婪策略,softmax 探索,UCB,Thompson 采样)解决探索-利用难题。
5.
UCB 算法可帮助我们根据置信区间选择最佳分支。
6.
在 Thomson 抽样中,我们使用先验分布进行估算,而在 UCB 中,我们使用置信区间进行估算。
...
...
@@ -91,14 +91,14 @@
4.
与 DRQN 不同,DARQN 利用注意力机制。
5.
DARQN 用于理解和专注于游戏屏幕的特定区域,这一点更为重要。
6.
软硬注意。
7.
即使该举动无用,我们也将
代理商
的每次举动设置为活奖赏 0。
7.
即使该举动无用,我们也将
智能体
的每次举动设置为活奖赏 0。
# 第 10 章
1.
A3C 是“异步优势演员评论家网络”,它使用多个
代理
进行并行学习。
1.
A3C 是“异步优势演员评论家网络”,它使用多个
智能体
进行并行学习。
2.
三个 A 是异步,优势,演员评论家。
3.
与 DQN 相比,A3C 需要更少的计算能力和训练时间。
4.
所有
代理
(员工)都在环境副本中工作,然后全球网络汇总他们的经验。
4.
所有
智能体
(员工)都在环境副本中工作,然后全球网络汇总他们的经验。
5.
熵用于确保足够的探索。
6.
请参阅“A3C 的工作方式”部分。
...
...
@@ -124,9 +124,9 @@
# 第十三章
1.
代理
中的想象力指定了采取任何行动之前的可视化和计划。
1.
智能体
中的想象力指定了采取任何行动之前的可视化和计划。
2.
想象力核心由执行想象力的策略网络和环境模型组成。
3.
代理人
反复从人类那里获得反馈,并根据人类的喜好改变目标。
3.
智能体
反复从人类那里获得反馈,并根据人类的喜好改变目标。
4.
DQfd 使用一些演示数据进行培训,因为 DQN 并未预先使用任何演示数据。
5.
请参阅
**事后经验回放**
(
**HER**
)部分。
...
...
new/intel-proj-py/01.md
浏览文件 @
663d02d9
...
...
@@ -422,7 +422,7 @@ Figure 1.14: GAN architecture
# 强化学习
**强化学习**
是机器学习的一个分支,它使机器和/或
代理可以通过采取特定行动在特定上下文中最大化某种形式的奖励。 强化学习不同于监督学习和无监督学习。 强化学习广泛用于博弈论,控制系统,机器人技术和其他新兴的人工智能领域。 下图说明了强化学习问题中代理
与环境之间的交互:
**强化学习**
是机器学习的一个分支,它使机器和/或
智能体可以通过采取特定行动在特定上下文中最大化某种形式的奖励。 强化学习不同于监督学习和无监督学习。 强化学习广泛用于博弈论,控制系统,机器人技术和其他新兴的人工智能领域。 下图说明了强化学习问题中智能体
与环境之间的交互:
![](
img/13aa6565-1619-42b6-a595-a2bf486f0a6e.png
)
...
...
new/intel-proj-py/08.md
浏览文件 @
663d02d9
...
...
@@ -173,7 +173,7 @@ RNN 的 LSTM 版本用于构建序列到序列模型。 这是因为 LSTM 在记
在此模型中,我们使用两个 LSTM。 第一个 LSTM 将输入推文编码为上下文向量。 该上下文向量不过是编码器 LSTM 的最后一个隐藏状态
`h ∈ R^n`
,
`n`
是隐藏状态向量的维。 输入推文
`x ∈ R^k`
作为单词索引序列被馈送到编码器 LSTM,
`k`
就是输入推文的序列长度。 这些单词索引在馈送到 LSTM 之前已映射到单词嵌入
`w ∈ R^m`
。 单词嵌入包含在一个嵌入矩阵中
`[W ∈ R^(m x N)]`
,其中
`N`
表示词汇表中单词的数量。
第二个 LSTM 用作解码器。 它试图将编码器 LSTM 创建的上下文向量
`h`
解码为有意义的响应。 作为此方法的一部分,我们在每个时间步中将上下文向量与前一个单词一起馈入以生成当前单词。 在第一步中,我们没有任何先前的词可用于条件 LSTM,因此我们使用
代理
`START`
词开始从解码器 LSTM 生成词序列的过程。 在推理过程中,我们在当前时间步输入前一个单词的方式与训练过程中使用的方法不同。 在训练中,由于我们在每个时间步都知道
`apriori`
之前的单词,因此相应地输入它们没有任何问题。 但是,在推理期间,由于我们在当前时间步上没有实际的前一个单词,因此会反馈前一个时间步上的预测单词。 每个时间步
`t`
的隐藏状态
`h'[t]`
在最终的最大 softmax
`N`
之前通过几个全连接层馈送。 在此 softmax 层中获得最大概率的单词是时间步长的预测单词。 然后将这个字输入到下一步的输入,即解码器 LSTM 的步骤
`t + 1`
。
第二个 LSTM 用作解码器。 它试图将编码器 LSTM 创建的上下文向量
`h`
解码为有意义的响应。 作为此方法的一部分,我们在每个时间步中将上下文向量与前一个单词一起馈入以生成当前单词。 在第一步中,我们没有任何先前的词可用于条件 LSTM,因此我们使用
智能体
`START`
词开始从解码器 LSTM 生成词序列的过程。 在推理过程中,我们在当前时间步输入前一个单词的方式与训练过程中使用的方法不同。 在训练中,由于我们在每个时间步都知道
`apriori`
之前的单词,因此相应地输入它们没有任何问题。 但是,在推理期间,由于我们在当前时间步上没有实际的前一个单词,因此会反馈前一个时间步上的预测单词。 每个时间步
`t`
的隐藏状态
`h'[t]`
在最终的最大 softmax
`N`
之前通过几个全连接层馈送。 在此 softmax 层中获得最大概率的单词是时间步长的预测单词。 然后将这个字输入到下一步的输入,即解码器 LSTM 的步骤
`t + 1`
。
Keras 中的
`TimeDistributed`
函数允许在解码器 LSTM 的每个时间步长获得预测的有效实现,如以下代码所示:
...
...
new/intel-proj-py/09.md
浏览文件 @
663d02d9
# 通过强化学习的自主无人驾驶汽车
在过去的几年中,增强学习已经真正兴起,在增强学习中,
代理通过与环境的交互来学习决策。 这是当今人工智能和机器学习中最热门的主题之一,并且这一领域的研究正在快速发展。 在
**强化学习**
(
**RL**
)中,代理
将他们的行动和经验转化为学习,以便将来做出更好的决策。
在过去的几年中,增强学习已经真正兴起,在增强学习中,
智能体通过与环境的交互来学习决策。 这是当今人工智能和机器学习中最热门的主题之一,并且这一领域的研究正在快速发展。 在
**强化学习**
(
**RL**
)中,智能体
将他们的行动和经验转化为学习,以便将来做出更好的决策。
增强学习不属于有监督或无监督的机器学习范式,因为它本身就是一个领域。 在监督学习中,我们尝试学习一个映射
`F: X → Y`
,将输入
`X`
映射到输出
`Y`
,而在强化学习中,智能体学习通过反复试验采取最佳行动。 当业务代表执行任务出色时,将分配奖励,而当业务代表执行不好时,则要支付罚款。
代理试图吸收这些信息,并学会在类似的情况下不重复这些错误。 代理人所处的这些条件称为状态。 “图 9.1”显示了强化学习框架中环境中代理
的交互作用:
增强学习不属于有监督或无监督的机器学习范式,因为它本身就是一个领域。 在监督学习中,我们尝试学习一个映射
`F: X → Y`
,将输入
`X`
映射到输出
`Y`
,而在强化学习中,智能体学习通过反复试验采取最佳行动。 当业务代表执行任务出色时,将分配奖励,而当业务代表执行不好时,则要支付罚款。
智能体试图吸收这些信息,并学会在类似的情况下不重复这些错误。 智能体所处的这些条件称为状态。 “图 9.1”显示了强化学习框架中环境中智能体
的交互作用:
![](
img/9d2d1715-a781-4b00-9312-09d3cd27cc1b.png
)
图 9.1:
代理
与环境交互的图示
图 9.1:
智能体
与环境交互的图示
# 技术要求
...
...
@@ -18,19 +18,19 @@
# 马尔可夫决策过程
任何强化学习问题都可以看作是
**马尔可夫决策过程**
,我们在第 1 章“基于人工智能的系统基础”中进行了简要介绍。 为了您的利益,我们将再次详细研究。 在马尔可夫决策过程中,我们有一个与环境交互的主体。 在任何给定的情况下,
`t`
代理处于多种状态之一:
`s[t] = s ∈ S`
。 根据主体的动作
`a[t] = a ∈ A`
处于状态
`s[t]`
具有新状态
`s[t + 1] = s' ∈ S`
。 在这里,
`S`
表示代理可能会暴露的所有状态,而
`A`
则表示代理
可以参与的可能动作。
任何强化学习问题都可以看作是
**马尔可夫决策过程**
,我们在第 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]`
可以表示如下:
数学上,
智能体尝试为每个状态动作对
`s ∈ S, a ∈ A`
学习 Q 值
`Q(s, a)`
。 对于给定状态
`s[t]`
,RL 智能体选择动作
`a`
,该动作给出最大 Q 值。 智能体
采取的动作
`a[t]`
可以表示如下:
![](
img/cd87a708-3a74-4d2e-9d4c-4327e5649d5c.png
)
一旦
代理在状态
`s[t]`
采取行动
`a[t]`
,新状态
`s[t + 1]`
会呈现给代理
来处理。 这个新状态
`s[t + 1]`
通常不是确定性的,通常表示为当前状态
`s[t]`
和动作
`a[t]`
的条件概率分布。这些概率称为
**状态转移概率**
,可以表示为:
一旦
智能体在状态
`s[t]`
采取行动
`a[t]`
,新状态
`s[t + 1]`
会呈现给智能体
来处理。 这个新状态
`s[t + 1]`
通常不是确定性的,通常表示为当前状态
`s[t]`
和动作
`a[t]`
的条件概率分布。这些概率称为
**状态转移概率**
,可以表示为:
![](
img/3ff176e3-0511-454b-b3d2-1cae8974d94b.png
)
每当
代理在状态
`s[t]`
采取行动
`a[t]`
并达到新状态
`s[t + 1]`
时,即时奖励会奖励给代理商
,可以表示为:
每当
智能体在状态
`s[t]`
采取行动
`a[t]`
并达到新状态
`s[t + 1]`
时,即时奖励会奖励给智能体
,可以表示为:
![](
img/fd483030-7af9-4f3f-90ca-321cbcf08493.png
)
...
...
@@ -47,15 +47,15 @@
# 学习 Q 值功能
对于 RL
代理做出决定,重要的是代理学习 Q 值函数。 可以通过
**贝尔曼方程**
迭代地学习 Q 值函数。 当代理开始与环境交互时,它以随机状态
`s[0]`
和每个状态动作对的 Q 值的随机状态开始。 代理的动作在某种程度上也是随机的,因为它没有状态 Q 值来做出明智的决策。 对于每个采取的行动,环境将根据哪个代理
开始建立 Q 值表并随着时间的推移而改善而返回奖励。
对于 RL
智能体做出决定,重要的是智能体学习 Q 值函数。 可以通过
**贝尔曼方程**
迭代地学习 Q 值函数。 当智能体开始与环境交互时,它以随机状态
`s[0]`
和每个状态动作对的 Q 值的随机状态开始。 智能体的动作在某种程度上也是随机的,因为它没有状态 Q 值来做出明智的决策。 对于每个采取的行动,环境将根据哪个智能体
开始建立 Q 值表并随着时间的推移而改善而返回奖励。
在任何暴露状态
`s[t]`
处于迭代状态
`t`
时,
代理
会采取行动
`a[t]`
,以最大化其长期回报。 Q 表保存长期奖励值,因此选择的
`a[t]`
将基于以下启发式:
在任何暴露状态
`s[t]`
处于迭代状态
`t`
时,
智能体
会采取行动
`a[t]`
,以最大化其长期回报。 Q 表保存长期奖励值,因此选择的
`a[t]`
将基于以下启发式:
![](
img/aaa2e551-be26-48e5-92f2-f4c6eb370dbc.png
)
Q 值表也通过迭代
`t`
进行索引,因为
代理只能查看到目前为止的 Q 表构建,随着代理
与环境的交互作用会越来越大。
Q 值表也通过迭代
`t`
进行索引,因为
智能体只能查看到目前为止的 Q 表构建,随着智能体
与环境的交互作用会越来越大。
根据动作
`a[t]`
,环境呈现给
代理奖励
`r[t]`
和新状态
`s[t + 1]`
。 代理
将更新 Q 表,以使其长期预期总收益最大化。 长期奖励
`r'[t]`
可以写成如下:
根据动作
`a[t]`
,环境呈现给
智能体奖励
`r[t]`
和新状态
`s[t + 1]`
。 智能体
将更新 Q 表,以使其长期预期总收益最大化。 长期奖励
`r'[t]`
可以写成如下:
![](
img/823779f3-1c49-4d21-85ad-8bdc5c069e63.png
)
...
...
@@ -77,11 +77,11 @@ Q 值表也通过迭代`t`进行索引,因为代理只能查看到目前为止
该图学习将每对状态
`(s, a)`
和动作映射到输出 Q 值输出
`Q(s, a)`
,而在右侧图中,对于每个状态
`s`
,我们学习与每个动作
`a`
有关的 Q 值。 如果每个状态都有
`n`
个可能的动作,则网络的输出会产生
`n`
输出
`Q(s, a[1]), Q(s, a[2]), ..., Q(s, a[n])`
。
深度 Q 学习网络的训练方法很简单,称为经验回放。 让 RL
代理
与环境交互并将经验以
`(s, a, r, s')`
的元组形式存储在回放缓冲区中。 可以从此回放缓冲区采样迷你批量以训练网络。 首先,回放缓冲区是随机存储的。
深度 Q 学习网络的训练方法很简单,称为经验回放。 让 RL
智能体
与环境交互并将经验以
`(s, a, r, s')`
的元组形式存储在回放缓冲区中。 可以从此回放缓冲区采样迷你批量以训练网络。 首先,回放缓冲区是随机存储的。
# 制定成本函数
使用架构比较容易,在该架构中,可以获取网络馈给的给定状态的所有动作的 Q 值。 在图 9.3 的右侧中也进行了说明。 我们将让
代理
与环境交互并收集状态和奖励,以此为基础我们将学习 Q 函数。 实际上,网络会通过将给定状态
`s`
的所有动作
`[a[i]], i = 1 -> n`
的预测 Q 值与目标 Q 值的预测 Q 值最小化来学习 Q 函数。 每个训练记录都是一个元组
`s[t], a[t], r[t], s[t + 1]`
。
使用架构比较容易,在该架构中,可以获取网络馈给的给定状态的所有动作的 Q 值。 在图 9.3 的右侧中也进行了说明。 我们将让
智能体
与环境交互并收集状态和奖励,以此为基础我们将学习 Q 函数。 实际上,网络会通过将给定状态
`s`
的所有动作
`[a[i]], i = 1 -> n`
的预测 Q 值与目标 Q 值的预测 Q 值最小化来学习 Q 函数。 每个训练记录都是一个元组
`s[t], a[t], r[t], s[t + 1]`
。
请记住,要根据网络本身计算目标 Q 值。 让我们考虑一个事实,即网络是由
`W ∈ R^d`
重参数化的,对于给定状态的每个动作,我们学习从状态到 Q 值的映射。 对于
`n`
组动作
`[a[i]], i = 1 -> n`
,网络将预测与每个动作有关的
`i`
Q 值。 映射函数可以表示如下:
...
...
@@ -134,7 +134,7 @@ Q 值表也通过迭代`t`进行索引,因为代理只能查看到目前为止
# 实现自动驾驶汽车
现在,我们将研究实现一种自动驾驶的无人驾驶赛车,该赛车使用深度 Q 网络学习如何在赛道上自行驾驶。 驾驶员和汽车将充当
代理,赛车场及其周围环境将充当环境。 我们将使用 OpenAI Gym
`CarRacing-v0`
框架作为环境。 状态和奖励将由环境呈现给代理,而代理将通过采取适当的行动对代理采取行动。 这些状态采用从汽车前面的摄像头拍摄的图像的形式。 环境接受的动作为三维矢量
`a ∈ R^3`
的形式,其中第一个分量用于左移,第二个分量用于前移,第三部分用于右移。 该代理
将与环境交互并将交互转换为
`(s, a, r, s'), i = 1 -> m`
形式的元组。 这些交互元组将用作我们的训练数据。
现在,我们将研究实现一种自动驾驶的无人驾驶赛车,该赛车使用深度 Q 网络学习如何在赛道上自行驾驶。 驾驶员和汽车将充当
智能体,赛车场及其周围环境将充当环境。 我们将使用 OpenAI Gym
`CarRacing-v0`
框架作为环境。 状态和奖励将由环境呈现给智能体,而智能体将通过采取适当的行动对智能体采取行动。 这些状态采用从汽车前面的摄像头拍摄的图像的形式。 环境接受的动作为三维矢量
`a ∈ R^3`
的形式,其中第一个分量用于左移,第二个分量用于前移,第三部分用于右移。 该智能体
将与环境交互并将交互转换为
`(s, a, r, s'), i = 1 -> m`
形式的元组。 这些交互元组将用作我们的训练数据。
该架构将类似于我们在图右侧所示的架构(“图 9.4A”和“图 9.4B”)。
...
...
@@ -252,20 +252,20 @@ class DQN:
通过调用
`target_model_update `
,目标模型将更新为具有与基础模型相同的权重。
# 设计
代理
# 设计
智能体
该
代理将与环境交互,并在给定状态的情况下,尝试执行最佳操作。 代理最初将执行随机动作,并且随着训练的进行,动作将更多地基于给定状态的 Q 值。
`epsilon`
参数的值确定操作是随机的概率。 最初,将
`ε`
设置为
`1`
,以使操作随机。 当代理已收集指定数量的训练样本时,在每个步骤中都会减少ε,从而减少了随机动作的可能性。 这种基于ε值的作用的方案称为
`epsilon`
贪婪算法。 我们定义两个代理
类,如下所示:
该
智能体将与环境交互,并在给定状态的情况下,尝试执行最佳操作。 智能体最初将执行随机动作,并且随着训练的进行,动作将更多地基于给定状态的 Q 值。
`epsilon`
参数的值确定操作是随机的概率。 最初,将
`ε`
设置为
`1`
,以使操作随机。 当智能体已收集指定数量的训练样本时,在每个步骤中都会减少ε,从而减少了随机动作的可能性。 这种基于ε值的作用的方案称为
`epsilon`
贪婪算法。 我们定义两个智能体
类,如下所示:
*
`Agent`
:基于给定状态的 Q 值执行动作
*
`RandomAgent`
:执行随机动作
代理
类具有三个功能,具有以下功能:
智能体
类具有三个功能,具有以下功能:
*
`act`
:
代理
根据状态决定要采取的措施
*
`observe`
:
代理
捕获状态和目标 Q 值
*
`replay`
:
代理
根据观察结果训练模型
*
`act`
:
智能体
根据状态决定要采取的措施
*
`observe`
:
智能体
捕获状态和目标 Q 值
*
`replay`
:
智能体
根据观察结果训练模型
代理
程序(
`Agents.py`
)的详细代码如下所示:
智能体
程序(
`Agents.py`
)的详细代码如下所示:
```
py
import
math
...
...
@@ -406,7 +406,7 @@ class RandomAgent:
# 自动驾驶汽车的环境
自动驾驶汽车的环境是
**OpenAI Gym**
的
`CarRacing-v0`
。 从此 OpenAI 环境呈现给
代理的状态是
`CarRacing-v0`
中来自仿真汽车正面的图像。 环境也会根据代理
在给定状态下采取的行动来返回奖励。 如果汽车踩在草地上,我们将对奖励进行处罚,并将奖励标准化为
`(-1,1)`
以进行稳定训练。 环境的详细代码如下
自动驾驶汽车的环境是
**OpenAI Gym**
的
`CarRacing-v0`
。 从此 OpenAI 环境呈现给
智能体的状态是
`CarRacing-v0`
中来自仿真汽车正面的图像。 环境也会根据智能体
在给定状态下采取的行动来返回奖励。 如果汽车踩在草地上,我们将对奖励进行处罚,并将奖励标准化为
`(-1,1)`
以进行稳定训练。 环境的详细代码如下
```
py
import
gym
...
...
@@ -600,7 +600,7 @@ class environment:
```
上面代码中的
`run`
函数表示
代理
在环境中的活动。
上面代码中的
`run`
函数表示
智能体
在环境中的活动。
# 全部放在一起
...
...
new/whats-new-tf2/4.md
浏览文件 @
663d02d9
...
...
@@ -35,7 +35,7 @@ TensorFlow 1.x 已建议为其高级 API 集使用`tf.estimator` API,该 API
*
有监督的学习借助标签数据预测标签
*
无监督学习,对没有标签的数据进行分组和聚类
*
强化学习,其中存在一种环境,
代理
可以通过该环境通过采取行动并从环境中获取反馈(奖励)来学习实现预期目标
*
强化学习,其中存在一种环境,
智能体
可以通过该环境通过采取行动并从环境中获取反馈(奖励)来学习实现预期目标
生成模型和判别模型可以与这三种机器学习技术一起使用。 生成模型尝试从具有未知分布的给定数据集中凭经验学习模式和分布,并可能使用学习的模型来生成新数据,就好像它来自同一分布。 一些流行的生成模型是高斯混合模型,隐马尔可夫模型,贝叶斯网络(例如朴素贝叶斯)等。 生成对抗模型是 2014 年非常流行的生成模型,由于其强大的成功和潜力而备受关注。 除了仅学习可用于无监督学习的分布之外,生成模型还可以用于执行分类或预测任务(有监督学习),该任务使用样本
`x`
的条件概率, 通过使用朴素贝叶斯定理计算概率
`P(y | x)`
,属于
`y`
类。 与生成模型相反,判别模型用于直接学习条件概率
`P(y | x)`
,用于回归,分类和其他类型的监督学习问题。 深度神经网络可用于构建生成模型或判别模型。
...
...
new/whats-new-tf2/7.md
浏览文件 @
663d02d9
...
...
@@ -375,7 +375,7 @@ TF 2.0 目前处于 beta 版本,因此仍在开发中。 即将出现的一些
TF 2.0 基本 API 将包括针对任务的更多预制估算器,例如增强树,随机森林,最近邻搜索和 k 均值聚类。
`tf.distribute.Strategy`
模型将扩展其对 Keras 子模型,TPU 和多节点训练的支持,以在多个处理器上实现更优化和更快的训练。
当前正在开发的另一个主要附加功能是
`tf-agents`
模块。 该模块将核心强化学习算法实现为
**
代理
**
,该算法定义了与环境进行交互的策略并从集体经验中训练了该策略。
`TF-agents`
与 OpenAI Gym 框架一起实现,并抽象了许多用于开发的关键强化学习算法。 该模块当前处于预发布状态,但将于今年晚些时候发布。
当前正在开发的另一个主要附加功能是
`tf-agents`
模块。 该模块将核心强化学习算法实现为
**
智能体
**
,该算法定义了与环境进行交互的策略并从集体经验中训练了该策略。
`TF-agents`
与 OpenAI Gym 框架一起实现,并抽象了许多用于开发的关键强化学习算法。 该模块当前处于预发布状态,但将于今年晚些时候发布。
# 更多资源可看
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录